Primero decir que soy MUY novato con Arduino, y que quizás me he embarcado, en un proyecto que me supere.... pero....
Quiero fabricarme un Scaner en 3D, y de todas las opciones que hay en la red, he elegido uno que se llama SARDAUSCAN, que consiste básicamente, en una plataforma giratoria, 4 láseres de linea y una Webcam. Aunque el sistema de captura de imágenes (el que gira la plataforma, enciende un láser de linea, y manda tomar la foto al PC). El scaner lo gobierna Arduino, la parte de la generación de la nube de puntos, la maneja Windows.
Pues bueno.... estoy parado en una fase bastante inicial, he conseguido que arduino encienda/apague los láseres de linea, y me he encontrado con el primer problema, para el cual no encuentro solución, y es el manejo del motor paso a paso, un nema 17, con driver DV8825.
El objetivo que no consigo es hacer girar el motor paso a paso.
Pese a montarlo todo como en los esquemas que he encontrado por internet y usar los Scketches de prueba no consigo hacerlo girar.
He pensado que quizas fuera un fallo (eléctrico/mecánico) de uno de los componentes, de:
Arduino, una placa Arduino Uno, no parece, se conecta al PC, y deja subir los Scketches, reniniciarlo y demás procesos.
Nema 17, quizás, no lo he visto girar, lo único que he podido comprobar es con un multimetro la continuidad de las dos bobinas del motor. ¿Hay alguna forma de comprobar si el motor funciona (por medios manuales, es decir sin Arduino y/o sin Driver)?
El Driver DRV8825, pues... tampoco se como comprobar si su funcionamiento es correcto ¿Alguna idea?
He probado varios esquemas de montaje, asi como Scketches, pero con el mismo resultado, no consigo hacer girar el motor.
¿Que pasos debería de seguir para descartar problemas?
¿Que esquema de montaje funciona (que este probado) con (arduino uno+DRV8825+nema 17)?
¿Un Scketch que me sirva para comprobar el funcionamiento del montaje?
¿Un método para probar que uno de los componentes no este estropeado, y me de error?
Hola Peirof interesante tu proyecto de scanner 3D.
Saludo que estes ubicado en que puede y que no puede hacer arduino porque muchos quisieran que arduino haga todo y se olvidan que es un microcontrolador de 8 bits.
Bien... yo cuando no se algo busco en google (algo que seguramente has hecho) de este modo: Arduino DRV8825 y por ejemplo busco foros en inglés y leo todo el hilo en busca de información que me de seguridad de llegar a buen término.
Este hilo cumple con esos requisitos [Stepper motor with Arduino and DRV8825](http://Stepper motor with Arduino and DRV8825)
En el surge la recomendación que mas corresponde y es ir a la web del fabricante que esta aca POLOLU DRV8255
Acá tienes un esquema que es este
Lo mas alarmante es que es un producto DISCONTINUADO asi que no se que has comprado o bien si lo sacaste de alguna caja de un proyecto viejo pero ten cuidado para no armar algo en base a esto en el futuro.
En un hilo que encontré sugieren este código simple
// testing a stepper motor with a Pololu A4988 driver board or equivalent
// this version uses millis() to manage timing rather than delay()
// and the movement is determined by a pair of momentary push switches
// press one and it turns CW, press the other and it turns CCW
byte directionPin = 9;
byte stepPin = 8;
byte buttonCWpin = 10;
byte buttonCCWpin = 11;
boolean buttonCWpressed = false;
boolean buttonCCWpressed = false;
byte ledPin = 13;
unsigned long curMillis;
unsigned long prevStepMillis = 0;
unsigned long millisBetweenSteps = 25; // milliseconds
void setup() {
Serial.begin(9600);
Serial.println("Starting Stepper Demo with millis()");
pinMode(directionPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(buttonCWpin, INPUT_PULLUP);
pinMode(buttonCCWpin, INPUT_PULLUP);
}
void loop() {
curMillis = millis();
readButtons();
actOnButtons();
}
void readButtons() {
buttonCCWpressed = false;
buttonCWpressed = false;
if (digitalRead(buttonCWpin) == LOW) {
buttonCWpressed = true;
}
if (digitalRead(buttonCCWpin) == LOW) {
buttonCCWpressed = true;
}
}
void actOnButtons() {
if (buttonCWpressed == true) {
digitalWrite(directionPin, LOW);
singleStep();
}
if (buttonCCWpressed == true) {
digitalWrite(directionPin, HIGH);
singleStep();
}
}
void singleStep() {
if (curMillis - prevStepMillis >= millisBetweenSteps) {
prevStepMillis += millisBetweenSteps;
digitalWrite(stepPin, HIGH);
digitalWrite(stepPin, LOW);
}
}
Ajustalo a tus pines.
Tambien te recomiendo que uses AccelStepper library que es la mejor para estos casos.
No olvides compartir GND entre arduino y el driver.