Dans ce projet, vous allez apprendre à créer un système d’arrosage automatique d’intérieur avec le Arduino IoT Cloud. Ce système vous permet de surveiller et d’arroser vos plantes depuis n’importe où dans le monde, et c’est une excellente introduction à l’internet des objets.
J’ai inclus les instructions de montage, un guide de démarrage pour l’Arduino IoT Cloud et tout le code nécessaire. Ce projet utilise une carte Arduino MKR1000 IoT, un capteur capacitif d’humidité du sol, un capteur de température et d’humidité, un écran LCD I2C et une pompe à eau. Il est aussi possible de réaliser ce projet avec un Arduino classique (non connecté à Internet).
Notez qu’il s’agit principalement d’une preuve de concept, c’est-à-dire que construire ce système pour une seule plante est assez coûteux et n’a probablement pas beaucoup de sens. Cependant, maintenant que je sais comment tout fonctionne, je peux facilement étendre le système et ajouter plus de fonctionnalités à l’avenir.
Si vous avez des questions ou des suggestions, n’hésitez pas à laisser un commentaire ci-dessous.
Pour plus d’informations sur certains des composants utilisés dans ce projet, consultez les tutoriels ci-dessous :
Fournitures
Composants matériels
Notez que vous pouvez aussi utiliser n’importe quelle autre carte Arduino IoT avec connectivité Wi-Fi, comme la Arduino MKR WiFi 1010 ou la moins chère Arduino Nano 33 IoT. L’avantage des cartes MKR est qu’elles s’adaptent au Arduino MKR Relay Proto Shield, ce qui facilite grandement le câblage.
Pour le réservoir d’eau, vous pouvez utiliser n’importe quel récipient que vous avez sous la main (j’ai utilisé une boîte de conservation IKEA de ma cuisine).
Applications et services en ligne
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Assemblage du système
Tous les composants sont connectés à un boîtier central qui est fixé sur le couvercle du récipient IKEA.

Pour fixer le Arduino MKR Relay Proto Shield, j’ai imprimé en 3D une simple plaque d’adaptation. Un petit trou sur le côté du boîtier permet d’accéder au port micro USB du MKR1000, qui sert à alimenter le système et à programmer la carte.

Capteur d’humidité du sol
Pour ce projet, j’ai utilisé un capacitive soil moisture sensor avec une sortie analogique. Les capteurs capacitifs résistent mieux à la corrosion que les capteurs résistifs, mais ils ne sont pas 100 % étanches. Comme ils sont fabriqués à partir d’un circuit imprimé standard avec un substrat composite, l’eau peut facilement s’infiltrer par les côtés du PCB. L’électronique en haut du capteur n’est pas non plus protégée contre l’eau.
Pour rendre le capteur un peu plus étanche, j’ai recouvert les bords et l’électronique avec du vernis à ongles transparent. Un vrai revêtement conforme serait sans doute mieux, mais le vernis à ongles fonctionne assez bien comme alternative économique.

Le câble fourni avec le capteur était assez court, donc j’en ai fabriqué un nouveau. Vous pouvez aussi simplement souder des fils plus longs sur le câble d’origine.

Connexion du capteur d’humidité du sol à l’Arduino MKR1000
Le tableau ci-dessous vous indique les connexions à réaliser.
| Capteur d’humidité du sol | Arduino MKR1000 |
|---|---|
| GND | GND |
| VCC | 3.3 V |
| AOUT | A2 |
Pompe et shield relais

Pour arroser les plantes, j’ai utilisé une small submersible pump qui peut être alimentée en 3,3 V. La pompe est contrôlée par le relais 1 du Arduino MKR Relay Proto Shield. Comme la pompe consomme seulement environ 200 mA, elle peut être alimentée directement par la sortie 3,3 V du MKR1000.
Si vous souhaitez utiliser une pompe plus puissante, il faudra utiliser une alimentation externe. Assurez-vous que l’intensité de la pompe reste dans les spécifications des relais.

Le fil noir de la pompe est connecté à la masse (GND). Le fil rouge va sur la borne NO (normalement ouverte) du relais. COM est relié à la sortie 3,3 V du MKR1000. Notez que cette sortie 3,3 V est disponible sur l’un des borniers à vis du Proto Shield.
Capteur de température et d’humidité

