Moteur pas à pas pour camera slider + remote

bonjour la communauté :slight_smile:

je découvre l'univers arduino depuis quelques jours, et je voudrais me lancer dans un projet un peu
spécial:

Je voudrais donc créer un slider pour camera, mais avec des fonctions bien précises.

  • un joystick (pour slider à droite ou à gauche sur le plan X )
  • un potar (pour régler la vitesse de 0% à 100% )
  • éventuellement un afficheur 7 segments pour visualiser le speed
  • 2 bouton poussoir pour regler un Set IN et Set OUT

Alors j'ai deja commencer à bidouiller, j'ai reussi à mettre un potar qui gere le speed du moteur, mais je voudrais rajouter un joystick, et là je bloque :confused:

Voila mon montage:

et mon code:

#define potmeterPin A0

// defines pins numbers
const int stepPin = 5;
const int dirPin = 2;
const int enPin = 8;

int p;
float delay_time=500;

void setup() {

  Serial.begin(9600);


  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);

  pinMode(enPin,OUTPUT);
  digitalWrite(enPin,LOW);

  // Set Dir to Home switch
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction


}
void loop() {

     p = analogRead(potmeterPin);
    delay_time = map(p,0,1023,300,1000);
  
     motorStep(1);

}
void motorStep( int MAX){

   for(int x = 0; x < MAX; x++) {
        digitalWrite(stepPin,HIGH);
        delayMicroseconds(delay_time);
        digitalWrite(stepPin,LOW);
        delayMicroseconds(delay_time);
      }
  
}

Si quelqu'un peut m'aider à integrer un joystick en plus a mon montage

Voila voila :slight_smile: merci d'avance

Commencez par écrire un petit programme qui affiche la valeur du joystick quand elle change

Comme vous avez plusieurs trucs à traiter « en même temps », c’est un sujet qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

bonsoir, oui je partais pas du bon pied :slight_smile:

j'ai un petit code qui marche qui fait bouger de droite à gauche le moteur via un joystick.

Et j'ai également un autre code, qui marche aussi, qui augmente ou diminue la vitesse via un potentiomètre.

maintenant je voudrais fusionner les deux :slight_smile: Est-ce possible ?

code 1 (stepper potar speed)

#define potmeterPin A0

// defines pins numbers
const int stepPin = 5;
const int dirPin = 2;
const int enPin = 8;

int p;
float delay_time=500;

void setup() {

  Serial.begin(9600);


  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);

  pinMode(enPin,OUTPUT);
  digitalWrite(enPin,LOW);

  // Set Dir to Home switch
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction


}
void loop() {

     p = analogRead(potmeterPin);
    delay_time = map(p,0,1023,300,1000);
  
     motorStep(1);

}
void motorStep( int MAX){

   for(int x = 0; x < MAX; x++) {
        digitalWrite(stepPin,HIGH);
        delayMicroseconds(delay_time);
        digitalWrite(stepPin,LOW);
        delayMicroseconds(delay_time);
      }
  
}

code 2 (stepper joystick)

//Declare pin functions on Redboard
#define stp 2
#define dir 3
#define MS1 4
#define MS2 5
#define EN  6

//Declare variables for functions
char user_input;
int x;
int y;
int state;

int joyX = A0;
int joyVal;


void setup() {
 
  pinMode(stp, OUTPUT);
  pinMode(dir, OUTPUT);
  pinMode(MS1, OUTPUT);
  pinMode(MS2, OUTPUT);
  pinMode(EN, OUTPUT);

  digitalWrite(stp, LOW);
  digitalWrite(dir, LOW);
  digitalWrite(MS1, LOW);
  digitalWrite(MS2, LOW);
  digitalWrite(EN, HIGH);
 
  Serial.begin(9600); //Open Serial connection for debugging
  
}

//Main loop
void loop() {
  
   while( (analogRead(joyX) == 0 ) || (analogRead(joyX) > 1000 )){
           joyVal = analogRead(joyX);
           digitalWrite(EN, LOW);
   if( joyVal == 0){
           
      digitalWrite(dir, LOW);
  
   }
   else if( joyVal > 1000){
          
      digitalWrite(dir, HIGH);
   
   }
      digitalWrite(stp,HIGH); //Trigger one step forward
      delay(1);
      digitalWrite(stp,LOW); //Pull step pin low so it can be triggered again
      delay(1);
  
   } // while loop

  digitalWrite(EN, HIGH);
}

merci pour votre tuto, je vais lire tout ca

C’est faisable bien sûr, je vous recommande de lire le tuto et de virer les delay() et au lieu de piloter à la main votre « moteur » (quel type, quel driver ?) ce serait plus simple d’utiliser une librairie adaptée

Pour bien comprendre les moteurs (et pour bien débuter avec l’arduino), c’est bien de lire Le mouvement grâce aux moteurs - les tutos d’eskimon.