Porte automatique de poulailler v1
Description :
Ce projet consiste à piloter une porte automatique de poulailler grâce à une carte Arduino, qui sert de cerveau au système. L’Arduino reçoit les ordres des boutons (ouvrir ou fermer) et surveille les capteurs de fin de course. Dès qu’une commande est lancée, l’Arduino pilote le module L298N, qui agit comme un intermédiaire de puissance pour envoyer l’énergie nécessaire au moteur (jusqu’à 35 V) et le faire tourner dans le bon sens.
Le moteur à courant continu est choisi selon le poids de la porte pour offrir suffisamment de force. Le module L298N est indispensable car l’Arduino ne peut pas alimenter directement un moteur puissant ; il permet donc de faire le lien entre la commande logique et la puissance électrique tout en gérant l’inversion de rotation pour monter ou descendre la porte.
La sécurité est gérée par l’Arduino via deux capteurs de fin de course placés en haut et en bas. Lorsque la porte touche un capteur, l’Arduino détecte l’impact et ordonne immédiatement au L298N de stopper le moteur. Ce mécanisme simple évite que le moteur ne force sur la structure, garantissant ainsi la fiabilité et la sécurité de toute l’installation.
Prérequis :
- 1 x Carte Arduino Uno
- 2 x Bouton
- 1 x L298N
- 2 x interrupteurs de fin de course ( contact NO)
- 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 :
// --- Définition des broches pour le pilote moteur (ex: L298N ou Pont en H) ---
const int IN1 = 8; // Commande sens 1 du moteur
const int IN2 = 9; // Commande sens 2 du moteur
// --- Définition des boutons de commande ---
const int btnHaut = 5; // Bouton pour monter
const int btnBas = 6; // Bouton pour descendre
// --- Définition des capteurs de fin de course (FDC) ---
const int fdcHaut = 3; // Capteur de sécurité en position haute
const int fdcBas = 4; // Capteur de sécurité en position basse
void setup() {
// Configuration des broches moteur en sortie
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
// Configuration des entrées avec résistance de PULLUP interne
// Note : Le bouton/capteur doit relier la broche à la masse (GND) lorsqu'il est pressé
pinMode(btnHaut, INPUT_PULLUP);
pinMode(btnBas, INPUT_PULLUP);
pinMode(fdcHaut, INPUT_PULLUP);
pinMode(fdcBas, INPUT_PULLUP);
// Initialisation : on s'assure que le moteur est arrêté au démarrage
stopMoteur();
}
void loop() {
// Lecture de l'état des entrées
// Comme on utilise INPUT_PULLUP, l'état est LOW (0) quand on appuie sur le bouton
bool actionHaut = (digitalRead(btnHaut) == LOW); // L'utilisateur veut monter
bool actionBas = (digitalRead(btnBas) == LOW); // L'utilisateur veut descendre
bool stopHaut = (digitalRead(fdcHaut) == LOW); // Le fin de course haut est touché
bool stopBas = (digitalRead(fdcBas) == LOW); // Le fin de course bas est touché
// Logique de mouvement :
// On monte si le bouton "Haut" est pressé ET que le capteur "Haut" n'est pas activé
if (actionHaut && !stopHaut) {
monter();
}
// On descend si le bouton "Bas" est pressé ET que le capteur "Bas" n'est pas activé
else if (actionBas && !stopBas) {
descendre();
}
// Dans tous les autres cas (aucun bouton ou fin de course atteint), on arrête
else {
stopMoteur();
}
}
// Fonction pour faire tourner le moteur dans le sens "Montée"
void monter() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
}
// Fonction pour faire tourner le moteur dans le sens "Descente"
void descendre() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
}
// Fonction pour couper l'alimentation du moteur
void stopMoteur() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
}
