dimanche 28 janvier 2018

Un thermomètre MYSENSORS sur batterie





Un thermomètre MYSENSORS sur batterie


Le but de cette page est d'expliquer pas à pas la réalisation d'un thermomètre basse consommation à base d'ARDUINO PRO MINI, relié par radio à un serveur DOMOTICZ, à l'aide d'un module NRF24L01 2.4GHZ.

Ce projet peut servir également de base à tout développement de capteur MYSENSORS sur batterie.

Il s'adresse à toute personne ayant une bonne expérience en matière de développement ARDUINO et quelques notions d'électroniques.

Un serveur DOMOTICZ (ou autre supporté par MYSENSORS) est nécessaire. Ce serveur domotique peut être installé avantageusement sur une plateforme du type RASPBERRY PI.
On lui connectera une passerelle MYSENSORS. Cette passerelle peut être construite avec une carte ARDUINO UNO ou NANO et un deuxième module NRF24L01.

Les liens suivants vous seront utiles :
https://riton-duino.blogspot.com/2019/05/mysensors-presentation.html 
https://easydomoticz.com/domoticz-arduino-mysensors-org-partie-2-la-passerelle

1. Les fonctionnalités

Le montage proposé permet de remonter au serveur DOMOTICZ la température mesurée tous les 1/4 d'heure.
Il permet de remonter également le niveau de la batterie.

L'autonomie est importante. Avec une consommation de 6µA, une batterie de 600mAH devrait durer 100000 heures. Seule l'auto-décharge de la batterie peut poser problème. Préférer les modèles à faible auto-décharge.

2. Le matériel

Pour réaliser ce thermomètre, il vous faudra réunir :
  • un ARDUINO PRO MINI 8Mhz 3.3V
  • un module radio NRF24L01
  • un capteur de température DS18B20
  • une résistance de 4.7 K
  • deux diodes 1N4148
  • une diode 1N4001
  • un accumulateur 3.6V ou 3.7V (NIMH ou LI-ION)

Voici le modèle que j'utilise :
https://www.tme.eu/fr/details/accu-600_3ni-mh_c/batteries/cellevia-batteries/



3. Le schéma


Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir plus bas :  13. Téléchargements.

Remarque : sur le schéma le capteur DS18B20 n'est pas soudé directement sur la carte. P1 est un connecteur. Le brochage du connecteur est celui-ci :

1 : GND
2 : VDD
3 : DATA
Il ne correspond pas à celui du DS18B20 :
1 : GND
2 : DATA
3 : VDD
Il faut donc câbler le DS18B20 en croisant DATA et VDD. Voir la photo plus bas.

Les deux diodes 1N4148 servent à réduire légèrement la tension d'alimentation du NRF24L01 qui ne supporterait pas 3.7V (4.2V à pleine charge pour une lithium-ion). Les puristes pourront les remplacer par un régulateur 3.3V à faible tension de chute (LDO).
Vous pouvez aisément essayer ce montage sur une breadboard.
 

4. La basse consommation

Reportez-vous à la page traitant de l'ARDUINO MINI.

Comme je le disais plus haut, le thermomètre transmet ses données de température tous les 1/4 d'heure. La transmission dure environ 30ms.
De plus, pendant la lecture du capteur de température DS18B20, le processeur est également en sommeil :

  sensors.requestTemperatures();
  // query conversion time and sleep until conversion completed
  int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
  sleep(conversionTime);
  float temperature = static_cast<float>(static_cast<int>((getControllerConfig().isMetric ? sensors.getTempCByIndex(0) : sensors.getTempFByIndex(0)) * 10.)) / 10.;


5. IDE ARDUINO

Il vous faudra bien entendu installer les bibliothèques ARDUINO suivantes :
Librairie MYSENSORS : https://www.mysensors.org/download

Dans votre IDE (arduino-cc 1.6.9 par exemple), dans le menu "Outils/Type de Carte" choisir "Arduino Pro or Pro Mini". Dans le menu "Outils/Processeur" choisir "ATmega328 (3.3V, 8MHz)".
 

6. Le code

Pour récupérer le projet voir plus bas :  13. Téléchargements.

Fonction analogReadReference :
Le principe utilisé pour la mesure du niveau de la  batterie est de mesurer la référence interne de l'ADC (1.1V) en utilisant comme référence l'alimentation de l'ARDUINO, ce qui permet d'en déduire la tension d'alimentation.

La fonction sleep() permet d'endormir l'ARDUINO et le NRF24L01.

La valeur de VREF dans le sketch est à adapter en fonction de la mesure réelle de la tension de la batterie.
La tension mesurée par l'ARDUINO est affichée dans le terminal. A comparer donc avec la valeur affichée par un bon multimètre.

7. Chargement

Reportez-vous à la page traitant de l'ARDUINO MINI.

8. DOMOTICZ

Reportez-vous à ce document :

9. Boîtier

Ce montage a été intégré dans boîtier kradex-Z-123.

https://www.tme.eu/fr/details/z-123_wh/boitiers-universels/kradex/z123b-abs/

10 Évolution

La deuxième version est déjà en cours de test depuis un mois :

