moteur pas a pas et LDR

Bonjour j’ai pour but de faire fonctionner un moteur pas a pas en fonction de la luminosité
j’ai mon programme pour faire fonctionner la LDR qui fonctionne très bien
ci dessous le programme

int photocellPin = 0; // the cell and 10K pulldown are connected to a0
int photocellReading; // the analog reading from the analog resistor divider


void setup() {
// We'll send debugging information via the Serial monitor
   Serial.begin(9600);
   pinMode(13,OUTPUT); 
}

void loop() {
  photocellReading = analogRead(photocellPin);
  Serial.print("Analog reading = ");
  Serial.print(photocellReading); // the raw analog reading
  // We'll have a few threshholds, qualitatively determined
  if (photocellReading < 900) {
    Serial.println(" - Noir");
    digitalWrite(13,HIGH);
    delay(2000);
  }
    else {
    Serial.println(" - jour");
    digitalWrite(13,LOW);
    delay(2000);
  } 
}

et mon moteur pas a pas qui fonctionne avec un shield arduino moteur pas a pas qui fonctionne avec le programme ci dessous qui fonctionne très bien aussi

const int dirA = 12;
const int dirB = 13;

const int motA = 3;
const int motB = 11;

const int brakeA = 9;
const int brakeB = 8;

const int delayLength = 30;

void setup() {
  pinMode(dirA, OUTPUT);
  pinMode(dirB, OUTPUT);
  pinMode(brakeA, OUTPUT);
  pinMode(brakeB, OUTPUT);
  pinMode(motA, OUTPUT);
  pinMode(motB, OUTPUT);
}

void loop() {
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, HIGH);
  
  digitalWrite(dirA, HIGH);
  digitalWrite(motA, HIGH);
  
  delay(10);
  
  digitalWrite(brakeA, HIGH);
  digitalWrite(brakeB, LOW);
  
  digitalWrite(dirB, HIGH);
  digitalWrite(motB, HIGH);

  delay(10);
  
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, HIGH);
  
  digitalWrite(dirA, LOW);
  digitalWrite(motA, HIGH);
  
  delay(10);
  
  digitalWrite(brakeA, HIGH);
  digitalWrite(brakeB, LOW);
  
  digitalWrite(dirB, LOW);
  digitalWrite(motB, HIGH);
  
  delay(10); 
}

ces deux programme fonctionne tres bien mais lorsque je veus les faires fonctionner ensemble avec le code si dessous le moteur ne tourne plus

const int dirA = 12;
const int dirB = 13;

const int motA = 3;
const int motB = 11;

const int brakeA = 9;
const int brakeB = 8;

const int delayLength = 30;
int photocellPin = 0; // the cell and 10K pulldown are connected to a0
int photocellReading; // the analog reading from the analog resistor divider


void setup() {
// We'll send debugging information via the Serial monitor
   Serial.begin(9600);
   pinMode(dirA, OUTPUT);
   pinMode(dirB, OUTPUT);
   pinMode(brakeA, OUTPUT);
   pinMode(brakeB, OUTPUT);
   pinMode(motA, OUTPUT);
   pinMode(motB, OUTPUT);
    
}

void loop() {
  photocellReading = analogRead(photocellPin);
  Serial.print("Analog reading = ");
  Serial.print(photocellReading); // the raw analog reading
  // We'll have a few threshholds, qualitatively determined
  if (photocellReading > 100) {
    Serial.println(" - Noir");
    
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, HIGH);
  
  digitalWrite(dirA, HIGH);
  digitalWrite(motA, HIGH);
  
  delay(10);
  
  digitalWrite(brakeA, HIGH);
  digitalWrite(brakeB, LOW);
  
  digitalWrite(dirB, HIGH);
  digitalWrite(motB, HIGH);

  delay(10);
  
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, HIGH);
  
  digitalWrite(dirA, LOW);
  digitalWrite(motA, HIGH);
  
  delay(10);
  
  digitalWrite(brakeA, HIGH);
  digitalWrite(brakeB, LOW);
  
  digitalWrite(dirB, LOW);
  digitalWrite(motB, HIGH);
  
  delay(10); 
   
    
  }
    else {
    Serial.println(" - jour");
  digitalWrite(brakeA, HIGH);
  digitalWrite(brakeB, LOW);
  
  digitalWrite(dirA, LOW);
  digitalWrite(motA, LOW);
  
  delay(10);
  
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, HIGH);
  
  digitalWrite(dirB, LOW);
  digitalWrite(motB, LOW);

  delay(10);
  
  digitalWrite(brakeA, HIGH);
  digitalWrite(brakeB, LOW);
  
  digitalWrite(dirA, HIGH);
  digitalWrite(motA, LOW);
  
  delay(10);
  
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, HIGH);
  
  digitalWrite(dirB, HIGH);
  digitalWrite(motB, LOW);
  
  delay(10); 
  } 
}

