- Dû passer à une mesure toutes les 3 minutes afin d'économiser l'utilisation du quota du GSM - Dû passer à 60 secondes la connection à socat aussi à cause du quota GSM - Dû passer à python 2.7 dans luatool.py à cause que mon mac n'a plus de lien symbolique sur python2
Mesure de hauteur d'eau dans un réservoir
zf200627.1330
Table of Contents
Buts
Petit projet pour mesurer la hauteur d'eau dans un réservoir de 100l au moyen d'un senseur à ultrason utilisé pour de la robotique récréative.
Le but est de mesurer la distance entre le haut du bidon et la surface de l'eau dans le bidon et ainsi pouvoir en déduire le pourcentage de remplissage du bidon.
Senseur à ultrason, très bon marché, permettant de mesurer la distance
NodeMCU autonome, alimenté ici par une batterie, faisant la lecture de la hauteur d'eau et envoyant le résultat dans une DB InfluxDB via le WIFI
Banc test dans le jardin pour vérifier le bon fonctionnement du système
Graphique obtenu lors du banc test avec de l'eau dans le jardin
On peut voir ici, avec ce projet assez complet, toutes les possibilités offertes de la programmation des NodeMCU en LUA, en mode événementiel.
Choses qui ne seraient pas possible si on l'avait fait en C++ (mode Arduino), comme par exemple:
- crontab, horloge pour les mesures
- envoi des données sur la DB InfluxDB
- serveur reverse TELNET, traversant tous les routers sans devoir en modifier la configuration, permettant d'accéder à la console série (USB) du NodeMCU
Toutes les fonctions sont bien séparées dans des scripts, cela complexifie le projet mais ce qui facilite la portabilité entre les projets et aussi sa mise au point.
Astuces de mesures de la distance au moyen du senseur ultrason
Dans ce projet il y a 1x NodeMCU qui mesure la hauteur d'eau dans le bidon au moyen d'un senseur à ultrason utilisé pour de la robotique récréative très bon marché, 0.70FS
https://www.aliexpress.com/item/32477198302.html
https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf
Il n'y a pas de module NodeMCU pour ce senseur, mais son utilisation en Lua est vraiment très simple, il suffit juste d'envoyer une pulse de 10uS sur la pin trig et de connecter une interruption du NodeMCU sur la pin echo.
Après une simple règle de trois en relation avec la vitesse du son dans l'air et on a la distance en cm.
Schéma
Le schéma est vraiment très simple !
Astuces
- La seul problématique dans ce projet c'est que le senseur DOIT absolument être alimenté en 5V et que le NodeMCU lui est en 3.3V.
Il faut donc lui ajouter une petite résistance, R1, d'adaptation du niveau pour le signal pour l'interruption du NodeMCU.
Installation
Il faut flasher le NodeMCU avec ce firmware:
Avec ces modules:
Utilisation
Upload Lua code
Après avoir flashé le NodeMCU avec le bon firmware il faut télécharger tous les fichiers *.lua sur le NodeMCU.
Secrets pour le projet
Mais il faut aussi bien remplir et charger sur le NodeMCU, le fichier des secrets du projet:
secrets_project.lua
ainsi que le fichier des secrets pour le WIFI
secrets_wifi.lua
Tout en sachant que les variables utilisées pour les secrets sont utiles pour:
- znode_chipid == nnn then
C'est l'id du NodeMCU que chaque NodeMCU ont gravé dans leur mémoire, on peut le lire avec cette commande:
=node.chipid()
-
node_id = "ttt"
C'est le nom de fonction du NodeMCU qui sera visible dans la DB InfluxDB -
yellow_id = nn
C'est le numéro du NodeMCU que l'on indique sur une petite étiquette jaune collée sur le NodeMCU. Ce numéro permet par la suite de connaitre très facilement le numéro du port utilisé pour le reverse telnet quand on veut accéder à la console série du NodeMCU -
-- thingspeak_url="http://api.thingspeak.com/update?api_key=kkk"
Pas utilisé dans ce projet -
influxdb_url="http://uuu:8086/write?db=ddd&u=admin&p=ppp"
Secrets utilisés pour envoyer des données sur le DB InfluxDB -
console_host = "uuu" console_port = 23000+yellow_id
Serveur utilisé pour le tremplin du reverse telnet utilisé pour accéder à la console série du NodeMCU au moyen d'un socat. L'information d'utilisation se trouve dans le fichier 0_tst5_socat.lua -
-- zdyndns_host = "hhh" zdyndns_port = nnn
Pas utilisé dans ce projet
Rename initz.lua pour le boot automatique
Ne pas oublier après avoir vérifié que tout fonctionne bien de renommer le fichier initz.lua en init.lua afin que quand le NodeMCU puisse démarrer automatiquement le code et bien fonctionner de manière autonome.
Utilisation de la console du NodeMCU en remote
Très pratique pour le debug, on peut directement modifier le code source Lua du NodeMCU en remote via un reverse telnet. Plus d'info dans le fichier 0_tst5_socat.lua. On peut aussi modifier le code Lua du NodeMCU en remote avec l'utilitaire luatools.py
Visualisation sur Grafana/InfluxDB
Graphique obtenu lors du banc test avec de l'eau dans le jardin
La totale en détail
https://github.com/zuzu59/docker-influxdb-grafana
pense bête:
file.open("hello.lua","w+")
file.writeline([[print("hello nodemcu")]])
file.writeline([[print(node.heap())]])
file.close()
