Go Down

Topic: Aidez nous ! Projet - Gestion domotique (Read 154959 times) previous topic - next topic

zoroastre

#225
Dec 22, 2011, 10:06 pm Last Edit: Dec 23, 2011, 09:15 am by zoroastre Reason: 1
Yep!

Trés bonne remarque Artouste ;)

C'est d'ailleurs une des raisons pour laquelle mon approche est plutôt probabiliste sur cet aspect.
Les DS18B20 sont assez capricieuses par moment et elles subissent, en plus de leur précision relative, des variations importantes. Elles sont fortement impactées par l'environnement : un courant d'air et la température baisse de 0.2°, l'éclairage ambiant également semble avoir une influence, j'ai remarqué lorsque j'allumais la lumière du salon, un léger gain !!!, elles montent trés vite en temperatures et sont donc en définitives trés sensibles. Bien plus que mon thermomètre Lacross situé tout à côté. Par contre, une fois la sonde stabilisée, il y a souvent peu d'ecart avec mon thermomètre Lacross justement. Elles ont effectivement besoin de temps pour se stabiliser, mais elles y arrivent et d'autant plus lorsque la temperature descend pas aprés pas. (Petite précision, ma sonde est à nu, sans boitier ni rien)

Quote
Jouer là sur les 2 bits de poids faibles (résolution de 4 * 0.6xx) me semble "illusoire".

Pas tant que çà en définitive, si au demeurant 4x0.06 semble peu crédible, si on compare cette valeur au sommet de la courbe, on constate effectivement un flechissement de celle-ci. La marge d'erreur n'excedant que trés rarement 0.12° d'aprés mes courbes, cette donnée peut être dite "probable".

Effectivement, cette solution ne me plait pas plus que çà, je te rassure, mais dans certain cas, le système de chauffage necessitera une réactivité plus véloce, principalement dans des situations de relevage élevées suite à une consigne trés basse. Et redescendre de 0.5° est un peu trop fort à mon goût.

Si je reprends ton raisonnement, la moyenne que nous avions évoqués plus haut n'est pas plus valable.

Je suis passé par cette phase de reflexion et j'ai choisi pour l'instant la moins pire il me semble. Comme je l'ai dit, basé sa régulation sur le sommet de la courbe me semble être plus judicieux, une valeur "sûre", comparativement à la moyenne trop sujette à caution. Une fois qu'on a atteint le sommet, on ne peut aller plus haut, on va forcement redescendre et dans prés de 92% l'ecart correspondra à l'amplitude entre le sommet de la courbe et la consigne, ecart d'environ 1 à 1.5° généralement. Dans ce cas, 4x0.06° me suffit amplement.

La logique floue peut, je pense, résoudre ce problème également et j'avais évoqué la possibilité de positionner des bornes soit aux environs de l'ecart, pour évaluer ses variations, soit au sommet de la courbe, pour évaluer les tendances à venir. Je ne suis pas encore décidé, certains cas sont problématiques. Je préciserais mon raisonnement plus tard (sommet moyen, ecart type, marge d'erreur, gain, etc.)

Je précise derechef que j'ai apposé un poids plutôt faible à l'inertie dans mon raisonnement à base de logique floue.

Le problème dans l'évaluation de la tendance de la courbe de chauffe se situe sur l'echelle trés faible sur laquelle il faut travailler. En effet, si mon chauffage et mes radiateurs sont capables de relever la température de 1°C pour un temps de chauffe constant, 0.2° correspond déjà à 20% de chutte, 0.5° à 50%. Il faut profiter au maximum des échanges thermique en roue libre et maitriser la relance.
Il y a en définitive deux cas litigieux, celui où la temperature est sous la consigne et celui, où suite à une relance, la temperature est juste au dessus de la consigne (genre +0.2). La temperature ambiante va arriver à son point d'équilibre, une certaine forme de stabilité, toute relative certes, et dont il faut "sentir" le flechissement.

Il n'y a pas de methode de calcul simple pouvant déterminer la tendance d'une courbe, elle sera approximative, peut être vérifiée deux fois ou necessitant deux methodes concourantes.

Je pense que ma méthode est tout à fait convenable, et sans remettre en cause mon choix materiel, elle le serait assurement plus avec des sondes de grandes précisions.

En tout cas, merci pour tes remarques. Je suis plongé sur ce sujet depuis quelques semaines et à chaque fois que je pense toucher quelques choses, je me heurte à de nouvelles difficultés, et en vérité, j'adore çà ;)

@+

Zoroastre.

EDIT1 : Un petit cours interessant sur la regul : http://btscira.perso.sfr.fr/page1/page64/page64.html, où l'on s'aperçoit qu'en tout ou rien, "La mesure ne peut pas être constante dans ce type de régulation, le système est en régime d'instabilité entretenue."
Gné! ;)

