Automatiser l’ouverture d’une serre avec Arduino, c’est l’un de ces projets qui mêle électronique embarquée, capteurs et logique de programmation de façon très concrète. J’ai moi-même décortiqué plusieurs montages de ce type, et ce qui me frappe à chaque fois, c’est que les difficultés ne viennent pas du code, mais des choix matériels et des petits pièges de la gestion du temps. Voici un guide technique complet pour ne pas les reproduire.
Choisir les bons capteurs pour piloter votre serre automatisée
La première question à trancher : quel capteur d’humidité et de température utiliser ? Le DHT-11 est souvent le premier réflexe, car il coûte moins d’un euro et se trouve partout. Mais ses limites sont réelles. Il mesure entre 20 et 80 % d’humidité avec une précision de 5 %, et la température entre 0 et 50 °C avec ±2 °C d’écart. Pour une serre, c’est juste insuffisant.
Le DHT-22 change vraiment la donne. Sa plage de mesure couvre 0 à 100 % d’humidité avec une précision de 2 à 5 %, et la température de -40 °C à 80 °C avec ±0,5 °C. Seul bémol : il ne produit qu’un échantillon toutes les 2 secondes, contre 1 par seconde pour le DHT-11. Ce n’est pas un problème en pratique, puisqu’on interroge les sondes toutes les 10 à 15 minutes dans une boucle de régulation bien conçue.
Pour la température seule, les sondes DS18B20 sont redoutables. Elles compensent parfaitement la faible précision du DHT-11 si vous avez déjà ce capteur sous la main, et leur protocole 1-Wire permet de cascader plusieurs unités sur un seul fil. Pratique pour mesurer plusieurs zones d’une grande serre.
L’humidité du sol pose un autre problème : l’oxydation des capteurs résistifs. Ces modules se dégradent rapidement en usage continu. La solution technique consiste à alimenter le capteur en alternant la polarité via deux sorties Arduino, en effectuant une mesure dans chaque sens. On abandonne le module comparateur intégré pour le remplacer par une simple résistance en série, le point milieu étant relié à une entrée analogique. Certains montages prévoient un stock de 20 capteurs de rechange, ce qui donne une idée de leur durée de vie réelle.
Le capteur de luminosité LDR complète le dispositif pour détecter le passage jour/nuit et gérer l’éclairage artificiel. Côté sécurité, un capteur de mouvement comme le FGMS-001 peut surveiller l’accès à la serre.
| Capteur | Plage humidité | Plage température | Précision température |
|---|---|---|---|
| DHT-11 | 20-80 % | 0-50 °C | ±2 °C |
| DHT-22 | 0-100 % | -40 °C à 80 °C | ±0,5 °C |
| DS18B20 | N/A | -55 °C à 125 °C | ±0,5 °C |
Actionneurs et câblage : servomoteur, vérin et relais
Le montage du servomoteur sur la pin 9 de l’Arduino reste la solution la plus simple pour piloter une petite trappe. On fixe un seuil d’ouverture à 25 °C : au-delà, le servo tourne pour ouvrir, en dessous d’un second seuil (régulation par hystérésis), il referme. Cette logique évite les commutations intempestives autour du seuil.
Pour des charges plus notables, un vérin électrique 12V offrant 750N de force s’impose. Son pilotage passe alors par un contrôleur dédié, ce qui permet d’ajouter un bouton trois positions étanche pour le contrôle manuel. Un panneau solaire 18V peut alimenter l’ensemble en autonomie totale, sans câblage secteur.
L’Arduino Mega s’impose dès que le projet gagne en complexité. Ses 54 pins numériques et 16 entrées analogiques donnent de la marge. On y connecte :
- Le montage du capteur de température (DS18B20 ou DHT-22)
- Le montage du capteur de luminosité LDR
- Le montage du bouton poussoir ou d’un récepteur de télécommande infrarouge
- Le montage du servomoteur sur pin 9
- Une carte relais pour les charges 220V (pompe, brumisateur, ventilateur)
Un Shield Afficheur LCD SHIE1602A avec boutons intégrés affiche les valeurs en temps réel et permet de naviguer dans les paramètres sans ordinateur branché. L’ensemble logé dans un boîtier étanche fixé sur le flanc de la serre, c’est propre et durable.
Programmation Arduino : logique, gestion du temps et erreurs à éviter
La structure du code repose sur une state machine, ou machine à états. La boucle setup() permet de configurer tous les paramètres : heure/date, seuils de luminosité, température souhaitée, hygrométrie cible, durées d’arrosage et de ventilation. La boucle loop() interroge ensuite chaque sonde à intervalle régulier, toutes les 10 à 15 minutes, avant tout déclenchement d’actionneur.
Un point technique souvent négligé : la gestion du débordement de millis(). Cette fonction retourne à zéro après environ 49 à 50 jours, car un unsigned long plafonne à 4 294 967 295 millisecondes. L’erreur classique consiste à écrire :
if (millis() >= dernierChrono + periodeAttente)
Cette addition peut provoquer un débordement invisible. La forme correcte utilise la soustraction :
if (millis() - dernierChrono >= periodeAttente)
Pour la gestion de l’heure réelle, une RTC de type DS3231 ou DS3234 est indispensable. Elle permet de programmer des plages horaires (fermeture nocturne, durée d’ensoleillement saisonnier) sans dérive.
Pour éviter les faux déclenchements sur des lectures aberrantes, on confirme chaque décision par 2 à 3 mesures identiques consécutives avant d’activer un actionneur. Pour les boutons physiques, des librairies anti-rebond gèrent le bruit électrique proprement.
Si vous envisagez d’aller plus loin, notamment en intégrant un système domotique comme Jeedom via Z-Wave, ou en laissant une intelligence artificielle gérer la régulation de façon prédictive, la question mérite d’être posée sérieusement : peut-on contrôler une serre connectée avec une IA ? C’est une piste qui ouvre des possibilités bien au-delà de la simple automatisation par seuils.

