HerbBox 2.0

image 20210507HerBox122302BLUE800pxsq.jpg (0.4MB)
HerbBox est un système automatique permettant de contrôler la temperature et l'humidité de 3 plantes.

Ce système utilise deux microcontrolleurs discutant ensemble, un Arduino Nano et un NodeMCU v3. (Cela est dû au fait que nous les avions en stock, cette solution était donc plus pratique pour nous que d'acheter un microcontrolleur plus gros).

Cette documentation est une traduction de celle disponible avec le code source du projet, elle fait par ailleurs référence au code du projet à plusieurs endroits. Code disponible ICI

Contexte

Dans le cadre du projet Family Connection 2021, accompagné par le centre ressource Zoomacom, un groupe de jeunes de saint Jean Bonnefond a souhaité confectionner un jardin d'intérieur pour plantes aromatiques. Ils souhaitent qu'une carte Arduino gère le déclenchement automatique de l'arrosage et de la lumière de croissance des plantes. La première version du projet est documentée ici: HerbBox

Schematiques

Diagramme de principe

image principleDiagram.png (0.5MB)

Schéma électronique

image schematics.png (0.2MB)

Liste du matériel


Nom Description Quantité Prix Unitaire Prix
Lolin NodeMCU v3 Microcontrolleur principal 1 7€ 7€
Arduino Nano Microcontrolleur secondaire 1 5€ 5€
Arduino relay shield Carte 4 relais 1 20€ 20€
DHT11 Capteur de temperature et d'humidité 1 3€ 3€
DS18B20 Capteur de temperature 3 4€ 12€
Capacitive moisture sensor v1.2 Capteur d'humidité du sol 3 3€ 9€
SSD1306 Ecran OLED 128x64 i2c 1 2€ 2€
Bouton poussoir Pour le contrôle manuel 3 1€ 3€
Résistance 220 Ω Pour le diviseur de tension 1 0.1€ 0.1€
Résistance 430 Ω Pour le diviseur de tension 1 0.1€ 0.1€
Résistance 4.7 kΩ Pour le bus OneWire 1 0.1€ 0.1€
Pompe 12V Pompe utilisée pour arroser les plantes 3 10€ 30€
Lampe 220V pour la pousse des plantes Lampe utilisée pour illuminer les plantes (Emet uniquement dans les spectres bleu et rouge) 1 5€ 5€
Total ~96€


Note : Les prix sont des approximations de ce que vous pouvez trouver facilement en ligne, vous pouvez trouver ces composants pour un prix plus faible ou plus élevé en fonction des fournisseurs. Ils sont seulement ici pour vous donner une idée du prix du projet.

Note 2 : L'Arduino relay shield peut être remplacé par une autre carte de relais ou 4 relais séparés ce qui coutera sans doute moins cher.

NodeMCU

Paramètrage de la carte

- Ajouter la bibliothèque des cartes ESP8266 board dans Arduino IDE (http://arduino.esp8266.com/stable/package_esp8266com_index.json)
- Installer le paquet "esp8266 by ESP8266 Community" via le gestionnaire de cartes
- Utiliser la carte nommée "NodeMCU 1.0 (ESP-12E Module)" pendant l'envoi du code

Bibliothèques arduino requises

- DallasTemperature (Version installable via Arduino IDE)
- OneWire (Version installable via Arduino IDE)
- SimpleTimer (Cette version particulière est nécessaire : https://github.com/schinken/SimpleTimer)

Capteurs / Actionneurs reliés à la carte

- 3x DS18B20
- 3x Capacitive Soil Moisture Sensor v1.2
- 4x Relais

Arduino Nano

Paramètrage de la carte

- Utiliser la carte nommée "Arduino Nano" pendant l'envoi du code

Bibliothèques arduino requises

- ACROBOTIC SSD1306 (Version installable via Arduino IDE)
- Blynk (Version installable via Arduino IDE)
- DHT sensor library (Version installable via Arduino IDE)
- SimpleTimer (Cette version particulière est nécessaire : https://github.com/schinken/SimpleTimer)

Capteurs / Actionneurs reliés à la carte

- DHT11
- 3x bouton poussoir
- Écran OLED SSD1306

Blynk

Nous utilisons une application nommée Blynk pour afficher les valeurs des capteurs sur un smartphone.

Configuration de l'application

Pour connecter le NodeMCU à l'application Blynk, vous devrez générer un token dans l'application et le copier dans la constante BLYNK_TOKEN dans le fichier src/NodeMCU/constants.h . Vous devrez également connecter le NodeMCU à une connection WiFi via les constantes WIFI_SSID (Nom du WiFi) et WIFI_PASSWD (Mot de passe du WiFi).

Interface exposée

Le NodeMCU envoie les valeurs à Blynk sur les lignes virtuelles suivantes :
- V10 : Température de l'air
- V11 : Humidité de l'air
- V12 : Température du sol de la plante 1
- V13 : Humidité du sol de la plante 1
- V14 : Temperature du sol de la plante 2
- V15 : Humidité du sol de la plante 2
- V16 : Température du sol de la plante 3
- V17 : Humidité du sol de la plante 3

Il contrôle également 4 LEDs pour refleter les états des relais :
- V0 : Pompe 1
- V1 : Pompe 2
- V2 : Pompe 3
- V3 : Lampe

Exemple de configuration

Voici comment nous avons configuré Blynk. En haut, nous avons deux "Value Display" affichant les valeurs des capteurs de l'air, au milieu, nous avons six "Value Display" pour afficher les valeurs des capteurs des plantes et en bas, nous avons 4 "LED" pour afficher les états des pompes et de la lampe.

image blynk.png (0.1MB)

Contrôle manuel

Écran

L'écran OLED est utilisé pour afficher les valeurs des capteurs des trois plantes.
L'écran à 4 états différents (éteins, plante 1, plante 2 et plante 3).
Dans chaque état "plante", vous trouverez les valeurs suivantes :
  • Numéro de la plante
  • Température de l'air (Commune à toutes les plantes)
  • Humidité de l'air (Commune à toutes les plantes)
  • Temperature du sol (Spécifique à chaque plante)
  • Humidité du sol (Spécifique à chaque plante)
  • État de la pompe (Spécifique à chaque plante)
  • État de la lampe (Commune à chaque plante)

Bouttons

Le système comporte 3 boutons :
  • Bouton "capteurs" (Pin D6) : Utilisé pour changer l'état de l'écran (éteins -> plante 1 -> plante 2 -> plante 3 -> éteins -> ...)
  • Bouton "pompe" (Pin D4) : Change l'état de la pompe de la plante courante
  • Bouton "lampe" (Pin D5) : Change l'état de la lampe

Paramètres de contrôle automatique

Tout les paramètres de contrôle automatique sont stockés dans le fichier src/NodeMCU/constants.h . Cela signifie que le programme du NodeMCU doit être réuploadé quand vous voulez faire des changements dans les paramètres.

Paramètres du sol

- PLANT1_DRY_SOIL: Valeur de l'humidité du sol en dessous de laquelle le sol est considéré sec. Valeur entre 0% et 100% (Défaut : 66).
- PLANT1_WET_SOIL: Valeur de l'humidité du sol au dessus de laquelle le sol est considéré humide. Valeur entre 0% et 100% (Défaut : 85).
- PLANT1_TIME_PUMP_ON: Durée pendant laquelle la pompe sera active pour arroser la plante si le sol est sec. Valeur en ms avec un L à la fin (Défaut : 15000L).

Pour les plantes 2 et 3, utilisez les paramètres avec un 2 ou un 3 à la place du 1.

Paramètres de l'air

- COLD_TEMP: Valeur de la temperature de l'air en dessous de laquelle l'air est considéré froid. Valeur en degré Celsius (Défaut : 12).
- HOT_TEMP: Valeur de la temperature de l'air au dessus de laquelle l'air est considéré chaud. Valeur en degré Celsius (Défaut : 22).
- TIME_LAMP_ON: Durée pendant laquelle la lampe sera active pour réchauffer les plantes si la température est froide. Valeur en ms avec un L à la fin (Défaut : 15000L).

Comment le construire

La manière la plus simple de construire le système est d'ajouter les différents composants un par un jusqu'à ce que tout soit connecté. Nous allons d'abord nous concentrer sur l'Arduino Nano puis sur le NodeMCU.
Chaque partie ajoute un nouveau composant mais même si les composants déjà placés n'apparaissent pas sur le dessin, vous n'avez pas besoin de les enlever.

Arduino Nano

DS18B20s

D'abord, connectez les trois capteurs et la résistance à l'Arduino Nano comme montré sur le dessin :

image DS18B20s.png (0.3MB)

Puis testez les capteurs avec le code présent dans le dossier src/Tests/ArduinoNano/DS18B20s et regardez les valeurs affichées sur le moniteur Série (Ctrl+Shift+M).
Vous devriez avoir quelque chose comme ça :

Sensor 1: 22.1 C
Sensor 2: 22.2 C
Sensor 3: 22.1 C


Capacitive Soil Moisture Sensors

D'abord, connectez les trois capteurs à l'Arduino Nano comme montré sur le dessin :

image SoilMoistureSensors.png (0.3MB)

Puis testez les capteurs avec le code présent dans le dossier src/Tests/ArduinoNano/SoilMoistureSensors et regardez les valeurs affichées sur le moniteur Série (Ctrl+Shift+M).
Vous devriez avoir quelque chose comme ça :

Sensor 1: 65.2%
Sensor 2: 65.3%
Sensor 3: 65.3%


Relays

D'abord, connectez les quatre relais à l'Arduino Nano comme montré sur le dessin :

image Relays.png (0.4MB)

Puis testez les relais avec le code présent dans le dossier src/Tests/ArduinoNano/Relays.
Les relais vont être alimentés un par un pendant une seconde puis attendre 2 secondes avant de recommencer.


NodeMCU

DHT11

D'abord, connectez le capteur au NodeMCU comme montré sur le dessin :

image DHT11.png (0.2MB)

Puis testez le capteur avec le code présent dans le dossier src/Tests/NodeMCU/DHT11 et regardez les valeurs affichées sur le moniteur Série (Ctrl+Shift+M).
Vous devriez avoir quelque chose comme ça :

Temperature : 22.1 C
Humidity : 65.1%


Push Buttons

D'abord, connectez les trois boutons au NodeMCU comme montré sur le dessin :

image PushButtons.png (0.2MB)

Puis testez les boutons avec le code présent dans le dossier src/Tests/NodeMCU/Buttons et regardez les valeurs affichées sur le moniteur Série (Ctrl+Shift+M) en appuyant dessus.
Vous devriez avoir quelque chose comme ça (en fonction des boutons appuyés):

Lamp button : 1
Pump button : 0
Sensors button : 1


SSD1306 OLED Display

D'abord, connectez l'écran au NodeMCU comme montré sur le dessin :

image OLED.png (0.2MB)

Puis testez les boutons avec le code présent dans le dossier src/Tests/NodeMCU/OLED et du texte devrait apparaitre à l'écran pendant 5s puis un nombre se mettra à jour rapidement.

Blynk

D'abord construisez l'interface de Blynk sur l'application comme expliqué plus haut puis envoyez le code présent dans le dossier src/Tests/NodeMCU/Blynk dans le NodeMCU (n'oubliez pas de mettre a jour les paramètres WiFi et Blynk au début du code) et vous devriez obtenir des values aléatoires dans l'application.


UART

Une fois que tout fonctionne correctement, envoyez le code principal dans chaque microcontrolleur (src/ArduinoNano et src/NodeMCU (n'oubliez pas les paramètres WiFi et Blynk dans constants.h)) et connectez les ensemble comme montré sur le dessin :

image UART.png (0.3MB)

Attention : Ne connectez pas de cable USB à l'Arduino Nano, tout est alimenté par le NodeMCU !

Quelques secondes après avoir alimenté le système complet, vous devriez obtenir les valeurs de tous les capteurs sur l'écran (appuyez sur le bouton "capteurs" pour naviguer dans les menus) et le système de contrôle automatique devrait démarrer également.

Code de test

Plusieurs fichiers de code sont disponibles dans le dossier src/Tests pour tester les différentes parties du système. Pour plus d'informations, voir les instructions de construction.

Code Source

Le code du projet est disponible ici : https://github.com/MaximeChretien/HerbBox2.0

Ressources utilisées



Licence Creative Commons
Ce contenu de Zoomacom est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.
Arduino DIY Family Connection NodeMCU OpenFactory