Artouste




Je pense que ma méthode est tout à fait convenable, et sans remettre en cause mon choix materiel, elle le serait assurement plus avec des sondes de grandes précisions.

En tout cas, merci pour tes remarques. Je suis plongé sur ce sujet depuis quelques semaines et à chaque fois que je pense toucher quelques choses, je me heurte à de nouvelles difficultés, et en vérité, j'adore çà ;)


Bonjour
Loin de moi de dénigrer ta méthode de régulation.
moi aussi j'adore çà, la confrontation des idées  !
L'intelligence c'est de creuser les difficultés lorsqu'elles apparaissent et pas de les ignorer comme beaucoup, In fine la satisfaction en  est d'autant plus grande.  :smiley-mr-green:

Sur ce : je vais m'occuper de la regul de ma cheminée dans ma campagne, j'ai une méthode imparable :
Etat =Si ça fume en haut de cheminée lorsque je vais arriver, c'est que quelqu'un aura fait la corvée de buches à ma place  :)
Action = Rien à faire sinon se servir un petit apéritif.
Etat = Si ça ne fume pas
Action = Attraper le 1er neveu qui passe, l'envoyé chercher des buches, lui faire allumer le feu ET servir un petit apéritif (l'ordre n'est pas là imperatif)  :smiley-mr-green:

Bonnes fêtes de Noël à tous
Plus de son, plus d'image ici me concernant jusqu'au 26 8)

Skuzmitoo

Et bien je vois que cela ne chaume pas. Noël est passé, je vais donc pouvoir commander mon arduino et contribuer plus activement avec vous.
Malheureusement je ne vais pas être très présent prochainement car ma femme va accouché d'ici peu et je part en stage de mi-janvier a mi-février, mais je ne manquerais pas de vous suivre.

En tout cas je vous souhaite de bonne fête a tous

osaka


Malheureusement je ne vais pas être très présent prochainement car ma femme va accouché d'ici peu


Félicitation  :), tu vas pouvoir contribué lors de tes nombreuse nuits blanche.  :smiley-mr-green:

tochinet

Salut zoroastre et tous, je vous souhaite une très bonne année 2012, pleine de joies arduinesques et autre régulations.

Au sujet des SN75176, ils n'ont pas çà chez Cotubex (Bruxelles) ?

Pour les moyennes, j'ai du mal à comprendre pourquoi elles sont si "compliquées" ou "peu fiables" : la température d'une maison varie très peu ! Donc si on la mesure toute les x secondes, on peut encore faire une moyenne géométrique très large sans risque,, genre       valeur_moyenne = 0.99 * valeur_moyenne + 0.01 * nouvelle _mesure

Dans le code, j'ai du mal à comprendre les ajustements de température   "-0.06" ou "+0.2", pourquoi n'y-a-t'il pas plutôt un analogRead ou OneWire::read  ?


