Domotique : Réseau de thermomètres et graphes de température

Les capteurs de température à installer chez soi en domotique sont pratiques mais les solutions commerciales sont chères. J’ai décidé de concevoir mon propre système qui a les avantages d’être peu cher tout en stockant les données récoltées chez moi et non sur le cloud d’une société privée. Le budget final est de moins de 6 francs par sonde de température WiFi.

Capteurs numériques

Je me sers de capteurs ds18b20 de Maxim qui sont intégrés dans un boîtier TO220 à 3 pattes : Alim, Ground et Data. Ces capteurs ont une résolution de ± 0.5°C entre -10°C et +85°C. Il suffit de lire la température depuis un microcontrôleur via le protocole 1-Wire. Chaque thermomètre possède un numéro de série ce qui fait qu’on peut en mettre plusieurs le long d’un bus 1-Wire et accéder à chaque température. Un exemple concret de lecture depuis un microcontrôleur suit. Un ds18b20 coûte environ 1$ chez des fournisseurs asiatiques.

Microcontrôleur

Je compte utiliser des ESP8266 pour fabriquer des modules thermomètres qui envoient leurs données à une base de données sur le WiFi. Les modules les plus petits, les ESP-01 coûtent environ 3$, je me procure aussi des adaptateurs à 2$ pour facilement brancher et alimenter mes ESP-01.
J’ai branché le ds18b20 sur GPIO0 avec un pullup de 3.3k.

ESP-01 avec thermomètre ds18b20 et pull-up

Adaptateur pour la programmation : j’ai rajouté sur cet adaptateur les boutons Reset et Program qui permettent de démarrer l’ESP8266 en mode programmation.

A l’aide de la librairie DallasTemperature j’accède facilement au thermomètre depuis le microcontrôleur.

#include "OneWire.h"
#include "DallasTemperature.h"
[...]
// Data wire is plugged into port GPIO0
#define ONE_WIRE_BUS 0
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);
[...]
void setup(){
  // Start up the library
  sensors.begin();
}
[...]
float getTemp(){
  // Send the command to get temperatures
  sensors.requestTemperatures(); 
  //we have only one ds18b20, index 0
  float temp = sensors.getTempCByIndex(0);
  return temp;  
}

Les esp8266 ont une fonctionnalité intéressante : le deep sleep. Cela permet d’endormir le microcontrôleur pendant un certain temps puis de le réveiller lorsqu’on en a besoin. Lors du deep sleep, le microcontrôleur ne consomme plus que 78 micro ampères ! Le comportement que je désire est le suivant : démarrer, lire la température, l’envoyer sur le WiFi à une base de données et se mettre en deep sleep pour les prochaines 15 minutes. Cela me donnera 1 point tous les 15 minutes, c’est ce que j’ai choisi arbitrairement. Pour réveiller le microcontrôleur après le deep sleep, j’ai dû connecer le pin XPD_DCDC (8) sur reset, en allant souder un fil entre une patte du boîtier et le pin reset de l’ESP-01 comme suggéré ici. J’ai déssoudé la led rouge d’indication de fonctionnement qui elle consomme plus que le microcontrôleur lors du deep sleep ! Je peux ensuite endormir le microcontrôleur comme suit :

  // Deep Sleep de 15 minutes
  ESP.deepSleep(15*60*1000000, WAKE_RF_DEFAULT);

Base de données InfluxDB

