Bonjour a tous
je souhaite piloté un moteur pas a pas avec un capteur de lumiere
je souhaite que le moteur effectue 5 tour par exemple lorsque le capteur capte la lumiere
et qu'il fasse 5 tour en contre sens lorsqu'il ne capte plus rien.
je suis parti avec se code mais je n'y arrive pas il tourne temps qu'il a de la lumiere .
le moteur que j'utilise
si quelqu'un a une idée
Merci
#include <Stepper.h>
#define STEPS 100
//moteur (fils 1 2 3 4) est branché sur les sorties 8 9 10 11 de l'Arduino ;
// Sens horaire
int Steps2Take = 0; //Nombre de pas de rotation demandé au moteur
long temps =0; //Durée de rotation pour un tour
//************************************************************
//----- VARIABLES ---------------------------------------------
int LDR = A0; // LDR sur la broche A0
int VALEUR; // Variable de lecture de la valeur analogique
//--------------- PROCEDURE D'INITIALISATION --------------------
void setup() {
Serial.begin(9600);
}
//--------------- BOUCLE PRINCIPALE -----------------------------
void loop() {
VALEUR = digitalRead(LDR); // Lecture le l'éclairement de la LDR (de 0 à 1023)
Serial.print("LUMIERE = "); Serial.println(VALEUR, DEC); // Affichage de la valeur d'éclairement
VALEUR = map(VALEUR, 0, 1, 2048, 0); // Conversion de l'éclairement (0 à 1023) en degrés (0 à 180)
small_stepper.setSpeed(250);
temps = millis();
small_stepper.step(VALEUR); //Ca tourne
temps = millis()- temps ; //Chronomètre un rour complet 6.236 sec par tour à vitesse 200
Serial.println(temps); //Affiche le temps (en ms) pour un tour complet
delay(2000);
Pour faire exactement 5 tours il faut indiquer un nombre de pas à effectuer, le chronométrage n'est pas utile (et très imprécis, si on change de moteur il y aura des variations).
Par ailleurs il faut choisir un seuil de la valeur mesurée VALEUR = digitalRead(LDR) et ensuite faire un test avec if (VALEUR>seuil) {...} else {...} pour choisir le sens de rotation.
Bonjour,
alors j'ai nettoyé le code
Ajout du IF et voila se qu'il me reste
#include <Stepper.h>
#define STEPS 100
//moteur (fils 1 2 3 4) est branché sur les sorties 8 9 10 11 de l'Arduino (et sur GND, +V)
Stepper small_stepper(STEPS, 8, 10, 9, 11); // Sens horaire
int Steps2Take = 0; //Nombre de pas de rotation demandé au moteur
//----- VARIABLES ---------------------------------------------
int LDR = A0; // LDR sur la broche A0
int VALEUR; // lecture de la valeur
void setup() {
Serial.begin(9600); // Initialisation du moniteur sur l'ordinateur à 9600 bauds
}
void loop() {
VALEUR = digitalRead(LDR); // Lecture le l'éclairement de la LDR (0 ou 1)
small_stepper.setSpeed(100);
if (VALEUR < 1)
{
small_stepper.step(150);
}
else
{
small_stepper.step(-150);
}
}
toujours pareil ca tourne avec la lumiere et s'inverse sans
c'est le nb de pas pour un tour, donc dans ton cas 64 et non 100
essaye ca
#include <Stepper.h>
#define STEPS 64
//moteur (fils 1 2 3 4) est branché sur les sorties 8 9 10 11 de l'Arduino (et sur GND, +V)
Stepper small_stepper(STEPS, 8, 10, 9, 11); // Sens horaire
int Steps2Take = 0; //Nombre de pas de rotation demandé au moteur
//----- VARIABLES ---------------------------------------------
int LDR = A0; // LDR sur la broche A0
int VALEUR; // lecture de la valeur
int nb_tour = 5; //nb de tour demandé
void setup() {
Serial.begin(9600); // Initialisation du moniteur sur l'ordinateur à 9600 bauds
pinMode(LDR, INPUT);
}
void loop() {
VALEUR = analogRead(LDR); // Lecture le l'éclairement de la LDR (0 ou 1)
Steps2Take= STEPS * nb_tour;
if (VALEUR < 100)
{
small_stepper.setSpeed(100);
small_stepper.step(Steps2Take);
}
if (VALEUR >300)
{
small_stepper.setSpeed(100);
small_stepper.step(-Steps2Take);
}
}
Si tu relis ta demande, tu vas trouver qu'il manque une information.
je souhaite que le moteur effectue 5 tour par exemple lorsque le capteur capte la lumiere
Ok d'accord. Mais quelle est la condition qui va redéclencher la prochaine fois.
Parce que de la lumière il y en a souvent. Donc il faut définir une transition d'un état vers un autre pour déclencher un évènement ponctuel.
Il faut définir 2 consignes
Si la lumière passe la seconde consigne ==> on fait 5 tours.
On mémorise le fait que l'on a tourné.
On attend de repasser sous la première consigne pour revenir au pas 1.
c'est le nb de pas pour un tour, donc dans ton cas 64 et non 100
essaye ca
#include <Stepper.h>
#define STEPS 64
//moteur (fils 1 2 3 4) est branché sur les sorties 8 9 10 11 de l'Arduino (et sur GND, +V)
Stepper small_stepper(STEPS, 8, 10, 9, 11); // Sens horaire
int Steps2Take = 0; //Nombre de pas de rotation demandé au moteur
//----- VARIABLES ---------------------------------------------
int LDR = A0; // LDR sur la broche A0
int VALEUR; // lecture de la valeur
int nb_tour = 5; //nb de tour demandé
void setup() {
Serial.begin(9600); // Initialisation du moniteur sur l'ordinateur à 9600 bauds
pinMode(LDR, INPUT);
}
void loop() {
VALEUR = analogRead(LDR); // Lecture le l'éclairement de la LDR (0 ou 1)
Steps2Take= STEPS * nb_tour;
if (VALEUR < 100)
{
small_stepper.setSpeed(100);
small_stepper.step(Steps2Take);
}
if (VALEUR >300)
{
small_stepper.setSpeed(100);
small_stepper.step(-Steps2Take);
}
}
Pareil il tourne sans arret et change de sens avec le changement de la LDR
fdufnews:
Si tu relis ta demande, tu vas trouver qu'il manque une information.Ok d'accord. Mais quelle est la condition qui va redéclencher la prochaine fois.
Parce que de la lumière il y en a souvent. Donc il faut définir une transition d'un état vers un autre pour déclencher un évènement ponctuel.
Il faut définir 2 consignes
Si la lumière passe la seconde consigne ==> on fait 5 tours.
On mémorise le fait que l'on a tourné.
On attend de repasser sous la première consigne pour revenir au pas 1.
Le moteur tourne a l'apparition de la lumière, tourne 5 tours et s’arrête jusqu’à la disparition de la lumière .....
Tu as une idée pour mémoriser l’état 5 tours effectué
MERCI dfgh ...... j'y etais presque mais tu ma bien aiguillé j'avais du mal avec le "and" ( je sais c'est con) .
je mets mon code final, reste juste un detail le moteur ne fait que 1/5 de tour mais je m'en vais corriger ca au plus vite
#include <Stepper.h>
#define STEPS 64
//moteur (fils 1 2 3 4) est branché sur les sorties 8 9 10 11 de l'Arduino (et sur GND, +V)
Stepper small_stepper(STEPS, 8, 10, 9, 11); // Sens horaire
int Steps2Take = 64; //Nombre de pas de rotation demandé au moteur
//----- VARIABLES ---------------------------------------------
const int LDR = A0; // LDR sur la broche A0
int VALEUR; // lecture de la valeur
int deplacement_jour_fait;
int deplacement_nuit_fait;
int nb_tour = 5; //nb de tour demandé
void setup() {
Serial.begin(9600); // Initialisation du moniteur sur l'ordinateur à 9600 bauds
pinMode(LDR, INPUT);
}
void loop() {
VALEUR = analogRead(LDR); // Lecture le l'éclairement de la LDR (0 ou 1)
small_stepper.setSpeed(200);
if ((VALEUR <100) and (deplacement_jour_fait == false))
{
deplacement_jour_fait = true;
deplacement_nuit_fait = false;
small_stepper.step(64 * 5);
delay(500);
}
if ((VALEUR >300) and (deplacement_nuit_fait == false))
{
deplacement_jour_fait = false;
deplacement_nuit_fait = true;
small_stepper.step(-64 * 5);
delay(500);
}
}
hello 68 tjs
dans l'exemple speed motor je n'avais pas fais attention,
il y a : const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution