Contrôler un moteur PAP par la position et/ou vitesse d'un potentiometre?

Bonjour,

J'essaye de contrôler le moteur pas à pas donnée avec le Kit Arduino http://robocraft.ru/files/datasheet/28BYJ-48.pdf

Je gere le mouvement avec un polar en transformant l''exemple ProportionalControl de la libraire AccelStepper.

Je me demandais, si il y avait un moyen de suivre les changements de vitesse ou l'accélération que je dose en faisant bouger le potentiomètre.

Merci.

Je mets le programme ci dessous pour ce qui veulent faire tourner le moteur d'un tour exactement dans les deux sens.

#include <AccelStepper.h>
#define HALFSTEP 8

#define motorPin1  A8     // IN1 on the ULN2003 driver 1
#define motorPin2  A9     // IN2 on the ULN2003 driver 1
#define motorPin3  A10     // IN3 on the ULN2003 driver 1
#define motorPin4  A11     // IN4 on the ULN2003 driver 1

// Define a stepper and the pins it will use
//AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

// This defines the analog input pin for reading the control voltage
// Tested with a 10k linear pot between 5v and GND
#define ANALOG_IN A7

int analog_in, positionX;

void setup()
{  
  Serial.begin (250000);
  stepper.setMaxSpeed(1200);
}

void loop()
{
  // Read new position
 analog_in = analogRead(ANALOG_IN);
  // Quand le potar est au plus bas à -2048, va au dernier pas à 2048.
  // Donc, il fait un tour complet, car il faut 4096 pas = 2048*2 pas pour faire un tour 
 positionX= map ( analog_in, 0, 1027, -2048, 2048);

    stepper.moveTo(positionX);
  stepper.setSpeed(1000);
  stepper.runSpeedToPosition();

}

bvking:
Bonjour,

J'essaye de contrôler le moteur pas à pas donnée avec le Kit Arduino http://robocraft.ru/files/datasheet/28BYJ-48.pdf

Je gere le mouvement avec un polar en transformant l''exemple ProportionalControl de la libraire AccelStepper.

Je me demandais, si il y avait un moyen de suivre les changements de vitesse ou l'accélération que je dose en faisant bouger le potentiomètre.

Merci.

Je mets le programme ci dessous pour ce qui veulent faire tourner le moteur d'un tour exactement dans les deux sens.

#include <AccelStepper.h>

#define HALFSTEP 8

#define motorPin1 A8 // IN1 on the ULN2003 driver 1
#define motorPin2 A9 // IN2 on the ULN2003 driver 1
#define motorPin3 A10 // IN3 on the ULN2003 driver 1
#define motorPin4 A11 // IN4 on the ULN2003 driver 1

// Define a stepper and the pins it will use
//AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

// This defines the analog input pin for reading the control voltage
// Tested with a 10k linear pot between 5v and GND
#define ANALOG_IN A7

int analog_in, positionX;

void setup()
{
Serial.begin (250000);
stepper.setMaxSpeed(1200);
}

void loop()
{
// Read new position
analog_in = analogRead(ANALOG_IN);
// Quand le potar est au plus bas à -2048, va au dernier pas à 2048.
// Donc, il fait un tour complet, car il faut 4096 pas = 2048*2 pas pour faire un tour
positionX= map ( analog_in, 0, 1027, -2048, 2048);

stepper.moveTo(positionX);

stepper.setSpeed(1000);
stepper.runSpeedToPosition();

}

Bonjour
Je ne comprend pas bien ta question et ce que tu souhaite faire exactement ?
Ce que tu appelle moteur pas à pas est en fait un ensemble mecanique constitué d'un petit moteur pas à pas unipolaire et d'un bloc reducteur .
La qualité mécanique de l'ensemble est trés... relative :grin:

J'en ai et c'est pratique de temps en temps pour faire du "petit" positionnement à la condition de ne pas demander une grande rigidité/précision surtout lors des inversions de sens. (aucun rattrapage de jeu , même symbolique 8) )

Pour l'instant, j'essaye de gérer la vitesse dans les deux sens à partir de l'exemple speed control, mais j'y seulement dans un sens.
Je voulais aussi verifier la vitesse max (30 rpm, je crois)

Voilà mon programme

#include <Stepper.h>

const int stepsPerRevolution = 4096;  // change this to fit the number of steps per revolution
// for your motor


#define motorPin1  A8     // IN1 on the ULN2003 driver 1
#define motorPin2  A9     // IN2 on the ULN2003 driver 1
#define motorPin3  A10     // IN3 on the ULN2003 driver 1
#define motorPin4  A11     // IN4 on the ULN2003 driver 1

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution,  motorPin1, motorPin3, motorPin2, motorPin4);
Stepper myOppositeStepper(stepsPerRevolution,  motorPin4, motorPin2, motorPin3, motorPin1);

int stepCount = 0;  // number of steps the motor has taken
int sensorReading,motorSpeed; 

void setup() {
  
 Serial.begin (250000);

}

void loop() {
  // read the sensor value:
  int sensorReading = analogRead(A7);
  // map it to a range from 0 to -5, 5: Attention le moteur ne va pas 5 tour/min
  int motorSpeed = map(sensorReading, 0, 1023, -5, 5);
  // set the motor speed:
  if (motorSpeed  > 0) {
    myStepper.setSpeed(motorSpeed);
    // step 1/100 of a revolution:
    myStepper.step(stepsPerRevolution / 100);// A quoi ça sert?
  }
  /*
   if (motorSpeed  < 0) {
    myOppositeStepper.setSpeed(motorSpeed);
    // step 1/100 of a revolution:
    myOppositeStepper.step(stepsPerRevolution / 100);
  }
  */
}

Après,je déciderai si je contrôle le moteur avec la position du potentiomètre ou sa vitesse. Au mieux, j'aurais même voulu qui suive l'accélération...