owned this note
owned this note
Published
Linked with GitHub
---
tags: Arduino
---
Projet Arduino : Plante intelligente :leaves:
====
Il nous arrive parfois d'oublier d'arroser nos plantes d'intérieur au bon moment ou à l’inverse de trop les arroser! Ce n’est pas donné à tout le monde d’avoir le pouce vert d’autant plus que chaque plante a ses propres petites caprices en matière d’arrosage.
Pour ne pas que nos plantes s'affaissent ou jaunissent dans leur petit coin, pourquoi ne pas fabriquer un système qui émettrait un signal lorsque le terreau est suffisamment sec et qu’il est temps d’arroser?
Comment s'y prendre? Très simple! Il s'agit de brancher un capteur d'humidité du sol à un microcontrôleur, par exemple Arduino.
Et ce n'est qu'un début! Le projet pourrait s’inspirer un peu plus du concept de jardin intelligent (smart garden) par la mise en place d’un système d’arrosage automatique suivant le signal émis par ce fameux capteur.
## Liste des composantes
- 1 Arduino Uno ou équivalent
- 1 Capteur d’humidité Soil Moisture
- 2 DEL de couleurs différentes
- 2 Résistances 220 Ω
- 1 Breadboard
- Quelques fils
## Fonctionnement
Le capteur d'humidité du sol effectue ses mesures en fonction des modifications de la conductivité électrique de la terre (la résistance du sol augmente avec la sécheresse).
Des lumières DEL s'activeront pour nous avertir à quel moment il faudra arroser la plante.
:::warning
**À NOTER**
Il existe dans le marché une multitude de capteurs pour mesurer l'humidité du sol. Certains, en contact de l'eau, se détériorent très vite, devenant alors inutilisables et [pouvant présenter un risque pour la plante](http://kstobbe.dk/2019/01/13/effectively-killing-a-plant/).
[La vidéo suivante](https://www.youtube.com/watch?v=udmJyncDvw0) présente un comparatif de différents capteurs.
Notre choix se porte sur le capteur [Capacitive Soil Moisture Sensor V 2.0](https://fr.aliexpress.com/item/32832538686.html?spm=a2g0s.9042311.0.0.41a86c37TOYxzS), coutant environ 2$. Afin de mieux le protéger contre la corrosion dû au contact prolongé avec l'eau, on applique une fine couche de vernis uniquement sur les bords. Une fois séché, le vernis va prévenir la détérioration du capteur.
:::
## Les étapes
### Étape 1 : Connecter le capteur d'humidité

Le schéma a été fait avec [Fritzing](https://fritzing.org/), un logiciel libre pour la conception des circuits électroniques.
Dans la version actuelle du logiciel, le capteur qu'on utilise n'est pas encore répertorié, d'où l'image d'un autre capteur d'humidité du sol, celui de Sparkfun.
Le capteur possède trois pins :
- **VCC** se connecte à la pin **5V**.
- **GND** se connecte dans le **GND** de l'Arduino.
- **AUOT** se connecte dans la pin **A0**, ceci va nous permettre de lire les valeurs.
### Étape 2 : Tester le capteur
Maintenant que le capteur est connecté, on branche l'Arduino à l'ordinateur et on lance le logiciel Arduino IDE. Si vous ne l'avez pas encore installé, consultez ce guide de démarrage. C'est aussi une bonne idée d'ouvrir [la page référence](https://www.arduino.cc/reference/en/).
On va lire les valeurs renvoyées par le capteur. Pour cela, on aura besoin d'un verre rempli à moitié d'eau afin d’y plonger le bout du capteur.
:::warning
Notre capteur est **analogique**, c’est-à-dire qu'il va nous donner des valeurs en voltage de **0** à **1023**.
:::
```java=
int valeurCapteur; // on crée une variable pour stocker les valeurs
void setup() {
Serial.begin(9600); // initialise la communication en série à 9600bits/s
}
void loop() {
ValeurCapteur = analogRead(A0);
Serial.println(valeurCapteur);
delay(500);
}
```
Après le téléversement du code, aller dans **Outils > Moniteur série**. Vous allez voir des valeurs. Si vous mettez le capteur dans le verre d'eau, celui-ci réagit et les valeurs seront à la baisse.
### Étape 3 : Les valeurs du capteur
On va faire réagir la **DEL 13** en donnant une condition et une valeur à Arduino: La **DEL 13** doit s'allumer si la valeur descend au-dessous de **500**.
La **DEL 13** est déjà intégrée à la carte Arduino. Elle est encerclée en vert dans le schéma ci-contre.

```java=
int valeurCapteur;
int limite = 500; // valeur sous laquelle la LED s’allumera
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT); // la connexion 13 doit pouvoir envoyer du courant
}
void loop() {
valeurCapteur = analogRead(A0);
Serial.println(valeurCapteur);
delay(500);
if (valeurCapteur>limite) {
digitalWrite(13,LOW); // ne pas envoyer du courant dans la connexion 13, la plante a soif
}
else {
DigitalWrite(13,HIGH); // envoyer du courant dans la connexion 13, la plante n'as plus soif
}
}
```
Si on retire ou on remet le capteur dans le verre d'eau, on va voir la DEL réagir! N'hésitez pas à surveiller les valeurs via le moniteur série.
En présence d’eau, le capteur affiche 247 et en son absence, 592. Il est fort probable que vous ayez des valeurs différentes. On utilise la fonction **map()** pour retranscrire ces valeurs en pourcentage.
```java
valeurSenseur = map(valeurSenseur,592,247,0,100);
```
> Pour en savoir plus sur la fonction map(), consultez [la page référence Arduino](https://www.arduino.cc/reference/en/language/functions/math/map/).
### Étape 4 : Branchement des DELs
Connectons les DELs pour avoir une indication en rouge lorsque la plante a soif et en vert lorsqu’elle est suffisamment hydratée. Voici le nouveau schéma :

### Étape 5 : Téléverser le code
```java=
int pinSenseur = A0;
int valeurSenseur;
int limite = 50;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
}
void loop() {
valeurSenseur = analogRead(pinSenseur);
valeurSenseur = map(valeurSenseur,592,247,0,100);
delay(500);
Serial.println(valeurSenseur);
if (valeurSenseur<limite) {
digitalWrite(13,LOW);
digitalWrite(12,HIGH);
}
else {
digitalWrite(13,HIGH);
digitalWrite(12,LOW);
}
}
```
## Photos du projet
## Pour aller plus loin
Le projet peut être amélioré de plusieurs façons :
- Une DEL : utiliser une seule DEL vert/rouge au lieu de deux DEL.
- Écran LCD : connecter un écran pour afficher l'état, afficher les données relatives à l'humidité en remappant les valeurs en pourcentage ou tout simplement afficher du texte comme "j'ai soif!".
- Internet des objets : utiliser un autre microcontrôleur, comme l'ESP8266, afin d'envoyer les données à distance et de connaitre l'état du sol en temps réel.
- Pompe à eau : contrôler l'arrosage automatiquement, suivant le niveau d'humidité.
## Voir aussi
- [Arduino - Anatomie](/EEtH-yz_T9aWPqtH4tUb0Q)
- [Microcontrôleur Arduino - Guide de démarrage](/tlmWPwNtQ8KZr3TRoMYgzg)
## Liens externes
{%hackmd CSR0XzV2TmKq2VKb93NnFw %}