RoboBase V2 – Robot Educativo Arduino Compatible

RoboBaseV2_01

1 – Características del robot

RoboBase V2 es un robot educativo para montar 100% Arduino Compatible. Este robot se basa en una placa controladora Compluino UNO R3, que proporciona una mejor conectividad que la placa Arduino UNO original.

La estructura del robot es una clásica plataforma diferencial, constituida por dos ruedas motrices y un punto pivotante (bola loca). En este robot las ruedas son manejadas por sendos motores de corriente continua con una reductora de 48:1 en cada uno de ellos. Dado que la placa Arduino no es capaz de proporcionar señales de potencia, necesitamos un driver de control de motores para poder fijar la velocidad y el sentido de giro de cada uno de ellos. El driver de motores utilizado en este robot es un módulo basado en el DRV8835, que se caracteriza por su gran eficiencia y rendimiento proporcionado por la tecnología MOSFET.

2 – Guía de montaje

2.1 – Antes de empezar con la construcción del robot

Montar RoboBase V2 es una enriquecedora experiencia educativa que te permitirá entrar en el mundo de la robótica de la mano de la electrónica, mecánica y programación.

Importante: para montar este kit se requiere de unos conocimientos técnicos mínimos y de habilidades relacionadas con el manejo de ciertas herramientas. Si no estas seguro de poder hacerlo, pide ayuda. El correcto funcionamiento del robot depende de que seamos capaces de realizar todas estas labores con precisión. Este kit no es un juguete, es un material educativo que no está indicado para menores de 10 años y aún así, siempre bajo la supervisión de un adulto.

Herramientas.
Para realizar el montaje de este robot vamos a necesitar las siguientes herramientas:

alicate_corte alicate_plano pelacables destornillador_ph1 destornillador_plano soldador estaño

2.2 – Contenido del kit RoboBase V2

RoboBaseV2_02_1200

Dentro del kit RoboBase V2, puedes encontrar los siguientes componentes, todos ellos necesarios para montar el robot.

  • Una placa controladora Compluino UNO R3
  • Dos planchas que contienen las piezas del chasis
  • Dos motores de corriente continua de doble eje
  • Un driver de motores de doble canal DRV8835
  • Un interruptor
  • Dos sensores de contacto (finales de carrera), que funcionan como bumpers
  • Un sensor de ultrasonidos HC-SR04
  • Un módulo Bluetooth HC-05
  • Un portapilas 5 x AA
  • Un conector jack de alimentación 5,5 x 2,1
  • Dos ruedas para motor con eje en D
  • Una rueda loca
  • Siete cables macho-macho
  • Veinte cables macho-hembra
  • Dos gomas elásticas
  • Un conjunto de tornillería para RoboBase V2
  • Un destornillador con puntas intercambiables
  • Una caja de plástico contenera

2.3 – El chasis del robot

El chasis del robot RoboBase V2 está realizado en DM de 3mm cortado por láser. Dentro del kit encontrarás dos piezas de DM, una de ellas es la base principal (derecha en la foto) y la otra es un conjunto de elementos donde está el piso superior y las piezas adicionales para realizar el montaje.

RoboBaseV2_03_1200

El chasis principal ya viene listo para usar, pero tendrás que destroquelar las piezas de la otra para poder realizar el montaje del robot. Para hacer esto presiona con los dedos en el centro de cada pieza hasta que se desprenda. Si queda alguna rebaba en las piezas, la puedes eliminar con una pequeña lima o con unos alicates de corte.

RoboBaseV2_04_1200

2.4 – Montaje del portapilas

Vamos a comenzar el montaje atornillando el portapilas de 5 x AA en el chasis principal, mediante el uso de dos tornillos de M2,5 x 8 y dos tuercas de M2,5

RoboBaseV2_05_1200

Coloca el portapilas sobre el chasis fijándote en el grabado del chasis (positivo y negativo de las pilas) y fíjalo con los tornillos y tuercas, colocando la cabeza de los tornillos en el portapilas y las tuercas en la parte inferior del chasis.

RoboBaseV2_06_1200

2.5 – Los motores del robot

Antes de montar los motores, hay que soldar los cables de conexión, así que necesitamos los dos motores amarillos y cuatro cables macho – macho.

RoboBaseV2_07_1200

Suelda cada cable en un terminal del motor, tal y como se muestra en la imagen, cruzando los cables por debajo de la brida de plástico del motor. Si esta soldadura te da problemas, prueba a lijar un poco (con lija muy fina) los terminales metálicos de los cables que van al motor.

