Porte automatique de poulailler v2
Description :
Ce projet consiste à automatiser l’ouverture et la fermeture d’un poulailler en fonction de la luminosité ambiante, grâce à une carte Arduino Uno et une photorésistance (LDR). Le système analyse en temps réel l’intensité lumineuse pour décider de l’action à mener, offrant ainsi une autonomie totale sans intervention humaine au lever ou au coucher du soleil.
La LDR, montée en pont diviseur de tension, envoie un signal analogique à l’Arduino. Dès que les seuils programmés sont franchis, l’Arduino commande un module de puissance L298N qui pilote un moteur à courant continu. La sécurité mécanique est assurée par deux capteurs de fin de course (haut et bas) : ils interrompent immédiatement l’alimentation du moteur dès que la porte atteint sa position finale, évitant ainsi toute tension inutile sur la structure.
Ce montage est idéal pour les projets de domotique agricole, d’élevage connecté ou de protection animale. L’utilisation du driver L298N permet de gérer des moteurs robustes tout en isolant la partie commande de la partie puissance, garantissant une fiabilité optimale du système face aux conditions extérieures.
Prérequis :
- 1 x Carte Arduino Uno
- 2 x Bouton
- 1 x L298N
- 1 x Photorésistance (LDR)
- 1 x Résistances 10KΩ
- 1 x Moteur (entre 5V et 35V max)
- 1 x Alimentation (adapter à la tension du moteur)
- 1 x Breadboard
- Fils de connexion
Version IDE :
- Arduino IDE 2.3.5
Vidéo de démonstration :
NA
Schéma de câblage :


Code :
// ================================================================
// CONFIGURATION DU SYSTÈME
// ================================================================
// --- Définition des broches (Pins) ---
const int LDR_PIN = A0; // Capteur de lumière branché sur l'entrée analogique A0
const int IN1 = 8; // Signal 1 vers le module L298N (contrôle rotation)
const int IN2 = 9; // Signal 2 vers le module L298N (contrôle rotation)
const int FIN_HAUT = 3; // Capteur de fin de course (Porte Ouverte)
const int FIN_BAS = 4; // Capteur de fin de course (Porte Fermée)
// --- Paramètres de luminosité (Ajustables) ---
const int SEUIL_OUVERTURE = 600; // La porte s'ouvre si la lumière dépasse cette valeur
const int SEUIL_FERMETURE = 300; // La porte se ferme si la lumière descend sous cette valeur
// ================================================================
// INITIALISATION
// ================================================================
void setup() {
// Configuration des broches du moteur en sortie
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
// Configuration des capteurs en entrée avec résistance interne (PULLUP)
// Le capteur renverra LOW quand il est touché et HIGH au repos
pinMode(FIN_HAUT, INPUT_PULLUP);
pinMode(FIN_BAS, INPUT_PULLUP);
// Initialisation de la communication avec l'ordinateur (pour le réglage)
Serial.begin(9600);
}
// ================================================================
// BOUCLE PRINCIPALE
// ================================================================
void loop() {
// Lecture de la luminosité ambiante (valeur entre 0 et 1023)
int luminosite = analogRead(LDR_PIN);
// Affichage de la valeur sur le moniteur série pour calibrage
Serial.print("Luminosité actuelle : ");
Serial.println(luminosite);
// --- Condition d'OUVERTURE ---
// Si il fait jour (> SEUIL) ET que la porte n'est pas déjà en haut
if (luminosite > SEUIL_OUVERTURE && digitalRead(FIN_HAUT) == HIGH) {
ouvrirPorte();
}
// --- Condition de FERMETURE ---
// Si il fait nuit (< SEUIL) ET que la porte n'est pas déjà en bas
if (luminosite < SEUIL_FERMETURE && digitalRead(FIN_BAS) == HIGH) {
fermerPorte();
}
// Pause de 2 secondes avant la prochaine vérification pour éviter de forcer
delay(2000);
}
// ================================================================
// FONCTIONS DE MOUVEMENT
// ================================================================
void ouvrirPorte() {
Serial.println("Action : Ouverture de la porte...");
// Boucle : tant que le capteur du haut n'est pas activé (reste HIGH)
while (digitalRead(FIN_HAUT) == HIGH) {
digitalWrite(IN1, HIGH); // On active le moteur dans un sens
digitalWrite(IN2, LOW);
}
stopperMoteur(); // Arrêt dès que le capteur est touché
Serial.println("Statut : Porte Ouverte.");
}
void fermerPorte() {
Serial.println("Action : Fermeture de la porte...");
// Boucle : tant que le capteur du bas n'est pas activé (reste HIGH)
while (digitalRead(FIN_BAS) == HIGH) {
digitalWrite(IN1, LOW); // On active le moteur dans l'autre sens
digitalWrite(IN2, HIGH);
}
stopperMoteur(); // Arrêt dès que le capteur est touché
Serial.println("Statut : Porte Fermée.");
}
void stopperMoteur() {
// Coupe l'alimentation du moteur sur le module L298N
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
}