La batterie NI-MH a été remplacée par une LI-ION.
Comme la tension à pleine charge est supérieure, un régulateur 3.3V a été ajouté afin d'éliminer tout danger pour le NRF24L01 pendant la charge. Le modèle choisi : LM2936-3.3
La tension est mesurée à l'aide d'un pont diviseur. En effet il n'est plus possible de mesurer la tension de la batterie à l'aide de la méthode précédente.
La consommation est supérieure bien sûr : une vingtaine de µA.
La capacité de la batterie est calculée à partir d'une table de correspondance tension / capacité
J'ai également installé un chargeur USB à demeure dans le boîtier. Un TP4056.

10.1. Le matériel

Pour réaliser ce thermomètre V2, il vous faudra réunir :
  • un ARDUINO PRO MINI 8Mhz 3.3V
  • un module radio NRF24L01
  • un capteur de température DS18B20
  • une résistance de 4.7K
  • une résistance de 1M 1%
  • une résistance de 330K 1%
  • un régulateur LM2936-3.3
  • un condensateur 10µF 6.3V
  • un accumulateur 3.7V LITHIUM-ION au format 16340 250mAH minimum 
Le PCB est prévu pour une batterie 16340 sur support mais il est tout à fait possible d'utiliser une LIPO fixée au PCB par de l'adhésif double face ou de la colle. La place disponible pour la batterie est de 24x42mm, ou 31x36mm, ce qui autorise un vaste choix.

Personnellement j'ai utilisé une XTAR 16430 650mAH achetée chez Gotronic.

Cet article décrit une étude réalisée sur les régulateurs utilisables dans un montage basse consommation : https://riton-duino.blogspot.com/2018/11/les-regulateurs-ldo.html

10.2. Le nouveau schéma

 

Remarque : sur le schéma le capteur DS18B20 n'est pas soudé directement sur la carte. P1 est un connecteur. Le brochage du connecteur est celui-ci :
1 : GND
2 : VDD
3 : DATA
Il ne correspond pas à celui du DS18B20 :
1 : GND
2 : DATA
3 : VDD
Il faut donc câbler le DS18B20 en croisant DATA et VDD. Voir la photo plus bas.

11. Photos

Le 7 mai 2019, je profite du rechargement de la batterie pour proposer une photo :



Il s'agit d'un prototype. Sur ce modèle, le support de batterie et la carte TP4056 sont logés à côté du circuit imprimé.
Le nouveau routage de la carte inclus dans le projet intègre ces composants.

12. Retour d'expérience

Dans mon article "ARDUINO PRO MINI & basse consommation" au paragraphe  "7. Autonomie" je détaille mon retour d'expérience sur le choix d'une batterie pour alimenter un capteur en prenant comme exemple ce thermomètre.
Bien que consommant 4 fois plus que la version 1, l'autonomie atteint bientôt un an sans recharge, ceci avec une batterie chinoise très bas de gamme. La capacité restante à ce jour est de 81%.
J'ai cependant une remarque à faire concernant la mesure de tension batterie. Tant que la température est stable aux alentours de 20°, la mesure est fiable, par contre si celle-ci descend, la mesure indique une valeur de tension plus basse. Ceci est probablement dû à une dérive de la tension de référence 1.1V de l'ATMEGA328P en fonction de la température.
Disons que la mesure de capacité batterie de ce thermomètre est fiable dans une habitation à température constante. Cela n'affecte pas bien entendu la mesure de température.

12.1. Autonomie

Aujourd'hui nous sommes le 7 mai 2019. Le thermomètre est arrêté. Il est en service depuis le 10 décembre 2017. Cela nous fait donc 17 mois de service ininterrompu.

12.2. Utilisation d'autres régulateurs

Depuis janvier 2018 j'ai découvert un autre régulateur : le HT7533-1 consomme 2.5µA au lieu de 15µA.
Il y a fort à parier qu'avec ce régulateur, une batterie de 100mAH suffirait, une petite LIPO par exemple.
Je l'ai utilisé ici : https://riton-duino.blogspot.com/2019/06/une-telecommande-domotique-24ghz.html

13. Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/mysensors-battery-thermometer.git

Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html
 

14. Liens utiles

DOMOTICZ : https://domoticz.com/
MYSENSORS : https://www.mysensors.org/
ARDUINO PRO MINI : https://www.arduino.cc/en/uploads/Main/Arduino-Pro-Mini-schematic.pdf
NRF24L01 : http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01
DS18B20 : https://www.maximintegrated.com/en/products/analog/sensors-and-sensor-interface/DS18B20.html


Cordialement
Henri

15. Mises à jour

16/04/2018 : version 2 avec régulateur de tension
20/09/2018 : bug fix dans la mesure de tension batterie (nouveau sketch)
03/11/2018 : nouvelle liste de matériel pour la V2
                     ajout du paragraphe 12. Retour d'expérience
02/12/2018 : ajout commentaires dans  4. La basse consommation
20/03/2019 : projet déménagé vers BitBucket.org
07/05/2019 : 11. Photos
29/06/2019 : 6. Le code (réglage VREF)
10/08/2019 : 12.2. Utilisation d'autres régulateurs