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.
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
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.
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 :
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
Librairie Dallas : https://github.com/milesburton/Arduino-Temperature-Control-Library
Librairie OneWire : https://github.com/PaulStoffregen/OneWire
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.
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.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.
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
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.
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
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.
Le 16/04/2020 : remplacement de la batterie par une XTAR 16430 650mAH achetée chez Gotronic.
La Recharge suivante a été faite le 13/01/2022 : l'autonomie est de 21 mois.
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-thermometerCette 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 tension20/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
Ce commentaire a été supprimé par l'auteur.
RépondreSupprimerBien sûr que si. Voir ligne 139 :
SupprimersendBatteryLevel(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.
Bonjour Henri,
RépondreSupprimerMerci 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
Le lien fourni pointe pourtant sur le bon projet :
Supprimerhttps://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.
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.
SupprimerMerci Henri,
RépondreSupprimerLe 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.
OK. C'est un logiciel très professionnel.
RépondreSupprimerBonne formation.
Bonjour Henri,
SupprimerJe 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.
Il suffit de cliquer sur l'icône PLOT à droite de l'icône imprimante.
RépondreSupprimerEnsuite il faut choisir les option recommandées par JLCPCB :
https://support.jlcpcb.com/article/44-how-to-export-kicad-pcb-to-gerber-files
Bonjour Henri,
RépondreSupprimerMerci 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 ?
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.
SupprimerBonjour Henri,
RépondreSupprimerJ’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 ?
Le BME280 est capable de mesurer la pression, la température et l'humidité.
RépondreSupprimerSa 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.
C'est chiant blogspot, on ne reçoit pas de notification sur les commentaires, d'où ma réponse tardive.
RépondreSupprimerBonjour,
SupprimerJ'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
Désolé mais je fais mes PCB moi-même.
SupprimerIls publient un guide. Il faut simplement le suivre.
https://www.pcbway.com/blog/help_center/Generate_Gerber_file_from_Kicad.html
Ok, merci.
RépondreSupprimerSalut Henri,
RépondreSupprimerAlors 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 !!!
J'ai ajouté deux paragraphes :
RépondreSupprimer12. 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
Merci pour ton retour !!!
SupprimerQuand je rechargerai la batterie, j'ouvrirai le boîtier pour une photo de la carte, promis.
RépondreSupprimerbonjour,
RépondreSupprimermerci 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); "
Je pense que la librairie MySensors fait ce travail toute seule à l'appel de sleep().
RépondreSupprimerEn tous cas, la doc précise ce point.
J'ai vu la différence avec mon ampèremètre
RépondreSupprimerCombien de différence ?
SupprimerJe ne suis plus sur, mais de mA à uA
RépondreSupprimerPas possible. Mon thermo consomme 20µA et je ne fais rien d'autre qu'appeler sleep() toutes les 15 minutes.
RépondreSupprimerLe régulateur consomme 15µA à lui tout seul.
Bonjour et merci pour ce partage.
RépondreSupprimerJuste 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?
Le MIC5205 de la PRO MINI consomme 80µA à vide.
RépondreSupprimerLe 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
Bonjour
RépondreSupprimerDeja 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
Ou, au prix d'une consommation supérieure.
SupprimerLe HTU21D sera moins consommateur.
Voir ici : https://riton-duino.blogspot.com/2018/12/les-capteurs-de-temperature-humidite.html
Ou un SHT31D
SupprimerComme ici :
Supprimerhttps://riton-duino.blogspot.com/2019/05/un-thermometre-hygrometre-mysensors-sur.html
bonjour
RépondreSupprimermerci 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
Le projet https://riton-duino.blogspot.com/2019/05/un-thermometre-hygrometre-mysensors-sur.html utilise un SHT31D
Supprimerre
Supprimersuper 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
Bonne continuation à vous également.
SupprimerSalut Henri,
RépondreSupprimerSuite à mon e-mail j'ai fait de nouveau test et je pense que c'est la partie (pont diviseur, condensateur et LDO) qui crée le problème de courant qui augmente sans cesse.
J'ai testé avec le code suivant que tu donnes dans la partie basse conso :
void loop() {
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
}
Avec le pont diviseur + condo + LDO et en ne branchant que la mini pro le courant augmente. Je suis passé de 0,01 à 1,9 en 30 mn,...
Même test mais sans passer par le pont diviseur + condo + LDO, donc seulement avec la mini pro, le courant n'augmente pas. Je reste entre 0,0 et 0,1 mA.
Aurais-tu une idée ? Des tests à conseiller ?
J'ai changé de LDO, même soucis,...
Le condo, j'ai dû le souder sur 2 PINs vue que ce n'est pas un condo en goute et j'espère l'avoir mis dans le bon sens,...
Je te remercie pour ton aide
"Suite à mon e-mail" : lequel ?
SupprimerIl s'agit bien d'un pont diviseur 1MΩ / 330KΩ ?
"Le condo, j'ai dû le souder sur 2 PINs vue que ce n'est pas un condo en goute et j'espère l'avoir mis dans le bon sens,..."
Il vaudrait mieux avoir une certitude.
Bonsoir, je souhaite commande les pièces sur aliexpress mes il y a beaucoup de référence différente, pouvez vous donnez les liens pour commandez directement cordialement
RépondreSupprimerDes références différentes pour quel composant ? La PRO MINI, le SHT31, le NRF24L01, le LM2936, le TP4056 ?
Supprimerbonjour
RépondreSupprimerj'ai un doute sur le brochage du DS18B20 que tu indiques sur ton schéma, quand je regarde le datasheet du produit il est indiqué
1 : VCC
2 : Data
3 : GND.
peut-on confirmer
Dans la datasheet je vois plutôt :
Supprimer3 : VCC
2 : Data
1 : GND.
Sur le schéma P1 est un connecteur. Le DS18B20 est câblé avec 3 fils. Il n'est pas soudé directement sur la carte.
Voir la photo.
J'ajoute une remarque.
oui tu as raison, la remarque est necessaire quand tu fais une maquette.
SupprimerSur ce super travail et encore bravo.
En test depuis une semaine sans PB. je n'ai pas encore réussi à integre la partie batterie sur le widget Jeedom
Bravo.
SupprimerDésolé je ne connais pas Jeedom.
bonjour, jaimerais savoir si cek
RépondreSupprimerbonjour jaimerais savoir si cela marche aussi avec adruino uno et si dans le scheme on peut changer le adruino mini avec le adruino uno
SupprimerSi l'on se contente d'une alimentation secteur, OUI.
Supprimer