«Crazy-Bot», Robot Arduino con motor por pasos 28BYJ-48 y driver ULN2003

Os presentamos el «robot loco» del taller de «Web-Robótica». Para su construcción hemos utilizado una placa Arduino UNO, el motor paso a paso 28BYJ-48 con el driver ULN2003 compatible con Arduino. Aqui encontrarás explicaciones detalladas, códigos para motores por pasos utilizando la biblioteca AccelStepper, y diagramas y componentes. Para su diseño y decoración nos ha ayudado Alejandra de 7 años. Si tienes un proyecto en mente y voluntad, encontrarás fácilmente la información que te ayudará a realizar tu proyecto y ejecutarlo fácilmente.

Este Rover simplemente ejecuta una serie de movimientos encadenados, no tiene ningún tipo de sensor.




Vídeo tutorial «Crazy-Bot» – Motores por pasos


Características de «Crazy-Bot»

Sus características principales son que está controlado con una placa Arduino y propulsado con dos motores paso a paso 28BYJ-48 con el driver ULN2003. A los motores les hemos acoplado unas ruedas y los hemos colocado en un chasis construido con piezas de meccano, y la placa Arduino y los drivers  ULN2003 los hemos colocado y conectado sobre unas láminas de madera. Además le hemos añadido dos LEDs para su decoración. El robot realiza una secuencia de movimientos para cada rueda, en ambos sentidos, lo que crea una especie de baile robótico.

Crazy-Bot-steeper-motor.

Robot propulsado por el  motor por pasos 28BYJ-48

Como ya sabéis un motor paso a paso puede moverse en incrementos angulares precisos, conocidos como pasos. Es muy parecido a un servo que se mueve a una posición predefinida. La ventaja de un motor paso a paso  es que se puede lograr mucho mayor precisión y control sobre el movimiento. La desventaja de usar steppers es que son un poco más compleja de controlar que los servos y los motores de corriente continua.




El 28BYJ-48 es un pequeño motor paso a paso de 5 voltios, bastante barato.  Estos pequeños steppers se pueden comprar junto con un pequeño controlador del motor de pasos ULN2003 compatible con Arduino. El bajo costo y pequeño tamaño hace que el 28BYJ-48 una opción ideal para pequeñas aplicaciones robóticas y una excelente introducción a stepper control del motor con Arduino. Aquí están las especificaciones detalladas del motor paso a paso 28BYJ-48Hoja de datos del motor de pasos 28BYJ-48 Datasheet.

El controlador del motor de pasos ULN2003 le permite controlar fácilmente el motor paso a paso 28BYJ-48 desde un microcontrolador, como el Arduino Uno. Un lado de la placa tiene un conector de 5 pines, donde se conecta el cable del motor paso a paso , y 4 LEDs para indicar que bobina se alimenta en cada momento. Tenga en cuenta que no se recomienda alimentar el motor con la conexión de 5 V de la placa Arduino, ya que el motor puede drenar más corriente que el microcontrolador de la que puede manejar y podría dañarlo.

Datos-ULN2003

 

Componentes y materiales  de «Crazy-Bot»

  • Placa Arduino/Genuino
  • motores paso a paso 28BYJ-48
  • 2 driver ULN2003
  • 2 Ruedas
  • Protoboard
  • 2 LEDs
  • Piezas de meccano
  • 2 piezas de madera 10 X 15 cm
  • Tuercas y tornillos
  • Cables de conexión

Esquema y montaje  de «Crazy-Bot»

Esquema-Crazy-Bot

El primer paso que hemos realizado ha sido construir el chasis que soportará los motores con las ruedas, y la placa Arduino y los drivers.

Chasis-Crazy-Bot

Al chasis le hemos añadido los motores y las ruedas por un lado y una lámina de madera con los drivers ULN2003. A través de la lámina hemos conectado los motores con los drivers, esta conexión es muy sencilla.

Chasis Crazy-Bot driver ULN2003

Conecte los pines del conductor ULN2003 IN1, IN2, IN3 y IN4  del motor 1 a los pines digitales 5, 4, 3 y 2, respectivamente, en la Arduino Uno. El motor 2 a los pines digitales 6, 7, 8 y 9. Conecte el cable positivo de una batería de 5-12V a la patilla “+” del conductor ULN2003 y el pin “-” a GND. Asegúrese de que el puente “on / off” está conectado. Si conecta la placa Arduino de una batería diferente, conecte los GND juntos.

Crazy-Bot-driver-ULN2003

En la parte superior hemos colocado una lámina con la placa Arduino UNO y dos LEDs conectados en serie al pin digital 13, de esta manera no ponemos ninguna resistencia adicional.

http://www.web-robotica.com/wp-content/uploads/2015/11/Crazy-Bot-Arduino

Por último nuestra compañera mas joven, Alejandra de 7 años, nos ha decorado de una manera muy loca el «Crazy-Bot».

Crazy-Bot-Web-Robotica

Código/Sketch detallado  de «Crazy-Bot»

Para realizar el sketch hemos utilizado la biblioteca AccelStepper. Para cargar esta biblioteca debes descargar el archivo AccelStepper-1.53-1.zip, y subirlo al programa Arduino IDE de pc.

