Dois-je arroser ma plante chérie ?

Partagez ici vos guides et explications

Dois-je arroser ma plante chérie ?

Messagepar Cen » 13 Déc 2018 20:16

Plante1a.jpg
Plante1a.jpg (35.39 Kio) Consulté 10462 fois



Introduction
Ce montage permet de surveiller l’humidité de la terre de votre plante préférée, en permanence. Le micro-processeur se réveille quelques secondes par heure, il lit la valeur du capteur d’humidité et l’envoie sur la box eedomus. Le reste du temps, il « dort », pour ne pas consommer d’énergie. Il est alimenté par une batterie qui assure plus d’une année d’autonomie, avec une seule recharge.
Il y a bien sûr le module Koubachi ou le Parrot Flower, mais bon, ce montage, certes un peu plus rudimentaire, revient à environ 5€ !

Module1.jpg
Module1.jpg (135.5 Kio) Consulté 10462 fois




Cette solution se base sur le matériel suivant
• Un module « NodeMCU ESP8266 », acheté sur Wish pour 3€
• Une sonde « Capacitive Soil Moisture Sensor v1.2 », achetée sur AliExpress, pour environ 1$
• Une batterie 9800mAh 3.7V 18650 Lithium ion batteries Rechargeable, AliExpress, pour environ 1.5$ (5.97$ pour 4 pièces)
• Un socle pour la batterie, AliExpress, 0.57$
• Et un petit boitier plastique

Module2.jpg
Module2.jpg (132.02 Kio) Consulté 10462 fois


Le NodeMCU ESP8266
Pour mettre en route l’environnement de développement pour le NodeMCU ESP8266, je me suis basé sur les mini tutos que vous trouverez à cette adresse :
https://easycoding.tn/index.php/nodemcu/

La mise en œuvre est simple et rapide : en moins d’une heure, je pouvais déjà actionner la led interne du NodeMCU, et une heure plus tard, je pouvais faire la même chose, mais par Wifi. Bref, c’est un module assez impressionnant.


La sonde « Capacitive Soil Moisture Sensor v1.2 »
Sonde.jpg
Sonde.jpg (31.1 Kio) Consulté 10462 fois

Il existe plusieurs types de sondes, mais il est important de bien acheter ce modèle, selon les tests effectués par Andreas Spiess (voir la référence ci-dessous)
Spécifications
• Operating Voltage: 3.3 ~ 5.5 VDC
• Output Voltage: 0 ~ 3.0VDC
• Operating Current: 5mA
Cette sonde est connectée par 3 pins sur le NodeMCU : Ground, VCC et A0, A0 délivrant une tension proportionnelle à l’humidité mesurée.
Important : Si le NodeMCU peut bien être mis en « deep sleep », et ne consommer que peu dans ce mode, il faut trouver une solution pour que la sonde soit aussi coupée entre les mesures. Pour cela, voici ma solution un peu, je l’admets, osée, mais ça fonctionne si bien : afin de couper l’alimentation du module de la sonde, je l’alimente directement depuis un GPIO !
Au niveau du courant : selon les spécifications, la sonde consomme 5mA. Le NodeMCU ESP8266 est capable de délivrer 12mA par GPIO. Donc, c’est OK !
Au niveau de la tension : Le NodeMCU délivre environ 2.8V, ce qui est au-dessous des 3.3V demandé par la sonde. Cette sonde fonctionne avec un circuit TL555C. Les spécifications de ce circuit indiquent un VCC minimum de 2V. Donc, avec nos 2.8V, on est couvert ! Mais attention, il faut calibrer correctement, car évidemment les tensions min/max produites par la sonde sur la pin A0 sont différentes si la sonde est alimentée en 5V ou en 2.8V.

Calibration : Les mesures donne, complètement à sec et dans un verre d’eau :
5V
• Au sec: 845mV
• Dans l’eau: 415mV
2.8V
• Au sec: 560mV
• Dans l’eau: 260mV

Le programme calcule simplement une valeur de 0 à 10, 0 étant sec et 10 étant « dans l’eau ». La variable « Humidité » contient donc 0 à 10. La formule est la suivante :
Humidité =Round( (TensionMaxSec - ValeurLue) * 10/TensionMinHumide)


Le deep-sleep
Le NodeMCU, en mode deep-sleep, peut être réveillé pour un événement externe ou un timer interne qui continue à fonctionner pendant le deep-sleep. Pour utiliser ce timer, il faut connecter la pin D0 (GPIO16) sur la pin RST.


Le programme
Le programme fonctionne ainsi
• Se réveille toutes les heures par le timer interne
• Se connecte sur le WiFi
• Prends 10 mesures, toutes les 30ms
• Calcule la valeur moyenne avec ces 10 échantillons
• Envoie l’information à la box eedomus
• S’endort (deep-sleep), en coupant l’alimentation de la sonde, pour une heure