jutilise le montage ci dessous pour essayer de faire fonctionner mon moteur (photo(6)) pour qu’il tourne dans un sens pendant x seconde quand la lumiere apparait et de l’autre sens lorsqu’il fait nuit

merci d’avance d’avoir connsacrer du temps a la résolutioun de mon probleme

photo(7).JPG

Bonjour, as-tu essayé en laissant les "delay(2000);" ?

bonjour,
que donne le résultat Serial.print(photocellReading);

Bonjour j’ai changer les valeurs de Serial.print(photocellReading); a 20 et cela fonctionne mais le moteur tourne seulement quand il fait "jour" mais sarrette lorsqu'il fait "nuit"

j’aimerais le faire tourner dans l''autre sens lorsqu'il fait "nuit" mais je ne sait pas comment faire...

j'ai essayer comme on peut le voir sur mon dernier programme de changer tout les LOW par HIGH et tout les HIGH par LOW mais ça ne fonctionne apparemment pas

ca serait bien un lien de ton shield et moteur.

mais en principe, il y a juste le DIR A B a changer

voila le moteur que j'utilise

http://www.amazon.fr/moteur-pas-%C3%A0-bipolaire-35x28mm/dp/B007XF5N8O

et voila le shield

http://www.arduino.cc/en/Main/ArduinoMotorShieldR3

et je voudrais aussi arrêter le moteur après chaque changement d’état "jour" "nuit"

j'ai chercher quelque commande mais mon programme deviens erronée car je pensai remplacer le void loop par void setup car j'ai crue comprendre que void setup n’exécutais l'action qu'une sel fois

je n'arrive pas a changer le sens de rotation même en inversant les dir a et b

Bonjour, Fait un essai en inversant une des bobines de ton PAP

en inversant une bobine? c'est à dire ??

Re,

metraextra: en inversant une bobine? c'est à dire ??

Tu permutes les 2 fils d'une des bobines

ha ok j'ai échanger l’ordre des 2 deux pairs de fils de noir vert rouge bleu

a rouge bleu noir vert

le sens de rotation c'est en effet inverser

mais le but de mon programme est d'inverser le sens de rotation du moteur a chaque changement d’état sans inverser les fils a chaque fois donc je suppose qu'il faudrait que je fasse faire ça a mon programme mais je n'y arrive pas

ca devrait t'aider http://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/

Re, Non de

noir vert rouge bleu

fait

vert noir rouge bleu

icare: Re, Non de

noir vert rouge bleu

fait

vert noir rouge bleu

je viens de faire avec cette ordre ca marche aussi le sens de rotation a changer mais ca ne résous pas mon problème ^^

voila grâce au tuto de infobarquee merci a toi j’ai réussi a bidouiller un programme qui inverse le sens de rotation a chaque état “jour” “nuit”

const int dirA = 12;
const int dirB = 13;

const int motA = 3;
const int motB = 11;

const int brakeA = 9;
const int brakeB = 8;

const int delayLength = 30;
int photocellPin = 0; // the cell and 10K pulldown are connected to a0
int photocellReading; // the analog reading from the analog resistor divider


void setup() {
// We'll send debugging information via the Serial monitor
   Serial.begin(9600);
   pinMode(dirA, OUTPUT);
   pinMode(dirB, OUTPUT);
   pinMode(brakeA, OUTPUT);
   pinMode(brakeB, OUTPUT);
   pinMode(motA, OUTPUT);
   pinMode(motB, OUTPUT);
    
}

void loop() {
  photocellReading = analogRead(photocellPin);
  Serial.print("Analog reading = ");
  Serial.print(photocellReading); // the raw analog reading
  // We'll have a few threshholds, qualitatively determined
  
  if (photocellReading < 30) 
  
  {
    Serial.println(" - Noir");
    
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, HIGH);
  
  digitalWrite(dirA, HIGH);
  digitalWrite(motA, HIGH);
  
  delay(10);
  
  digitalWrite(brakeA, HIGH);
  digitalWrite(brakeB, LOW);
  
  digitalWrite(dirB, HIGH);
  digitalWrite(motB, HIGH);

  delay(10);
  
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, HIGH);
  
  digitalWrite(dirA, LOW);
  digitalWrite(motA, HIGH);
  
  delay(10);
  
  digitalWrite(brakeA, HIGH);
  digitalWrite(brakeB, LOW);
  
  digitalWrite(dirB, LOW);
  digitalWrite(motB, HIGH);
  
  delay(10); 
   
  
  } 
 
    else {
    Serial.println(" - jour");
  
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, HIGH);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
  
  delay(10);
  
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, LOW);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
  
  delay(10);
  
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, LOW);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
  
  delay(10);
    
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, HIGH);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
  
  delay(10);
   }
  
}

mais je ne sais pas comment arrêter de faire tourner le moteur au bout d’un certain temps quand j’essaie d’insérer un delay le programme ne fonctionne plus j’aimerais a chaque fois faire tourner le moteur seulement pendent quelque seconde ou quelque pas
du moment qu’il s’arrête je suis preneur de la moindre solution merci d’avance

boucle for (int i=0;i<20;i++){la routine dans un sens}
après tu mets à LOW 8 et 9 je pense

ou est ce qu’il faut mettre la commande ??
boucle
for (int i=0;i<20;i++)

je l’ai mis après le void loop mais rien ne se passe
j’ai meme mis la librairie stepper mais sa ne change rien…

tu peux faire un truc de ce genre, pas vérifié si ca compile.

const int dirA = 12;
const int dirB = 13;

const int motA = 3;
const int motB = 11;

const int brakeA = 9;
const int brakeB = 8;

const int delayLength = 30;
int photocellPin = 0; // the cell and 10K pulldown are connected to a0
int photocellReading; // the analog reading from the analog resistor divider


int VALIDE_MOTEUR = 0; //variable pour determiner si le moteur doit tourner ou non


void setup() {
// We'll send debugging information via the Serial monitor
   Serial.begin(9600);
   pinMode(dirA, OUTPUT);
   pinMode(dirB, OUTPUT);
   pinMode(brakeA, OUTPUT);
   pinMode(brakeB, OUTPUT);
   pinMode(motA, OUTPUT);
   pinMode(motB, OUTPUT);
    
}

void loop() {
  photocellReading = analogRead(photocellPin);
  Serial.print("Analog reading = ");
  Serial.print(photocellReading); // the raw analog reading
  // We'll have a few threshholds, qualitatively determined
  
  if (photocellReading < 30 && VALIDE_MOTEUR == 0) 
  
  {
    Serial.println(" - Noir");
    for (int i=0;i<20;i++){
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, HIGH);
  
  digitalWrite(dirA, HIGH);
  digitalWrite(motA, HIGH);
  
  delay(10);
  
  digitalWrite(brakeA, HIGH);
  digitalWrite(brakeB, LOW);
  
  digitalWrite(dirB, HIGH);
  digitalWrite(motB, HIGH);

  delay(10);
  
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, HIGH);
  
  digitalWrite(dirA, LOW);
  digitalWrite(motA, HIGH);
  
  delay(10);
  
  digitalWrite(brakeA, HIGH);
  digitalWrite(brakeB, LOW);
  
  digitalWrite(dirB, LOW);
  digitalWrite(motB, HIGH);
  
  delay(10); 
   }
  VALIDE_MOTEUR=1;
  } 
 
    if (photocellReading > 30 && VALIDE_MOTEUR == 1) 
 {
    Serial.println(" - jour");
   for (int i=0;i<20;i++){
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, HIGH);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
  
  delay(10);
  
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, LOW);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
  
  delay(10);
  
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, LOW);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
  
  delay(10);
    
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, HIGH);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
  
  delay(10);

}
VALIDE_MOTEUR=0;
   }
  
}

merci beaucoup tout fonctionne comme il faut

;D ;)