Arduino IDE > Programa > Include Library > Add .Zip Library

Para ver todas sus funciones podéis visitar la página de la biblioteca en www.airspayce.com

Primero incluimos la biblioteca AccelStepper, definimos los pines para cada driver y configuramos la velocidad de los motores.

#include <AccelStepper.h>
#define HALFSTEP 8

// Pines de los motores

#define motorPin1 5 // IN1 en el driver ULN2003 1
#define motorPin2 4 // IN2 en el driver ULN2003 1
#define motorPin3 3 // IN3 en el driver ULN2003 1
#define motorPin4 2 // IN4 en el driver ULN2003 1

#define motorPin5 6 // IN1 en el driver ULN2003 2
#define motorPin6 7 // IN2 en el driver ULN2003 2
#define motorPin7 8 // IN3 en el driver ULN2003 2
#define motorPin8 9 // IN4 en el driver ULN2003 2
// Configuramos la secuencia de pines IN1-IN3-IN2-IN4
// para usar la bibliteca AccelStepper con 28BYJ-48

AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
AccelStepper stepper2(HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8);

// variables

int stepperSpeed = 1000; // velocidad del motor

En la función void setup() encendemos los LEDs  conectados al pin 13 y la velocidad y el sentido de giro con move(-1), cada motor esta colocado opuesto al otro por lo que para avanzar girarán en sentido opuesto.

.............................

void setup() {

pinMode(13, OUTPUT); 
delay(2000); 
digitalWrite(13, HIGH); 
 
stepper1.setMaxSpeed(2000.0);
stepper1.move(-1); 
stepper1.setSpeed(stepperSpeed);

stepper2.setMaxSpeed(2000.0);
stepper2.move(1);
stepper2.setSpeed(stepperSpeed);}

......................

Por último en la función void loop () tenemos dos partes iguales, en la primera el motor 1 avanzará 1000 pasos y el motor 2 avanzará 2000 pasos, y con runSpeedToPosition() se realiza la función.

........
stepper1.move(-1);
stepper1.moveTo(-1000);
tepper1.setSpeed(stepperSpeed);

stepper2.move(1);
stepper2.moveTo(2000);
stepper2.setSpeed(stepperSpeed);
    
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();

..............

En la segunda parte el motor 1 retrocede 1000 pasos y el motor 2 retrocede 2000 pasos, y con runSpeedToPosition() se vuelve a realiza la función.

Código Arduino completo

Este es código completo para nuestro “Crazy-Bot“, copia, pega y modifica el código según tus necesidades.

/*Código de control de "Crazy-Bot"Código para motores por pasos 28BYJ-48.Creado por J.L.Ahedo. Taller de "www.Web-Robotica.com"*/

#include <AccelStepper.h>
#define HALFSTEP 8

// Pines de los motores

#define motorPin1 5 // IN1 en el driver ULN2003 1
#define motorPin2 4 // IN2 en el driver ULN2003 1
#define motorPin3 3 // IN3 en el driver ULN2003 1
#define motorPin4 2 // IN4 en el driver ULN2003 1

#define motorPin5 6 // IN1 en el driver ULN2003 2
#define motorPin6 7 // IN2 en el driver ULN2003 2
#define motorPin7 8 // IN3 en el driver ULN2003 2
#define motorPin8 9 // IN4 en el driver ULN2003 2

// Configuramos la secuencia de pines IN1-IN3-IN2-IN4
// para usar la bibliteca AccelStepper con 28BYJ-48

AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
AccelStepper stepper2(HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8);

// variables

int stepperSpeed = 1000; // velocidad del motor

void setup() {

pinMode(13, OUTPUT); 
delay(2000); 
digitalWrite(13, HIGH); 
 
stepper1.setMaxSpeed(2000.0);
stepper1.move(-1); 
stepper1.setSpeed(stepperSpeed);

stepper2.setMaxSpeed(2000.0);
stepper2.move(1);
stepper2.setSpeed(stepperSpeed);}

void loop () {
 
stepper1.move(-1);
stepper1.moveTo(-1000);
stepper1.setSpeed(stepperSpeed);

stepper2.move(1);
stepper2.moveTo(2000);
stepper2.setSpeed(stepperSpeed);
    
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();


stepper1.move(-1);
stepper1.moveTo(1000);
stepper1.setSpeed(stepperSpeed);
    
stepper2.move(1);
stepper2.moveTo(-2000);
stepper2.setSpeed(stepperSpeed);
    
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}

.

1 comentario en “«Crazy-Bot», Robot Arduino con motor por pasos 28BYJ-48 y driver ULN2003

  1. Me he suscripto a tu canal, me parece un proyecto muy bueno con la idea de usar steppers en lugar de DC. Esto permitiria creo que mediante programación crear juegos para los más chicos ya que los movimientos quedarían más acotados en avances y giros predeterminados.
    Voy a tratar de trabajar en esa dirección usando la base de tu excelente proyecto a un costo reducido lo que lo hace muy atractivo, estoy pensando en robot tipo beebot o similar. Cordialmente. Eloy

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.