Go Down

Topic: Porte automatique pour poulailler (Read 31378 times) previous topic - next topic

etibou

Hello,

Ton lien youtube n'est pas valide . Pb de droit de lecture ?
Pour la tempo, il y a plusieurs solutions, tout dépend du temps à attendre en ms ou en seconde..
Il y a plein d'exemples dispos... Recherche tempo arduino...
A+

allanco2

Ok ok merci , j'attend de recevoir le moteur pour me remettre dedans !

Lien Youtube fctionnel :)

allanco2

#62
Nov 29, 2017, 01:46 pm Last Edit: Nov 29, 2017, 04:59 pm by allanco2
Bonjour ,

Maintenant que j'ai le moteur j'ai un problème de code :

En effet le moteur tourne de deux tours sans arrêts dans sa condition ouvert ou fermé :

Code: [Select]


//*Projet SavetheChickens

// Integre la librairie moteur pas pas
#include <Stepper.h>

// Assignation des entrées / sorties
int pinLEDRED= 13; //rouge = fermeture
int pinLEDGRE= 12; //verte = ouverture                   
int pinCapteur=0;  // Photoresistance

const int stepsPerRevolution = 2048; //2048 pour la 28BYJ-48 = 1 tour
int Nbre_tour ;
// initialiser la bibliotheque stepper sur les broches D8 a D11:
Stepper myStepper(stepsPerRevolution, 8,10,9,11); //Attribution des broches

// Déclaration des variables

int ValeurMesure = 0;   //phtoresistance lus                 
int ValeurSeuil=500;   //photoresitance seuil

void setup(){
     pinMode(pinLEDRED,OUTPUT);
     pinMode(pinLEDGRE,OUTPUT);
       // reglage de la vitesse (28BYJ-48):
  myStepper.setSpeed(14); // de 4 a 14 vitesse de rotation       
}

void loop(){
     ValeurMesure = analogRead(pinCapteur); // Mesure de la tension
         
 if
      (ValeurMesure<ValeurSeuil){            // Si la mesure est inférieure au seuil fermeture de la porte
          digitalWrite(pinLEDRED,HIGH);
          digitalWrite(pinLEDGRE,LOW);
          Nbre_tour = 2; //Faire 2 tours dans un sens:
          myStepper.step(stepsPerRevolution*Nbre_tour);
          delay(1000);
          }
     else                         // Sinon  ouverture de la porte
          {digitalWrite(pinLEDRED,LOW);
          digitalWrite(pinLEDGRE,HIGH);
          Nbre_tour = 2; //Faire 2 tours dans l autre sens:
          myStepper.step(-stepsPerRevolution*Nbre_tour);
          delay(1000);
          }
}



Avez vous une idée ?

etibou

Bonjour,

Il faut décomposer le problème pour savoir si le problème vient de la lecture de la tension ou de la commande moteur.
A+

dfgh

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   

pralfi

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

pralfi

bonsoir , je viens de recevoir le matériel, c est tout petit  :)
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.


pralfi

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
Code: [Select]

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;
   }
   }
 


dfgh

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);

pralfi

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

pralfi

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:
Code: [Select]

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

Go Up