Bonjour ,
Voila pas mal de temps que je planche sur ce projet (ouverture le matin au levé du soleil fermeture le soir )
Je sais que plusieurs topic se sont ouvert a ce sujet mais rien ne ma aider, je débute dans la programmation et j'avoue que je galère
je souhaité crée quelque chose de simple pour débuter
Mais actuellement je suis bloqué avec les fin de courses, il ne me coupe pas les mouvement,
si ils sont enclencher il me les empêche, mais ne me les coupe pas
tu as quelque chose pour les détections fin de courses? bouton? capteur? aimant?
pourquoi 2 moteurs? pourquoi ne pas utiliser un seul moteur, pour ouvrir et fermer?
pourquoi pour faire simple, utiliser le temps pour fermer/ ouvrir la porte
ouvrir/fermer pendant 30 secondes
Tu veux faire le matin et soir... OK mais comment détecter le soir et matin?
deja, fait une liste de ce que tu veux faire.
Ouvrir/ fermer => comment? avec un moteur
-detecter l'heure du soir et du matin => horloge RTC ? capteur de lumiere?
etant donner que les poules rentre le soir avant le couché du soleil, l'heure change,
Chez moi la semaine dernière allaient se coucher vers les 21H30, et cette semaine elle rentrent a 21H50.
Donc comment faire pour détecter de changement d'heure?
Donc avant tout programme, faire un petit cahier des charges et faire un organigramme, qui va t'aider a programmer ensuite.
Merci de me répondre et aussi vite qui plus est
oui contact standard je les symbolise par des bp pour mes essais
non il n'y a qu'un moteur j'ai appelé mes relais comme sa pour que je mis retrouve plus facilement
J'ai pris une photorésistance car je suis pour l'instant partie sur le plus facile
hello, +1 avec l'établissement du cahier des charges
dans un premier temps, teste ça
//si le passage du seuil de 500 n'est pas franc, prévoir une fourchette
void loop ()
{
int lum = analogRead(cpt);
int etatFdch = digitalRead(fdch);
int etatFdcb = digitalRead(fdcb);
if (lum < 490) //si le capteur de lumière passe au dessous de seuil de 490
{
if (etatFdch == HIGH) //si le fdch n'est pas atteint
{
digitalWrite(mh, HIGH); digitalWrite(mb, LOW);//alors moteur de montée actionné
}
else //sinon ( si le fdch est atteint )
{
digitalWrite(mh, LOW); digitalWrite(mb, LOW); //alors moteur de montée stoppé
}
}
if (lum > 510) //si le capteur de lumière passe au dessus de seuil de 510
{
if (etatFdcb == HIGH) //si le fdcb n'est pas atteint
{
digitalWrite(mh, LOW); digitalWrite(mb, HIGH); //alors moteur de descente actionné
}
else //sinon ( si le fdcb est atteint )
{
digitalWrite(mh, LOW); digitalWrite(mb, LOW); //alors moteur de descente stoppé
}
}
}
J'ai recement réaliser une trappe de poulailler en recupérant un mécanisme de porte de garage.
J'ai utilisé un vieux transfo 12v auquel j'ai ajouté un redresseur de tension pour passer de l'alternatif au continu accepté par mon moteur.
il y a un contacteur fin course haut et bas. Le changement de sens du moteur est géré par un module L298n.
voici mon code qui pourrait t'aider
//************************************************//
// GESTION D'UNE TRAPPE DE POULAILLER EN FONCTION DE LA LUMIERE
// zimmermann frédéric
// 18 01 2015
//************************************************
unsigned long tempsdebutouv = 0;
unsigned long tempsdebutferme = 0 ;
int PinLumiere=0; //Broche Analogique de mesure d'éclairement
int PinSeuilLumiere=3; //Broche Numérique mesure d'éclairement
int tension=0; //Mesure de tension (valeur élevée si sombre)
int eclaire =0; //0 ou 1 (0=éclairé>seuil, 1=ombre<seuil)
int ENB = 11; // Reglage vitesse moteur
int IN3 = 8; // pont en H moteur A
int IN4 = 9; // pont en H moteur A
int fin_coursebas = 2; // bouton pin 2
int fin_coursehaut = 4; // bouton pin 2
int ledbas = 6;
int ledhaut= 5;
int etatcapteurbas= HIGH; // etat du capteur bas
int etatcapteurhaut = LOW; // etat du capteur haut
int bouton = 12;
int iphone = 13;
int etatiphone = 0;
int etatbouton = 0;
int buzzer = 7;
int etatmoteur = 0; // 0 = moteurarret , 1 = moteur fermeture, 2= moteur ouverture
boolean trappe_ferme ;
boolean trappe_ouverte;
boolean trappe_milieu_course;
void setup() {
Serial.begin(9600); //Connection série à 9600 baud
pinMode(PinLumiere,INPUT); //pin A0 en entrée analogique
pinMode(PinSeuilLumiere,INPUT); //pin 3 en entrée numérique
pinMode(ENB,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(fin_coursebas,INPUT);
pinMode(fin_coursehaut,INPUT);
pinMode(ledbas, OUTPUT);
pinMode(ledhaut, OUTPUT);
pinMode(bouton, INPUT);
pinMode(buzzer,OUTPUT);
pinMode(iphone, INPUT);
}
void loop() { //boucle principale
etatbouton = digitalRead(bouton);
etatiphone = digitalRead(iphone);
etatcapteurbas = digitalRead(fin_coursebas);
etatcapteurhaut = digitalRead(fin_coursehaut);
tension = analogRead(PinLumiere); // Lit la tension analogique
eclaire = digitalRead(PinSeuilLumiere);
Serial.begin(9600); //Connection série à 9600 baud
Serial.println(etatiphone);
Serial.println( tension);
delay (400);
//---------------------------------------------------// VERIF DE L'ETAT DE LA TRAPE
// verif si trappe fermé
if (etatcapteurbas == LOW && etatcapteurhaut == HIGH)
{ trappe_ferme = true;
digitalWrite(ledbas, HIGH);
} // la trappe est fermé
else { digitalWrite(ledbas, LOW);
trappe_ferme = false;}
// Vérif si trappe ouverte
if (etatcapteurhaut == LOW && etatcapteurbas == HIGH)
{trappe_ouverte = true;
digitalWrite(ledhaut, HIGH);
} // la trappe est ouverte
else { digitalWrite(ledhaut, LOW);
trappe_ouverte = false; }
// si la trappe se trouve à mi-course
if (etatcapteurhaut == HIGH && etatcapteurbas == HIGH)
{trappe_milieu_course = true;
digitalWrite (buzzer, HIGH); // buzzer en route
delay (300);
digitalWrite (buzzer, LOW);
delay (300); }
//____________________________________________________// ACTIONNEMENT DU MOTEUR DANS LES 2 SENS
// si il fait nuit et la trappe est ouverte
if (analogRead(PinLumiere) > 1015 && trappe_ouverte == true)
{
moteurfermeture(); // on ferme
etatmoteur = 1; // le moteur est actionné en fermeture
}
// si il fait jour et trappe fermé
if (analogRead(PinLumiere) < 610 && trappe_ferme == true)
{
moteurouverture(); // on ouvre
etatmoteur = 2;
}
//_______________________________________________________// ARRET DU MOTEUR
// si moteur fermeture en route et si trappe fermé
if ( etatmoteur == 1 && trappe_ferme == true)
{ moteurarret();
etatmoteur = 0;
}
// si moteur ouverture en route et si trappe ouverte
if ( etatmoteur == 2 && trappe_ouverte == true )
{ moteurarret();
etatmoteur = 0;
}
// gestion bloquage moteur
// __________________________________________________________GESTION DU BOUTON
// bouton appuyé et trappe ouvert
if ( etatbouton == 1 && trappe_ouverte == true)
{moteurfermeture();
etatmoteur = 1 ;
etatbouton = !etatbouton ;
}
// bouton appuyé et trappe fermé
if ( etatbouton == 1 && trappe_ferme == true)
{moteurouverture();
etatmoteur = 2 ;
etatbouton = !etatbouton ;
}
// trappe mi-course et bouton appuyé
if (trappe_milieu_course == true)
{ while( etatbouton == HIGH)
{moteurouverture();
etatmoteur=2 ;
etatbouton = !etatbouton ;
}}
// __________________________________________________________GESTION DE L'IPHONE
// iphone appuyé et trappe ouvert
if ( etatiphone == 1 && trappe_ouverte == true)
{moteurfermeture();
etatmoteur = 1 ;
etatiphone = !etatiphone ;
}
// iphone appuyé et trappe fermé
if ( etatiphone == 1 && trappe_ferme == true)
{moteurouverture();
etatmoteur = 2 ;
etatiphone = !etatiphone ;
}
// trappe mi-course et iphone appuyé
if (trappe_milieu_course == true)
{ while( etatiphone == HIGH)
{moteurouverture();
etatmoteur=2 ;
etatiphone = !etatiphone ;
}}
//____________________________________________________ GESTION PROBLEME MOTEUR
// blocage pendant la fermeture
if ((etatmoteur == 1) && (trappe_milieu_course == true) && (( millis()-tempsdebutferme)>= 20000))
{ moteurarret();
etatmoteur = 4;}
// blocage pendant l'ouverture
if ((etatmoteur == 2) && (trappe_milieu_course == true) && (( millis()-tempsdebutouv)>= 28000))
{ moteurarret();
etatmoteur = 4;}
}
void moteurouverture(){
tempsdebutouv = millis();
digitalWrite(ENB, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
void moteurfermeture()
{ tempsdebutferme = millis();
digitalWrite(ENB, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void moteurarret()
{digitalWrite(ENB, LOW);
}
/code]
dans mon cas, c'est une cellule phitoresistive qui gère l'ouverture et la fermeture : si il fait pratiquement totalement nuit, on ferme. Si il fait complètement jour, on ouvre. Entre les , on ne fait rien . Je peux également contrôler la trappe grâce a un bouton et à distance avec mon iPhone .
J'ai également installé une caméra ip pour vérifier la présence de toutes les poules et éventuellement fermer ou ouvrir .