Contrôleur d'irrigation intelligent Arduino – Arrosage automatique avec capteurs météo et lumière
Composants et fournitures
| Arduino Nano R3 | ×1 |
| IO Expander | ×1 |
| IO Expander Bundle | ×1 |
Applications et services en ligne
- Arduino IDE
À propos de ce projet
Créer un contrôleur d'irrigation intelligent avec Arduino
Irriguez intelligemment votre jardin avec des cycles d'arrosage dynamiques. Arrêtez l'arrosage s'il pleut ou s'il a plu depuis le dernier arrosage. Utilisez le capteur de lumière pour détecter l'aube et ajuster automatiquement les heures de début d'arrosage. Arrêtez l'arrosage s'il fait trop froid.
Liste des fonctionnalités
- Capteur de température extérieure
- Capteur de pluie extérieure
- Capteur de lumière extérieure
- Horloge temps réel (RTC) avec sauvegarde batterie pour programmation hebdomadaire
- Stockage non volatile – aucun arrosage perdu en cas de coupure de courant
- Détection de l'aube
- Arrosage intelligent pour économiser l'eau
- Arrosage avant l'aube pour un trempage optimal
- Arrêt de l'arrosage par temps froid
- Réduction de la croissance des champignons
- Contrôle facile de la programmation

Pièces nécessaires pour construire le contrôleur d'irrigation intelligent
- IO Expander
- 2 × Convertisseur 1-Wire vers I2C
- Jonction 1-Wire
- Connecteur optique
- Répartiteur (splitter)
- Arduino Nano
- Relais 4 canaux 5V DC
- Capteur de lumière TSL2561
- Capteur de température étanche DS18B20
- Capteur de niveau d'eau infrarouge optique
- Horloge temps réel DS3231 AT24C32 IIC de précision
- Écran OLED I2C SSD1306 128x64
- Boîtier étanche transparent 200x120x75mm
- Boîtier étanche transparent 100x68x50mm
- Pressacâble étanche IP68 PG7
- Pressacâble étanche IP68 PG11
- Prise RJ11 à bornier
- Fil RJ11 4C4P 50ft
- Fil RJ11 4C4P 6ft
- Fils à connecteurs 2.54mm
- 2 × Micro-interrupteurs poussoirs SPST momentanés 2 broches
- Alimentation 12VDC 1A sur secteur
Schéma de câblage

Écran OLED

Appuyez sur le bouton Menu pour afficher le menu et continuez d'appuyer pour faire défiler les options. Le menu disparaît automatiquement après 30 secondes d'inactivité. Appuyez sur le bouton Select pour exécuter la fonction choisie.
Pourquoi utiliser l'IO Expander ?
- Conception plus simple
- Composants standards
- Pas de pilote 1-Wire à écrire
- Pas de pilote DS3231 RTC à écrire
- Pas de pilote EEPROM à écrire
- Pas de pilote d'affichage OLED à écrire
- Pas de polices d'affichage occupant l'espace code Arduino
- Pas de pilote de capteur de température à écrire
- Pas de pilote de capteur de pluie optique à écrire
- Économise l'espace code sur Arduino ; seulement 12710 octets (39%)
- Seulement trois jours pour écrire le code
- Câblage facile avec câble téléphonique RJ11 standard
- Pas de problème de longueur de câble capteur
- Moins cher que les systèmes commerciaux similaires
- Facile à modifier pour s'adapter aux besoins individuels
- Alimentation unique
Construire le système
Connectez l'Arduino Nano à l'IO Expander et programmez-le avec le code suivant. Le connecteur 6 broches est le port série logiciel de débogage, non nécessaire en installation finale.