De mon côté,j'en suis encore à l' "espionnage" de mon système de régulation existant (Sauter EY3600 avec des sondes NI1000 pulsées...), donc pas de trucs très probants à l'heure actuelle, mais même si ma commande est une pompe à chaleur (donc fonctionnement d'une heure sans arrêt recommandé), et j'ai une (vieille) expérience de fuzzy logic, j'envisage quand même plutôt le PID avec des moyennes mobiles ...  Ma valeur de sortie principale n'est pas "brûleur ON/OFF", mais bien "minutes de chauffe/24h", à raffiner par la suite (p.ex. pour tenir compte de l'inertie thermique de la maison).

Je compte aussi installer certains DS18B20 pour raffiner les circuits de chauffe, tenir compte des heures où la cassette/les panneaux solaires fonctionnent, etc. mais c'est pour _encore_ plus tard. Avant çà, j'ai d'autres chats à fouetter avec une alarme pour quand la PAC se met en sécurité, étalonner les sondes/évaluer les variations journalières, ...  Ma priorité #1 est de ne pas "casser" ce qui marche (à moitié).

A bientôt.

zoroastre

Yep tochinet !

Désolé de te répondre à rebours.

J'ai proposé quelques courbes caractéristiques en page 14, dernier message.

Ce qui faut savoir avant tout est que les sondes DS18B20 ont une précision de +/-0.5° dans les plages de température courante. Pour une résolution de 12 bits, elles ont un pas d'environ 0.06°.
Les valeurs de 0.06 et 0.2 sont donc des réferents à ces remarques, respectivement le pas et 4 fois le pas. (4x0.06=0.24°, donc supérieur à 0.2°)

Je possède des radiateurs en fonte et acier, mon chauffage central a un fonctionnement tout ou rien, et toute la problématique est de béneficier au maximum de l'inertie des radiateurs.
Les moyennes et leur comparaison n'est pas une mauvaise methode en soi, cependant, dans certaines circonstances, suite à un relevage, par exemple le passage d'un mode éco à un mode confort, la moyenne ne fournit pas une information précise et sûr. La conséquence principale est un doublement consécutif du cycle de chauffe.
Si les moyennes sont trop éloignées les unes des autres, il arrive que l'inertie dont on veut connaitre son image soit occulté, la perdition estimée du cycle précedent se répercute sur le cycle suivant. Le système manque de réactivité.
Si, au contraire, les moyennes sont rapprochées, le système est trop réactif, outre les erreurs de lecture dûes à l'inhérence du materiel, l'image inertielle en retour est d'ordre impulsionnelle. donnons les valeurs -1, 0, 1 aux tendances de la courbe, nous aurons ainsi beaucoup de 0 et de temps en temps -1 (perdition), +1 (distribution).
Dans ce cas, nous sommes obligés de pondérer les moyennes.

La régulation PID n'est pas possible dans mon cas, et ton experience et tes remarques interesserons certainement les maitres d'oeuvre de ce projet.

Pour ma part, je comptais travailler avec une seule sonde de temperature dans un premier temps. Que ce soit par la méthode des moyennes, de la logique floue, sommet de la courbe, je n'entrevois pas vraiment de solution logicielle parfaite. Finalement, je me dis que positionner une seconde sonde à proximité d'un radiateur "temoin" serait la methode la plus simple pour garantir une distribution passive réussie.

@+

Zoroastre.
Gné! ;)

osaka

#231
Jan 27, 2012, 03:24 am Last Edit: Jan 27, 2012, 03:30 am by osaka Reason: 1
Yop Yop,

Bribri disparut, Skusmi pouponne  :smiley-mr-green: ?
Jute pour dire que j'ai bien avancé sur le bus rs-485, mpcm, mode 4 fils et sans maître et plein plein de testes différents, une mega de grillé et debug de mini(s) à la diode  :smiley-mr-green:, problèmes de cas, etc, etc, mais j'arrive au bout  :smiley-mr-green:.
Plus personne d'interessé ?  =(

zoroastre

Yep!

Quote
Plus personne d'interessé ?


Si si toujours interessé ;)