Même si ce n’est pas indispensable pour arroser automatiquement les plantes, je trouvais qu’un capteur de température et d’humidité serait un ajout sympa au système. Pour ce projet, j’ai utilisé un AM2301A sensor qui est livré dans un boîtier avec les fils déjà connectés. Ce capteur est fabriqué par ASAIR qui fabrique aussi les très populaires capteurs DHT11 et DHT22.
Pour plus d’informations sur les capteurs de température et d’humidité DHT, consultez le tutoriel ci-dessous :
Connexion du capteur de température et d’humidité AM2301A
Le tableau ci-dessous vous indique les connexions à réaliser.
| Capteur de température et d’humidité AM2301A | Arduino MKR1000 |
|---|---|
| Noir | GND |
| Rouge | 3.3 V |
| Jaune | A1 |
J’ai fixé le capteur sur le côté du boîtier. Notez que j’ai percé un petit trou dans le boîtier et à l’arrière du capteur pour faire passer les fils.

LCD I2C
En plus de l’Arduino IoT Cloud, les données des capteurs sont aussi affichées sur l’écran LCD I2C 20×4 monté sur le couvercle du boîtier.

J’ai découpé une ouverture dans le boîtier à l’aide de my homemade CNC router, mais vous pouvez aussi utiliser une scie sauteuse ou même un cutter bien affûté.

L’écran LCD est généralement alimenté en 5 V mais il semble fonctionner correctement en 3,3 V. Grâce au module I2C monté à l’arrière de l’écran, il suffit de connecter deux fils, SDA et SCL, au MKR1000. Les connexions sont accessibles sur les borniers à vis du shield, donc le câblage de l’afficheur est très simple.
Connexions LCD I2C
| Écran LCD I2C 20×4 caractères | Arduino MKR1000 |
|---|---|
| GND | GND |
| VCC | 3.3 V |
| SDA | SDA |
| SCL | SCL |
J’ai rédigé un tutoriel détaillé sur l’utilisation des écrans LCD I2C avec Arduino, que vous pouvez retrouver ici :
Une remarque sur le câblage
Comme vous l’avez peut-être remarqué, tous les capteurs, l’écran LCD et la pompe doivent être connectés au 3,3 V et au GND. Le Arduino MKR Relay Proto Shield n’a qu’une seule sortie d’alimentation, et entasser tous les fils dans un seul bornier n’est pas une bonne idée. À la place, vous pouvez utiliser quelque chose comme Wago lever nuts comme point de distribution d’alimentation.
Le tuyau d’arrosage
Au départ, je comptais simplement placer l’extrémité du tube PVC quelque part au centre du pot. Mais j’ai constaté que cela laissait une partie du pot détrempée et le reste complètement sec.
Ma solution a été de percer une série de petits trous (1 mm) espacés d’environ 2 cm sur les 30 à 40 derniers centimètres du tube. J’ai imprimé en 3D un bouchon pour l’extrémité du tube et des supports à planter dans la terre.
Vous pouvez télécharger les fichiers STL ici si vous souhaitez imprimer les vôtres :

Cela semble bien fonctionner pour humidifier la terre de façon homogène.

Premiers pas avec l’Arduino IoT Cloud
Dans la section suivante, je vais expliquer comment débuter avec l’Arduino IoT Cloud.
La première étape consiste à aller sur https://create.arduino.cc/. Sur cette page web, vous trouverez le Web Editor, un guide de démarrage, le Device Manager et un lien vers l’Arduino IoT Cloud.

Installation du plugin Arduino Create
Il existe plusieurs façons de configurer une nouvelle carte, mais je trouve que le plus simple est de passer par la page Getting Started. Cliquez sur l’icône Getting Started et faites défiler la page jusqu’en bas, là où il est indiqué Install Arduino Create Plugin. Ce plugin vous permet de téléverser des sketches depuis l’Arduino Web Editor vers votre carte ou appareil.

Après avoir cliqué sur l’icône Arduino Create Plugin en bas de la page, cliquez sur start puis téléchargez et installez le plugin. L’assistant de configuration vérifiera si le plugin a bien été installé. Si c’est le cas, vous devriez voir la page ci-dessous.

Configuration d’une carte IoT
Retournez maintenant sur la page Getting Started en cliquant sur l’icône en haut de la page. L’étape suivante consiste à configurer une nouvelle carte IoT. Pour ce projet, j’ai utilisé l’Arduino MKR1000. Si vous ne connaissez pas le nom de votre carte, vous pouvez cliquer sur l’icône Autodetect Arduino Board.

L’assistant de configuration IoT va s’ouvrir et vous guider dans la configuration et le test de la carte.

Cliquez sur start et connectez la carte à votre ordinateur avec un câble USB. Si vous avez bien installé le plugin Arduino Create, l’ordinateur devrait détecter votre appareil.