RoboBaseV2_08_1200

Una vez solados los cables en los motores, ya podemos fijarlos en el chasis, para ello necesitamos las cuatro piezas de DM en forma de «T» y los cuatro conjuntos de tronillos más largos.

RoboBaseV2_09_1200

Ahora solo tienes que atornillarlos tal y como se muestra en la siguiente imagen.

RoboBaseV2_10_1200

Ten en cuanta que las arandelas que hay en cada tornillo, hay que colocarlas en la parte interior, justo antes de la tuerca.

RoboBaseV2_11_1200

Antes de apretar los tornillos del todo, presionamos el cuerpo del motor contra el chasis, de forma que no quede espacio entre ellos. Una vez que esté así, ya puedes apretar los tornillos y las tuercas.

RoboBaseV2_12_1200

2.6 – Los bumpers (finales de carrera)

El robot RoboBase V2 dispone de dos bumpers para la detección de obstáculos. El elemento sensor es un interruptor del tipo «final de carrera», que tienes que sujetar con cuatro conjuntos de tornillos de M2 x 12.

RoboBaseV2_13_1200

Coloca los tornillos y los finales de carrera tal y como se muestra en la siguiente imagen, con los finales de carrera en la parte inferior del chasis y la cabeza del tornillo en el lado del interruptor. La arandela y la tuerca se colocan en el otro lado del chasis. No aprietes mucho los tornillos por ahora, más adelante tendrás que ajustar bien la posición cuando coloques los brazos mecánicos de los bumpers.

RoboBaseV2_14_1200

Separa cuatro cables macho – hembra, que son los que usaremos para conectar los finales de carrera a la controladora Compluino UNO.

RoboBaseV2_15_1200

Corta el conector macho de los cuatro cables, pélalo unos tres milímetros y suéldalo a los finales de carrera, tal y como se muestra en la siguiente imagen.

RoboBaseV2_16_1200

2.7 – La rueda loca

Seguimos en la parte inferior del chasis, ahora para montar la rueda loca. Aunque ésta viene con dos suplementos, no es necesario montar ninguno de ellos.

RoboBaseV2_17_1200

Atornilla la bola loca desde la parte inferior del chasis.

RoboBaseV2_18_1200

De forma que las tuercas queden en la parte superior del chasis principal del robot.

RoboBaseV2_19_1200

2.8 – El sensor de distancia por ultrasonidos (HC-SR04)

Ahora es el turno de montar el sensor de distancias por ultrasonidos HC-SR04. En primer lugar tienes que montar la base de soporte del sensor.

RoboBaseV2_20_1200

Tienes que fijar en el chasis del robot mediante cola blanca (rápida) o termocola.

RoboBaseV2_21_1200

Además del sensor necesitas cuatro cables hembra – hembra y una de los dos gomas elásticas.

RoboBaseV2_22_1200

Ancla el sensor en su soporte con una de las gomas.

RoboBaseV2_23_1200

Y conecta los cables en los terminales del Sensor HC-SR04, de forma que pasen a la parte inferior del chasis por los agujeros.

RoboBaseV2_24_1200

Usa otra de las gomas para guiar los cables por la parte inferior del chasis, tal y como se muestra en la siguiente foto.

RoboBaseV2_25_1200

2.9 – Prolongando las conexiones

Los cables de los finales de carrera y del sensor de distancia HC-SR04 que hemos colocado, no llegan hasta donde tiene que ir colocada la placa controladora Compluino UNO, así que los vamos a prolongar mediante el uso de otros cables macho hembra de los mismos colores que los que hemos colocado.

La técnica que usaremos para unir los cables es poco habitual, lo normal sería usar conectores macho y hembra, pero nosotros uniremos dos conectores macho y macho. ¿Cómo se hace esto, lo vemos en la siguiente imagen.

RoboBaseV2_26_b_1200

Los cables rojos muestran la situación inicial de dos cables con terminales macho que queremos unir, Para ello doblamos un par de veces uno de los terminales hasta que se rompa, tal y como se muestra en el cable de color verde. Si nos fijamos la sección del terminal macho tiene forma de «C», lo que tenemos que hacer es encajar una «C» con otra, de esta forma el pin entra sin dificultad formando una unión muy estable, como la que muestra el cable de color marrón.

