Porte automatique pour poulailler

hello
c’est ce que demande ton prg

dans la loop,
tu lis la ldr, tu demandes deux tours au moteur, tu fais une tempo de 1 seconde.
puis comme c’est une loop, tu recommences
tu lis la ldr, tu demandes deux tours au moteur, tu fais une tempo de 1 seconde.
puis comme c’est une loop, tu recommences
tu lis la ldr, tu demandes deux tours au moteur, tu fais une tempo de 1 seconde.
puis comme c’est une loop, tu recommences
tu lis la ldr, tu demandes deux tours au moteur, tu fais une tempo de 1 seconde.

etc…

donc,
en debut de ton prg, declare un boolean haut=true; (on suppose que ta porte est ouverte)

et dans ta condition if, rajoute un test sur le flag

: if ((ValeurMesure<ValeurSeuil)&&haut ==false){xxxxxxx;xxxxxx; haut = true}

en fin de la fonction " montée" de la porte, tu rajoutes une ligne: haut = true;
et dans la partie else, passe le flag à false

bonjour , je viens de commander le matériel, carte uno arduino Arduino Motor Shield 2 x 2 A Module à photorésistance GT1107 j y reçois dans la semaine. bon reste plus qu a apprendre la programmation :(

donc je récapitule : position initiale :porte ouverte , ldr =1 ,capteur haut actionné, moteur a l 'arrêt, frein moteur

mise en route: ldr=0 ( je verrai en fonction de la luminosité) moteur marche : sens 1 ( descente de la porte) capteur bas actionné arrêt moteur frein moteur

si ldr=1 actionner plus de 5 minute moteur marche: sens 2 (montée de la porte) capteur haut actionné arrêt moteur frein moteur

je veut rajouter une mise en sommeil de la carte pour eco d’énergie mais je sais pas ou la mettre?

branchement: carte uno alimenté en 9v moteur sur shield avec alimentation 12 v indépendante

ldr branchée sur A0

capteur haut sur A1 capteur bas sur A2

voila j' en suis là . si vous voyez des erreurs ou des oublis merci d 'avance

bonsoir , je viens de recevoir le matériel, c est tout petit :slight_smile:
allez maintenant au boulot.
c 'est parti :
1 ère question
pour la librairie du shield arduino r3 moteur, je doit bien inclure:#include<stepper.h>
merci pour vos réponses.

bonsoir , j ai besoin d’un petit coup de main .
j ai réussi a faire fonctionner le moteur
j ai réussi a contrôler la ldr pour avoir les seuil jour et nuit
ensuite j ai essayé de faire fonctionner le moteur avec la ldr :
seuil jour : rotation moteur pendant 2 seconde
seuil nuit : rotation inverse moteur pendant de 2 seconde
mon souci , j’ utilise le frein moteur( voir programme) , mais je voudrais l’ arrêter ( c’ est a dire moteur a l ‘arrêt sans frein), mais je ne vois pas comment, j ai inséré break mais le frein moteur est toujours actif.
je met le programme afin de voir ou est l’ erreur
merci d avance

const int rotationA = 12;
const int vitesseA = 3;
const int freinA= 9;


const int delayLength = 60;
int ldrPin = 3; // ldr sur pin 3
int ldrReading; // lecture ldr
int VALIDE_MOTEUR = 0; //variable pour determiner si le moteur doit tourner ou non


void setup() {
// donnée de depart
   Serial.begin(9600);
   pinMode(rotationA, OUTPUT);
   pinMode(freinA, OUTPUT);
   pinMode(vitesseA, OUTPUT);
  
   
}

void loop() {
  ldrReading = analogRead(ldrPin);
  Serial.print("Analog reading = ");
  Serial.print(ldrReading); 
 
  if (ldrReading < 100 && VALIDE_MOTEUR == 0)
 
  {
    Serial.println(" - Nuit");
    for (int i=0;i<20;i++){
  digitalWrite(freinA, LOW);// arret du frein
  digitalWrite(rotationA, HIGH);//rotation moteur descente
  analogWrite(vitesseA, 255);//vitesse a fond
 
  delay(2000);
 
  digitalWrite(freinA,HIGH);//frein
  break;//arret
    
    }
  VALIDE_MOTEUR=1;
  } 
  
 
    if (ldrReading > 600 && VALIDE_MOTEUR == 1)
  {
    Serial.println(" - jour");
   for (int i=0;i<20;i++){
  digitalWrite(freinA, LOW);  // arret frein
  digitalWrite(rotationA, LOW);   // rotation moteur montée
  analogWrite(vitesseA, 255);   // vitesse a fond
 
  delay(2000);
  
  digitalWrite (freinA,HIGH);//frein
  break;//arret
   
 

}
VALIDE_MOTEUR=0;
   }
   }

hello
int ldrPin = 3; // D3 entrée digitale

ldrReading = analogRead(ldrPin);

if (ldrReading < 100 && VALIDE_MOTEUR == 0)

tu lis quoi sur ton moniteur avec les deux lignes suivantes ?

Serial.print("Analog reading = ");
Serial.print(ldrReading);

bonsoir , j utilise un shield moteur arduino r3 , j ai mis ma ldr sur le pin 3 car le 0 et le 1 sont pris par le shield
ensuite j utilise la lecture du pin 3 pour avoir la valeur ,et si il est inférieur a 100 cela valide la fonction moteur 0.
pour avoir la valeur qu il me fallait j ai branché la ldr seul et regardé les valeurs que cela me donnais sur le moniteur.je ne peut pas lire en fonction car je suis branché avec 12 volt externe

help,
bonjour ,
j 'ai besoin d ‘un petit coup de main ,
j e m explique , j ’ essaye de realiser une porte de poulailler( encore),je dispose d’ un uno et un moteur shield r3 arduino.
j 'ai essayé de faire un programme ( étant débutant) pour faire tourner un moteur 12v avec ldr )
2 seconde montée lorsqu il fait jour
2 seconde descente lorsqu il fait nuit
mon souci :
je n arrive pas a arrêté le moteur a part avec le frein moteur, je voudrais qu il s arrête après avoir utiliser le frein moteur .
voici le programme:

const int rotationA = 12;
const int vitesseA = 3;
const int freinA= 9;


const int delayLength = 60;
int ldrPin = 3; // ldr sur pin 3
int ldrReading; // lecture ldr
int VALIDE_MOTEUR = 0; //variable pour determiner si le moteur doit tourner ou non


void setup() {
// donnée de depart
   Serial.begin(9600);
   pinMode(rotationA, OUTPUT);
   pinMode(freinA, OUTPUT);
   pinMode(vitesseA, OUTPUT);
  
   
}

void loop() {
  ldrReading = analogRead(ldrPin);
  Serial.print("Analog reading = ");
  Serial.print(ldrReading); 
 
  if (ldrReading < 100 && VALIDE_MOTEUR == 0)
 
  {
    Serial.println(" - Nuit");
    for (int i=0;i<20;i++){
  digitalWrite(freinA, LOW);// arret du frein
  digitalWrite(rotationA, HIGH);//rotation moteur descente
  analogWrite(vitesseA, 255);//vitesse a fond
 
  delay(2000);
 
  digitalWrite(freinA,HIGH);//frein
  
  break;//arret
    
    }
  VALIDE_MOTEUR=1;
  } 
  
 
    if (ldrReading > 600 && VALIDE_MOTEUR == 1)
  {
    Serial.println(" - jour");
   for (int i=0;i<20;i++){
  digitalWrite(freinA, LOW);  // arret frein
  digitalWrite(rotationA, LOW);   // rotation moteur montée
  analogWrite(vitesseA, 255);   // vitesse a fond
 
  delay(2000);
  
  digitalWrite (freinA,HIGH);//frein
  break;//arret
   
 

}
VALIDE_MOTEUR=0;
   }
   }

j ai utilisé la fonction break mais ça ne fonctionne pas
merci d 'avance pour votre aide

Bonjour à tous,

Voici la dernière version de mon code pour tenir compte des dernières nouvelles du compilateur version 1.8.5. et la nouvelle bibliothèque DS1307 pour la RTC. Le croquis se compile également avec Arduino Web Editor .
Bon Année à tous.
Etibou

Poulailler_3.ino (37.3 KB)

bonjour, cela fait plusieurs jours que te travaille à plein temps et avec plaisir pour trouver des informations pour automatiser une porte de poulailler en utilisant : une nano arduino, un moteur 12v unipolaire, une ldr, deux capteurs de fin de course, une alimentation par panneau solaire… Mes plans de construction sont terminés (poteaux sur pilotis, cuve plastique 1000 l à l’intérieur pour aménagement du poulailler pour faciliter le nettoyage et lutter contre les poux rouges, habillage en bois à l’extérieur, et toit végétalisé. La porte est une porte à guillotine en plastique placée entre deux glissières alu en U. je n’ai jamais rien réalisé en électronique, pour les plans et la réalisation de la construction du poulailler, je peux, mais pour l’électronique non. j’ai essayé de comprendre le fonctionnement, et beaucoup lu ces derniers jours, j’ai réalisé deux croquis (je ne dis pas schémas car je ne sais pas faire, mais j’ai fait des images des composants que je pense devoir utiliser et un assemblage en fonction de ce que j’ai cru comprendre) un pour l’alimentation par panneau solaire, et un autre pour les câblages de l’ensemble des composants. Je demande vraiment votre indulgence car c’est pour moi une première. Je m’adresse à vous pour un crash test de mes solutions, sont elles viables sans risque ? faut il les mettre à la poubelle et les refaire ??? bref, pouvez vous m’apporter vos corrections et vos conseils. Je vous en remercie d’avance. Bien cordialement et à bientôt j’espère. (trois documents en pièces jointes : porte, alimentation et montage des composants.

problème avec les fichiers, nouveau post pour compléter.

porte.pdf (161 KB)

Bonjour,

Juste une petite question : Pourquoi gérer plusieurs tensions car tout est réalisable en 12 V Batterie, Moteur, Panneau solaire ? Il faut faire un petit calcul sur la consommation de l'ensemble et sur la capacité d'alimentation sinon il faudra prévoir une alimentation complémentaire: Les poules vont rester dehors ou dedans l'hiver si la batterie se vide totalement.. Bon courage. Etibou

bonjour, j'avais prévu une tension 5v pour la carte nano arduino et 12 v pour le moteur, mais à te lire : donc pour plus de simplicité et plus de réserve : une batterie 12 v chargée par le panneau solaire, qui ensuite alimente et le moteur et la carte arduino. je revois ma copie. Merci pour tes conseils. et bonne journée.

bonjour, mon système fonctionne depuis 15 jours grâce au coup de main de ETIBOU. mon système fonctionne avec un panneau 10w 12v par contre j alimente avec 2 tensions 12v pour le shield moteur 9 v pour le uno grâce a un réducteur de tension (12-9v) car j avais peur que 12 v soit risqué pour la carte.

bonjour à tous,

merci encore à Etibou pour m’avoir communiqué un code pour gérer la porte du poulailler.

Mais… j’ai encore besoin de vos services :

J’ai maintenant reçu l’ensemble des composants dont j’avais besoin et j’ai construit une maquette grandeur nature de la future porte du poulailler (j’avance par ailleurs dans sa construction), porte réelle pour tester si le moteur peut soulever cette porte sans problème.

J’ai réalisé les câblages provisoires (d2-int1 d3-int2 d4-int3 d5-int4) (voir fichier fritzing) en me basant sur le site Eskimon http://eskimon.fr/290-arduino-603-petits-pas-le-moteur-pas-pas, mais rien à faire, je n’arrive pas à faire fonctionner le moteur.

Celui ci est alimenté directement sur le module ALM2003 par une batterie 12-6v chargée par panneaux solaires, relié au gnd de la carte arduino nano.

il s’agit du moteur 28BYJ-48 12V (spec en annexe).

capteurs de fin de course haut et bas (d11 et d12)

photoresistance (a0)

les tests d’alimentation sont corrects sur tous les points d’entrée, mais je n’ai pas le matériel pour vérifier leur puissance.

j’ai modifié sur le code les nombres de pas, vitesse … mais rien n’y fait.

bref, je ne sais que faire.

si vous pouviez voir les fichiers que j’ai mis en pièces jointes pour voir ce que j’ai mal fait, car je pense être passé à coté de quelques choses (au pluriel…).

merci d’avance et bonne journée

fritzing.doc (357 KB)

MOTEUR.doc (76.6 KB)

etienne_v0.ino (3.55 KB)

complément photo maquette

maquette.doc (978 KB)

Bonjour;

Je ne vois pas le soucis. Il faut décomposer les fonctions pour déterminer ce qui ne marche pas.
Le fichier ino joint teste le moteur. Rotation dans un sens puis dans l’autre.
A suivre.

test_stepper.ino (995 Bytes)

bonsoir,

bon, je démonte tout, et refait les branchements en pas à pas en réalisant les tests par étapes.

Merci pour le code de test moteur.

Je vous tiens informés

à bientôt

bonjour à tous,

avancée des tests avec alimentation faite par usb arduino

tests : carte nano : ok
module uln2003 : ok
moteur ok mais très lent avec modification du code stepper de cette façon, je pense qu’il sera plus rapide sur du 12v.

#include <Stepper.h>

const int stepsPerRevolution = 64; // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 2, 4, 3, 5);

void setup() {
// set the speed at 60 rpm:
myStepper.setSpeed(100);
// initialize the serial port:
Serial.begin(9600);
}

void loop() {
// step one revolution in one direction:
Serial.println(“clockwise”);
myStepper.step(stepsPerRevolution);
delay(400);

// step one revolution in the other direction:
Serial.println(“counterclockwise”);
myStepper.step(-stepsPerRevolution);
delay(400);
}

Je continue les tests avec l’ajout des fin de courses puis de la photoresistance.

A bientôt

Hello,

Une bonne nouvelle sauf qu'il me semble que la vitesse de rotation d'un moteur pas à pas ne dépend pas de sa tension d'alimentation si celle-ci est dans sa plage de fonctionnement sauf si l’intensité de la source de courant est trop faible..

A suivre.

Bonjour à tous,

merci pour toutes ces informations, après avoir épluché l’internet et les 6 pages de ce forum, je suis rendu avec un Arduino uno, un capteur de luminosité BH1750, un shield moteur Adafruit V2 et un moteur pas à pas Nema 17.

J’essaye de faire quelque chose de simple car je suis loin d’être un programmeur, et c’est la que je bloque, le moteur réagi très bien au capteur de luminosité pour l’ouverture et la fermeture de la porte, sauf qu’il ne s’arrête jamais de tourner…

Voici mon code:

/*
  BH1750.h pour lecture de la luminosité (modele GY-30)
  Adafruit MotorShield V2 pour la gestion du moteur Stepper Nema17
  Sur Arduino Uno
*/

#include <Wire.h>
#include <BH1750.h>
#include <Adafruit_MotorShield.h>

// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 
// Or, create it with a different I2C address (say for stacking)
// Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61); 

// Connect a stepper motor with 200 steps per revolution (1.8 degree)
// to motor port #2 (M3 and M4)
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);

BH1750 lightMeter;

void setup(){

  Serial.begin(9600);

  // Initialize the I2C bus (BH1750 library doesn't do this automatically)
  Wire.begin();
  // On esp8266 you can select SCL and SDA pins using Wire.begin(D4, D3);

  lightMeter.begin(BH1750::ONE_TIME_HIGH_RES_MODE);
  //lightMeter.setMTreg(69);  // not needed, only mentioning it

  Serial.println(F("BH1750 Test begin"));

  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Stepper test!");

  AFMS.begin();  // create with the default frequency 1.6KHz
  //AFMS.begin(1000);  // OR with a different frequency, say 1KHz
  
  myMotor->setSpeed(10);  // 10 rpm   
}



void loop() {
  float lux = lightMeter.readLightLevel(true); //lecture de la luminosité
  Serial.print(F("Light: "));
  Serial.print(lux);
  Serial.println(F(" lx"));

if (lux > 10) {
    
    myMotor->step(200, FORWARD, SINGLE);
    Serial.println(F("Ouverture porte"));
}
    else if (lux < 10) {
      myMotor->step(200, BACKWARD, SINGLE); 
      Serial.println(F("Fermeture porte"));
    }
}

Si une âme charitable voudrait m’indiquer ce qu’il manque dans mon code.

J’avais aussi l’idée de le mettre sur mon réseau MySensors qui fonctionne avec Domoticz, je vais me pencher la dessus, cela permettrait la gestion des heures du levé et couché du soleil a travers Domoticz. Mais bon une étape a la fois…