Manual de Robot Sumo Con Arduino
Manual de Robot Sumo Con Arduino
Año: 2018
Institución: Escuela de Educación Técnico Profesional Nº 602 "Gral San Martín"
www.eetp602.edu.ar
Manual de Robot Sumo con Arduino
Contenido
https://youtu.be/jFRErAX1tY0?t=3m30s
Detectar al enemigo y atacar. Esto lo logra ubicando la posición del enemigo por medio de unos
sensores de distancia, cuando se detecta un objeto cercano se aproxima a atacarlo.
Evitar salir del área de combate. El área de combate es de color negro con una línea blanca
alrededor, entonces se usan unos sensores que son capaces de detectar dicha línea y al
encontrarla evitarán pasar sobre ella.
Materiales.
1x Arduino uno
1x Chasis que cumpla con las normas de la categoría (se proporcionaran planos de ejemplo).
2x Micromotor Metálico Polulu o en su defecto 2 Motor Dc 3v A 12v Tt Engranaje Robot Arduino
Smart Car Auto.
2x Sensores de distancia Sharp de 150cm.
2x Conectores para sensor de distancia Sharp.
1x protoboard.
1x Driver Pololu A4988 Arduino Cnc Impresora 3d Motor o motor shield V1.0
2x Sensor de reflectancia infrarrojo TCRT5000
1x Soldadura
Jumpers hembra-hembra y Jumpers macho-macho varios
Interruptor 1 polo 2 tiros
1pulsador de panel N/A.
Pistola de silicona.
Baterías recargables tipo 18650 3.7v 5000 Mah
Conector para fuente DC de arduino.
Tornillos cabeza tanque de 1/8 de varias longitudes.
Esquema
Debemos soldar las resistencias al sensor de forma que se puedan doblar los 3 cables que irán al arduino
como en la siguiente imagen:
+5v: al positivo
GND: al negativo
POSITIVO NEGATIVO
470Ω
10KΩ
SEÑAL
/**********************************************************************/
/* Autor: Palacios José Emanuel docente de la EETPN°602 */
/* Programa: testeo de sensores de línea blanca o negra */
/* Año:2018 */
/**********************************************************************/
void setup() {
pinMode(LED,OUTPUT);//definimos la variable LED que está en el pin 13 como salida
Serial.begin(9600);//habilitamos el monitor serial
Serial.println("Iniciando lectura de sensor");
}
}
void loop() {
delay(100);
lectura_linea_1 = analogRead(A0);//leemos el sensor 1
lectura_linea_2 = analogRead(A1);//leemos el sensor 2
Serial.println(lectura_linea_1);//mostramos el valor por el monitor serial
Serial.println(lectura_linea_2);//mostramos el valor por el monitor serial
if(lectura_linea_1 > 30 || lectura_linea_2 > 30)//si detecto línea blanca activo LED
digitalWrite(LED,HIGH);//activo el LED
else
digitalWrite(LED,LOW);//desactivo el LED
}
Para probar el sensor utilizaremos algún objeto que sea de color blanco y negro.
Y finalmente, al probar el sensor detectando el objeto en una superficie blanca o negra, se encenderá y
apagará el LED respectivamente:
Una vez probados ambos sensores procedemos a colocarlos en la estructura, recomendamos usar
silicona para adherirlos a la estructura y para que quede aislado el sensor para evitar hacer algún corto
circuito.
El sensor debe ser colocado en el orificio de la parte inferior del chasis de Robot Sumo.
Orificio sensores
Sensor
Derecho - izquierdo
Para saber si funciona el sensor se puede observar con la cámara de un celular y se podrá observar si el
led infrarrojo está funcionando:
El sensor entrega 3 volts si el objeto se encuentra cerca (no mide distancias menores a 4cm, por lo que se
aconseja utilizar otro sistema de medición para distancias menores a esta), y disminuye el voltaje que
entrega cuando la distancia va incrementando. La siguiente gráfica explica su funcionamiento:
Voltaje (v)
Distancia (cm)
Los sensores utilizan unos conectores especiales, estos necesitan soldarse a otros conectores para
después poder conectarlos al arduino. Puedes usar unos jumpers hembra o macho, si usas hembra
puedes conectar directamente a tu arduino, si utilizas macho puedes conectar a un protoboard.
Negativo
Positivo
Condensador
Señal
Una vez soldados los conectores se conectarán al arduino y se probará su funcionamiento. Primero
conecta el sensor al arduino como en el siguiente diagrama (esquemático y dibujo en fritzing):
/**********************************************************************/
/* Autor: Palacios José Emanuel docente de la EETPN°602 */
/* Programa: testeo de sensores SHARP */
/* Año:2018 */
/**********************************************************************/
// Conexiones
int sensor_distancia_1 = A2;//defino que voy a conectar el sensor en A0
// Inicialización
int lectura = 0;
void setup() {
Serial.begin(9600);
Serial.println("Iniciando lectura de sensor");
}
// Programa
void loop() {
lectura = analogRead(sensor_distancia_1);//leo el sensor conectado en A0
Serial.println(lectura);//muestro por el monitor serial la lectura realizada
delay(1000);
}
Una vez programado el código abre el monitor serie y te mostrará la lectura del sensor, prueba colocar un
objeto frente a él a diferentes distancias y visualiza el dato que envía el monitor serie.
Monitor serie
Sensor Sharp
Para saber si funciona el sensor se puede observar con la cámara de un celular y se podrá observar si el
led infrarrojo está funcionando:
Control de Motores
Terminada la parte de los sensores, nos queda por probar el movimiento de los motores, estos funcionan
con un voltaje de corriente directa, para controlar el giro y la velocidad se usará un driver de motores.
Primero soldaremos los cables a los motores, igual que con los sensores de distancia usaremos jumpers
para que sea fácil conectar a los motores.
Se deben soldar los cables de manera perpendicular al motor de modo que la longitud del motor sea lo
más corta posible (ahora que se ha incluido el cable).
Una vez soldados los motores debemos soldar unos conectores machos para el driver, soldaremos los
conectores macho para conectar al protoboard.
En resumen, es un Shield barato y práctico para manejar pequeños motores de 5V, pero que se quedará
corto si necesitas una cierta potencia en los motores, ya que la intensidad que estos demandaran superará
con facilidad los 0,6A que tiene como límite este Shield.
Es ideal para construir robots autónomos con pequeños motores y sin peso y sobre todo como elemento
de aprendizaje antes de invertir en otras opciones más sofisticadas.
El shield conecta directamente los H Bridges L293D a los pines PWM de Arduino y además incorpora un
viejo conocido nuestro el 74HC595, un Shift Register, para ahorrar pines en la conexión.
El Shield se reserva los pines 3,4,5,6,7,8,9,10,11,12, los pines 9 y 10 se usan para los servos en caso de
que los incluyamos y quedan libres los pines 2 y 13, así como el 0 y 1 que se usan para la comunicación
USB con nuestro PC.
Los pines A0 a A5 están disponibles para nuestro uso, podemos usarlos como pines digitales también.
Hay conexiones para los bornes de 4 motores, marcados como M1, M2, M3 y M4 y conviene que al
conectar sigas el mismo criterio en los bornes y en el Shield porque de lo contrario conseguirás que alguno
de los motores gire al revés de lo que pretendes. Lo que no es muy grave porque se arregla con facilidad.
Por eso siempre que sea posible conviene que separes la alimentación de uno y otro (Aunque en un robot
autónomo va a ser difícil). Para ello basta con que quites el “power jumper” y la alimentación estará
separada. Esto será imprescindible si tus motores son de digamos 9 0 12V porque tu Arduino solo
funciona con 5V.
Vamos a conectar un primer motor al Shield para probar. Lo primero montad el Shield a nuestro Arduino.
Conectar los bornes del motor a los tornillos A y B del Motor Shield, dejando libre el pin central marcado
como GND.
No es importante en que borne coloco cada que pin, porque lo único que ocurrirá si lo invertís es
que el motor girará al revés. Lo que sí es recomendable es que mantengáis el mismo criterio para
todos los motores.
Como en este primer ejemplo vamos a alimentar el motor desde Arduino y el USB, no olvidés
conectar el power jumper, para que alimentemos los motores directamente desde Arduino.
Posteriormente se recomienda alimentar el módulo de motores directamente desde la batería.
Ahora vamos a descargar una librería para manejar el Shield directamente, que nos permitirá
abstraernos del detalle de pines.
https://www.prometec.net/wp-content/uploads/2015/03/adafruit-Adafruit-Motor-Shield-library-8119eec.zip
https://www.prometec.net/librerias/
DEFINICIÓN
freq: puede ser 64, 12, 8 o 1. A más frecuencia, más exactitud y menos ruido pero más consumo.
NOTA: para los motores 1 y 2 podemos utilizar cualquier frecuencia, pero para los motores 2 y 4
sólo se usa la frecuencia de 1kHz, cualquier otra frecuencia indicada en la función se desechará.
VELOCIDAD
nombre_motor.setSpeed(num);
num: número del 0 al 255 que indicará el nivel de voltaje de salida aplicado al motor: 0 mínimo, 255
máximo.
Ejemplo: motor2.setSpeed(100); hace que al motor que hemos definido como motor2 se le aplique
un nivel de voltaje de 100, siendo el máximo 255.
SENTIDO
nombre_motor.run(SENTIDO);
SENTIDO: la palabra FORWARD o BACKWARD según queramos que el motor gire en un sentido
o en otro.
Ejemplo: motor2.run(FORWARD); hace que al motor que hemos definido como motor2 gire hacia
adelante.
REPOSO
Profesor Técnico Palacios José Emanuel Página 19
Manual de Robot Sumo con Arduino
nombre_motor.run(RELEASE);
Ejemplo: motor2.run(RELEASE); hace que al motor que hemos definido como motor2 se pare.
/**********************************************************************/
/* Autor: Palacios José Emanuel docente de la EETPN°602 */
/* Programa: testeo de Modulo Motores V1 */
/* Año:2018 */
/**********************************************************************/
void setup()
{
Motor1.run(RELEASE);// detengo motor
Motor1.setSpeed(200);// Definimos la velocidad de Motor1 (puede ir desde 0 a 255)
}
void loop()
{
Motor1.run(FORWARD); // Hacemos que el Motor1 avance
delay (2000);// Demora de 2000 milisegundos
/**********************************************************************/
/* Autor: Palacios José Emanuel docente de la EETPN°602 */
/* Programa: testeo de Modulo Motores V1 */
/* Año:2018 */
/**********************************************************************/
void setup()
{ Serial.begin(9600); // set up Serial library at 9600 bps
Motor1.setSpeed(255); //definimos la velocidad
Motor2.setSpeed(255); //definimos la velocidad
Este Motor Shield V1 se conecta directamente sobre el arduino y para saber que pines usa y cuales deja libre
hemos añadido este pequeño anexo especificando los pines que usa cada motor y cuales están disponibles en
caso contrario.
Arduino Función
Pin 1 Disponible
Pin 2 Disponible
Pin D3 DC Motor #2 / Stepper #1
Pin D4 Reservado para gobernar el Shift Register 74HC595
Pin D5 DC Motor #3 / Stepper #2
Pin D6 DC Motor #4 / Stepper #2
Pin D7 Reservado para gobernar el Shift Register 74HC595
Pin D8 Reservado para gobernar el Shift Register 74HC595
Pin D9 Servo #1, Disponible si no se usa el servo
Profesor Técnico Palacios José Emanuel Página 21
Manual de Robot Sumo con Arduino
Arduino Función
Pin D10 Servo #2, Disponible si no se usa el servo
Pin D11 DC Motor #1 / Stepper #1
Pin D12 Reservado para gobernar el Shift Register 74HC595
Pin D13 Disponible
A0,A1,A2,A3,A4,A5 Disponibles. Recuerda que pueden usarse como digitales
Tener presente que no hay ningún pin de Arduino conectado a los motores directamente. La gestión de
los motores se realiza a través del shift register para ahorra pines y por eso tenéis necesariamente que
usar la librería para manejarlos.
Pero nos provee orificios para poder usar esas salidas, soldaremos en ellas pines hembra y de esta
manera podremos usarlas.
Lógica de movimiento
La estructura que hemos elegido para nuestro robot-sumo nos permitirá realizar movimientos hacia
Adelante, hacia Atrás, giros a la Derecha, ala Izquierda y sobre sí mismo.
Movimiento hacia delante: Se hacen girar los dos motores en la misma dirección (avanzando), esto
provoca un movimiento recto hacia delante de la estructura.
Sentido de giro de ruedas
Sentido de
movimiento
Movimiento hacia delante: Se hacen girar los dos motores en la misma dirección (retrocediendo), esto
provoca un movimiento recto hacia atrás de la estructura.
Sentido de giro de ruedas
Sentido de
movimiento
Movimiento hacia la izquierda: Se hace girar el motor de la Izquierda hacia atrás y el motor de la
Derecha hacia delante, esto provoca un movimiento de giro a la Izquierda de la estructura.
Sentido de giro de ruedas
Sentido de
movimiento
Chasis ya armado
Tapa motor
Montando el motor
en el soporte ya
provisto
Sensor
Derecho - izquierdo
Lo siguiente es colocar los sensores de distancia en la parte frontal del Robot Sumo, en la siguiente
imagen se muestra como debe quedar colocado el sensor:
Sensor Sharp
Derecho - izquierdo
Colocar la batería dentro del Robot Sumo y agregarle peso para que califique en la categoría en la que
desee participar.
Recomendamos revisar cuidadosamente todas las conexiones, debido a que el sistema ya incluye
demasiados módulos es muy fácil cometer errores. A continuación vemos el Robot sumo ya armado con
los visto hasta ahora.
160mm
180mm
/**********************************************************************/
/* Autor: Palacios José Emanuel docente de la EETPN°602 */
/* Programa: Sumo Arduino Básico */
/* Año:2018 */
/***********************************************************************/
// Conexiones y librerias
#include <AFMotor.h> //incluye la librería de del shield en nuestro programa
AF_DCMotor Motor1(1);// crea una instancia de un motor conectado a la puerta M1 izquierdo
AF_DCMotor Motor2(2);// crea una instancia de un motor conectado a la puerta M2 derecho
// Variables
int li_izq_dela =0;// variable del sensor de linea izquierdo delantero
int li_der_dela =0;// variable del sensor de linea derecho delantero
int dis_izq = 0;// variable de distancia izquierdo
int dis_der = 0;// variable de distancia derecho
}
//************************** fin programa principal *********************************************
https://youtu.be/DdqFkJAV6l4
En la imagen anterior de observa la prueba de un robot sumo contra un contrincante inmóvil (caja de cartón)
en un dojo fuera de reglamento (cuadrado y sin las medidas correspondientes, etc), sin embargo sirve en
principio para ir testeando el funcionamiento del robot
Bibliografía:
https://www.arduino.cc/en/main/software
https://www.pololu.com/category/22/motors-and-gearboxes
http://www.superrobotica.com/S320103.htm
https://youtu.be/DdqFkJAV6l4