Esta forma de realizar uniones es más segura que con una conexión macho y hembra tradicional, y asegura que los cables no se puedan desconectar con facilidad (vibraciones del robot). En la siguiente imagen se muestra como quedan todas las conexiones prolongadas.

RoboBaseV2_26_1200

2.10 – El piso superior

Vamos a continuar con el montaje del piso superior del robot. Para ello usaremos los separadores de 30 mm con sus respectivos tornillos de M3 x 6.

RoboBaseV2_27_1200

Monta los tres separadores en el piso inferior del robot.

RoboBaseV2_28_1200

De manera que los tornillos queden en la parte inferior del chasis.

RoboBaseV2_29_1200

Ahora vamos a continuar con la pieza de DM que proporciona el piso superior del robot.

RoboBaseV2_30_1200

2.11 – El interruptor de encendido

La puesta en marcha del robot se realiza mediante un interruptor de encendido que se coloca en el piso superior del robot. Este interruptor tiene que estar en la posición de apagado (O) cuando programamos el robot y en la posición de encendido (I), para que el robot pueda moverse.

En este punto del montaje necesitamos el interruptor de encendido y un cable macho – macho de color rojo (el color del cable es indiferente desde el punto de vista eléctrico, pero ayuda a localizar e identificar el tipo de cada conexión).

RoboBaseV2_31_1200

Encajamos el interruptor en el pieza de DM del piso superior y soldamos el cable rojo del portapilas en uno de los contactos y el cable rojo macho – macho en el otro. Si la soldadura de este último cable te da problemas, prueba a lijar un poco (con lija muy fina) el terminal metálico del cable, antes de soldarlo.

RoboBaseV2_32_1200

Sacamos el otro extremo del cable rojo que hemos soldado por el agujero pasa-cables de la base de madera y giramos ésta de forma que veamos su parte superior.

RoboBaseV2_33_1200

2.12 – El conector de alimentación

En este robot alimentamos la placa controladora Compluino UNO por el jack de entrada de alimentación. Este es el punto más seguro paar alimentar cualquier placa del tipo Arduino UNO ya que así usamos todos los elementos de protección eléctrica que hay en la placa.

Para hacer esto necesitamos el jack de alimentación de 5,5 x 2,1 (es el que viene en el kit) y dos cables macho – macho, uno rojo y otro negro.

RoboBaseV2_34_1200

En el jack de alimentación tienes que soldar tres cables: el de color rojo que viene del interruptor y los dos cables macho – macho rojo y negro.

RoboBaseV2_35_1200

La forma correcta de hacer esto es soldar juntos los dos cables rojos en el la patilla del terminal central del jack y el negro en terminal más grande de dicho conector.

RoboBaseV2_36_1200

2.13 – El sistema de alimentación

Para alimentar el robot tienes que usar 5 pilas alcalinas del tipo AA. Este robot no está diseñado para usar elementos recargables de este tamaño. Tienes una explicación completa en el apartado donde se habla sobre las Consideraciones sobre el sistema de alimentación del robot

Este es el momento del montaje ideal para poner las pilas en el robot (asegurate primero que el interruptor está en la posición de apagado). Si prefieres seguir con el montaje para poner las pilas mas tarde, solo tendrás que quitar los tres tornillos del robot para acceder a esta zona del robot con facilidad.

RoboBaseV2_37_1200

2.14 – Los anclajes del piso superior

RoboBaseV2_38_1200

Para sujetar la placa Compluino UNO en el piso superior, usaremos cuatro separadores de nailon y cuatro tornillos de M3 x 6, tal y como se muestra en la figura de la izquierda.

Igual en alguna ocasión has intentado fijar una placa tipo Arduino UNO mediante separadores y tornillos y te has encontrado ante la dificultad o mejor dicho, imposibilidad de poner tuercas o tronillos en algunos de los agujeros de la placa Arduino.

Esto no ocurre con el sistema de sujección de la placa Compluino UNO que usamos en este robot. Los separadores que hemos seleccionado se atornillan en la parte inferior , pero llevan un sistema tipo «ancla» en la parte superior. Como veremos más adelante este tipo de anclaje es ideal para este tipo de placas.

Ahora atornilla los separadores en el piso superior, tal y como se muestra en la siguiente imagen.

RoboBaseV2_39_1200 RoboBaseV2_40_1200

