Dans cet article découvrez l'évolution de mon projet de porte automatique pour poulailler qui lorsqu'il sera finalisé pourra être utilisé comme un tutoriel afin de vous guider dans la réalisation de votre propre portier automatique de poulailler afin de sécuriser vos poules dans le poulailler.
Pour résoudre certains problèmes liés à votre projet, vous pouvez opter pour l'utilisation d'équipements à renvois d'angle vous permettant de changer l'axe de rotation de votre moteur afin de transférer la puissance entre deux arbres placés perpendiculairement.
Si vous souhaitez commander à distance votre porte de poulailler, consultez ce tutoriel d'automatisation pour porte de poulailler pilotable par smartphone.
Moteur Shield L298P avec moteur à courant continu ou moteur pas à pas
Lors de cette étape je vais utiliser des capteurs fin de course permettant de détecter les positions ouverte et fermée de la porte du poulailler. Si vous ne voulez pas utiliser de capteurs, il faut maintenir dans le programme la fonction comptage des tours du moteur pas à pas.
int commande_haut = 4; // Déclaration broche Bouton fermeture
int commande_bas = 5; // Déclaration broche Bouton ouverture
int fin_de_course_haut = 6; // Capteur fin de course haut
int fin_de_course_bas = 7; /// Capteur fin de course bas
int MotorPin1 = 8; // Déclaration broche IN1 L293D
int MotorPin2 = 9; // Déclaration broche IN2 L293D
int MotorPin3 = 10; // Déclaration broche IN3 L293D
int MotorPin4 = 11; // Déclaration broche IN4 L293D
int LuminositePin = A0; // Déclaration broche LDR
int Luminosite = 0; // Variable de la luminosité
int Tour = 0;
int delayTime = 10; // Temps entre chaque pas 10ms
int Seuil_Jour = 350; // Variable de luminosité seuil pour le jour
int Seuil_Nuit = 200; // Variable de luminosité seuil pour la nuit
int Tempo_luminosite = 10000; // Temporisation luminosité 10 secondes = 10000ms
boolean porte_fermee = false; //Déclaration variable porte fermée
boolean porte_ouverte = false; //Déclaration variable porte ouverte
boolean fdch = false; // Déclaration variable Fin de Course Haut
boolean fdcb = false; // Déclaration variable Fin de Course Bas
boolean etat_bp_h = false, etat_bp_b = false; // Déclaration des variables bas et haut
boolean mem_h = false, mem_b = false, mem_fdch = false, mem_fdcb = false; // Déclaration des mémoires
boolean mem_mouvement = false; // Déclaration de la mémoire mouvement
boolean mem_lumiere = false; // Déclaration de la mémoire lumière
boolean mem_init = false; // Déclaration de la mémoire initialisation
boolean Detecte_lumiere = false; // Déclaration variable détection lumière
boolean Jour = true; // Déclaration variable Jour = 1 | Nuit = 0
boolean Initialisation = false; // Déclaration variable initialisation
// État d'activation de la tempo
boolean tempoActive = false;
// Temps à l'activation de la tempo
unsigned long tempoDepart = 0;
void setup() {
Serial.begin(9600); // Ouverture du port série et debit de communication fixé à 9600 bauds
pinMode(commande_haut, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée BP haut
pinMode(commande_bas, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée BP bas
pinMode(fin_de_course_haut, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Fin de course haut
pinMode(fin_de_course_bas, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Fin de course bas
pinMode(MotorPin1, OUTPUT); // Déclaration de la sortie A- Moteur
pinMode(MotorPin2, OUTPUT); // Déclaration de la sortie A+ Moteur
pinMode(MotorPin3, OUTPUT); // Déclaration de la sortie B- Moteur
pinMode(MotorPin4, OUTPUT); // Déclaration de la sortie B+ Moteur
Lance_initialisation();
}
void Lance_initialisation() {
Fermer_porte_Initialisation();
}
void loop() {
Luminosite = analogRead(LuminositePin);
if (Initialisation) {
Serial.println(Luminosite); // Affichage sur le moniteur série du texte
if (Luminosite >= Seuil_Jour)
{
Detecte_lumiere = true;
}
if (Luminosite <= Seuil_Nuit)
{
Detecte_lumiere = false;
}
if (Detecte_lumiere != mem_lumiere) {
tempoActive = true;
tempoDepart = millis();
Serial.println("La lumière lance tempo"); // Affichage sur le moniteur série du texte
}
if (Detecte_lumiere && tempoActive && ((millis() - tempoDepart) >= Tempo_luminosite))
{
Jour = true;
Serial.println("Il fait jour"); // Affichage sur le moniteur série du texte
tempoActive = false;
if (!fdcb && !porte_ouverte) {
Ouvrir_porte();
}
}
mem_lumiere = Detecte_lumiere;
if (!Detecte_lumiere && tempoActive && (millis() - tempoDepart) >= Tempo_luminosite)
{
Jour = false;
Serial.println("Il fait nuit"); // Affichage sur le moniteur série du texte
tempoActive = false;
if (!fdch && !porte_fermee){
Fermer_porte();
}}
mem_lumiere = Detecte_lumiere;
}
etat_bp_h = !digitalRead(commande_haut); // Inverse de la lecture sur entrée BP haut
etat_bp_b = !digitalRead(commande_bas); // Inverse de la lecture sur entrée BP bas
fdch = !digitalRead(fin_de_course_haut); // Inverse de la lecture sur entrée Fin de course haut
fdcb = !digitalRead(fin_de_course_bas); // Inverse de la lecture sur entrée Fin de course bas
if (fdch != mem_fdch) // Changement d'état du fin de course haut (front montant ou descendant)
{
if (fdch)
{
Serial.println("Porte fermée !"); // Affichage sur le moniteur série du texte
}
if (!fdch)
{
Serial.println("Porte non fermée"); // Affichage sur le moniteur série du texte
}
}
if (fdcb != mem_fdcb) // Changement d'état du fin de course bas (front montant ou descendant)
{
if (fdcb)
{
Serial.println("Porte ouverte !"); // Affichage sur le moniteur série du texte
}
if (!fdcb)
{
Serial.println("Porte non ouverte"); // Affichage sur le moniteur série du texte
}
}
mem_fdcb = fdcb; // Mémorisation du nouvel état du fin de course bas
if (etat_bp_h != mem_h) // Changement d'état du bouton poussoir haut (front montant ou descendant)
{
Serial.println("Appui BP Haut"); // Affichage sur le moniteur série du texte
if (etat_bp_h && !etat_bp_b && !fdch && !porte_fermee) // Appui sur BP haut mais pas sur le bas
{
Fermer_porte(); // Lancer la fonction sens normal
}
}
mem_h = etat_bp_h; // Mémorisation du nouvel état du bouton haut
if (etat_bp_b != mem_b) // Changement d'état du bouton poussoir bas (front montant ou descendant)
{
if (etat_bp_b && !etat_bp_h && !fdcb && !porte_ouverte) // Appui sur BP bas mais pas sur le haut
{
Ouvrir_porte();
}
}
mem_b = etat_bp_b; // Mémorisation du nouvel état du bouton bas
}
void Fermer_porte_Initialisation() {
delay(5000);
while (!fdch) {
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
delay(delayTime);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, LOW);
delay(delayTime);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, HIGH);
delay(delayTime);
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, HIGH);
delay(delayTime);
Serial.println("Fermer porte"); // Affichage sur le moniteur série du texte
fdch = !digitalRead(fin_de_course_haut);
etat_bp_b = !digitalRead(commande_bas); // Inverse de la lecture sur entrée BP bas
if (fdch)
{
Serial.println("Porte en haut"); // Affichage sur le moniteur série du texte
Arret();
porte_fermee = true;
porte_ouverte = false;
Initialisation = true;
break;
}
}
}
void Fermer_porte() {
while (!fdch) {
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
delay(delayTime);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, LOW);
delay(delayTime);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, HIGH);
delay(delayTime);
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, HIGH);
delay(delayTime);
Serial.println("Fermer porte"); // Affichage sur le moniteur série du texte
fdch = !digitalRead(fin_de_course_haut);
etat_bp_b = !digitalRead(commande_bas); // Inverse de la lecture sur entrée BP bas
if (fdch || etat_bp_b)
{
porte_fermee = true;
porte_ouverte = false;
Serial.println("Porte en haut"); // Affichage sur le moniteur série du texte
Arret();
break;
}
}
}
void Ouvrir_porte() {
while (!fdcb) {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, HIGH);
delay(delayTime);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, LOW);
delay(delayTime);
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
delay(delayTime);
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, HIGH);
delay(delayTime);
Serial.println("Ouvrir porte"); // Affichage sur le moniteur série du texte
fdcb = !digitalRead(fin_de_course_bas);
etat_bp_h = !digitalRead(commande_haut); // Inverse de la lecture sur entrée BP haut
if (fdcb || etat_bp_h)
{
porte_fermee = false;
porte_ouverte = true;
Serial.println("Porte en bas"); // Affichage sur le moniteur série du texte
Arret();
break;
}
}
}
void Arret() {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
tempoActive = 0;
}
Pour sécuriser les alentours du poulailler la nuit, je souhaite détecter la présence d'un animal à l'extérieur du poulailler et l'effrayer.
Deux solutions sont possibles pour éloigner le renard le son ou la lumière. J'ai opté pour l'utilisation de la lumière avec un ruban de LED. Mais il serait possible de placer une radio qui serait mise en marche par l'arduino.
int Mouvement_PIR = 3; // Déclaration broche capteur de mouvement PIR
int commande_haut = 4; // Déclaration broche Bouton fermeture
int commande_bas = 5; // Déclaration broche Bouton ouverture
int fin_de_course_haut = 6; // Capteur fin de course haut
int fin_de_course_bas = 7; /// Capteur fin de course bas
int MotorPin1 = 8; // Déclaration broche IN1 L293D
int MotorPin2 = 9; // Déclaration broche IN2 L293D
int MotorPin3 = 10; // Déclaration broche IN3 L293D
int MotorPin4 = 11; // Déclaration broche IN4 L293D
int LED_Pin = 12; // Déclaration broche commande ruban LED
int LuminositePin = A0; // Déclaration broche LDR
int Luminosite = 0; // Variable de la luminosité
int Tour = 0;
int delayTime = 10; // Temps entre chaque pas 10ms
int Seuil_Jour = 350; // Variable de luminosité seuil pour le jour
int Seuil_Nuit = 200; // Variable de luminosité seuil pour la nuit
int Tempo_luminosite = 10000; // Temporisation luminosité 10 secondes = 10000ms
boolean porte_fermee = false; //Déclaration variable porte fermée
boolean porte_ouverte = false; //Déclaration variable porte ouverte
boolean fdch = false; // Déclaration variable Fin de Course Haut
boolean fdcb = false; // Déclaration variable Fin de Course Bas
boolean etat_bp_h = false, etat_bp_b = false; // Déclaration des variables bas et haut
boolean mem_h = false, mem_b = false, mem_fdch = false, mem_fdcb = false; // Déclaration des mémoires
boolean mem_mouvement = false; // Déclaration de la mémoire mouvement
boolean mem_lumiere = false; // Déclaration de la mémoire lumière
boolean mem_init = false; // Déclaration de la mémoire initialisation
boolean active_PIR = false; // Déclaration de la variable activation capteur PIR
boolean etat_mouvement = false; // Déclaration variable détection mouvement
boolean Detecte_lumiere = false; // Déclaration variable détection lumière
boolean Jour = true; // Déclaration variable Jour = 1 | Nuit = 0
boolean Initialisation = false; // Déclaration variable initialisation
// État d'activation de la tempo
boolean tempoActive = false;
boolean tempoActive_Securite = false;
// Temps à l'activation de la tempo
unsigned long tempoDepart = 0;
unsigned long tempoSecu = 0;
int Tempo_mouvement = 10000; // Temporisation mouvement 10 secondes = 100000ms
void setup() {
Serial.begin(9600); // Ouverture du port série et debit de communication fixé à 9600 bauds
pinMode(commande_haut, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée BP haut
pinMode(commande_bas, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée BP bas
pinMode(fin_de_course_haut, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Fin de course haut
pinMode(fin_de_course_bas, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Fin de course bas
pinMode(Mouvement_PIR, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Détecteur de mouvement PIR
pinMode(LED_Pin, OUTPUT); // Déclaration de la sortie LED
pinMode(MotorPin1, OUTPUT); // Déclaration de la sortie A- Moteur
pinMode(MotorPin2, OUTPUT); // Déclaration de la sortie A+ Moteur
pinMode(MotorPin3, OUTPUT); // Déclaration de la sortie B- Moteur
pinMode(MotorPin4, OUTPUT); // Déclaration de la sortie B+ Moteur
Lance_initialisation();
}
void Lance_initialisation() {
Fermer_porte_Initialisation();
}
void loop() {
Luminosite = analogRead(LuminositePin);
if (Initialisation) {
Serial.println(Luminosite); // Affichage sur le moniteur série du texte
if (Luminosite >= Seuil_Jour)
{
Detecte_lumiere = true;
}
if (Luminosite <= Seuil_Nuit)
{
Detecte_lumiere = false;
}
if (Detecte_lumiere != mem_lumiere) {
tempoActive = true;
tempoDepart = millis();
Serial.println("La lumière lance tempo"); // Affichage sur le moniteur série du texte
}
if (Detecte_lumiere && tempoActive && ((millis() - tempoDepart) >= Tempo_luminosite))
{
Jour = true;
Serial.println("Il fait jour"); // Affichage sur le moniteur série du texte
tempoActive = false;
if (!fdcb && !porte_ouverte) {
Ouvrir_porte();
}
}
mem_lumiere = Detecte_lumiere;
if (!Detecte_lumiere && tempoActive && (millis() - tempoDepart) >= Tempo_luminosite)
{
Jour = false;
Serial.println("Il fait nuit"); // Affichage sur le moniteur série du texte
tempoActive = false;
if (!fdch && !porte_fermee){
Fermer_porte();
}}
mem_lumiere = Detecte_lumiere;
}
etat_bp_h = !digitalRead(commande_haut); // Inverse de la lecture sur entrée BP haut
etat_bp_b = !digitalRead(commande_bas); // Inverse de la lecture sur entrée BP bas
fdch = !digitalRead(fin_de_course_haut); // Inverse de la lecture sur entrée Fin de course haut
fdcb = !digitalRead(fin_de_course_bas); // Inverse de la lecture sur entrée Fin de course bas
if (fdch != mem_fdch) // Changement d'état du fin de course haut (front montant ou descendant)
{
if (fdch)
{
Serial.println("Porte fermée !"); // Affichage sur le moniteur série du texte
}
if (!fdch)
{
Serial.println("Porte non fermée"); // Affichage sur le moniteur série du texte
}
}
mem_fdch = fdch; // Mémorisation du nouvel état du fin de course haut
if (fdcb != mem_fdcb) // Changement d'état du fin de course bas (front montant ou descendant)
{
if (fdcb)
{
Serial.println("Porte ouverte !"); // Affichage sur le moniteur série du texte
}
if (!fdcb)
{
Serial.println("Porte non ouverte"); // Affichage sur le moniteur série du texte
}
}
if (etat_bp_h != mem_h) // Changement d'état du bouton poussoir haut (front montant ou descendant)
{
Serial.println("Appui BP Haut"); // Affichage sur le moniteur série du texte
if (etat_bp_h && !etat_bp_b && !fdch && !porte_fermee) // Appui sur BP haut mais pas sur le bas
{
Fermer_porte(); // Lancer la fonction sens normal
}
}
mem_h = etat_bp_h; // Mémorisation du nouvel état du bouton haut
if (etat_bp_b != mem_b) // Changement d'état du bouton poussoir bas (front montant ou descendant)
{
if (etat_bp_b && !etat_bp_h && !fdcb && !porte_ouverte) // Appui sur BP bas mais pas sur le haut
{
if (!fdcb) {
Ouvrir_porte();
}
}
}
mem_b = etat_bp_b; // Mémorisation du nouvel état du bouton bas
boolean lecture_PIR=false;
unsigned long Tempo_PIR = 0; // Temporisation anti parasite
unsigned long intervalle = 100; // Temporisation anti parasite
lecture_PIR = digitalRead(Mouvement_PIR); // Lecture de l'état du capteur PIR
if (lecture_PIR != mem_mouvement && active_PIR && !Jour) // Changement d'état du capteur PIR (front montant ou descendant)
{
Tempo_PIR = millis();
}
if ((millis() - Tempo_PIR) > intervalle)
{
etat_mouvement = lecture_PIR;
}
if (etat_mouvement && active_PIR && !Jour)
{
tempoActive_Securite = etat_mouvement;
tempoSecu = millis();
Securite_poulailler();
}
mem_mouvement = lecture_PIR; // Mémorisation du nouvel état du capteur PIR
}
void Securite_poulailler() {
while((millis() - tempoSecu) <= Tempo_mouvement)
{
if(!fdch)
{
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
}
digitalWrite(LED_Pin, HIGH);
delay(random(50,200));
fdch = !digitalRead(fin_de_course_haut);
if(!fdch)
{
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, LOW);
}
digitalWrite(LED_Pin, LOW);
delay(random(50,400));
fdch = !digitalRead(fin_de_course_haut);
if(!fdch)
{
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, HIGH);
}
digitalWrite(LED_Pin, HIGH);
delay(random(50,500));
fdch = !digitalRead(fin_de_course_haut);
if(!fdch)
{
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, HIGH);
}
digitalWrite(LED_Pin, LOW);
delay(random(50,100));
fdch = !digitalRead(fin_de_course_haut);
}
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
digitalWrite(LED_Pin, LOW);
}
void Fermer_porte_Initialisation() {
delay(5000);
while (!fdch) {
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
delay(delayTime);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, LOW);
delay(delayTime);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, HIGH);
delay(delayTime);
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, HIGH);
delay(delayTime);
Serial.println("Fermer porte"); // Affichage sur le moniteur série du texte
fdch = !digitalRead(fin_de_course_haut);
etat_bp_b = !digitalRead(commande_bas); // Inverse de la lecture sur entrée BP bas
if (fdch)
{
active_PIR=true;
Serial.println("Porte en haut"); // Affichage sur le moniteur série du texte
Arret();
porte_fermee = true;
porte_ouverte = false;
Initialisation = true;
break;
}
}
}
void Fermer_porte() {
while (!fdch) {
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
delay(delayTime);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, LOW);
delay(delayTime);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, HIGH);
delay(delayTime);
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, HIGH);
delay(delayTime);
Serial.println("Fermer porte"); // Affichage sur le moniteur série du texte
fdch = !digitalRead(fin_de_course_haut);
etat_bp_b = !digitalRead(commande_bas); // Inverse de la lecture sur entrée BP bas
if (fdch || etat_bp_b)
{
porte_fermee = true;
porte_ouverte = false;
active_PIR=true;
Serial.println("Porte en haut"); // Affichage sur le moniteur série du texte
Arret();
break;
}
}
}
void Ouvrir_porte() {
while (!fdcb) {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, HIGH);
delay(delayTime);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, LOW);
delay(delayTime);
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
delay(delayTime);
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, HIGH);
delay(delayTime);
Serial.println("Ouvrir porte"); // Affichage sur le moniteur série du texte
fdcb = !digitalRead(fin_de_course_bas);
etat_bp_h = !digitalRead(commande_haut); // Inverse de la lecture sur entrée BP haut
if (fdcb || etat_bp_h)
{
porte_fermee = false;
porte_ouverte = true;
Serial.println("Porte en bas"); // Affichage sur le moniteur série du texte
Arret();
break;
}
}
}
void Arret() {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
tempoActive = 0;
}
Si vous voulez faire naître des poussins, découvrez cet article sur la couvaison et la naissance des poussins.
Eclosion et naissance de poussins (couveuse artificielle).
TP MELEC U2 | Préparation de l'automatisation d'une porte de poulailler.
Actus
Les promos du moment
Les vidéos electrotoile
📌 Politique de Confidentialité |
Cet article peut inclure du contenu sponsorisé et rémunérédes, des liens d'affiliation, notamment des liens Amazon (programme Partenaire Amazon EU)
me permettant de toucher une commission au pourcentage sur la vente des produits affiliés (sans augmentation de prix pour l'acheteur).
❤️💟 Si vous aimez les articles et pour soutenir le développement du site n'hésitez pas à partager sur les réseaux sociaux