Les maitres d'oeuvre sont effectivement absents depuis un moment déjà. J'espère qu'on les reverra bientôt, aprés leur période d'hibernation  XD

Tes experimentations sur le bus Rs485 peuvent interessées du monde et moi le premier.
Le rs485 comme bus de terrain, l'idée me plait et je l'utilise au quotidien ;)

Tu peux détailler tes experimentations ici, dans un autre topic et remettre un lien ici ou nous donner une url.

@+

Zoroastre.
Gné! ;)

tochinet

De mon côté, urgence : la PAC refuse tout service pour cause de ... fuite ? Impossible de savoir où, mais impossible aussi de garder la pression dans le système. Donc la régulation est passée en priorité 2, on chauffe avec des radiateurs en direct. Heureusement que c'est une ossature bois ... et que l'hiver n'est pas (encore) rude.

Allez, j'y retourne. :-(

Brisebee

Bonjour à tous,

Non je n'ai pas disparu, j'ai fait marcher les différents éléments séparément, puis j'ai tout intégré, ça marche aussi.
Même si je n'ai pas tout bien compris (programmation), je vais donc reprendre tous les programmes un à un en mettant un maximum de commentaires pour à la fois mieux maitriser et pouvoir optimiser.
Ensuite seulement je ferai les adaptations par rapport à mes besoins, et là j'aurai certainement plein de questions à vous soumettre !

J'ai également monté un serveur (vieux PC), pour l'instant html, mais j'ai commencé à apprendre le php.

Cela fait beaucoup de choses à la fois !

Mais je continue à suivre avec grand intérêt vos échanges, je n'en suis pas encore à la liaison RS485, mais cela viendra en son temps.

osaka

#235
Jan 30, 2012, 08:02 pm Last Edit: Feb 02, 2012, 12:15 am by osaka Reason: 1

Tu peux détailler tes experimentations ici, dans un autre topic et remettre un lien ici ou nous donner une url.


Yop,
Je peux décrire brièvement mes expérimentations, je découvre, je teste,  ...
D'abord le bus rs-485 niveau hard rien de bien nouveau, mode 2 fils (half duplex) ou 4 fils (full duplex) dans les deux cas on dois toujours activé une sortie de l'arduino pour sélectionné (RE/DE) le mode de transmission ou réception  .
Pour le mode 4 fils (full duplex) c'est simple on utilise 2 transceivers par module ou contrôleur, un pour rx l'autre pour tx pour lequel il faut toujours activé RE/DE et pas simultanément sinon ça capote (expérience inside  :smiley-mr-green:) .
Pour lier la ligne réception à la ligne transmission une paire est mis en début ou fin de ligne ou autre. (rx/tx lié directement pour tester le bus sans maître)
Exemple rapide de mon montage actuel.


Niveau programmation utilisation du Multi-processor Communication Mode (mpcm) de l'atmega, le principe est assez simple il se base sur une transmission 9 bit, selon l'état de ce 9 ieme bit il s'agit soit d'un adressage si il est à 1, soit de simple données s'il est à 0 (pour celà il faut avoir été sélectionné au préalable via adressage).

Code: [Select]

ISR(USART_RX_vect) //vecteur d'interruption sur sur rx
{
 if((UCSR0B & (1<<RXB80))) //on lit l'état de ce 9ème bit (RXB8) dans le registre UCSRB
 {
   listener = UDR0; //s'il est à 1 on lit l'adresse dans le registre UDR et on l'enregistre

   if(listener == ADDRESS) //si il s'agit de ça propre adresse
   {
     UCSR0A &= ~(1<<MPCM0); //on met le bit MPCM du registre UCSR0A à 0 ce qui aura pour
                                            //  effet de laisser entrer toute données transmise
   }
   else
   {
     UCSR0A |= (1<<MPCM0); //dans le cas contraire toute transmission avec le 9 ème bit à 0 seront totalement ignoré, aucune interruption rien de rien jusqu'au prochain adressage.
   }
 }
 else
 {
   unsigned char c = UDR0; //lecture normale des données avec le 9ième bit à 0 si MPCM à 0.
   store_char(c, &rx_buffer); // mise en buffer lol ...
 }
}