Para fijar el piso superior del robot, usa tres tornillos de M3 x 6 para fijarlos sobre la parte superior de los separadores metálicos que unen ambos pisos.

Bien, ya hemos terminado con la estructura del robot, vamos a continuar con el montaje del resto de los componentes.

RoboBaseV2_41_1200

2.15 – La placa Compluino UNO R3

Tal y como hemos comentado con anterioridad en esta guía de montaje, en este robot usaremos una placa Compluino UNO. Esta placa es 100% compatible con la Arduino UNO y además nos proporciona un sistema de conectividad mejorada que facilita mucho el conexionado de los distintos elementos eléctricos del robot.

Compluino_UNO_R3_01

A continuación se detallan los distintos elementos y conexiones de esta placa controladora.

Compluino_UNO_R3_etiquetas

El montaje de la placa en el robot es muy sencillo, solo tienes que hacer coincidir los agujeros de la Compluino UNO sobre los separadores de nilon y presionar ligeramente. Veras que la placa se fija con precisión.

RoboBaseV2_42_1200

Para desmontar la placa puedes usar un alicate de puntas planas con el que ir cerrando lijeramente el «ancla» de cada separador. De esta forma cada ancla se cierra, lo que te permite sacar la placa del separador.

2.16 – El driver de control de motores

El driver de motores es un módulo 2511 de Pololu. Este módulo usa un doble puente en H DRV8835 de Texas instruments. Si te fijas en el tamaño del circuito integrado es muy pequeño, sobre todo si lo comparamos con otros más habituales en este tipo de montajes como el L293D o el L298. El motivo es que estos usan tecnologia bipolar (muy poco eficiente), mientras que el DRV8835 usa tecnología MOSFET de gran eficiencia.

RoboBaseV2_43_1200

El módulo viene parcialmente montado, nuestro trabajo consite en soldar las clemas y los terminales de conexión. Antes de soldar los tres bloques de clemas de dos vías, ten la precaución de unirlas entre sí, tal y como se muestra en la siguiente fotografía.

RoboBaseV2_44_1200

En las siguientes imágenes se muestra la forma correcta de montaje de las clemas y de las tiras de conectores. Solo tienes que soldar los terminales que se muestran en las fotografías.

RoboBaseV2_45_1200 RoboBaseV2_46_1200

Conectar el driver de control de motores en la placa Compluino UNO es muy sencillo, solo hay que hacer coincidir los terminales del mismo nombre que aparecen en el driver y en la placa Compluino UNO.

RoboBaseV2_47_1200

2.17 – Conexiones de los motores y del sistema de alimentación

Cuando conectamos el driver de control de motores sobre la placa Compluino UNO se establecen las conexiones de control de dicho driver. Además hay que conectar la alimentación de potencia y las conexiones de cada motor, esto se hace en las clemas del propio driver.

Si has respetado el código de colores de los cables que hemos seguido en la guía, realizar el siguiente paso te resultará muy sencillo, solo tienes que conectar los cables en las clemas tal y como se muestra en la siguiente fotografía.

RoboBaseV2_48_1200

2.18 – Conexiones de los bumpers y del sensor de distancia

Los cables de los bumpers y del sensor de distancia por ultrasonidos también se conectan en la placa Compluino UNO, en concreto en la zona de las conexiones de las entradas y salidas digitales.

RoboBaseV2_49_1200

En esta zona todos los terminales de color rojo son positivos (5V), los de color negro son negativos (GND) y los de color amarillo corresponden a los pines de entrada y salida digital de la Compluino UNO.

Para ayudarte a la correcta conexión de estos cables, puedes guiarte de la siguiente tabla:

Pin de Compluino UNO Color del cable Función
Cualquiera de la fila de color negro Gris GND Bumper derecho
Cualquiera de la fila de color negro Violeta GND Bumper izquierdo
2 Verde Bumper derecho
3 Azul Bumper izquierdo
11 Blanco Echo del sensor de distancia
12 Amarillo Trig del sensor de distancia
Cualquiera de la fila de color rojo Naranja Vcc del sensor de distancia
Cualquiera de la fila de color negro Negro GND del sensor de distancia

2.19 – Los brazos de los bumpers

En la parte inferior del robot hemos colocado los interruptores finales de carrera que nos ayudarán a la deteción de obstáculos con los que pueda chocar el robot. Pero estos interruptores no sobresalen del chasis del robót, así que de esta manera sera muy complicado que puedan funcionar. Para tener un buen sistema de deteción de obstáculos por contacto, vamos a colocar dos brazos articulados que cubran toda la parte forntal del robot.

