Hola, soy nuevo en esto de arduino y mi idea es preparar una instalación artística en la que mediantes el sensor de ultrasonidos pueda asignar a un motor a pasos una séria de vuelta en ambos sentidos.
A partir de la idea principal he intentado hacer una mezcla entre las librerias de ultrasonic.h y stepper.h
Pongo el codigo que he creado y que para empezar es muy senzillo solamente quiero que cuando el valor en cm del sensor sea inferior a 20 el motor gire una vuelta completa en un sentido y luego vuelta a la posicion inicial.
El motor a pasos es el 28BYJ-48 con el driver ULN2003 y el sensor ultrasonidos es el HC-SR04.
#include <Ultrasonic.h>
#include <Stepper.h>
#define STEPS 200
int Distancia;
Ultrasonic ultrasonic(7,A0);
Stepper stepper(STEPS, 8, 9, 10, 11);
void setup()
{
Serial.begin (9600);
// Velocidad del motor en RPM
stepper.setSpeed(100);
}
void loop(){
//leemos el sensor de ultrasonidos y guardamos el valor en una variable
Distancia = ultrasonic.Ranging(CM);
//si la distancia es menor de 20...
if(Distancia <= 20){
//Girar una vuelta entera en un sentido
stepper.step(200);
delay(500); //Pequeña pausa
//Girar una vuelta entera en sentido contrario
stepper.step(-200);
delay(500); //Pequeña pausa
}
}
La cosa es que me dice que está todo bien pero lo cargo y no funciona nada, alguien me puede hechar una mano? también estoy abierto a otras sugerencias para llegar al mismo resultado ( servo motor trucado, por ejemplo tmb lo he estado mirando)
Una consulta suelta no es un proyecto! Lo muevo a Software, donde debiste haberlo posteado originalmente. Pero antes de continuar escribiendo, por favor, lee la normas del foro y edita tu mensaje original.
xotis:
Hola, soy nuevo en esto de arduino y mi idea es preparar una instalación artística en la que mediantes el sensor de ultrasonidos pueda asignar a un motor a pasos una séria de vuelta en ambos sentidos.
A partir de la idea principal he intentado hacer una mezcla entre las librerias de ultrasonic.h y stepper.h
Pongo el codigo que he creado y que para empezar es muy senzillo solamente quiero que cuando el valor en cm del sensor sea inferior a 20 el motor gire una vuelta completa en un sentido y luego vuelta a la posicion inicial.
El motor a pasos es el 28BYJ-48 con el driver ULN2003 y el sensor ultrasonidos es el HC-SR04.
void setup()
{
Serial.begin (9600);
// Velocidad del motor en RPM
stepper.setSpeed(100);
}
void loop(){
//leemos el sensor de ultrasonidos y guardamos el valor en una variable
Distancia = ultrasonic.Ranging(CM);
//si la distancia es menor de 20...
if(Distancia <= 20){
//Girar una vuelta entera en un sentido
stepper.step(200);
delay(500); //Pequeña pausa
//Girar una vuelta entera en sentido contrario
stepper.step(-200);
delay(500); //Pequeña pausa
}
}
La cosa es que me dice que está todo bien pero lo cargo y no funciona nada, alguien me puede hechar una mano? también estoy abierto a otras sugerencias para llegar al mismo resultado ( servo motor trucado, por ejemplo tmb lo he estado mirando)
MUchas gracias!!
saludos
Si buscas informacion de ese motor en google ,veras que en realidad tiene 8 pasos por vuelta mas una reductora de 1/64 ,por lo que para dar una vuelta entera en modo full step necesitas 8*64 = 512 pasos .la velocidad que pones es una burrada para ese motor por el mismo motivo,como mucho unas 13-15 rpm.La libreria stepper es bloqueante ,mientras el motor este girando ,no va a ejecutar nada mas.
hola y muchas gracias de antemano, pues realmente puse 4 pasos porque en un post de una página ponia que el frabicante de este modelo de motor recomienda el half pass por que el motor trabaja mejor.
Y en cuanto a que la libreria stepper bloquea el sistema mientras esta en funcionamiento, hay alguna otra libreria para motores a pasos que no bloquee mientras esta en funcionamiento??