Jardin d'intérieur Arduino : entretien intelligent et automatisé des plantes
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino Nano R3 | 1 |
| Dongle Bluetooth vers USB mbientLab | 1 |
| PCB personnalisé JLCPCB | 1 |
À propos de ce projet
Jardiner à l'ère moderne, c'est compliquer les choses avec des électrons, des bits et des octets. Combiner microcontrôleurs et jardinage est une idée très populaire. Je pense que c'est parce que les jardins ont des entrées et sorties très simples, faciles à comprendre. On a tendance à vouloir complexifier un hobby notoirement simple et relaxant.
Dans ce projet, je vous montre comment construire une version simplifiée de jardin d'intérieur avec une carte de développement Arduino.
Je fournis un guide complet étape par étape pour réaliser votre propre jardin, en détaillant matériel et logiciel pour rendre ce guide la voie la plus simple vers vos propres compétences en électronique. Ce projet est très pratique, surtout après obtention du PCB personnalisé commandé chez JLCPCB pour améliorer l'apparence, avec toute la documentation et les codes pour créer votre système de jardin automatique.
Nous l'avons réalisé en 7 jours seulement : 3 jours pour le matériel et l'assemblage, 4 jours pour le code et l'application Android pour contrôler le jardin. Avant de commencer, voyons :
Ce que vous apprendrez
- Choisir les bons composants selon les fonctionnalités du projet
- Réaliser le circuit pour connecter tous les composants choisis
- Assembler toutes les parties et commencer les tests
- Utiliser l'application Android pour connecter via Bluetooth et manipuler le système
Étape 1 : Qu'est-ce qu'un jardin d'intérieur ?
La plupart des plantes ont des besoins simples. En tant qu'invitées, elles sont peu exigeantes. Trois éléments de base à comprendre avant d'accueillir une plante : lumière, eau et air. Si vous maîtrisez ces quatre éléments (sic), vous pouvez créer un jardin d'intérieur n'importe où, n'importe quelle saison.
- Lumière : La plupart des plantes de jardin ont besoin d'au moins 6 heures de lumière par jour. Mais de la bonne lumière. Si votre main devant la fenêtre ne fait pas d'ombre, la lumière est probablement insuffisante. Vous pouvez compléter avec des lampes horticoles. Si vous avez peu de lumière naturelle et ne voulez pas de lampes spéciales, choisissez des plantes d'ombre ou déplacez le jardin sur un rebord ensoleillé.
- Eau : Les plantes ont besoin de conditions proches de leur habitat naturel. Une plante du désert a besoin de moins d'arrosage qu'une plante de marais. Connaître les préférences en eau est la première étape. Les plantes vous donnent des indices : feuilles épaisses et caoutchouteuses = réserves d'eau = moins d'arrosage. Si vous détestez arroser, choisissez des variétés peu gourmandes ou des pots avec réservoirs.
- Air : En sous-produit de la photosynthèse, les plantes produisent de l'oxygène et filtrent les gaz nocifs (formaldéhyde) via leurs feuilles. Pour les garder en santé : feuilles propres, air en mouvement et humide. Placez-les dans un courant d'air ou ajoutez un petit ventilateur.
Je vais réaliser un système à base d'Arduino pour surveiller température et humidité de ma plante et fournir automatiquement ses besoins : intensité lumineuse, eau, air frais. Pour cela, des capteurs contrôlent des actionneurs : lumière selon capteur de luminosité, arrosage selon capteur d'humidité du sol (pompe), température/humidité pour ventilateurs 12V DC.
Étape 2 : Capteurs et actionneurs
Ce système assemble capteurs et actionneurs pour accéder aux données physiques autour de la plante et déterminer quoi lui fournir et quand.
Capteurs
- Capteur de lumière BH1750 : Capteur numérique de lumière ambiante pour bus I2C. Idéal pour obtenir données de lumière ambiante (1 - 65535 lx).
- Capteur d'humidité du sol : Les capteurs mesurant la résistance/conductivité entre deux contacts sont essentiellement inutiles. La résistance n'est pas un bon indicateur (dépend pH, solides dissous, température). La plupart sont de mauvaise qualité, contacts corrodent vite. Heureux si ça dure une saison.
- Capteur température & humidité DHT11 : Capteur numérique bas coût. Capteur capacitif d'humidité + thermistance. Signal numérique sur broche data (pas d'entrée analogique). Simple mais timing précis requis. Inconvénient : nouvelles données toutes les 2 secondes max.
Actionneurs
- LED blanche : Diode électroluminescente, source lumineuse semi-conductrice. Jonction p-n émettant de la lumière quand activée. Tension adaptée → recombinaison électrons/trous → photons.
- Pompe à eau : Dispositif déplaçant fluides par action mécanique. Trois groupes : aspiration directe, déplacement, gravité. Mécanisme alternatif ou rotatif, consomme énergie. Sources : manuel, électricité, moteurs, éolien. Tailles : microscopique (médical) à industriel.
- Ventilateur DC 12V : Important pour préserver la vie de la plante en faisant circuler l'air frais quand nécessaire pour maintenir des conditions saines.
Étape 3 : Fabrication du PCB (par JLCPCB)
À propos de JLCPCB
JLCPCB (Shenzhen JIALICHUANG Electronic Technology Development Co., Ltd.) est la plus grande entreprise de prototypes PCB en Chine, fabricant high-tech spécialisé dans le prototype rapide et la production de petites séries.
Plus de 10 ans d'expérience, plus de 200 000 clients, plus de 8 000 commandes en ligne par jour. Capacité annuelle : 200 000 m² pour PCB 1, 2 ou multi-couches. JLCPCB : grande échelle, équipement performant, gestion stricte, qualité supérieure.
Retour au projet
Pour produire le PCB, j'ai comparé les prix de nombreux fabricants et choisi JLCPCB, meilleur rapport qualité/prix. Il suffit de télécharger le fichier Gerber, régler épaisseur, couleur, quantité, payer 2 $ et recevoir le PCB en 3 jours. Parfois livraison gratuite.
Le fichier circuit (PDF) est disponible ici.
Comme on le voit sur les photos, le PCB est très bien fabriqué : même forme de feuille conçue, tous les labels et logos guident le soudage.
Étape 4 : Ingrédients
Composants nécessaires (liens commande en ligne) :
- PCB commandé chez JLCPCB
- Arduino Nano
- Module ESP01
- Module Bluetooth HC-05 ou HC-06
- Capteur lumière BH1750
- Capteur température & humidité
- Capteur humidité sol
- Pompe à eau
- Ventilateur DC 12V
- LEDs blanches
- Connecteurs header
Étape 5 : Assemblage
Afficher les 9 éléments
Prêts ? Commençons le soudage en suivant les labels pour éviter les erreurs. Commencez par le connecteur Arduino pour tester l'alimentation, et écrivez un code de test basique pour vérifier chaque capteur (ex: capteur lumière) et les LEDs (tout connecté directement à l'Arduino = accès total).
Note : Gardez votre fer à souder propre et brillant. Essuyez sur l'éponge à chaque utilisation. Si la pointe noircit (flux/oxydation), nettoyez-la même en plein milieu. Une pointe propre facilite énormément le transfert de chaleur.
Le PCB JLCPCB guide le placement de tout : pas d'erreur de soudage possible. Utilisez les deux faces du PCB pour souder vos composants.
Tous les composants soudés, j'ai préparé un design pour découpe laser CNC afin d'insérer la partie électronique et la plante sur un même support. Fichiers DXF disponibles ici.
Étape 6 : L'application Android
Cette application permet de connecter l'Arduino via Bluetooth. En mode manuel : contrôle ON/OFF des ventilateurs, lumières, pompe à eau. Bouton « get data » pour lire les capteurs : données affichées sur l'écran du smartphone.
Application Android gratuite disponible ici.
Étape 7 : Code Arduino et validation
Le code est disponible en téléchargement. Simple et bien commenté pour compréhension autonome.
Chaque bouton a une fonction, mais j'apprécie particulièrement le mode automatique pour la luminosité : capteur à la base de la maison, le système contrôle la luminosité des LEDs frontales selon le signal du capteur. Lecture directe température/humidité sur l'écran du smartphone : impressionnant.
Code
Code source Arduino
/************************************************************************************************************************************************************************
* - Author : BELKHIR Mohamed
* - Profession : (Developer) MEGA DAS owner
* - Main purpose : Industrial Application
* - Copyright (c) holder : All rights reserved
* - License : BSD 2-Clause License
* - Date : 20/11/2017
***********************************************************************************************************************************************************************/
/*********************************** NOTE **************************************/
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// * Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED
#include "DHT.h"
#include <Wire.h>
#include <BH1750.h>
// Broches de contrôle
const int Pump = 4; // Pompe
const int Fan = 5; // Ventilateur (PWM)
const int Light = 6; // LEDs (PWM)
const int TempHum = 7; // DHT11
const int Moisture = 8; // Capteur humidité sol (digital)
const int TestLED = 9; // Test LEDs PCB
const int Brightness = 12; // Capteur lumière (digital)
const int analogMoistue = 0; // Capteur humidité sol (analogique)
#define DHTTYPE DHT11
DHT dht(TempHum, DHTTYPE);
BH1750 lightMeter;
char Data = 'x';
String cmd = "";
int flagModeAuto = 0;
int sprayCMD = 0;
int LightCMD = 0;
int lightLevelPlus = 0;
float temperature = 0;
float humidity = 0;
uint16_t lux = 0;
void setup() {
Wire.begin();
dht.begin();
lightMeter.begin();
Serial.begin(9600);
Serial.setTimeout(100);
pinMode(Pump, OUTPUT);
pinMode(Fan, OUTPUT);
pinMode(Light, OUTPUT);
pinMode(Moisture, INPUT);
pinMode(TestLED, INPUT);
delay(1000);
digitalWrite(Pump, LOW);
digitalWrite(Fan, LOW);
digitalWrite(Light, LOW);
}
void loop() {
while (Serial.available()) {
delay(10);
Data = Serial.read();
cmd += Data;
}
if (cmd == "dt") { Serial.print(humidity); }
if (cmd == "dh") { Serial.print(lux); }
if (cmd == "db") { Serial.print(temperature); }
if (cmd == "o") { flagModeAuto = 1; }
if (cmd == "m") { flagModeAuto = 0; }
if (flagModeAuto == 1) {
autoPump();
lightBrightness();
autoFan();
} else {
if (cmd == "f") { analogWrite(Fan, 255); }
if (cmd == "x") { analogWrite(Fan, 0); }
if (cmd == "l") { analogWrite(Light, 255); }
if (cmd == "k") { analogWrite(Light, 0); }
if (cmd == "w") { analogWrite(Pump, 255); }
if (cmd == "y") { analogWrite(Pump, 0); }
}
cmd = "";
lux = lightMeter.readLightLevel();
temperature = dht.readTemperature();
humidity = dht.readHumidity();
}
void autoPump() {
if (analogRead(analogMoistue) < sprayCMD) {
digitalWrite(Pump, HIGH);
delay(1000);
digitalWrite(Pump, LOW);
delay(1000);
}
}
void lightBrightness() {
while (lux < LightCMD) {
analogWrite(Light, lightLevelPlus);
delay(100);
lightLevelPlus++;
lux = lightMeter.readLightLevel();
}
}
void autoFan() {
if (temperature > 30) { analogWrite(Fan, 255); }
else { analogWrite(Fan, 0); }
}
Pièces personnalisées et boîtiers
dxf_mdf_5mm_s0PEHuez4w.rar (fichiers DXF pour découpe laser)
Schéma électrique
Schéma non fourni dans la source originale.
Processus de fabrication
- Créer un système Ambilight spectaculaire pour moniteur avec Arduino
- Créer un jeu Pong classique sur Arduino UNO avec écran OLED – Tutoriel étape par étape
- Détecteur de fréquence audio Arduino — Mesurer le pic sonore avec module haute sensibilité
- Construisez votre propre Tamagotchi Arduino : Un animal de compagnie numérique DIY
- Interrupteur lumineux sans fil intelligent : Manipulateur d'interrupteur piloté par Arduino
- Morpion sur matrice LED MAX7219 avec boîtier en carton
- Pistolet à eau intelligent à détection de mouvement avec Arduino Nano
- Construire un minuteur à rebours Arduino fiable avec afficheur 7 segments SparkFun
- Kit de robot de navigation intérieure intelligente pour projets Arduino