jeudi 13 octobre 2011

Domotique - Température: Trame Arduino et sketch

Désirant pouvoir mettre en oeuvre un système permettant de rajouter / d'enlever des capteurs de température en ayant un minimum de mises à jours à effectuer, il était nécessaire de définir une trame d'envoi de données permettant de contrôler certains paramètres, tels que la présence d'une sonde par exemple.

La trame émise par l'Arduino a donc la forme suivante:
nb_capteurs;ref_capt1;Temp_capt1;ref_capt2;Temp_capt2;ref_capt3;Temp_capt3.....
En cas de retrait du capteur 2 par exemple, on se retrouve avec une trame du genre:
nb_capteurs;ref_capt1;Temp_capt1;ref_capt3;Temp_capt3.....

Les modules placés en aval seront donc aptes à connaître le nombre de capteurs branchés, et surtout d'associer les données de température aux bons capteurs.

Il est donc nécessaire de connaître le nombre de capteurs branchés à l'Arduino avant même d'envoyer des données sur le port série. En One-wire il n'y a pas, à ma connaissance, de moyen d'interroger la ligne afin d'avoir un retour du nombre de modules qui y seraient branchés.
Dans la pratique, le sketch Arduino effectue un reset de la ligne One-wire, puis interroge séquentiellement tous les capteurs de la ligne.
Lorsqu'aucun capteur ne répond plus, toute la chaîne a été parcourue, il faut refaire un reset pour réinitialiser la séquence de récupération de données. C'est donc lorsque toute la chaîne est parcourue que l'on connait le nombre de capteurs.

Il faut donc, à l'issue de la récupération de toutes les valeurs, envoyer le tout sur le port série.
Pour faciliter le stockage, j'ai choisi de travailler avec des chaines au format String, largement plus pratique que les tableaux de chaînes. Les classes String, non documentées dans le référentiel Arduino français le sont par contre dans la version anglaise de l'aide officielle

Génération de la trame:
Séquentiellement, les données vont être récupérées comme suit:

La trame finale:

3;4e87;19.9;c172;20.0;4574;18.5;
3;4e87;19.9;c172;20.1;4574;18.3;
3;4e87;19.9;c172;20.0;4574;18.1;

Les valeurs des 3 capteurs, référencés 4e87, C172, 4574 sont récupérées et envoyées sur la trame.
Ces références sont directement issues des ref 64 bits des composants.


Le sketch
Comme je l'ai déjà indiqué, ce sketch est tiré directement de l'excellent exemple de mise en oeuvre du DS18B20 sur le site mon-club-elec.fr, ici-même.
Les principales modifications concernent:
- la possibilité de mettre en oeuvre plusieurs capteurs
- la génération de la trame à l'issue de la lecture de tous les capteurs

Le sketch est disponible ici

4 commentaires:

Anonyme a dit…

Bravo pour tous ces articles: c'est simple. Seule reproche, j'apprécierai de voir davantage de schémas de branchements(à la fritzing).

Autre chose, lorsque que j'ai tenté de télécharger le skectch concernant le ds18b20 je tombe sur la saisie par le fbi des serveurs rapidshare :-)

a bientôt de vous lire!

Jamais sans mon scoot' a dit…

Désolé, je pensais avoir tout repassé sous rapidshare. Je m'en occupe dans la semaine

Tony a dit…

Génial, merci pour ce tutoriel, c'est vraiment pratique d'avoir toutes les ressources pour pouvoir reproduire ce petit montage avec l'Arduino.
Bonne continuation et continuez de nous faire partager vos créations.

Jamais sans mon scoot' a dit…

Merci pour ce retour... j'aimerai y passer plus de temps, mais ce n'est pas toujours facile. De plus, mon sketch a largement dépassé le stade de la gestion de température et a pris une ampleur 'domotique' avec la gestion de l'éclairage, de l'alarme... Le blog a beaucoup de retard. J'essaierai de rattraper ce retard un jour.
Bonne continuation !

Enregistrer un commentaire

Laissez vos commentaires ...