Bonjour,
J'ai un projet de rail motorisé type rail pour appareil photo. Le projet est finalisé il ne me reste plus qu'a programmer le moteur pas à pas.
le but est de faire coulisser un plateau sur un rail jusqu’à un interrupteur de fin de course puis d'aller en sans inverse jusqu’à l'autre interrupteur de fin de course de l'autre côté et cela indéfiniment.
Je me suis inspiré de cette vidéo https://youtu.be/4Rm1vJ67MkA?feature=shared
La seul différence est que j'ai une carte UNO et non NANO.
Je suis donc équipé de :
-1 moteur pas à pas 28BYJ-48
-1 carte pilote ULN2003
-1 carte UNO
-2 interrupteurs de contact (switch) ou interrupteur de mon kit pour le test
Dans cette vidéo il fournit le montage du moteur et le programme arduino que j'ai souhaité réutilisé étant novice!
J'ai adapté le câblage sur ma UNO en respectant les mêmes ports (excepté pour un GND qui n'est pas au même endroit).
J'ai fait le montage indiqué dans le lien (voir image ci-dessous) et transféré le programme associé mais ça ne fonctionne pas correctement.
Monatge:
Code:
#include <Stepper.h>
const int stepsPerRevolution = 64;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
#define potent_pin 0
int speed;
int direction;
int pinButton = 2;
int power1 = 3;
int power2 = 4;
int power3 = 5;
int power4 = 6;
int GND = 7;
void setup() {
pinMode(pinButton, INPUT);
pinMode(power1, OUTPUT);
pinMode(power2, OUTPUT);
pinMode(power3, OUTPUT);
pinMode(power4, OUTPUT);
pinMode(GND, OUTPUT);
digitalWrite(power1, HIGH);
digitalWrite(power2, HIGH);
digitalWrite(power3, HIGH);
digitalWrite(power4, HIGH);
digitalWrite(GND, LOW);
}
bool flag = LOW;
bool lastButton = LOW;
bool debounce() {
bool current = digitalRead(pinButton);
if (current != lastButton) {
delay(10);
current = digitalRead(pinButton);
}
return current;
}
void loop() {
int currentButton = debounce();
if (lastButton == LOW && currentButton == HIGH)
{
flag = !flag;
}
lastButton = currentButton;
if (flag == LOW)
direction = 1;
if (flag == HIGH)
direction = -1;
speed = analogRead(potent_pin);
speed = map(speed, 0, 1023, 1, 400);
speed = constrain(speed, 1, 400);
myStepper.setSpeed(speed);
myStepper.step(direction);
}
Dans mon 1er test j’alimentai la carte avec le câble de transfert du programme via le PC.
Ne pouvant connecter les interrupteurs de contact sans soudure et facilement sur la "breadboard",j'ai fait le test avec de simple interrupteur présent dans mon kit.
J'avais beaucoup interférence et le moteur changé de sens plus ou moins à sa guise et aucune action lorsque j'appuyais sur les interrupteurs.
Après quelques lectures je me suis demandé si cela ne venait pas du montage qui contenait qu'une seul résistance pour 3 interrupteurs.
J'ai testé avec un seul interrupteur mais rien ne se passait et toujours autant interférence.
Dans mon 2iéme test je me suis alimenté avec une pile (après avoir lu que çà pouvait générer des interférence).
J'ai refait le montage dans son état initial mais toujours le même problème, rien ne se passe quand j’appuie sur les interrupteurs.
Je constate juste une fluctuation faible de l'intensité du moteur (via les diodes de l'ULN2003) signe qu'il se passe quand même quelque chose..
Mon besoin étant urgent je n'avais pas le temps de rentrer dans la compréhension du codage, même si cela m'intérrésse.
Après 2 semaine de recherche d'un code similaire permettant de le reprendre pour mon projet sans sucés, j'ai fini par essayer de comprendre le code et de voir se qui ne va pas.
J'ai quelques doute sur le montage et sur le code (même si tout fonctionne dans la vidéo):
Montage: ne faudrait-il pas 1 résistance par interrupteur?
Codage:
je ne comprends pas la fonction "bool debounce()".
Complément:
Je souhaiterais supprimer le 3iéme bouton (les interrupteurs de fin de courses me suffisent) et ajouter un interrupteur On/Off.
L'idéal serait que le charriot se centre par rapport au 2 extrémités (entre les 2 interrupteurs de fin de course) lors que j’arrête le système (via un bouton de centrage supplémentaire géré via un nombre de pas définit correspondant au centre peut-être?).
Ce dernier point n'est pas urgent et j'aurais le temps de réfléchir et m'intérrésser par la suite (mais je suis ouvert aux pistes/propositions).
Merci d'avance pour votre aide