Important : Modifiez les adresses définies ONEWIRE_TO_I2C_ROM1 et ONEWIRE_TO_I2C_ROM2 pour qu'elles correspondent aux adresses de vos convertisseurs 1-Wire vers I2C.
Code principal (extrait)
/* IO Expander sketch optimisé
* Système d'irrigation v1.1 */
#include <math.h>
#include <time.h>
#include <util/crc16.h>
#include <avr/wdt.h>
#include <SoftwareSerial.h>
#include "IOExpander.h"
#define FAHRENHEIT
#define INIT_BOARD "g5w1;g11w1;g11d0,75;g12w1;g12d0,75;rsf"
#define ONEWIRE_TO_I2C_ROM1 "i4scc"
#define ONEWIRE_TO_I2C_ROM2 "i6s8f"
#define ONEWIRE_TEMPERATURE "t6s0300"
#define RTC_SENSOR "s4te"
#define I2C_EEPROM "s4tf"
#define I2C_OLED "s4t10"
#define I2C_LIGHT "s3t9;sc0"
#define OPTICAL_SENSOR "g5a"
#define BUTTON1 "g11d"
#define BUTTON2 "g12d"
#define WATER_TIME_BEFORE_SUNRISE 60
#define SUNRISE_LUX 100
#define RAIN_DETECT_LEVEL 4.0
#define DO_NOT_WATER_TEMP 4.4444 // 40°F
#define MAX_ZONES 4
// ... (constantes de temps, jours, zones, relais, structures ZONE, SCHEDULE, NVRAM)
void setup() {
Serial.begin(115200);
pinMode(13, OUTPUT);
wdt_enable(WDTO_8S);
}
void loop() {
// Lecture RTC, capteurs, gestion programmation, boutons, affichage OLED, écriture EEPROM
// Logique complète : détection aube, pluie, température, gestion 4 zones, menu interactif
wdt_reset();
}
Note : Si vous programmez l'Arduino Nano via le port USB, déconnectez-le de l'IO Expander car ils partagent le même port série. Pour le débogage, utilisez le port ICSP pour programmer l'ATmega328P. Décommentez SERIAL_DEBUG pour activer le port de débogage logiciel.
Le répartiteur doit être configuré pour isoler la ligne de données du capteur infrarouge optique de la ligne du capteur distant 1-Wire. Soudez une résistance 0 ohm 0603 en R2.

Percez un trou de 7/16" dans le petit boîtier et 11/16" dans le grand boîtier (côté droit) pour les pressacâbles PG7 et PG11. Utilisez une Dremel pour ajuster. Le PG7 passe les capteurs distants, le PG11 les fils 12VDC, 24VAC, collecteur et RJ11.

Câblez les micro-interrupteurs poussoirs SPST et connectez-les à la prise RJ11 à bornier. Utilisez du thermorétractable pour isoler les contacts.

Connectez tous les fils et assemblez les pièces dans le grand boîtier. Le fil RJ11 de 50ft pour les capteurs distants doit passer par le pressacâble PG11 sans être coupé.

Percez un trou de 9/16" sur le dessus du petit boîtier pour le capteur infrarouge optique d'eau. Ajustez à la Dremel. Le petit boîtier de capteurs distants est un ajustement serré ; raccourcissez les fils RJ11 au maximum. Une fois assemblé, ajoutez de la colle marine dans la rondelle du pressacâble avant de serrer pour une meilleure étanchéité.

Installez le boîtier de capteurs distants à l'extérieur, surélevé sur le côté est de votre maison, avec le capteur infrarouge optique d'eau et le capteur de lumière pointant vers le ciel sans obstruction.

Percez des trous de 1/4" au haut, milieu et bas du grand boîtier pour les boutons. Ajustez à la Dremel.

Testez le système. Pour tester relais et capteurs, déconnectez l'Arduino de l'IO Expander et connectez-le directement à l'ordinateur pour contrôle manuel. Une fois tout vérifié, assemblez dans le boîtier avec ruban double face et mousse de calage, et profitez des économies de votre contrôleur d'irrigation intelligent.
Vidéo de fonctionnement
Mise à jour 12/09/2019
Version v1.1 corrigeant un problème de démarrage si le système perd l'alimentation pendant plusieurs jours.
Mise à jour 02/10/2019
Lors de la connexion du 1-Wire vers I2C au DS3231 puis à l'écran SSD1306 OLED, vous avez trois résistances de pull-up différentes sur SDA et SCL (voir image cerclées). Cela donne un pull-up effectif de 4.7k/3 = 1.56k, trop fort, causant des corruptions d'écran aléatoires.

Comme le DS3231 utilise un réseau de résistances partagé, retirez les autres pull-up :
- 1-Wire vers I2C : R3 et R4
- SSD1306 OLED : R6 et R7
Schéma

Processus de fabrication
- Construire des systèmes d'agriculture intelligente open-source : donner aux agriculteurs les moyens d'une IoT abordable et interopérable
- ECM3532 : La première carte capteur IA intégrée ultra-basse consommation d'Eta Compute accélère le développement edge
- Construire un contrôleur domotique 433 MHz avec Sensorflare et Raspberry Pi
- Construire un moniteur de température domestique avec Raspberry Pi, MCP9808, InfluxDB et Grafana
- Poubelle intelligente : Une solution IoT cellulaire pour la gestion automatisée des déchets
- Barman intelligent : Construisez votre propre station de cocktails alimentée par Raspberry Pi
- Capteur d'émotion & EEG : Matériel low-cost pour détection d'émotion en temps réel
- Contrôleur d'irrigation intelligent avec Windows 10 IoT, Raspberry Pi et capteurs d'humidité XBee
- Capteur de déformation ultra-sensible et durable pour textiles intelligents