d1 mini & capteur température

jgranie
jeu, 09/29/2022 - 17:15
Bonjour,
J'ai un petit bricolage alimenté sur batterie 18650 avec un d1 mini que je connecte en wifi à ma box domotique et j'aimerais optimiser l'utilisation de la batterie.
Actuellement une piste que j'entrevois c'est que je n'utilise la batterie que dans la plage 4.2V/3.5V alors qu'elle pourrait descendre à 2.75V.
Le D1 mini se comporte bien jusqu'à environ 2.85V en entrée (normalement il n'est pas censé descendre en dessous de 3V), mais le capteur (AM2320) ne veut rien savoir si sa tension d'entrée tombe en dessous de 3.1V (ce qui est normal vu le datasheet), il retourne systématiquement un puéril "nan".
Le 3.1V dans le circuit correspond à peu près à 3.5/3.6V en sortie de la batterie sans charge.
Du coup ma question : quelles seraient les possibilités pour utiliser mieux la capacité de la batterie ?
Ah oui : Je cherche une solution qui soit dans une fourchette de prix cohérente avec l'ensemble.
Merci :)
Louis.D
ven, 09/30/2022 - 12:03
J'ignore quel code vous utilisez mais voici un exemple qui fonctionne avec un serveur Web en fonction 24/24 sur le même réseau.
Pour facilité le code je n'envoie pas les données sur un serveur mais sur la console série, le principe restant le même.
Louis.D
ven, 09/30/2022 - 12:05
Une autre solution est de stocker les valeurs dans une SD CARD et de pratiquer le transfert toute les 24 heures par exemple
jgranie
ven, 09/30/2022 - 13:53
Merci pour votre réponse,
Côté soft je passe effectivement en deep-sleep, et je sauvegarde les données de la connection wifi dans la mémoire RTC user pour avoir la connection la plus rapide possible sans scan du network (et donc limiter le temps où le wifi est actif).
Je me suis basé sur cette page : https://www.bakke.online/index.php/2017/06/24/esp8266-wifi-power-reducti...
Niveau soft je pense être à peu près allé au bout de ce que je peux gagner (ormis quelques optimisations anecdotiques), c'est plutôt du côté du circuit que je pense qu'il y a moyen d'améliorer et notamment cette histoire de batterie que je n'utilise que dans la moitié de sa plage de fonctionnement.
J'utilise un MCP1700-3302 pour réguler la tension à 3.3V avec un condensateur et une plaquette TP4056 pour manager la batterie.
Walter
ven, 09/30/2022 - 14:14
Difficile de te conseiller, on ne sait pas pourquoi et comment tu t’arrête d'utiliser ton projet en dessous de 3.5V
Si tu peux l'utiliser jusqu’à 3.1V, pourquoi ne le fait tu pas?
En fait je ne comprends pas ta demande.
Louis.D
ven, 09/30/2022 - 18:24
Les abaisseurs de tension consomment de l'énergie ! Les régulateurs c'est pire encore !!
jgranie
sam, 10/01/2022 - 09:54
Pardon, c'était pas clair :s Quand je parlais des 3.5V, c'était la tension de batterie hors charge quand mon capteur s'arrête de me retourner des valeurs je débranche la batterie et je la mesure, j'obtiens 3.5. je n'avais pas besoin de le préciser ça ne présente aucun intérêt.
Si je mesure la tension dans mon circuit au moment où le capteur commence à retourner nan j'obtiens 3.1V.
Je me dis que je pourrais descendre jusqu'aux 2.75V (dans le circuit) limite de la batterie si j'avais un moyen de booster la tension à 3.3V et donc augmenter significativement la durée de fonctionnement sur une charge.
Mais mon raisonnement est peut-être (probablement) trop simpliste, je suis un grand débutant :)
Mais j'interprète peut-être mal mes mesures.
jgranie
sam, 10/01/2022 - 09:59
Je précise que j'ai entre 40 et 50j. d'autonomie avec une batterie de 3500mAh et un réveil toutes les 10 minutes pour envoyer la mesure par mqtt.
Louis.D
ven, 09/30/2022 - 18:26
jgranie je serais curieux de voir ton code si tu le veux bien, évidement ! Car je ne pense pas que les pins OUTPUT et INPUT fonctionnent en deepsleep ! Mais je me trompe peut être !
jgranie
sam, 10/01/2022 - 09:56
Pas de souci bien sûr, je peux le mettre directement dans un post ?
hercule124
ven, 09/30/2022 - 21:40
Bonjour;
tu peux mettre en série avec la batterie une diode, avec sa tension de seuil .
pas besoin de régulateur . exemple 1N400x tension de seuil 0.6v 0.7 v (4.2v a 3.5v) et de plus ça te protège d'une éventuelle inversion de polarité.
Louis.D
sam, 10/01/2022 - 05:52
La consommation reste la même !
hercule124
sam, 10/01/2022 - 09:11
bonjour,
wiki Etude de la consommation sur un ESP8266 D1Mini
Consommation en régime établi :
Il est préférable de définir toutes les sorties à OUTPUT HIGH ou INPUT.
jgranie
sam, 10/01/2022 - 10:02
Ah oui merci pour l'info je n'avais pas pensé qu'il pouvait y avoir des différences.
Louis.D
dim, 10/02/2022 - 07:08
J'attend avec impatience ton code et merci pour ton accord !
jgranie
dim, 10/02/2022 - 11:32
Je l'ai mis en fichier attaché
Louis.D
lun, 10/03/2022 - 09:18
Merci pour le code. J'ai jeté un œil rapide sur celui-ci qui me parait bien compliqué avec des commandes dont je ne vois pas l'utilité mais, je n'ai certainement pas tout compris, encore merci !
Par contre le plus simple pour augmenter l'autonomie de ton montage c'est peut-être de multiplier les batteries 18650 en parallèles (les pôles '+' reliés ensemble ainsi que les pôles '--' mais séparément ) ! Attention pas en série (ne pas les mettre les unes à la suite des autres ) !
jgranie
lun, 10/03/2022 - 09:35
Oui, c'est un code qui "vit" depuis quelques années et que je modiife à la va-vite quand j'ai un peu de temps il est tout sauf propre. Je vais essayer de le rendre un peu plus clair et je le posterai à nouveau.
En attendant je détaille un peu l'algo :
extinction du wifi pour économiser un peu de batterie
Si le bouton pin D5 est enfoncé
Démarrage wifi manager (serveur web pour avoir les credentials du wifi) // retourne quand connexion OK
Sauvegarde des infos de connexion dans la mémoire RTC
Entrée en sleep mode // fin
Fin si
Si lecture settings wifi OK // depuis la mémoire RTC, vérif. checksum
Si connection wifi OK // avec settings mémoire RTC, sans scan du réseau
Sauvegarde des infos de connexion dans la mémoire RTC
Envoi des infos temp/humidité/batterie via mqtt
Fin si
Sinon
démarrage wifi manager (serveur web pour avoir les credentials du wifi)
Fin si
entrée en sleep mode // fin
La partie wifi manager est accessoire
Louis.D
lun, 10/03/2022 - 15:19
J'ai pensé à une autre solution que la Wemos tout du moins pour l'acquisition des valeurs avec un attiny85 qui consomme moins qu'une Wemos. Pour le transfert des datas un ESP8266-01 alimenté par un Mosfet lui même piloté par l'Attiny et ce uniquement lors de transfert de data. Les attiny85 sont très peu exigeant en énergie, 1.2 mA à 1Mhz, alimenté entre 5.5 v et 2.7 v.
Transfert des datas par liaison série sur l'ESP après avoir reçu l'acqui de la wifi puis retour à 0 de l'alimentation de ce module wifi.
Et un code beacoup plus light !
jgranie
jeu, 10/06/2022 - 22:31
Merci pour cette idée, si je comprends bien et après avoir regardé un peu l'attiny que je ne connaissais pas, si j'ai bien compris c'est lui qui assurerait le deep-sleep et l'esp-01 n'est pas alimenté du tout pendant l'inactivité ?
Je vais me pencher là dessus plus en détail.
Louis.D
ven, 10/07/2022 - 14:15
C'est tout à fait cela et du coup la plus grosse consommation de courant se fait uniquement pour les transferts de Datas. Par contre L’ATTINY85-20SH n’a que 1024 octets de RAM donc tu devras faire des transferts environ toutes les 8 heures. Mais tu peux encore gagner du temps en ne stockant de nouvelles valeurs, que s’il y a eu changement depuis la dernière prise de température et hygrométrie. Ce qui devrait être assez courant le long dans une journée. Tu peux aussi opter pour une première prise de température et d'hygrométrie, puis uniquement la différence pour chacun des deux paramètres ce qui te fait passer à 12 heures entre deux transferts de Datas.
Pour programmer les attiny 85 j'ai fait un tuto ici : Utiliser un programmateur SparkFun Tiny AVR pour Attiny85/45/25
Louis.D
ven, 10/07/2022 - 17:29
Encodage avec économie de mémoire :
En utilisant des mots de 16 bits. Si tu utilises les premiers 6 bits (0 à 64) pour d’hygrométrie de 0 à 100 % en incrémentant par 2% puis les 10 bits (0 à1023) suivants pour la température. Si tu admets d’avoir une précision à 0.1 degrés cela soit 10 valeurs par degrés entiers, 1023 te donne une fourchette de 102 valeurs soit -40° à 62,3°. Je sais que la planète se réchauffe mais -40° en France c’est rare et + 62,3° c’est du jamais vu et ce n'est pas pour demain !
Donc si on laisse 324 octets pour des calcul il en reste 720 / 2 = 360 emplacements de stockage.
360 fois 2 minutes = 720 minutes qui divisées par 60 minutes dans l’heure = 12 heures ! Donc sans problème pour faire 2 transferts de Datas par jour avec une bonne marge de sécurité ! Tu peux utiliser 24 octets de plus pour donner les heures pleines entre chaque heure de relevé. Donc il te reste 300 octets de mémoire pour les calculs, je pense que cela devrait suffire.
Encodage hygrométrie : de 2 en 2%
Pour 0 ( 0B00 0000 en binaire) = 0 x 2 = 0 %
Pour 25 ( 0B01 1001 en binaire) = 25 x 2 = 50 %
Pour 26 ( 0B01 1010 en binaire) = 26 x 2 = 52 %
Pour 50 ( 0B11 0010 en binaire ) = 50 x 2 = 100 %
Encodage Température :
Pour 0 ( 0B00 0000 0000 en binaire) = 0 - 400 = - 400 / 10 = - 40.0°C
Pour 125 ( 0B00 0111 1101 en binaire) = 125 - 400 = - 375 / 10 = - 37.5°C
Pour 400 ( 0B01 1001 0000 en binaire) = 400 - 400 = 0 / 10 = 0.0°C
Pour 625 ( 0B10 1011 0001en binaire) = 625 - 400 = 225 / 10 = 22.5°C
Pour 1023 ( 0B11 1111 1111 en binaire ) = 1023 - 400 = 623 / 10 = 62.3°C.
Si tu ne piges pas tout dis moi le je t’expliquerai plus en détail.
jgranie
sam, 10/08/2022 - 10:00
Oui je vois l'idée, par contre avec une recherche rapide l'attiny85 et l'esp8266-01 sont tous les 2 plus chers que le d1 mini, du coup ça double le prix de la partie "intelligente". D'un autre côté je peux économiser sur la batterie en prenant une capacité plus faible, je vais calculer ça.
EDIT : Il reste la question de la tension du capteur et de l'esp-01, si je remplace le LDO 3302 par un module buck boost 3.3V, ça peut marcher ? (j'en ai trouvé à un prix raisonnable mais je ne trouve pas de datasheet)
EDIT2 (désolé) : J'ai trouvé des attiny85 a un meilleur prix, donc c'est bon, et l'idée d'optimiser l'envoi des données me plaît bien :)
Louis.D
lun, 10/10/2022 - 06:38
Oui le buck boost 3.3V convient très bien pour cette application !
jgranie
mer, 10/12/2022 - 08:34
Bon, j'attends la livraison et il faudra que je me familiarise avec l'attiny85. Dans l'ensemble je pense que la résolution de mon problème est bien avancée, merci à tous :)
(je vous tiendrai au courant de l'avancée)
Louis.D
lun, 10/17/2022 - 14:52
attention je me suis fait avoir sur un site il donnait 1024 octets de RAM hors il semble qu'il y en ai que 512 ! Donsc tu seras obligé de faire plus de transferts ! Désolé !
jgranie
ven, 10/14/2022 - 09:19
C'est pas un souci, même en divisant par 2 le gain d'autonomie sera assez énorme, en fait j'avais même hésité à prendre un attiny45 qui était un peu moins cher. Et puis ça me fait un nouveau truc à découvrir :)