Code : Tout sélectionner
/*
[Description]
Pilot the Humidity sensor "Moisture Sensor V1.2
Sleep on hour, then wake up, send the info to the eedomus

[Version] Version 1.0 - CEN, December 2018

[IP] 192.168.0.50

[Last update] 10.12.2018

*/


//Definition of the pins
#define Pin_Analog A0
#define Power      12                   //GPIO12 =D6 Power for the probe module

//Si alimenté par USB
//#define TensionMaxSec    845.0
//#define TensionMinHumide 415.0

//Si alimenté par GPIO12
#define TensionMaxSec    560.0
#define TensionMinHumide 260.0

#include "MyCredentials.h"
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>


//For debug purpose, compiler commands
#define DEBUG                //Comment this line to remove all debug lines
#ifdef  DEBUG
#define DEBUG_PRINT(x)   Serial.print(x)
#define DEBUG_PRINTLN(x) Serial.println(x)
#else
#define DEBUG_PRINT(x)
#define DEBUG_PRINTLN(x)
#endif

//Update "MyCredendials or specify here
//const char* ssid = "XXXX";              //WiFi ID
//const char* password = "XXXX";          //WiFi PWD


//Static IP, Gateway, Subnet and Hostname
IPAddress staticIP (192,168,0,50);
IPAddress gateway (192,168,0,1);
IPAddress subnet(255,255,255,0);
const char* Chostname = "ThierryPlant1";


//Variables
HTTPClient http;               //Declare an object of class HTTPCLient
int httpCode;
int WiFiConnectionCount = 0;   //Number of reconnection to the WiFi network
float ProbeValue;
int Humidity;
String s;                      //Contain http answer




//eedomus information
//On eedomus, create "Etat": Nom=HumidityPlant, Usage Autre capteur, Pièce Séjour, Unité=Humidité, Type de donnée=Nombre décimal
//Dans paramètres experts de cet "Etat", récupérer le code API (7 chiffres-AAAAAAA)
//Récupérer l'adresse IP de la box eedomus (XXX.XXX.XXX.XXX)
//L'authentification sur eedomus se fait avec un api_user et un api_secret, à récupérer depuis "Mon compte" du portail eedomus.
//L'api_user (6 caractères-BBBBBB) et l'API secret (16 caractères-CCCCCCCCCCCCCCCC)
//La valeur a envoyé se trouve dane le paramètre "Value="-ZZ
//==>http://XXX.XXX.XXX.XXX/api/set?action=periph.value&periph_id=AAAAAAA&value=ZZ"&api_user=BBBBBB&api_secret=CCCCCCCCCCCCCCCC;

//Update "MyCredendials or specify here
//const char* eedomusH= "http://XXX.XXX.XXX.XXX/api/set?action=periph.value&periph_id=AAAAAAA&value=";
//const char* eedomusF= "&api_user=BBBBBB&api_secret=CCCCCCCCCCCCCCCC";


void setup() {
 
  pinMode(Power,OUTPUT);              //Power on the probe module
  digitalWrite(Power,1);
   
  Serial.begin(115200); delay(10);    //Debug serial line

  //Connect to Wi-Fi network with SSID and password
  Serial.print("Connecting to ");Serial.print(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }

  delay(500);                         //Wait 500ms to be sure that the probe module is ready before we read value
}


void loop() {
  //////////////////////////////////////////////////
  //Pull the Humidity probe, take 10 sample every 50ms and calculate the average
  //////////////////////////////////////////////////
  ProbeValue=0;
  for(int i=0;i<10;i++)  {                                             //Take 10 samples
    ProbeValue=ProbeValue+analogRead(Pin_Analog);
    delay(50);
  }

  ProbeValue=ProbeValue/10;                                            //Take the average
  DEBUG_PRINT("Value read from the probe: ");DEBUG_PRINTLN(ProbeValue);

  Humidity=round((TensionMaxSec-ProbeValue)*(10.0/TensionMinHumide));  //Round it to a scale 0 to 10
  if (Humidity<0)  Humidity= 0;
  if (Humidity>10) Humidity=10;
  DEBUG_PRINT("Humidity, Scale 0 to 10: ");DEBUG_PRINTLN(Humidity);

  //////////////////////////////////////////////////
  //Send the information to the eedomus box
  //////////////////////////////////////////////////
  s=eedomusH + String(Humidity)  + eedomusF;                           //s contains the http string to be sent
  http.begin(s);         
  httpCode = http.GET();                                               //Send
  http.end();                                                          //Close connection
  DEBUG_PRINT("s= ");DEBUG_PRINTLN(s);

  //////////////////////////////////////////////////
  //Deep sleep for 1h
  //////////////////////////////////////////////////
  digitalWrite(Power,0);                                 //Stop power on the module. This is probably not needed
  //ESP.deepSleep(20000000,WAKE_RF_DEFAULT);             //Sleep for 20sec for debug purpose
  ESP.deepSleep(3690000000+145*1000000,WAKE_RF_DEFAULT); //Deep sleep for 1h (3600000000). To be more or less at 1h, I have added 145
 
  delay(1000);
  DEBUG_PRINTLN("If you read this, Deep sleep doesn't work");
}