Ensuite, donnez un nom à votre carte. J’ai simplement appelé la carte MKR1000_1. Choisissez un nom facile à reconnaître, surtout si vous utilisez plusieurs cartes pour différents projets.

Après cela, la puce crypto du MKR1000 doit être configurée, ce qui peut prendre jusqu’à 5 minutes. Chaque MKR1000 est équipée d’un Microchip ECC508 crypto chip. Cette puce sert à stocker l’identité de votre carte de façon sécurisée lorsqu’elle est liée à votre compte Arduino.

Ensuite, vous pouvez téléverser un sketch d’exemple qui vous permettra de tester le fonctionnement de la carte et d’allumer ou d’éteindre la LED embarquée via le Network Monitor. Dans l’onglet Secret du sketch, vous devez entrer le nom et le mot de passe de votre réseau wifi local.

Sur la page suivante, cliquez sur le caractère LED pour allumer ou éteindre la LED embarquée.

Si tout s’est bien passé, vous devriez voir la page ci-dessous.

Créer un nouveau Thing
Après avoir configuré un nouvel appareil IoT, vous pouvez retourner sur le tableau de bord Arduino Create et cliquer sur l’icône Arduino IoT Cloud.

En cliquant sur cette icône, la page « Your Things » de l’Arduino IoT Cloud s’ouvre. Sur cette page, vous pouvez créer de nouveaux Things, c’est ainsi qu’Arduino appelle les appareils que vous pouvez connecter à Internet. Dans notre cas, le Thing représente la carte Arduino MKR1000 avec plusieurs capteurs connectés. Chaque Thing peut avoir plusieurs propriétés comme la température, l’état d’une LED, les coordonnées GPS, etc.
Dans la version gratuite du cloud IoT, vous ne pouvez créer qu’un seul Thing avec jusqu’à cinq propriétés. Si vous en voulez plus, il faut passer à l’offre payante du cloud Arduino. Comme ce projet n’utilise qu’un seul Thing avec moins de cinq propriétés, la version gratuite suffit largement.

Cliquez sur ADD NEW THING et donnez-lui un nom. J’ai appelé le mien Automatic_indoor_garden. Sélectionnez la carte MKR1000 que nous venons de configurer dans le menu déroulant (MKR1000_1).

Vous serez alors redirigé vers une page où vous pourrez ajouter des propriétés à votre Thing.

Ajout de propriétés
Pour ce projet, j’ai ajouté trois propriétés différentes : température, humidité et taux d’humidité du sol. Les propriétés représentent des variables dans le code Arduino et sont aussi lisibles dans le Cloud. Après avoir créé les propriétés et téléversé le code, vous pourrez les voir dans le tableau de bord de votre Thing.
Ajouter des propriétés est très simple, il suffit de cliquer sur ADD PROPERTY. Notez que vous devez répéter cette opération trois fois.
Pour chaque propriété, vous devez définir les paramètres suivants :
- Nom – le nom qui sera affiché dans la liste et le widget de vos propriétés.
- Nom de la variable – le nom de la variable que vous utiliserez dans votre Sketch pour référencer cette propriété. Il ne peut pas contenir de caractères spéciaux.
- Type – sélectionnez le type de propriété approprié. Ajoutez la valeur minimale et maximale pour les mesures numériques, afin d’afficher correctement le widget.
- Permission
- Lecture & écriture : la propriété peut être définie et affichée dans le Dashboard Arduino IoT Cloud.
- Lecture seule : la propriété sera envoyée à l’Arduino IoT Cloud et sera disponible dans votre Dashboard.
- Mise à jour
- Lorsque la valeur change : la propriété sera envoyée à l’Arduino IoT Cloud chaque fois que le changement de valeur est supérieur ou égal au delta.
- Régulièrement : la propriété sera envoyée à l’Arduino IoT Cloud à chaque fois que le nombre de secondes spécifié s’est écoulé.
- Historique – Affiche une visualisation des données historiques de la propriété.
Sur l’image ci-dessous, vous pouvez voir les paramètres que j’ai utilisés pour la propriété Température. Notez que vous pouvez choisir l’un des nombreux types de propriétés intégrés comme Temperature (Celsius) ou en créer un personnalisé.