Une remarque, j'ai dus retiré hardwareSerial du core arduino afin d'adapter son code, conflits entre les fonctions d'interruption comme elles sont pré instancié par défaut.

Pour l'adressage ou la transmission de données pas grand chose de différent hormis TXB8 à 1 pour signifié une adresse.
Entre () ,j'ai du également ajouté un delay (_wait) de 7.2 millis sec (valeur trouvé sur le net) entre chaque transmission et fermeture du signal ( PORTD &= ~(4); ) , apparemment pour permettre le temps au donnée de circulé sur le bus, c'est là qu'on vois la différence de traitement entre une écriture directe et le traitement effectuer via print et println.

Code: [Select]

uint8_t writeAddress(uint8_t address)
{
 while (!((UCSR0A) & (1 << UDRE0)))
;
 PORTD |= 4;
 UCSR0B |= (1<<TXB80); //adressage
 UDR0 = address;
 _wait
 PORTD &= ~(4);
}

uint8_t writeData(uint8_t c)
{
 uint8_t i = (tx_buffer.head + 1) % SERIAL_BUFFER_SIZE;

 while (i == tx_buffer.tail)
   ;

 tx_buffer.buffer[tx_buffer.head] = c;
 tx_buffer.head = i;

 sbi(UCSR0B, UDRIE0);
 
 return 1;
}

ISR(USART_UDRE_vect)
{
 if (tx_buffer.head == tx_buffer.tail)
 {
cbi(UCSR0B, UDRIE0);
 }
 else
 {
   unsigned char c = tx_buffer.buffer[tx_buffer.tail];
   tx_buffer.tail = (tx_buffer.tail + 1) % SERIAL_BUFFER_SIZE;

   PORTD |= 4;
   UCSR0B &= ~(1<<TXB80);
   UDR0 = c;
   _wait
   PORTD &= ~(4);
 }
}


Maintenant concernant la gestion entre modules sur le bus, je suis parti sur une formule simple, si la dernière adresse reçue est 0 c'est que le bus est libre, sinon on attend.
Le principe globalement:
- si listener = 0, le bus est libre.
- On active l'écouteur (listener) de destination en mettant le 9ième bit à 1 ( UCSR0B |= (1<<TXB80); ) et on spécifie son adresse, il sera le seul à écouter.
- L'écouteur retourne son adresse avec son 8ième bit (msb) à 1 pour signifier qu'il écoute bien (ce qui limette les adresse à 7 bit donc de 1 à 127, 0 libère, 128 pour broadcast) .
- On envoie les données à transmettre.
- en fin de transmission on libère le bus en envoyant l'adresse 0.

Le protocole en lui même c'est le plus simple, pas besoin de s'y attarder.  :P
Il faut ajouter à tout ça quelques sécurités comme mettre listener à 0 automatiquement après un délais max (un peux comme un watchdog sur le bus lui même) en cas de problème lors de la transmission ou l'émetteur n'aurait pus libéré le bus, etc, tec, ...
Donc après divers testes , bizarreries, plantage, ... , je pense être tout proche d'une solution satisfaisante ou du moin intéressante  :smiley-mr-green:.


j'ai fait marcher les différents éléments séparément

Mais je continue à suivre avec grand intérêt vos échanges, je n'en suis pas encore à la liaison RS485, mais cela viendra en son temps.


Ollé Bribri, quelques détails de tes différents montages ?  XD

zoroastre

Yep!

Osaka, J'éspère que tu n'as pas suivi ton schema à la lettre ;)

Il y a deux fils rouge mal positionnés...

Heu !!! Petite question concernant les resistances de ligne, 120 ohms au plus proche des tranceivers, elles sont où ???
Pour de longue distance, faudra peut être prévoir les lignes de pull up avec resistances de 570 ohms (5v sur A & Gnd sur B)