Le schéma électronique
Schéma.jpg
Schéma.jpg (58.9 Kio) Consulté 10462 fois


La configuration eedomus
• Création d'un état virtuel
o Nom: HumidityPlant1
o Usage : Autre capteur
o Pièce: Séjour
o Unité : Humidité
o Type de donnée : Nombre décimal
• Dans paramètres experts de cet "Etat", récupérer le code API (7 chiffres-AAAAAAA)
• Récupérer l'adresse IP de la box eedomus (XXX.XXX.XXX.XXX)
• L'authentification sur eedomus se fait avec un api_user et un api_secret, à récupérer depuis "Mon compte" du portail eedomus.
• L'api_user (6 caractères-BBBBBB) et l'API secret (16 caractères-CCCCCCCCCCCCCCCC)
• La valeur a envoyer se trouve dans le paramètre "Value="-ZZ
• ==>http://XXX.XXX.XXX.XXX/api/set?action=periph.value&periph_id=AAAAAAA&value=ZZ"&api_user=BBBBBB&api_secret=CCCCCCCCCCCCCCCC;
• Choisir une bonne icone pour cet état

Icone.png
Icone.png (19.85 Kio) Consulté 10462 fois


Le boitier
Simplement dans une petite boite plastique que je laisse pendre derrière le pot



Références
• Le choix de la bonne sonde par l’excellent Andreas Spiess : https://www.youtube.com/watch?v=udmJyncDvw0
• Le mode « Deep sleep », par l’excellent toujours Andreas Spiess : https://www.youtube.com/watch?v=6SdyImetbp8
• Spécifications de la sonde : https://www.dfrobot.com/wiki/index.php/ ... KU:SEN0193
Cen
 
Messages : 53
Inscription : 14 Oct 2015

Re: Dois-je arroser ma plante chérie ?

Messagepar merguez07 » 13 Déc 2018 21:18

Ça c'est du Diy comme je l'aime. :D

Merci pour le partage
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: Dois-je arroser ma plante chérie ?

Messagepar stef31 » 14 Déc 2018 06:04

Superbe projet et très bien exposé.
EEDOMUS V2 - RFX avec RTS
En attente de l'EEDOMUS V4
stef31
 
Messages : 2947
Inscription : 20 Août 2013
Localisation : 31

Re: Dois-je arroser ma plante chérie ?

Messagepar KikiFUNstyle » 14 Déc 2018 10:35

Sympa le module DIY :o
ZWave / RFXCom / broadlink RM /Google Mini / Yeelight / Xiaomi Vacuum V1 / Shelly <3 / Node-RED <3 <3
[Store] Shelly
KikiFUNstyle
 
Messages : 908
Inscription : 24 Avr 2014
Localisation : Toulouse

Re: Dois-je arroser ma plante chérie ?

Messagepar 58230 » 15 Déc 2018 19:22

J'adore ;)
58230
 
Messages : 295
Inscription : 09 Mars 2015
Localisation : 58230 Saint Brisson

Re: Dois-je arroser ma plante chérie ?

Messagepar Hervé » 15 Déc 2018 21:37

Belle réalisation ! Merci pour le partage.
Hervé
 
Messages : 41
Inscription : 28 Août 2012

Re: Dois-je arroser ma plante chérie ?

Messagepar anne-marie » 17 Déc 2018 08:05

Super! En effet, entre le koubachi hors de prix (arrêté il me semble) et le parrot flower qui est en bluetooth, il ne reste plus que la sonde imagintronix dont la portée est limitée.
Bref, ça me plait bien car j'ai beaucoup de plantes à surveiller et aussi un lombricomposteur.
Merci pour le partage :P
Netatmo - Nabaztag2 - Karotz - Mirror - caméras IP - Zwave - RFXCOM - zigate - ecodevice - Enocean - orvibo - connexoon- google Home - Echo - yeelight etc....
anne-marie
 
Messages : 2456
Inscription : 19 Fév 2014
Localisation : 77


Retour vers Tutoriels

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)