Vous trouverez les paramètres des autres propriétés dans le tableau ci-dessous
Paramètres des propriétés du Thing
| Nom | Variable Nom | Type | Permission | Mise à jour |
|---|---|---|---|---|
| Température | temperature | Temperature (Celsius) -20 °C – 60 °C | RO | Toutes les 10s |
| Humidité | humidity | Relative Humidity (Percentage) 0 RH – 100 RH | RO | Toutes les 10s |
| Taux d’humidité du sol | soilMoistureContent | Float 0 – 100 | RO | Toutes les 1s |
En sélectionnant l’option d’affichage de l’historique, vous pouvez enregistrer les valeurs de vos propriétés sur une certaine période et les sauvegarder sous forme de graphiques. Malheureusement, vous ne pouvez sauvegarder les données que pendant 1 jour dans la version gratuite de l’Arduino IoT Cloud.

Après avoir ajouté toutes les propriétés, cliquez sur EDIT SKETCH. Cela ouvrira l’Arduino Web Editor.
Créer un sketch
Après avoir cliqué sur EDIT SKETCH, vous verrez qu’un nouveau sketch a été créé automatiquement.

Notez que le sketch porte le même nom que notre Thing, suivi de la date de création. En plus de ce fichier .ino, vous verrez trois autres fichiers :
ReadMe.adoc : c’est un fichier texte où vous pouvez ajouter des informations sur l’auteur et le projet.
thingProperties.h : ce fichier est généré automatiquement par l’Arduino IoT Cloud lorsque vous ajoutez des propriétés à votre Thing. En général, vous ne devez pas modifier le code de ce fichier vous-même. Il est mis à jour automatiquement lorsque vous modifiez les propriétés du Thing dans le dashboard.
Veuillez consulter la page IoT Cloud – Getting Started sur l’Arduino Project Hub pour une explication plus détaillée des différentes fonctions dans thingProperties.h.

Secret : cet onglet vous permet de renseigner vos identifiants réseau. SECRET_SSID et SECRET_PASS sont le nom et le mot de passe du réseau wifi auquel le MKR1000 va se connecter. Après avoir rempli ces informations, cliquez sur save.