Pour un fonctionnement par maitre, pas besoin de 2 tranceivers/arduino, non ???

Sinon ton schema est super pour une compréhension du full-duplex en rs485 et effectivement le passage à l'etat haut de RE/DE met le tranceiver en mode Tx, à l'etat bas en mode Rx.

@+

Zoroastre.
Gné! ;)

osaka

#237
Jan 30, 2012, 09:59 pm Last Edit: Jan 31, 2012, 12:53 pm by osaka Reason: 1

Osaka, J'éspère que tu n'as pas suivi ton schema à la lettre ;)

Il y a deux fils rouge mal positionnés...


Non non évidement  :smiley-sweat:, c'était juste du vite fais pour présenté rapidement, c'est corrigé.  :smiley-mr-green:


Heu !!! Petite question concernant les resistances de ligne, 120 ohms au plus proche des tranceivers, elles sont où ???
Pour de longue distance, faudra peut être prévoir les lignes de pull up avec resistances de 570 ohms (5v sur A & Gnd sur B)


Je pas mis les 120 ohms sur le schéma mais elles y sont bien, pour le moment comme c'est là c'est juste pour tester donc petite distance  :..


Pour un fonctionnement par maitre, pas besoin de 2 tranceivers/arduino, non ???


Non pas obligatoire le fonctionnement par paire c'est juste pour le côté full duplex avec ou sans maître et vu le prix des sn75176 à 4,5€ les 5 j'en ai pris 10 (pieces pas 10 de 5)  :smiley-mr-green:.
(commandé sur ebay chez un français -> pseudo: andr8400 , ça boutique: Rimtron_Destock vous la trouverez directement dans google)
En fait dans mes premier testes j'utilisais un maître en half ou full duplex histoire de tester un peux de tout, j'utilisais une mega comme maître pour le debug grâce à ses 4 ports series.
Mais un mauvais branchement et du 15v ont eu raison de lui apparemment (j'en ai un nouveau en commande made in china qui devrait pas tarder) et c'est là que je me suis dit qu'il suffisait de relier rx/tx directement à ça place pour que les autres puissent continué à communiqué, d'où mes essais sans maître  :smiley-surprise:.
Un avantage d'une solution sans maître c'est en cas de pépins sur un modules le bus est toujours fonctionnel pour les autres, tandis que si le maître défaille ...
Je suis pas arrêté sur cette solution 4 fils full duplex c'est juste que c'était déjà branché lol, parce que le plus compliqué c'est bien le code: risque de collisions, une fois libre qui qui parle en premier , prévoir tout les éventualités, etc, etc, ...   =( XD


Sinon ton schema est super pour une compréhension du full-duplex en rs485


C'est toujours plus facile à expliqué avec un schéma.  :smiley-mr-green:

Skuzmitoo

Rebonjour a tous, mon stage d'un mois est fini et je retrouve ma petite famille. Je viens de jeter un œil sur vos derniers commentaires je vois que vous n'avez pas abandonner c'est cool.

Pendant mon stage je me suis familiariser avec l'arduino sur une guirlande de 25 leds adressables avec la librairies FastSPI . Je termine la semaine prochaine car j'ai reçu mes darlingtons pour mes dioders ikea, je vais donc souder tout cela et je reprend le projet domotique avec vous. En attendant si vous pouvez publiez vos codes et le sujet sur lequel il porte cela serait cool, certains on déjà posté du code très intéressant. Merci a tous et content d'être de retour parmi vous.

osaka

#239
Feb 12, 2012, 09:36 pm Last Edit: Feb 12, 2012, 09:38 pm by osaka Reason: 1
Yop Skuz,
J'ai raté ton passage, content de te revoir.
Pour mon code dès que j'aurais abouti et nettoyé je posterais.
Moi c'est le travail de Bribri que j'aimerais voir.  :smiley-mr-green:

Go Up