Porte Poulailler automatique

a marqué ce sujet comme résolu.

Bonjour à tous, je suis nouveau sur ce forum alors un peu d’indulgence si je ne suis pas au bon endroit pour poser ma question: Merci.

J’ai donc en projet de piloter un moteur d’essuie glace pour ouvrir et fermer la trappe du poulailler. Pour cela j’ai acheté une carte Arduino uno, une capteur et une cellule photorésistante (les liens sont dessous). Pour l’alim de l’arduino un bloc d’un ordi, j’utilise le 12v via la prise jack de la carte L’idée du programme étant de commander le moteur dans un sens ou dans l’autre en fonction de l’info du capteur et de le commander tant que le capteur concerné n’est pas activé, par exemple je commande l’ouverture sous condition mais jusqu’à ce que le fin de course haut soit actionné. 1) le bloc relais: un état high sur les sorties num 10 et 11 met les relais au repos 2) j’utilise la sortie NUM (D0) du capteur pour simuler le jour ou la nuit(0-5V), directement branchée sur la pin 3 de la carte. L’idée étant tout de même d’utiliser la sortie AO pour commander le système et éventuellement la D0 peut avoir une autre utilité. 3) les fin de course sont en pullup ouverts au repos et fixent les entrées num 7 et 8 à l’état 0 quand la trappe passe dessus. Voilà merci pour votre AIDE.

capteur
bloc relais

int a; //capteur1 porte ouverte (capteur haut) int b; //capteur2 porte ferme (capteur bas)

int PinLumiere; //Broche Analogique de mesure d’éclairement int PinSeuilLumiere; //Broche Numérique mesure d’éclairement int eclaire(0); //0 ou 1 (0=éclairé>seuil, 1=ombre<seuil)

void setup() { Serial.begin(9600); // Connection série à 9600 Baud pinMode(11,OUTPUT); // moteur relay ouverture pinMode(10,OUTPUT); // moteur relay fermeture pinMode(8,INPUT_PULLUP); // capteur1 porte ouverte pinMode(7,INPUT_PULLUP); // capteur2 porte fermée

pinMode(PinLumiere, INPUT); //pin A0 en entrée analogique pinMode(PinSeuilLumiere, INPUT); //pin 3 en entrée numérique }

void loop() { eclaire = digitalRead(PinSeuilLumiere);

a = digitalRead(8); //ecrit sur a l’etat du capteur 1 0 == porte ouverte b = digitalRead(7); //ecrit sur b l’etat du capteur 2 0 == porte ferme { //initialisation des relais à l’état zéro digitalWrite(10,HIGH); //obligé de mettre au niveau 1 pour avoir les relais état 0 digitalWrite(11,HIGH); delay(100); } if (eclaire == 0 && b == 0 ) // si jour & si b pas ouvert alors tu actives le moteur pour ouvrir { digitalWrite(11,LOW); } while(a!=0) // commande moteur tant que le fin de course haut n’est pas atteint { digitalWrite(11,LOW); }

if (eclaire == 1 && a == 0 )// si nuit & si a fermé alors tu actives le moteur pour fermer { digitalWrite(10,LOW); } while(b!=0)// commande moteur tant que le fin de course bas n’est pas atteint { digitalWrite(10,LOW); } }

le code en entier

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
int a; //capteur1 porte ouverte (capteur haut)
int b; //capteur2 porte ferme (capteur bas)
int PinLumiere;        //Broche Analogique de mesure d'éclairement
int PinSeuilLumiere;   //Broche Numérique mesure d'éclairement
int eclaire(0);    //0 ou 1 (0=éclairé>seuil, 1=ombre<seuil)

void setup() {
  Serial.begin(9600); // Connection série à 9600 Baud
  pinMode(11,OUTPUT); // moteur relay ouverture
  pinMode(10,OUTPUT); // moteur relay fermeture
  pinMode(8,INPUT_PULLUP); // capteur1 porte ouverte
  pinMode(7,INPUT_PULLUP); // capteur2 porte fermée
  pinMode(PinLumiere, INPUT);       //pin A0 en entrée analogique
  pinMode(PinSeuilLumiere, INPUT);  //pin 3 en entrée numérique
}
  void loop() 
{
  eclaire = digitalRead(PinSeuilLumiere); 
  a = digitalRead(8); //ecrit sur a l'etat du capteur 1 0 == porte ouverte
  b = digitalRead(7); //ecrit sur b l'etat du capteur 2 0 == porte ferme
  {
    //initialisation des relais à l'état zéro
   digitalWrite(10,HIGH); //obligé de mettre au niveau 1 pour avoir les relais état 0
   digitalWrite(11,HIGH);
   delay(100);
  }
  if (eclaire == 0 && b == 0 ) // si jour & si b pas ouvert alors tu actives le moteur pour ouvrir
{
  digitalWrite(11,LOW);
}
  while(a!=0) // commande moteur tant que le fin de course haut n'est pas atteint
  {
    digitalWrite(11,LOW);
  }
 if (eclaire == 1 && a == 0 )// si nuit & si a fermé alors tu actives le moteur pour fermer
{
 digitalWrite(10,LOW);
}
 while(b!=0)// commande moteur tant que le fin de course bas n'est pas atteint
{
  digitalWrite(10,LOW);
}
}

J’ai pas bien compris le principe de la mesure de lumière sur entrée numérique. Tu veux faire comment ?

Ensuite un conseil, pour faire tes tests de programme, fais en sorte que le moteur tourne dans le vide et actionne toi-même les fins de course. Car si le moteur se bloque, tu vas faire chauffer le moteur/relais/alim’ et risque fort de les endommager.

+0 -0

bonjour, je souhaite prendre en compte la sortie DO du capteur comme seuil de déclenchement, elle me parait plus simple à intégrer dans mon programme que la sortie AO qui elle est analogique et dont la gestion est plus compliquée pour moi, maintenant je ne suis pas borné et présent dans ce forum pour apprendre. Compte tenu que le capteur possède un potentiomètre une fois la prog de la sortie D0 faite je n’aurai plus qu’à affiner mon seuil (jour/nuit) avec le potentiomètre. Pour les conseils effectivement j’avais dans l’idée de procéder ainsi. Merci

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte