Go Down

Topic: Project ouverture de stores et porte poulailler  (Read 129 times) previous topic - next topic

santosdaniel

Bonjour,

Je vient ver vous puisque j'essaie de programmer un stepper dans une direction a une valeur et ver l'outre sens a une outre valeur en utilisant :

arduino nano
un moteur stepper bipolaire
un driver L298 Double pont en H
un LDR photorésistance.

Mon problème cet que avec le code suivant le moteur tourne en continue ver un cote a une valeur du ldr et ver l'oppose en continue avec une outre valeur de ldr.

Le but étant que a une valeur ldr > a 750 il tourne x pas dans un sens et se arrête
et quant la valeur ldr et <750 il tourne x pas dans l'outre sens et s'arrête.

Je ne sais pas si c'est compréhensible c'est bien a première fois que je post dans un forum mais âpre des jour d'essai je suis a bue.  Pouvez vous m'éclairer, Merci
Code: [Select]
#include <Stepper.h>

const int stepsPerRevolution = 500;  // change this to fit the number of steps per revolution  <> if ( (valeur>10) && (valeur<150) )

int ldrPin = A0;
int ldrVal =0;


// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

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

void loop() {
 
  ldrVal = analogRead(ldrPin);
  Serial.println(ldrVal);

  if (ldrVal < 750)
  myStepper.step(500);
  if (ldrVal > 750 )
  myStepper.step(-500);
  else if (ldrVal)
  myStepper.step(0); 
}



bigben99

Avec ton code, le moteur va tourner dans 1 sens tant que la valeur lue sur le pin A0 est strictement supérieure à 750 et tourner dans l'autre sens tant que la valeur lue sur le pin A0 est strictement inférieure à 750.

Il faut donc que tu revois ton code pour stocker l'état de ta porte de poulailler (ouvert/fermé) et que tu ne fasses fonctionner le moteur que si la porte est dans un certain état et que la valeur lue sur A0 impose un changement d'état.

Ex :
- porte de poulailler ouverte et valeur lue sur A0 = nuit ==> faire tourner le moteur pour fermer la porte (penser a arrêter le moteur à la fin de la fermeture)
- porte de poulailler fermée et valeur lue sur A0 = jour ==> faire tourner le moteur pour ouvrir la porte (et l'arrêter)

santosdaniel

Merci de la rapidité de réponse.

En utilisant une valeur fixe exempte 900 pour nuit et 300 pour jour le moteur tourne continuel-ment.

Doit je paramétrer cella dans void setup ?

Quelle et la ligne de code pour l'arrêt?

Je suis vraiment a mes balbutiement avec le codage.

bigben99

Je ne connais pas bien le fonctionnement des moteurs, mais d'après ton code, pour arrêter le moteur, il faut que tu utilises l'instruction myStepper.step(0);

Donc si tu veux fixer les seuils à 900 et 300, il faut que tu traites les 2 conditions suivantes :
Si (porte ouverte et A0 > 900) Alors
   Démarrer le moteur dans le sens de fermeture
   Attendre la fin de fermeture
   Arrêter le moteur
   porte fermée
Si (porte fermée et A0 < 300) Alors
   Démarrer le moteur dans le sens d'ouverture
   Attendre la fin de l'ouverture
   Arrêter le moteur
   porte ouverte

Il faut donc que tu stockes dans une variable l'état de la porte (ouverte ou fermée) pour que tes conditions puissent être remplies

Go Up