Code Arduino
Les fichiers générés automatiquement facilitent la prise en main du cloud IoT, mais bien sûr, il vous faudra quand même écrire un peu de code vous-même.
Dans le sketch principal, donc pas dans thingProperties.h, j’ai ajouté du code pour lire les capteurs, contrôler la pompe à eau et afficher les informations sur l’écran LCD I2C.
Vous pouvez remplacer le code du sketch principal par le code ci-dessous. Connectez la carte MKR1000 à votre ordinateur si ce n’est pas déjà fait et téléversez le code en cliquant sur le bouton upload (flèche droite en haut de la page). Je vous recommande de déconnecter la pompe pour l’instant et de ne laisser que les capteurs branchés.
Ensuite, je vais expliquer comment fonctionne le code et vous montrer comment modifier certains paramètres vous-même.
Vous pouvez copier le code en cliquant sur le bouton en haut à droite du champ de code.
/*
Sketch for automatic indoor garden project. More info: https://www.makerguides.com
Arduino IoT Cloud Properties description
The following variables are automatically generated and updated when changes are made to the Thing properties
float soilMoistureContent;
float humidity;
float temperature;
Properties which are marked as READ/WRITE in the Cloud Thing will also have functions
which are called when their values are changed from the Dashboard.
These functions are generated with the Thing and added at the end of this sketch.
*/
#include "thingProperties.h"
#include "DHT.h"
#include "LiquidCrystal_I2C.h"
#define DHTPIN A1
#define DHTTYPE DHT21
#define RELAYPIN 1
#define SOILPIN A2
DHT dht = DHT(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4);
const unsigned long pumpPeriod = 20000;
const unsigned long waitPeriod = 120000;
unsigned long previousMillis;
float moistureSensorData;
void setup() {
// Initialize serial and wait for port to open:
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(4);
ArduinoCloud.printDebugInfo();
pinMode(LED_BUILTIN, OUTPUT);
pinMode(RELAYPIN, OUTPUT);
dht.begin();
lcd.init();
lcd.backlight();
}
void loop() {
ArduinoCloud.update();
// Your code here
temperature = dht.readTemperature();
humidity = dht.readHumidity();
lcd.setCursor(0, 0);
lcd.print("Temperature:");
lcd.setCursor(13, 0);
lcd.print(temperature);
lcd.print("\xDf" "C");
lcd.setCursor(0, 1);
lcd.print("Humidity:");
lcd.setCursor(10, 1);
lcd.print(humidity);
lcd.print("%");
moistureSensorData = analogRead(SOILPIN);
//Serial.println(moistureSensorData);
soilMoistureContent = map(moistureSensorData, 883, 469, 0, 100);
soilMoistureContent = constrain(soilMoistureContent, 0, 100);
lcd.setCursor(0, 2);
lcd.print("Soil moisture:");
lcd.setCursor(15, 2);
lcd.print(soilMoistureContent, 0);
lcd.print("% ");
if (soilMoistureContent <= 30 && millis() - previousMillis >= waitPeriod) {
digitalWrite(RELAYPIN, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
delay(pumpPeriod);
digitalWrite(RELAYPIN, LOW);
digitalWrite(LED_BUILTIN, LOW);
previousMillis = millis();
}
}
Comment fonctionne le code
Dans la section loop du code, la température et l’humidité sont lues avec dht.readTemperature() et dht.readHumidity() respectivement. Les variables temperature et humidity ont été ajoutées automatiquement dans thingProperties.h et leurs valeurs seront envoyées au cloud toutes les 10 secondes.
La section suivante du code affiche les valeurs sur l’écran LCD I2C.
lcd.setCursor(0, 0);
lcd.print("Temperature:");
lcd.setCursor(13, 0);
lcd.print(temperature);
lcd.print("\xDf" "C");
lcd.setCursor(0, 1);
lcd.print("Humidity:");
lcd.setCursor(10, 1);
lcd.print(humidity);
lcd.print("%");
Ensuite, la sortie analogique du capteur d’humidité du sol est lue avec analogRead(). Cette valeur est ensuite convertie entre 0 et 100 % d’humidité. Pour calibrer le capteur, vous pouvez afficher les données du capteur dans le Serial Monitor. La valeur 833 correspond à la valeur obtenue lorsque j’ai tenu le capteur en l’air, et 469 lorsque je l’ai plongé dans un verre d’eau.
moistureSensorData = analogRead(SOILPIN);
//Serial.println(moistureSensorData);
soilMoistureContent = map(moistureSensorData, 883, 469, 0, 100);
soilMoistureContent = constrain(soilMoistureContent, 0, 100);
lcd.setCursor(0, 2);
lcd.print("Soil moisture:");
lcd.setCursor(15, 2);
lcd.print(soilMoistureContent, 0);
lcd.print("% ");
Dans la dernière section du code, je vérifie si le taux d’humidité du sol est inférieur à 30 % et, si c’est le cas, les plantes sont arrosées pendant une durée définie. J’ai ajouté un délai minimum entre deux cycles d’arrosage pour laisser le temps à la terre d’absorber l’eau.
if (soilMoistureContent <= 30 && millis() - previousMillis >= waitPeriod) {
digitalWrite(RELAYPIN, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
delay(pumpPeriod);
digitalWrite(RELAYPIN, LOW);
digitalWrite(LED_BUILTIN, LOW);
previousMillis = millis();
}
Vous devrez probablement ajuster les paramètres pumpPeriod et waitPeriod en haut du code pour les adapter à votre installation.
Créer un dashboard
Après avoir téléversé le code, cliquez sur GO TO IOT CLOUD. Cliquez ensuite sur Dashboards en haut de la page.

Sur cette page, cliquez sur create dashboard. Vous pouvez ajouter des widgets à votre dashboard pour afficher des valeurs, des graphiques, etc.

Cliquez sur le widget et sélectionnez Link Property

Sélectionnez maintenant la propriété que vous souhaitez afficher.

Après avoir ajouté plusieurs widgets, votre dashboard devrait ressembler à ceci :

Conclusion
Dans cet article, je vous ai montré comment créer un système d’arrosage automatique simple avec le MKR1000 et l’Arduino IoT Cloud. J’espère que ce tutoriel vous a été utile et pourra vous inspirer.
Dans la configuration actuelle, l’Arduino IoT Cloud sert uniquement à afficher et enregistrer les données des capteurs. Vous pourriez donc aussi réaliser ce projet en version autonome avec un Arduino Uno ou équivalent. Personnellement, je voulais juste expérimenter avec l’Arduino IoT Cloud et voir à quel point c’était difficile à mettre en place. C’était en fait plus simple que je ne le pensais, et je l’utiliserai sûrement pour d’autres projets à l’avenir.
J’utilise ce système depuis peu et il semble très bien fonctionner. Je ferai un retour d’ici un mois environ, après l’avoir testé un peu plus longtemps.
Une chose que j’ajouterai peut-être à l’avenir, c’est un détecteur de niveau d’eau pour le réservoir, relié à un système d’alerte par email. J’ai peur d’oublier de remplir le réservoir maintenant que je n’ai plus à penser à arroser les plantes…
Si vous avez des questions ou des suggestions, n’hésitez pas à laisser un commentaire ci-dessous.