Para su montaje necesitamos las dos piezas curvas de DM, los dos juegos de tronillos (color negro) con tuercas y arandelas y un fragmento de goma elástica de color negro.

RoboBaseV2_50_1200

Los brazos se sujetan en la parte inferior del chasis.

RoboBaseV2_51_1200

Con las cabezas de los tornillos abajo del todo y las tuercas (auto-frenables) en la parte superior del chasis.

RoboBaseV2_52_1200 RoboBaseV2_53

Dentro de cada tornillo negro con tuerca autofrenable que hay en el kit, puedes encontrar tres arandelas. Coloca dos de ellas entre el brazo y el chasis y la tercera entre el chasis y la tuerca auto-frenable.

Aprieta el tornillo y la tuerca hasta que quede bloqueado el brazo. Después afloja poco a poco hasta que el brazo del bumper se pueda mover con facilidad. Este es el punto correcto de apriete.

Une las puntas de los brazos con el trozo de goma elástica, de forma que queden sobre los finales de carrera, pero sin actuar el interruptor de estos.

2.20 – Las ruedas

Este robot usa dos ruedas para moverse, dichas ruedas se conectan mediante presión al eje de salida de cada motor.

RoboBaseV2_54_1200

Para mejorar el movimiento de las rudas, deja entre 0,5mm y 1mm de separación entre la rueda y el punto de tope del eje de motor. Esto impidirá que la rueda pueda llegar a rozar, en algún momento, con las cabezas de los tornillos que sujetan los motores.

2.21 – Montaje final

Enhorabuena, ya has terminado de montar el robot en su versión básica, Antes de continuar con el montaje del módulo bluetooth, te recomendamos que lo pruebes con los programas de ejemplo.

RoboBaseV2_55_1200

2.22 – El módulo de comunicaciones Bluetooth

En el kit de RoboBase V2 se incluye un módulo de comunicaciones Bluetooth del tipo HC-05. Hay personas que piensan que el HC-06 es mejor que el HC-05, simplemente por que 6 es más que 5, pero es justamente al revés: el HC-05 es más completo por que puede funcionar como maestro y como esclavo, mientras que el HC-06 solo puede actuar como esclavo.

RoboBaseV2_56_1200

Para fijar el módulo HC-05 sobre el chasis puedes usar un trozo de cinta adhesiva de doble cara (mejor de capa gruesa). También puedes sujetarlo mediante unos puntos de termocola.

RoboBaseV2_57_1200

Usa los cables hembra – hembra para conectar el módulo HC-05 a la placa Compluino Uno según la siguiente tabla:

Compluino UNO Color del cable HC-05
GND Negro GND
+5V Blanco 5V
RX Gris TX
TX Violeta RX
RoboBaseV2_58_1200

Ya tines montado el robot para que pueda operar con el módulo de comunicaciones Bluetooth, eso si, recuerda que el módulo Blueetooth HC-05 se conecta a los pines 0 y 1 de la placa Compluino UNO. Estos son los mismos pines que usa el IDE de Arduino para comunicarse y descargar programas cuando conectamos el cable USB. Así que tendremos que desconectar el módulo HC-05 cuando queramos descargar un programa usando la conexión USB.

RoboBaseV2_59_1200

3 – Asignación de pines

Una vez montado el robot y realizadas las conexiones tal y como se indica en la guía de montaje, quedan establecida la siguiente asignación de pines entre la placa Compluino UNO y los distintos sensores y actuadores del robot.

Pin Dispositivo Color del cable
D0 Transmisión de datos Bluetooth (*) Blanco
D1 Recepción de datos Bluetooth (*) Gris
D2 Bumper derecho Verde
D3 Bumper izquierdo Azul
D7 DIR M1 Conexión directa al driver de motores
D8 DIR M2 Conexión directa al driver de motores
D9 PWM Motor 1 (derecha) Conexión directa al driver de motores
D10 PWM Motor 2 (Izquierda) Conexión directa al driver de motores
D12 Echo del sensor de distancia Blanco
D13 Trig del sensor de distancia Amarillo

4 – Ejemplos de programación

