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.

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 
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

 

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

38 commentaires:

  1. Hello,
    Question de newbie : Domoticz reçoit l'info température mais pas l'info sur le voltage, si ?

    RépondreSupprimer
  2. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
    Réponses
    1. Bien sûr que si. Voir ligne 139 :
      sendBatteryLevel(batteryLevel);
      J'ai amélioré le code dernièrement. J'envoie maintenant la capacité restante grâce à une table tension / capacité.
      Le résultat est cependant un peu trop dépendant de la température. A cause de la tension de référence de l'ADC qui varie, sans doute.

      Supprimer
  3. Bonjour Henri,

    Merci pour ce partage. Je ne trouve pas le nouveau schéma avec le régulateur LM2936-3.3.
    Je suis sur un projet un peu similaire de mini station météo solaire et cherche à réguler la tension issue de la batterie LiPo à 3.3 v pour ne pas griller le NRF24L01.
    J'ai compris que l'on pouvait faire imprimer le circuit imprimé pour pas cher en ligne avec le projet Kicad que tu mets à disposition et je vais sans doute me lancer et en commander un si c'est à ma portée. J'aurais peut être des infos à te demander au cas où...
    Merci d'avance.

    Fitness04

    RépondreSupprimer
    Réponses
    1. Le lien fourni pointe pourtant sur le bon projet :
      https://drive.google.com/open?id=1PwldmSOGrxRF_ceH2fzyVHm0ESJ77XeR
      Y a t-il un problème de partage ?
      J'ai ajouté le nouveau schéma comme image dans la page du blog.

      Supprimer
    2. La page https://riton-duino.blogspot.com/2018/04/carte-dexperimentation-mysensors.html donne une liste d'autres régulateurs pouvant convenir, en particulier le HT7533-1, par contre c'est du CMS.

      Supprimer
  4. Merci Henri,
    Le lien pointe vers le projet Kikad mais je n'ai pas encore installé le logiciel qui doit être nécessaire pour voir le schéma.
    Comme je le disais, je vais sans doute faire réaliser le circuit imprimé mais il faut que je me penche d'abord sur le fonctionnement de Kikad.

    RépondreSupprimer
  5. OK. C'est un logiciel très professionnel.
    Bonne formation.

    RépondreSupprimer
    Réponses
    1. Bonjour Henri,

      Je lis ce tutoriel pour fabriquer un PCB :

      https://www.framboise314.fr/jlcpcb-fabrique-les-circuits-que-vous-imaginez/

      Comment obtenir un fichier Gerber ?
      C'est KIKAd qui le génère à partir des fichiers que tu as mis dans ton ZIP ?

      Merci.

      Supprimer
  6. Il suffit de cliquer sur l'icône PLOT à droite de l'icône imprimante.
    Ensuite il faut choisir les option recommandées par JLCPCB :
    https://support.jlcpcb.com/article/44-how-to-export-kicad-pcb-to-gerber-files

    RépondreSupprimer
  7. Bonjour Henri,

    Merci pour cette info. J'ai fait la procédure de commande mais, pour 2$ de fabrication pour 10 pièces, j'ai 25$ de port !
    Aussi, je temporise pour commander !

    Comment fais tu ?

    RépondreSupprimer
    Réponses
    1. Je n'ai pas encore commandé. Ma première commande est en cours de réalisation. J'essaie de regrouper plusieurs PCB dans la même commande pour que cela en vaille la peine.

      Supprimer
  8. Bonjour Henri,
    J’ai trouvé un site, un peu plus cher pour 10 PCB (5€) mais a seulement 11€ pour le port (China post). pcbway.com
    Une question : j'aimerais ajouter un capteur BME 280 cablé en I2C a ton schéma du thermomètre avec le DS18b20. Débutant sous Kikad, est-ce envisageable a court terme ?

    RépondreSupprimer
  9. Le BME280 est capable de mesurer la pression, la température et l'humidité.
    Sa précision en mesure de température à 25°C est de 0.5°, et 1° entre 0 et 65°C.
    Le DS18B20 a une précision de 0.5° entre -10°C et +85°C.
    Le DS18B20 sera plus précis en température extérieure.
    Si c'est pour mesurer une température intérieure, autant virer le DS18B20.
    Fais attention de bien commander un ARDUINO PRO MINI ATMEGA328 3.3V 8MHz avec les broches I2C A4 et A5.
    Comme celui-ci https://fr.aliexpress.com/item/10pcs-lot-Pro-Mini-328-Mini-3-3V-8M-ATMEGA328-3-3V-8MHz-for-arduino/32695653634.html?spm=a2g0s.9042311.0.0.40236c371FIjaw

    Merci pour pcbway, je vais regarder.

    RépondreSupprimer
  10. C'est chiant blogspot, on ne reçoit pas de notification sur les commentaires, d'où ma réponse tardive.

    RépondreSupprimer
    Réponses
    1. Bonjour,

      J'ai voulu commander à PCBWAY mais ils me répondent que mes fichiers Gerber ne sont pas valides.
      Je ne maîtrise pas bien KiCad.
      Pourrais tu, si ça ne te dérange pas trop, m'envoyer le fichier ZIP des fichiers Gerber nécessaires à la fabrication ?

      Merci d'avance.
      jeanmarie.dao@free.fr

      Supprimer
    2. Désolé mais je fais mes PCB moi-même.
      Ils publient un guide. Il faut simplement le suivre.
      https://www.pcbway.com/blog/help_center/Generate_Gerber_file_from_Kicad.html

      Supprimer
  11. Salut Henri,

    Alors cette évolution qu'est ce que cela donne après plusieurs mois d'utilisation ?
    Tu penses mettre à jour ta présentation pour détailler un peu plus la V2 de ton thermomètre (détail des pièces à acheter, photo, retour d'utilisation et comparatif avec la V1,...) ou bien carrément refaire un nouvel article ?
    En tout cas bravo pour tout tes articles et tests partagés !!!

    RépondreSupprimer
  12. J'ai ajouté deux paragraphes :
    12. Le matériel
    14. Retour d'expérience
    Sinon, le dossier (électronique, sketch) est complet depuis avril.
    Conclusion : presque un an de service avec une seule charge de batterie.
    Cet article est très consulté : 732 vues
    En deuxième place après "ARDUINO PRO MINI & basse consommation" : 935 vues

    Cela fait plaisir

    RépondreSupprimer
  13. Quand je rechargerai la batterie, j'ouvrirai le boîtier pour une photo de la carte, promis.

    RépondreSupprimer
  14. bonjour,
    merci pour la mine d'information que tu met à disposition, j'ai beaucoup appris garce à toi.
    Pour réduire encore la consommation je met le RFN24L01 en veille garce à la PIN IRQ juste avant le "sleep" :
    "digitalWrite(2, LOW);"
    après le "sleep" je sort de veille le RFN24L01 :
    "digitalWrite(2, HIGH);
    delay(500); // délai de securité au cas ou il faut un peut de temps au NRF24L01 pour sortir de veille "
    bien-sur ne pas oublier de déclarer dans le "void setup()"
    " pinMode (2, OUTPUT); "

    RépondreSupprimer
  15. Je pense que la librairie MySensors fait ce travail toute seule à l'appel de sleep().
    En tous cas, la doc précise ce point.

    RépondreSupprimer
  16. J'ai vu la différence avec mon ampèremètre

    RépondreSupprimer
  17. Je ne suis plus sur, mais de mA à uA

    RépondreSupprimer
  18. Pas possible. Mon thermo consomme 20µA et je ne fais rien d'autre qu'appeler sleep() toutes les 15 minutes.
    Le régulateur consomme 15µA à lui tout seul.

    RépondreSupprimer
  19. Bonjour et merci pour ce partage.
    Juste une question qui me turlupine :
    Pourquoi utiliser un régulateur externe alors qu'il y en a déjà un sur le pro mini? L'entrée RAW accepte jusqu'a 12v, ensuite c'est simple d'utiliser la pin VCC pour alimenter le NRF24L01 en 3.3v (vu sa faible consommation) et on se passe d'un composant supplémentaire, non?

    RépondreSupprimer
  20. Le MIC5205 de la PRO MINI consomme 80µA à vide.
    Le LM2936 consomme 15µA.
    Le HT7533-1 consomme 2.5µA.
    Il suffit de faire son choix. Alimenter avec le 3.3V de la PRO MINI n'est pas une mauvaise option. Il suffit de disposer d'une batterie de taille conséquente.
    Mon thermomètre se contente d'une batterie de 25OmAH pour 17 mois d'autonomie.
    Voir https://riton-duino.blogspot.com/2018/11/les-regulateurs-ldo.html

    RépondreSupprimer
  21. Bonjour

    Deja bravo pour votre réalisation. Je vais bientôt commencer mon déploiement de capteur (mélange de sonoff, 433 et mysensor)

    Une question me vient à l'esprit, est il possible d'utiliser un dht22 pour avoir la température et l'humidité?

    Si oui comment par rapport a votre code?
    Quelle influence sur la consommation ?

    merci de vos Réponses

    Denis

    RépondreSupprimer
    Réponses
    1. Ou, au prix d'une consommation supérieure.
      Le HTU21D sera moins consommateur.
      Voir ici : https://riton-duino.blogspot.com/2018/12/les-capteurs-de-temperature-humidite.html

      Supprimer
    2. Comme ici :
      https://riton-duino.blogspot.com/2019/05/un-thermometre-hygrometre-mysensors-sur.html

      Supprimer
  22. bonjour

    merci pour votre réponse rapide, je ne connaissait pas ce capteur de température et il a l'air pas mal.

    Faut il modifier le code ou est il reconnu directement?

    merci

    Denis

    RépondreSupprimer
    Réponses
    1. Le projet https://riton-duino.blogspot.com/2019/05/un-thermometre-hygrometre-mysensors-sur.html utilise un SHT31D

      Supprimer
    2. re

      super merci beaucoup je vais étudier ça de prés.

      Si seulement je savais coder correctement mes projets de domotisation serait bien plus aboutis

      Merci pour vos projet et bonne continuation

      Denis

      Supprimer
    3. Bonne continuation à vous également.

      Supprimer