Mes thermomètres envoient mes données sur le réseau local sur mon NAS où j’ai installé la base de données InfluxDB, une base de données temporelle. Chaque donnée est un chiffre accompagné d’un timestamp. Le moyen le plus simple de nourrir la base de données est d’envoyer un paquet UDP depuis le microcontrôleur, c’est une requête facile à programmer mais sans authentification. Sur le microcontrôleur, ça ressemble à ceci avec une requête de la forme temp_module value=26.34 (temp_module est le nom d’une série de données sur le serveur InfluxDB.

  String line = "temp_module value="+String(getTemp());
  // send the packet
  udp.beginPacket(host, port);
  udp.print(line);
  udp.endPacket();

Graphiques avec Graphana

J’ai installé ensuite sur mon NAS un serveur Web avec l’outil Graphana qui va chercher les données dans InfluxDB pour les afficher sous forme de graphiques, indicateurs. On paramètre des requêtes de style MySQL pour extraire des séries de données, dans une belle interface graphique moderne. Depuis l’interface graphique, on peut créer ses indicateurs et modifier les plages des graphiques par périodes (12h, 24h, 7 jours, 1 mois, etc…).

Température de 3 sondes sur 7 jours

Température de 3 sondes sur 6 mois

Inspection d’un chargeur USB 8 ports

J’ai récemment acheté de Chine un chargeur USB 8 ports pour environs 10 francs, frais de ports compris. Le modèle est noté “YC-CDA15”. J’ai décidé de l’inspecter avant de le brancher pour voir ce que vaut ce produit chinois pas cher.

Aspect général

img_21112016_222809Le boîtier a l’air bien fini, sobre et moderne. Le cordon secteur fait bonne façon, on voit que les pins de la fiche mâle sont isolées comme c’est le cas aujourd’hui sur les cordons vendus en Europe.
img_21112016_222733Sur le dos de l’appareil on a les spécifications du fabricant et notamment les logos FCC et CE. A y regarder de plus près, le logo CE n’est pas celui que l’on trouve sur les produits respectant la norme Conformité Européene mais c’est un logo surnommé China Export qui prête à confusion.
On peut alors se douter que le logo FCC sur les émissions électromagnétique a été placé sans effectuer de test par un organisme agréé, sans dossier déposé à la Federal Communications Comission américaine.
chinaexportDu coup, ce chargeur, peut-il être utilisé sans risque ? regardons à l’intérieur s’il est aussi poli qu’à l’extérieur.

Démontage

Première chose à noter : le boîtier est clippé et non collé. Ce n’est pas une bonne pratique car il risquerait de s’ouvir en cas de choc ou chute et laisser à nu un intérieur exposé à la haute tension du secteur.

img_21112016_172636L’intérieur révèle une alimentation à découpage collée à la colle chaude dans le boîtier plastique ! Pas très professionel comme montage. Le 5V en sortie est distribué par un seul rail sur le PCB vert.
img_21112016_172716La partie la plus préoccupante est la prise d’alimentation dont les broches ne sont pas isolées. Une des broches est d’ailleurs presque en contact avec le bobinage d’une inductance !
img_21112016_172646Du côté du secondaire, on aperçoit deux fils coupés, c’est à se demander si l’alimentation n’est pas une alimentation de récupération.

Inspectons de plus près l’alimentation à découpage :

img_21112016_172636r2Le courant depuis la prise secteur passe par un fusible 3A puis un varistor enlève les éventuels pics de haute tension. Une inductance et une capacité filtre le courant entrant. Un pont de diodes discrètes que l’on aperçoit pas sur la photo redresse le courant alternatif, la capacité de filtrage en fait une tension continue. Le transistor de découpage hache cette tension et l’envoie dans le transformateur.
La carte fille verticale que l’on observe en bas de l’alimentation contient le circuit de contrôle qui gère le découpage pour obtenir 5V en sortie. La partie dite primaire, haute tension (à droite) est séparée de la partie secondaire, basse tension (à gauche) par le transformateur. Il n’y a pas de connection électrique entre le primaire et le secondaire, mais un champ magnétique au travers du transformateur. Un optocoupleur sert, lui au feedback du circuit de contrôle en faisant le lien entre le primaire et le secondaire.
En sortie, une diode ainsi que des capacités de lissage génèrent le 5V.

img_21112016_203144rSur le dessous de l’alimentation, côté primaire, on aperçoit des éclateurs qui protègent contre des surtensions d’environ 3000V à 5000V.
img_21112016_203218Sur la gauche du PCB, on aperçoit la séparation nette entre le primaire et le secondaire. On distingue un éclateur sous le transformateur, à l’endroit ou deux pistes forment une pointe. Cela protège si trop de charges s’accumulent dans le secondaire (en cas de foudre ?)
On voit que la piste de sortie, qui doit supporter 8A sous 5V a été renforcée par un fil soudé le long sur le PCB.

Bon, cette alimentation a beau être collée n’importe comment dans le boîtier, on voit qu’il n’y a pas eu d’économies quand aux composants de protection divers. Elle semble tout à fait décente.
Je n’ai pas le matériel suffisant pour réaliser des tests électroniques sur cette alimentation, quant à sa stabilité et à la puissance réelle qu’elle peut fournir. Un chargeur 8 ports similaire a été testé en long et en large et fonctionne pas mal.

Remontage

img_21112016_222630J’isole les bornes secteur avec de la gaine thermo et remonte l’alim dans son boîtier que je ferme ensuite avec de la colle. Je profite aussi de mettre des points de colle sur les composants volumineux comme les capacités, en effet, elles ne sont pas maintenues et soumises à des vibrations peuvent se casser ou détacher du PCB.

Je peux alors la brancher et constater qu’elle fonctionne.

img_21112016_223157