IMPORTANTE:

  • Este robot es 100% compatible con Arduino, para programarlo usa el IDE de Arduino que puedes decargar de este enlace. Dentro del IDE de Arduino seleccionar el tipo de placa Arduino/Genuido UNO, cuando esté conectado el robot al ordenador.
  • En los siguientes ejemplos de programa el robot se moverá, en algunos de ellos incluso de forma rápida. Ten cuidado de que el robot no se caiga al suelo ya que si ocurre esto, se romperá.
  • Para que el robot se mueva el interruptor de encendido tiene que estar en la posición ON.
Movimientos básicos

En este ejemplo el robot realiza algunos movimientos básicos (Avance, retroceso y giros) a una velocidad determinada (la puedes cambiar). Dado que el robot está diseñado para llevar más peso que el propio, observarás que a velocidades altas el robot puede patinar, sobre todo si la superficie es dura. Puedes mejorar esto poniendo algo de peso en la parte trasera del robot.

Idea: Una forma de mejorar el agarre de las ruedas es recubrirlas con un trozo de globo o de un plástico similar, tal y como se muestra en la siguiente imagen.

RoboBaseV2_61_1200 /* RoboBase V2 Movimientos básicos 11/2017 www.complubot.com */ #define DIR_DER 7 // Direción Motor 1 (derecha) #define DIR_IZQ 8 // Direción Motor 2 (izquierda) #define PWM_DER 9 // PWM Motor 1 (derecha) #define PWM_IZQ 10 // PWM Motor 2 (izquierda) #define AVANZA LOW #define RETROCEDE HIGH #define PARA LOW #define VELOCIDAD 150 // 255 representa al 100% de la velocidad del robot void setup() { // Configura pines control de los motores pinMode(DIR_DER, OUTPUT); pinMode(DIR_IZQ, OUTPUT); pinMode(PWM_DER, OUTPUT); pinMode(PWM_IZQ, OUTPUT); // Robot para digitalWrite(PWM_DER, PARA); digitalWrite(PWM_IZQ, PARA); } void loop() { // Robot Avanza digitalWrite(DIR_DER,AVANZA); digitalWrite(DIR_IZQ,AVANZA); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); delay(2000); // Robot para digitalWrite(PWM_DER, PARA); digitalWrite(PWM_IZQ, PARA); delay(1000); // Robot rerocede digitalWrite(DIR_DER,RETROCEDE); digitalWrite(DIR_IZQ,RETROCEDE); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); delay(2000); // Robot para digitalWrite(PWM_DER, PARA); digitalWrite(PWM_IZQ, PARA); delay(1000); // Robot gira derecha digitalWrite(DIR_DER,RETROCEDE); digitalWrite(DIR_IZQ,AVANZA); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); delay(2000); // Robot para digitalWrite(PWM_DER, PARA); digitalWrite(PWM_IZQ, PARA); delay(1000); // Robot gira izquierda digitalWrite(DIR_DER,AVANZA); digitalWrite(DIR_IZQ,RETROCEDE); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); delay(2000); // Robot para digitalWrite(PWM_DER, PARA); digitalWrite(PWM_IZQ, PARA); delay(1000); }

Movimiento con detección de obstáculos

