Estoy haciendo una plataforma básica para fotografía de timelapse usando arduino. Es un sistema de panorámica para una cámara DSLR, así que opté por el escudo del motor de Arduino con el chip L298 y un motor paso a paso de 12V y 1.7A. Antes de poder alimentar el protector del motor externamente, noté que el motor funcionaba bien con el USB de 5 V suministrado a la placa Arduino. Fue capaz de mover completamente la cámara réflex digital a diferentes velocidades y mantenerla en su lugar.
El problema surgió cuando se le pidió que hiciera un solo paso a la vez (supongo que la configuración de cualquier velocidad aquí será suficiente). Noté que no todos los pasos son iguales. A veces, habría 2 pasos pequeños seguidos por un paso más grande o incluso al revés. Según tengo entendido, los motores paso a paso tienen un tamaño de paso fijo, y o bien lo hará completamente (con suficiente potencia), o fallará, ¿es correcto? Pensé que superaría completamente la inercia, y no se atascaría a la mitad, y luego funcionaría bien otras veces.
Entonces, ¿está el motor / 5v de potencia o mi código está fallando aquí? Proporcionar energía externa requeriría que hiciera un rastro en el escudo, así que me aferro a eso hasta que esté seguro. (¡También sería bueno tener una sola fuente de alimentación!)
Aquí está el código genérico que estoy usando:
#include <Stepper.h>
const int stepsPerRevolution = 1024;
Stepper myStepper(stepsPerRevolution, 12,13);
// give the motor control pins names:
const int pwmA = 3;
const int pwmB = 11;
const int brakeA = 9;
const int brakeB = 8;
const int dirA = 12;
const int dirB = 13;
int times = 120;//420
void setup() {
Serial.begin(9600);
// set the PWM and brake pins so that the direction pins // can be used to control the motor:
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
pinMode(brakeA, OUTPUT);
pinMode(brakeB, OUTPUT);
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);
digitalWrite(brakeA, LOW);
digitalWrite(brakeB, LOW);
// initialize the serial port:
Serial.begin(9600);
// set the motor speed (for multiple steps only):
myStepper.setSpeed(2);
}
void loop() {
while(times>0){
myStepper.step(1);
Serial.println(times);
times--;
delay(12000);
}
}