Buenas!
En este proyecto la idea es buscar una solución que mejore la movilidad de nuestro robot para que obtenga unos pasos "más fuertes y más precisos", no nos importa la velocidad.
En el anterior proyecto observábamos que ante una determinada cantidad de peso (sensores, cables, baterías, etc) el movimiento de los motores DC no era suficiente para tirar de todo. Había que subir al máximo la potencia con PWM, lo cual implica una velocidad mayor y una mayor probabilidad de no evitar los obstáculos.
Hay muchas mejoras que hacer al proyecto original de Robot (incluir el manejo por interrupciones, etc), pero es un punto de partida y en esta entrada vamos a probar un motor paso a paso y su driver (controlador) que viene en la mayoría de los kits de Arduino.
28BYJ-48 y driver ULN2003AN
Existen muchas combinaciones de motores, pero la más asequible económicamente y prestaciones para lo que queremos es el motor 28byj-48 y el driver que lo controla ULN2003AN. No conseguimos una gran velocidad pero sí un gran torque y precisión haciendo que la exploración "a ciegas" no guiada de nuestro robot pueda disponer de mayor tiempo para evitar los obstáculos. Es un motor que necesita 5V y consume unos 230 mA, a diferencia de otros motores que precisan de mayor voltaje y consumen más de 1.5 A, lo que nos lleva a soluciones con controladores que precisan de disipadores y condensadores para proteger al sistema de picos de corriente.
Por ello, creo que este par de componentes podrían venir bien para realizar la transición al robot ROVER paso a paso, sin muchas complicaciones. Sin embargo nos encontramos con bastantes dificultades para aprovechar el chasis e incluso las ruedas, estas últimas aunque encajan se quedan holgueras. Debemos buscar algo como esto 47mm Rubber Wheels for Stepper Motors DC Motors Arduino Smart Robot Accessories
Adaptando el montaje
Código de prueba
#include <Stepper.h>
Stepper motor1(2048, 8, 10, 9, 11); // pasos completos
void setup() {
// Asignamos la velocidad en RPM (Revoluciones por Minuto)
motor1.setSpeed(1);
}
void loop() {
//512*4=2048 pasos - 1 vuelta completa
//1 ciclo son 4 pasos, un giro completo rotor 8 ciclos
// un giro completo del eje exterior 64 vueltas
// 4*8+64 = 2048 pasos para una revolución
motor1.step(512);
apagado();// signo menos indica giro en sentido opuesto
motor1.step(-512);
apagado();// signo menos indica giro en sentido opuesto
}
void apagado(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
delay(5000);
}
Una versión más avanzada del código que permite manejar más fácilmente de manera simultánea más de un motor así como realizar aceleraciones y deleraciones hace uso de la librería <AccelStepper.h> de Mike McCauley (para buscarla en las librerías e instalarlas) que permitirá escalar nuestro proyecto lo dejo en el siguiente enlace de GitHub
Referencias
- http://carlini.es/motores-paso-a-paso-stepper-motor-con-arduino-y-varios-controladores/
- https://lastminuteengineers.com/28byj48-stepper-motor-arduino-tutorial/