/* RoboBase V2 Movimiento con detección de obstáculos 11/2017 www.complubot.com */ #define DIR_DER 7 // Direción Motor 1 (derecha) #define DIR_IZQ 8 // Direción Motor 2 (izquierda) #define PWM_DER 9 // PWM Motor 1 (derecha) #define PWM_IZQ 10 // PWM Motor 2 (izquierda) #define BUMP_DER 2 // Bumper lado derecho del robot #define BUMP_IZQ 3 // Bumper lado izquierdo del robot #define AVANZA LOW #define RETROCEDE HIGH #define PARA LOW #define DETECTA LOW #define VELOCIDAD 150 // 255 representa al 100% de la velocidad del robot void setup() { // Configura pines control de los motores pinMode(DIR_DER, OUTPUT); pinMode(DIR_IZQ, OUTPUT); pinMode(PWM_DER, OUTPUT); pinMode(PWM_IZQ, OUTPUT); // Configura pines de los bumpers pinMode(BUMP_DER, INPUT_PULLUP); pinMode(BUMP_IZQ, INPUT_PULLUP); // Robot para digitalWrite(PWM_DER, PARA); digitalWrite(PWM_IZQ, PARA); } void loop() { // Robot Avanza digitalWrite(DIR_DER, AVANZA); digitalWrite(DIR_IZQ, AVANZA); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); if (digitalRead(BUMP_DER) == DETECTA) { // Robot rerocede digitalWrite(DIR_DER, RETROCEDE); digitalWrite(DIR_IZQ, RETROCEDE); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); delay(1000); // Robot gira izquierda digitalWrite(DIR_DER, AVANZA); digitalWrite(DIR_IZQ, RETROCEDE); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); delay(1000); } if (digitalRead(BUMP_IZQ) == DETECTA) { // Robot rerocede digitalWrite(DIR_DER, RETROCEDE); digitalWrite(DIR_IZQ, RETROCEDE); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); delay(1000); // Robot gira derecha digitalWrite(DIR_DER, RETROCEDE); digitalWrite(DIR_IZQ, AVANZA); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); delay(1000); } } Mantiene distancia mediante sensor de ultrasonidos /* RoboBase V2 Mantiene la distancia con un obstáculo mediante el uso del sensor de ultrasonidos. 11/2017 www.complubot.com */ #define DIR_DER 7 // Direción Motor 1 (derecha) #define DIR_IZQ 8 // Direción Motor 2 (izquierda) #define PWM_DER 9 // PWM Motor 1 (derecha) #define PWM_IZQ 10 // PWM Motor 2 (izquierda) #define TRIG 13 // Pin Trig del sensor de distancia por ultrasonidos #define ECHO 12 // Pin Echo del sensor de distancia por ultrasonidos #define AVANZA LOW #define RETROCEDE HIGH #define PARA LOW #define DETECTA LOW #define POSICION 20 // 20 cm #define VELOCIDAD 80 // 255 representa al 100% de la velocidad del robot int distancia, velocidad; void setup() { // Configura pines control de los motores pinMode(DIR_DER, OUTPUT); pinMode(DIR_IZQ, OUTPUT); pinMode(PWM_DER, OUTPUT); pinMode(PWM_IZQ, OUTPUT); // Configura los pines del sensor de distancia por ultrasonidos pinMode(TRIG, OUTPUT); pinMode(ECHO, INPUT); // Robot para digitalWrite(PWM_DER, PARA); digitalWrite(PWM_IZQ, PARA); } void loop() { // Mide la distancia entre el robot y un obstáculo digitalWrite(TRIG, LOW); delayMicroseconds(10); digitalWrite(TRIG, HIGH); delayMicroseconds(10); digitalWrite(TRIG, LOW); distancia = pulseIn(ECHO, HIGH) / 58; if (distancia > POSICION) { // Robot Avanza digitalWrite(DIR_DER, AVANZA); digitalWrite(DIR_IZQ, AVANZA); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); } else { // Robot rerocede digitalWrite(DIR_DER, RETROCEDE); digitalWrite(DIR_IZQ, RETROCEDE); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); } }

Control de movimientos mediante Bluetooth

En este ejemplo vamos a controlar el movimiento del robot de forma remota mediante una conexión Bluetooth. Para ello usaremos el módulo HC-05 que se incluye en el kit, conectado según las instrucciones de la guía de montaje.

Importante, el módulo Blueetooth HC-05 se conecta a los pines 0 y 1 de la placa Compluino UNO. Estos son los mismos pines que usa el IDE de Arduino para comunicarse y descargar programas cuando conectamos el cable USB. Así que tendremos que desconectar el módulo HC-05 cuando queramos descargar un programa usando la conexión USB.

En el robot instalaremos un programa que interprete las órdenes que le llegan por el puerto serie mediante la conexión Bluetooth. Para generar dichas órdenes podemos usar un smartphone o una tablet mediante una aplicación genérica de comunicaciones BT, como Bluetooth Terminal HC-05. También puedes hacer una aplicación con alguna herramienta sencilla, como el App Inventor, para enviar los comandos desde el dispositivo.

El programa que se muestra a continuación implementa en el robot los siguientes comandos:

