Un capteur de température sans fil à base de Xbee (partie 2)

EDIT (30/01/2016): Le régulateur de tension (LD1117V33C) proposé initialement dans cet article fonctionne parfaitement mais possède une consommation interne trop importante, ce qui m’a causé une surconsommation des piles et une tenue d’à peine 3 semaines. Je l’ai donc avantageusement remplacé par un LP2950CZ-3.3, qui délivre 100mA maximum, ce qui s’avère bien suffisant pour ce petit montage. La consommation des piles semblent correct et je pense avoir une durée de vie de plusieurs mois. Attention à vérifier l’ordre de broches (Vin, Vout, GND) car il diffère du LD1117.

De l’eau a coulé sous les ponts depuis la première partie de cette série d’article sur les XBee, mais les beaux jours passent toujours plus vite, et puis comme vous le verrez, je n’ai pas chômé sur d’autres sujets qui feront bientôt l’objet de nouveaux articles.

Voici donc la deuxième (et dernière) partie sur la réalisation d’un capteur de température sans fil à base de XBee. Pour ceux qui ne l’ont pas encore lue, je vous invite à aller lire la première partie, qui introduit de façon détaillée les XBee, leur programmation, et également le principe de réalisation de ce capteur de température sans fil.

Dans cet article, je vous propose de voir comment passer du prototypage sur breadboard, à un packaging un peu plus fini pour la partie électronique (toutes proportions gardées, ça reste du bricolage). On verra également comment faire en sorte que le code NodeJS tourne en tâche de fond, à la façon d’un service Unix.

De la breadboard au boitier


L’objectif est simplement de réaliser un boitier fermé, propre, contenant l’ensemble du dispositif électronique ainsi qu’une pile pour l’alimentation.

Voici la liste des composants qu’il va nous falloir :

  1. Une plaque de prototypage en bakélite, à pastilles cuivrées. L’espacement des trous doit être au pas standard de 2,54mm. Pour les composants que l’on devra souder dessus, une taille de 100 x 53mm environ est suffisante, elle sera redécoupée de toute façon.
  2. Un boitier plastique refermable, si possible avec des vis, de dimension légèrement supérieure à notre plaque bakélite. J’en ai pris une de dimension 85 x 55 x 30mm
  3. Des petits fils de câblage (sauf si comme moi, votre fils vous ramène les chutes des fils électriques trouvés devant les armoires de brassage de téléphonie France-Télécom 🙂 )
  4. Une pile AA de 3.6V (ou plus)

1ère étape : Un peu de mécanique

Présentez l’ensemble des composants sur la plaque bakélite pour vous assurez que tout peut loger. Il se peut que vous aillez à agrandir légèrement les trous de la plaque pour certains composants dont les pattes de fixation sont plus épaisses. Ensuite, découpez la plaque bakélite pour qu’elle rentre dans le boitier, sans forcer, mais sans trop de jeu non plus. Chez moi, ça donne quelque chose comme ça :

2ème étape : Les soudures

Insérez chacun des composants sur la plaque, selon une disposition qui limitera le nombre de ponts entre composants, et soudez chaque patte des composants aux pastilles de cuivre :

A l’aide des fils de câblage, soudez les pattes des composants entre eux, selon le diagramme présenté dans la première partie (j’ai eu de menus ratés sur les première soudures, d’où quelques pastilles brulées…) :

3ème étape : Finalisation

Insérez la pile, vérifiez que le code NodeJS présenté dans la première partie de cet article fonctionne toujours (réception des trames et affichage de la température). Puis insérez le dispositif électronique dans le boitier, fermez avec les vis et voilà ! Si tout fonctionnait correctement lors du prototypage, et que vous ne vous êtes pas trompé dans les soudures, ça marche du premier coup (ça a été mon cas).

Le code de réception en tâche de fond


Pour faire tourner un script NodeJS en tâche de fond à la façon d’un service (démon Unix), il n’y a que l’embarras du choix.

J’ai opté pour un utilitaire nommé Forever, développé par l’équipe de Nodejitsu, lui même écrit en NodeJS. Tout est expliqué dans les détails sur le site de Forever, par conséquent je vais me contenter de synthétiser le strict nécessaire pour le Raspberry Pi.

En principe, vous avez déjà installé NodeJS (qui vient avec son gestionnaire de paquet NPM) comme expliqué dans la première partie de cet article. Alors voici les commandes :

D’abord installer forever, à l’aide de la commande npm :

sudo npm -g install forever

Ensuite, créer un répertoire qui accueillera les fichiers de logs de Forever, adaptez le chemin exact à votre propre installation :

mkdir /home/pi/Domotique/Forever

Puis, on crée un script de démarrage :

sudo vi /etc/init.d/nodeup

Et on entre le code suivant, en adaptant les chemins exacts de votre script xbee-receiver.js, ainsi que le chemin du répertoire Forever précédemment créé :

#!/bin/sh
#/etc/init.d/nodeup
 
export PATH=$PATH:/usr/local/bin
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules:/home/pi/node_modules
 
case "$1" in
  start)
  exec forever --sourceDir=/home/pi/Domotique -p /home/pi/Domotique/Forever xbee-receiver.js
  ;;
stop)
  exec forever stop --sourceDir=/home/pi/Domotique xbee-receiver.js
  ;;
*)
  echo "Usage: /etc/init.d/nodeup {start|stop}"
  exit 1
  ;;
esac
 
exit 0

Après l’avoir sauvegardé, il faut donner les droits d’exécution à ce script de démarrage :

sudo chmod a+x /etc/init.d/nodeup

Pour finir, on rajoute ce script au mécanisme indiquant ce qui doit être lancé automatiquement lorsque le système démarre :

sudo update-rc.d nodeup defaults

Il ne reste plus qu’à lancer le script manuellement (normalement, le système le lance automatiquement à chaque démarrage) :

sudo -b /etc/init.d/nodeup start

On peut alors lire les relevés de température envoyés toutes les 5 minutes et stockés dans le fichier tempRecords.csv (ou tout autre nom de fichier que vous auriez spécifié dans le code xbee-receiver.js) :

pi@domopi ~/Domotique $ tail -f tempRecords.csv
1441816811;20.15;3.20
1441817104;20.03;3.20
1441817397;19.91;3.20
1441817689;19.79;3.20
1441817982;19.68;3.20
1441818275;19.56;3.20
1441818568;19.44;3.20
1441818861;19.91;3.24
1441819154;19.68;3.24
1441819446;18.97;3.20

Le premier champs est l’horodatage du relevé (timestamp Unix epoch), le deuxième champs est la température et le troisième la valeur de l’alimentation du XBee (3.20 Volts environ).

Pour ma part, j’ai intégré ce relevé de température à mon interface web domotique, tournant sur mon RPi frontal. Voici le résultat :

Conclusion


 Au regard de la partie de conception, de programmation des XBee, de prototypage et de tests, cette deuxième partie ne présente aucune difficulté particulière, à condition d’être à l’aise avec les soudures.

Cette partie conclue donc ma première utilisation des modules XBee pour ajouter une fonctionnalité de communication radio-fréquence à un dispositif électronique simple, tout en utilisant le Raspberry Pi comme intermédiaire entre le monde de l’électronique et celui de l’informatique.

Nul doute qu’il y aura d’autres projets de ce genre, j’ai encore dans mes tiroirs, des XBees, et un capteur de mouvement, qui n’attendent que ça 🙂

Vous aimez cet article ? Faites le savoir avec quelques bitcoins !

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s