Comando (ASCII) Función
A Robot avanza
R Robot retrocede
D Robot gira a la derecha
I Robot gira a la izquierda
P Robot para
/* RoboBase V2 Control de movimientos mediante Bluetooth 10/2017 www.complubot.com */ #define DIR_DER 7 // Direción Motor 1 (derecha) #define DIR_IZQ 8 // Direción Motor 2 (izquierda) #define PWM_DER 9 // PWM Motor 1 (derecha) #define PWM_IZQ 10 // PWM Motor 2 (izquierda) #define AVANZA LOW #define RETROCEDE HIGH #define PARA LOW #define VELOCIDAD 150 // 255 representa al 100% de la velocidad del robot void setup() { // Configura pines control de los motores pinMode(DIR_DER, OUTPUT); pinMode(DIR_IZQ, OUTPUT); pinMode(PWM_DER, OUTPUT); pinMode(PWM_IZQ, OUTPUT); Serial.begin(9600); // Velocidad de comunicación del puerto serie (comunicación Bluetooth) // Robot para digitalWrite(PWM_DER, PARA); digitalWrite(PWM_IZQ, PARA); } void loop() { if (Serial.available() > 0) { switch (Serial.read()) { case 'A': // Avanza digitalWrite(DIR_DER, AVANZA); digitalWrite(DIR_IZQ, AVANZA); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); break; case 'R': // Retrocede digitalWrite(DIR_DER, RETROCEDE); digitalWrite(DIR_IZQ, RETROCEDE); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); break; case 'D': // Gira derecha digitalWrite(DIR_DER, RETROCEDE); digitalWrite(DIR_IZQ, AVANZA); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); break; case 'I': // Gira izquierda digitalWrite(DIR_DER, AVANZA); digitalWrite(DIR_IZQ, RETROCEDE); analogWrite(PWM_DER, VELOCIDAD); analogWrite(PWM_IZQ, VELOCIDAD); break; case 'P': // Para digitalWrite(PWM_DER, PARA); digitalWrite(PWM_IZQ, PARA); break; } } }

5 – LEGO compatible

Las tiras de agujeros que hay a los lados del chasis del robot, permiten conectar piezas de LEGO de la serie Technic. De esta forma, puedes realizar montajes mecánicos que combinen la facilidad de uso de LEGO con la potencia de programación de Arduino.

Dado que el chasis es de madera, los agujeros de compatibilidad con LEGO pueden deformarse con el uso. Nuestro consejo es que pegues con algún tipo de adhesivo instantáneo una pieza a cada lado del robot. Esta te servirá de base para el resto de tus montajes.

RoboBaseV2_60_1200

6 – Ampliaciones

RoboBase V2 es un robot educativo que ofrece muchas posibilidades de ampliación, añadiendo distinto tipos de sensores y actuadores, como los que te proponemos a continuación.

QTR_1A_01

Sensores reflexivos QTR 1A

Este tipo de sensor reflexivo se coloca, mediante un tornillo, en la parte inferior del robot. Con ellos podemos detectar distintos tipos de marcas sobre el suelo. La forma más sencilla de trabajar es sobre una superficie blanca (mesa) en la que podemos pegar trozos de cinta aislante de color negro. Sigue líneas, sumo, saca piezas… son algunos de los ejemplos de actividades que podemos realizar con este sensor.

OLED_096_I2C

Display OLED

Esta pantalla OLED tiene una resolución de 128 x 64 pixels. En ella puedes mostrar texto y gráficos mediante la librería para Arduino U8g2. Este módulo se conecta mediante un bus I2C directamente a la placa Compluino UNO.

7 – Consideraciones sobre el sistema de alimentación del robot

El sistema de alimentación de este robot está constituido por un portapilas de cinco pilas alcalinas del tipo AA, cada una de ellas proporciona un voltaje de 1,5V lo que nos resulta en una tensión de alimentación de 7,5V, que es justo el voltaje ideal para alimentar una placa Arduino.

Importante: este robot está diseñado para trabajar con pilas alcalinas AA y no puede funcionar adecuadamente con pilas recargables. El motivo es que estas últimas proporcionan un voltaje nominal de 1,2V lo que nos daría una tensión total de 6V, insuficiente para alimentar de forma correcta una placa Arduino. En ocasiones se propone alimentar la placa Arduino por el terminal VIN, esto presenta dos grandes problemas. En primer lugar aún así el voltaje que le llega al microcontrolador de la placa Arduino sigue en el límite de lo aceptable y, además, al alimentar una placa Arduino de esta forma, suprimimos el sistema de protección contra la inversión de polaridad, a riesgo de dañar de forma irreversible la propia placa Arduino.

Share Button
Follow us on Facebook Follow us on Twitter
  • SUSCRIBETE

    Suscríbete a nuestro boletín informativo para estar puntualmente informado de nuestros cursos, talleres, eventos y novedades.

A ver si adivinas que utilizamos en este sitio? Aquí tienes el ladrillo en cuestión por si quieres leerlo