SlideShare una empresa de Scribd logo
8
Lo más leído
19
Lo más leído
20
Lo más leído
1Departamento de Tecnología
IES Valentín Turienzo
2Departamento de Tecnología
IES Valentín Turienzo
Introducción.
SumoBotCBR es un robot de la categoría de minisumo que ha sido diseñado por alumn@s de
Tecnología Industrial de 1º de Bachillerato del IES Valentín Turienzo de Colindres, Cantabria.
Las principales premisas en su diseño fueron las siguientes:
.- Sencillez de montaje, utilizando el menor número de tuercas, tornillos, adhesivos,…
.- Menor coste de los componentes y material y facilidad en su adquisición.
.- Control realizado con Arduino.
.- Chasis impreso en 3D y diseñado con SketchUp.
.- Homologado para la categoría de minisumo. (10 x 10 cm) y menos de 500 gr.
El objetivo principal de este proyecto es que cualquier persona que quiera construir un robot
de minisumo, ya sea profesor, estudiante, aficionado,… lo pueda hacer en muy poco tiempo, con las
mínimas complicaciones y el mínimo coste.
Descarga los archivos .stl para imprimir aquí.
Descarga los archivos .skp por si quieres modificar y personalizar en robot.
3Departamento de Tecnología
IES Valentín Turienzo
Material necesario
Listado de componentes SumoBotCBR
Artículo Imagen
1 x Arduino UNO
1 x Shield L293 control de motores
2 x Motorreductor DC120
3 x Módulo seguidor IR
Sensor TCRT5000
1 x Sensor de ultrasonidos
HC-SR04
40 x Cables dupot hembra-hembra 20 cm
1 x Conector y pila 9 v
Chasis y cubierta impreso en 3D
Ruedas impresas en 3D
Cinta "tapafugas" para las ruedas
El coste total aproximado del robot completo no supera los 45 €.
4Departamento de Tecnología
IES Valentín Turienzo
Montaje y Conexiones.
MONTAJE:
Empezaremos montando los dos motorreductores CC en el chasis utilizando dos tornillos de 3
x 25 mm de cabeza hexagonal por cada motor. Previamente se deben
realizar las conexiones de los cables a los terminales del motor.
Si el motorreductor tuviera doble eje sería necesario cortar
uno de los ejes.
IMPORTANTE
NO APRETAR DEMASIADO LOS TORNILLOS. Puede llegar a
presionar la reductora del motor y hacer que este se quede trabado.
A continuación colocaremos los tres sensores TCRT5000 y el sensor de ultrasonidos HC-SR04
En un primer momento su alojamiento está diseñado para colocarlos simplemente por presión, pero
se podría sustituir esta sujeción por tornillos de 2,5 x 6 mm., o utilizar una gota de termocola.
Después colocaremos los cables
dupot en todos los terminales de los
sensores.
Tornillos 3x25
Los motorreductores deben ir colocados
como muestra la imagen.
5Departamento de Tecnología
IES Valentín Turienzo
Una vez colocados los cables se colocará la tapa haciendo pasar estos por los orificios
practicados para tal fin.
Seguidamente colocaremos la Arduino UNO sobre la tapa sujetándola con tres tornillos, y
sobre ella colocaremos la Shield L293 en la parte superior, tal y como se ve en la foto.
IMPORTANTE
La Shield de motores L293 no tienen soldados los pines A0-5
(donde van conectados los sensores) por lo que es necesario soldarlos
previamente.
6Departamento de Tecnología
IES Valentín Turienzo
CONEXIONADO:
El siguiente paso consiste en conectar los motorreductores a la Shield. Visto el robot desde
arriba, el motor Izquierdo (MI) lo conectaremos a los terminales M2 y el motor Derecho (MD) a los
terminales M1.
*Cuando se realice el Test de motores habrá que revisar su polaridad.
Los tres sensores TCRT5000 y el sensor de Ultrasonidos HC-SR04, los vamos a llamar de la
siguiente manera:
Sensor Derecho (SD).
Sensor Trasero (ST).
Sensor Ultrasonidos (SUS)
Sensor Izquierdo (SI).
7Departamento de Tecnología
IES Valentín Turienzo
Su conexión a la shield será:
Sensor Pines de la Shield
Sensor Trasero (ST) A1
Sensor Derecho (SD) A2
Sensor Izquierdo (SI) A3
Sensor Ultrasonidos TRIG A4
ECHO A5
Este será el aspecto final de nuestro SumoBotCBR;
8Departamento de Tecnología
IES Valentín Turienzo
IMPORTANTE**
No todos los sensores denominados TCRT5000 que nos encontramos en el mercado
son iguales, tienen ligeras variaciones de tamaño y sobre todo de sensibilidad. Por ese motivo
se ha diseñado otra carcasa para el SumoBOTCBR en la cual los sensores van en la parte
superior. En un principio no parece la colocación ideal, pero su montaje es más sencillo y
funcionan correctamente. Los archivos .STL de esta nueva configuración son: ChasisSumoV9.3
y CubiertaV5.2.
9Departamento de Tecnología
IES Valentín Turienzo
PROGRAMACIÓN
Antes de empezar con la programación, debemos instalar la librería AFMotor.h. y la librería
Ultrasonic.h Podemos realizar una de las siguientes opciones:
.- OPCIÓN 1: Abrimos el IDE de Arduino, Pinchamos en Sketch, Importar en librería y
finalmente en Add Library. En este punto añadiríamos las librerías AFMotor.h y Ultrasonic.h (la
carpeta entera en formato ZIP tal y como se ha descargado).
.- OPCIÓN 2: Si la opción anterior nos diera algún problema, podemos meter directamente las
carpetas descomprimidas en C:archivos de programa (x86)arduinolibraries
10Departamento de Tecnología
IES Valentín Turienzo
Sketch 1. Test motor DERECHO
Vamos a comenzar con la programación y para ello realizaremos un sencillo programa para
controlar el motor DERECHO (MD). Haremos que gire hacia delante durante 1 seg, que se pare 2 seg y
que giren hacia atrás 1 seg.
Con esta práctica se pretende comprobar el correcto conexionado del motorreductor,
conocer su sentido de giro y su control.
El Sketch correspondiente sería este:
//SumoBotCBR
// By CantabRobots
// TEST DE MOTORES DE SumoBOTCBR
// MOTOR IZQUIERDO (MI) es el M2
// MOTOR DERECHO (MD) es el M1
// SENSOR IZQUIERDO (SI) en el A3
// SENSOR DERECHO (SD)en el A2
// SENSOR TRASERO (SA)en el A1
// SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5
// Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este
Sketch
//MOVIMIENTOS BÁSICOS DEL MOTOR REALIZADOS ADELANTE (1seg), PARO (2seg.) y ATRAS (2 seg.)
#include <AFMotor.h>
AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1
void setup() {
motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar
desde 0 (parado) a 255 (velocidad máxima) por la salida PWM)
motorMD.run(RELEASE); // Motor Derecho preparado
}
void loop() {
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
delay(1000); // Se mantien durante 1 s.
11Departamento de Tecnología
IES Valentín Turienzo
motorMD.run(FORWARD); // Motor Derecho hacia delante
motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para.
delay(2000); // Se mantien durante 2 s.
motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad
en la placa)
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
delay(2000); // Se mantien durante 2 s.
}
*Recuerda, Si el motor DERECHO no girara en el sentido que le indicamos debemos cambiar su
polaridad en la Shield.
Ejercicio:
Realiza los cambios necesarios para Testear el motor IZQUIERDO y comprobar su sentido de
giro
Sketch 2. Movimientos Básicos del SumoBotCBR
Los movimientos básicos del SumoBotCBR son los siguientes; Adelante, Paro, Atrás, Giro
Derecha, Giro Izquierda. Ahora vamos a trabajar con los dos motores a la vez. Para realizar los giros
debemos parar el motor que esté en el sentido que queramos girar, por ejemplo, si queremos girar a
la izquierda debemos parar el motor izquierdo y si queremos girar a la derecha, debemos parar el
motor derecho.
//SumoBotCBR
// By CantabRobots
// TEST DE MOTORES DE SumoBOTCBR
// MOTOR IZQUIERDO (MI) es el M2
// MOTOR DERECHO (MD) es el M1
// SENSOR IZQUIERDO (SI) en el A3
// SENSOR DERECHO (SD)en el A2
// SENSOR TRASERO (SA)en el A1
// SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5
// Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este
Sketch
//MOVIMIENTOS BÁSICOS DEL ROBOT: ADELANTE, PARO, GIRO IZQUIERDA, GIRO DERECHA, ATRAS.
12Departamento de Tecnología
IES Valentín Turienzo
#include <AFMotor.h>
AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1
AF_DCMotor motorMI(2); // Definimos el Motor Izquierdo en la conexión M2
void setup() {
motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar
desde 0 (parado) a 255 (velocidad máxima) por la salida PWM)
motorMI.setSpeed(250); // Set de velocidad MI fijada en 250 (esta velocidad se puede variar
desde 0 (parado) a 255 (velocidad máxima) por la salida PWM)
motorMD.run(RELEASE); // Motor Derecho preparado
motorMI.run(RELEASE); // Motor Izquierdo preparado
}
void loop() {
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
motorMI.setSpeed(255); // Set de velocidad MI fijada en 255
delay (1000);
motorMD.run(FORWARD); // Motor Derecho hacia delante
motorMI.run(FORWARD); // Motor Izquierdo hacia delante
motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para.
motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para.
delay (1000);
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para.
delay (1000);
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMD.setSpeed(0); // Set de velocidad MD fijada en 0.El motorD se para
motorMI.setSpeed(255); // Set de velocidad MI fijada en 255.
delay (1000);
13Departamento de Tecnología
IES Valentín Turienzo
motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad
en la placa)
motorMI.run(BACKWARD); // Motor Izquierdo hacia atras (si gira al revés cambiamos la polaridad
en la placa)
motorMI.setSpeed(255); // Set de velocidad MI fijada en 255
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
delay (1000);
}
*Podemos hacer otro tipo de giros más suaves sin necesidad de parar el motor del interior. En
lugar de bajar a 0 su setSpeed podemos variar su PWM entre 20 y 100, siempre más bajo que la
velocidad del motor exterior. HAZ PRUEBAS.
Sketch 3. Movimientos Básicos con SUBRUTINAS del SumoBotCBR
Continuamos con nuestra programación y para ello vamos a introducir el concepto de
SUBRUTINAS. Las subrutinas son unos «miniprogramas», unas funciones, que se ejecutan al ser
llamadas desde el programa principal. La declaración de funciones, no va ni en el SETUP, ni en el
LOOP, va de forma independiente entre los dos. En esta actividad crearemos 5 subrutinas ADELANTE,
ATRAS, PARO, GIRODERECHA y GIROIZQUIERDA.
El Sketch correspondiente sería este:
//SumoBotCBR
// By CantabRobots
// TEST DE MOTORES DE SumoBOTCBR
// MOTOR IZQUIERDO (MI) es el M2
// MOTOR DERECHO (MD) es el M1
// SENSOR IZQUIERDO (SI) en el A3
// SENSOR DERECHO (SD)en el A2
// SENSOR TRASERO (ST)en el A1
// SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5
// Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este
Sketch
//MOVIMIENTOS BÁSICOS DEL ROBOT REALIZADOS CON SUBRUTINAS ADELANTE, PARO, GIRO
IZQUIERDA, GIRO DERECHA, ATRAS.
#include <AFMotor.h>
AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1
AF_DCMotor motorMI(2); // Definimos el Motor Izquierdo en la conexión M2
void setup() {
motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar
desde 0 (parado) a 255 (velocidad máxima) por la salida PWM)
14Departamento de Tecnología
IES Valentín Turienzo
motorMI.setSpeed(250); // Set de velocidad MI fijada en 250 (esta velocidad se puede variar
desde 0 (parado) a 255 (velocidad máxima) por la salida PWM)
motorMD.run(RELEASE); // Motor Derecho preparado
motorMI.run(RELEASE); // Motor Izquierdo preparado
}
void loop() {
ADELANTE();
delay (1000);
ATRAS();
delay (1000);
PARO();
delay (1000);
GIRODERECHA();
delay (1000);
GIROIZQUIERDA();
delay (1000);
}
void ADELANTE(){ // SUBRUTINA ADELANTE.
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
motorMI.setSpeed(255); // Set de velocidad MI fijada en 255
}
void PARO(){ //SUBRUTINA PARO.
motorMD.run(FORWARD); // Motor Derecho hacia delante
motorMI.run(FORWARD); // Motor Izquierdo hacia delante
motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para.
motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para.
}
void GIROIZQUIERDA(){ //SUBRUTINA GIRO IZQUIERDA.
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para.
}
void GIRODERECHA(){ //SUBRUTINA GIRO DERECHA.
15Departamento de Tecnología
IES Valentín Turienzo
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMD.setSpeed(0); // Set de velocidad MD fijada en 0.El motorD se para
motorMI.setSpeed(255); // Set de velocidad MI fijada en 255.
}
void ATRAS(){ //SUBRUTINA ATRAS.
motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad
en la placa)
motorMI.run(BACKWARD); // Motor Izquierdo hacia atras (si gira al revés cambiamos la polaridad
en la placa)
motorMI.setSpeed(255); // Set de velocidad MI fijada en 255
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
}
Ejercicio:
Completa el programa realizando SUBRUTINAS de giros más suaves hacia DERECHA e
IZQUIERDA cambiando el PWM del motor que queda en el interior.
Ejercicio:
Utilizando las SUBRUTINAS, realiza un programa en el que tu robot describa un cuadrado
perfecto, llegando al mismo punto de la salida.
Ya hemos visto cómo controlar los motores DERECHOS e IZQUIERDOS del SumoBotCBR, ahora
vamos a ver cómo hacerlo girar aún más rápido. Se pueden realizar tres tipos de giros, por llamarlos
de alguna manera, lentos, suaves y rápidos. Los “lentos” consistirán en dejar parados los motores del
interior del giro haciendo avanzar los del exterior, para los “suaves” cambiamos el PWM del motor
interior a valores más pequeños que el exterior. Y los “muy rápidos” haciendo que los motores del
interior giren hacia atrás mientras que los del exterior van hacia adelante. Ver cuadro siguiente:
CASOS DE GIROS
STOP
GIRO A IZQUIERDAS LENTO GIRO A IZQUIERDAS RÁPIDOGIRO A IZQUIERDAS SUAVE
16Departamento de Tecnología
IES Valentín Turienzo
Sketch 4: Sensor Infrarrojos.
En esta práctica vamos a conocer el funcionamiento de los sensores IR. Más concretamente el
sensor infrarrojo TCRT5000.
Un sensor infrarrojo es un dispositivo optoelectrónico capaz de medir la radiación
electromagnética infrarroja de los cuerpos en su campo de visión. El sensor que nos ocupa está
compuesto por un diodo emisor de luz y un fototransistor. Si el fototransistor recibe luz da una señal
de cero, si no recibe luz da un 1.
Características:
 Dimensiones: 10mm x 40mm
 Voltaje de operación: 4.5V a 5.5V
 Distancia de operación: Desde 1mm hasta 12mm
 Sensor TCRT5000
 Salida digital
 Posee filtro bloqueador de luz de día
 Voltaje de trabajo: 5VDC
 Posee 3 pines: VCC (+), GND (-), OUT (Vout)
 Si detecta un objeto color claro (ej. línea blanca) Vout >4 V
 Si no detecta nada (ej. línea negra) Vout =0 V
Más información de los sensores IR
GIRO A DERECHAS RÁPIDO
STOP
GIRO A DERECHAS LENTO GIRO A DERECHAS SUAVE
+5V
GND
PIN A1…
OJO!!!!!
No todos los sensores tienen la misma
configuración de los pines. Comprobar
antes de realizar la conexión.
17Departamento de Tecnología
IES Valentín Turienzo
Para conocer los valores del sensor IR vamos a realizar un sencillo Sketch utilizando el Monitor
Serial.
De esta manera observamos que cuando el sensor detecta línea negra su valor es 1 y cuando
detecta blanco su valor es 0. (En el propio sensor hay un led rojo que se enciende cuando marca 0).
Ejercicio:
Escribe un nuevo código para comprobar el valor de los 3 sensores con un Serial.print de tal
forma que vaya escribiendo que sensor es y su valor, por ejemplo:
El valor de SI es 0
El valor de SD es 1
El valor de ST es 1…
int IR = A1;
void setup() {
Serial.begin (9600);
pinMode(IR, INPUT);
}
void loop() {
IR = digitalRead (A1);
Serial.print("El valor del IR es ");
Serial.println (IR);
delay(1000);
}
18Departamento de Tecnología
IES Valentín Turienzo
Código para lectura de color (Blanco o Negro) para testear los sensores.
//SumoBotCBR
// By CantabRobots
// TEST DE Sensores
// MOTOR IZQUIERDO (MI) es el M2
// MOTOR DERECHO (MD) es el M1
// SENSOR IZQUIERDO (SI) en el A3
// SENSOR DERECHO (SD)en el A2
// SENSOR TRASERO (ST)en el A1
// SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5
// Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este
Sketch
//TEST DE SENSORES
int SI=A3;
int SD=A2;
int ST=A1;
void setup() {
Serial.begin(9600);
pinMode(SD,INPUT);
pinMode(SI,INPUT);
pinMode(ST,INPUT);
}
void loop() {
int valorSD=digitalRead(A2);
if(valorSD==1){
Serial.println("valorSD es blanco");
}else{
Serial.println("valorSD es negro");
}
delay(1000);
int valorSI=digitalRead(A3);
if(valorSI==1){
Serial.println("valorSI es blanco");
}else{
Serial.println("valorSI es negro");
}
delay(1000);
int valorST=digitalRead(A1);
if(valorST==1){
Serial.println("valorST es blanco");
}else{
Serial.println("valorST es negro");
}
delay(1000);
}
19Departamento de Tecnología
IES Valentín Turienzo
Sketch 5: Retroceder y girar al llegar al límite del Dohjo
El Dohjo es el tablero sobre el que se hacen las competiciones de sumo y minisumo. Tienen un
metro de diámetro y generalmente son de fondo negro, con una línea blanca de 5 cm que los rodea y
de la que no se puede salir el robot.
En esta práctica vamos a utilizar los dos sensores IR delanteros para que cuando el
SumoBotCBR detecte la línea blanca retroceda 1 segundo, gire y continúe avanzando hasta encontrar
otra vez la línea blanca.
//SumoBotCBR
// By CantabRobots
// Sumo básico DE SumoBOTCBR
// MOTOR IZQUIERDO (MI) es el M2
// MOTOR DERECHO (MD) es el M1
// SENSOR IZQUIERDO (SI) en el A3
// SENSOR DERECHO (SD)en el A2
// SENSOR TRASERO (SA)en el A1
// SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5
// Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch
//MOVIMIENTOS DENTRO DEL DOHJO.
#include <AFMotor.h>
AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1
AF_DCMotor motorMI(2); // Definimos el Motor Izquierdo en la conexión M2
int SI=A3;
int SD=A2; // Sólo se van a utilizar los sensores delanteros.
void setup() {
pinMode(SD,INPUT);
pinMode(SI,INPUT);
20Departamento de Tecnología
IES Valentín Turienzo
motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar desde 0
(parado) a 255 (velocidad máxima) por la salida PWM)
motorMI.setSpeed(250); // Set de velocidad MI fijada en 250 (esta velocidad se puede variar desde 0
(parado) a 255 (velocidad máxima) por la salida PWM)
motorMD.run(RELEASE); // Motor Derecho preparado
motorMI.run(RELEASE); // Motor Izquierdo preparado
}
void loop() {
int SI = digitalRead(A3);
int SD = digitalRead(A2);
if ((SI==HIGH) && (SD==HIGH)){ //Si el Sensor SI detecta blanco y el Sensor SD detecta blanco
ATRAS(); // Hacia atrás.
delay (2000);
GIRODERECHA();
delay (750);
}
else if ((SI==LOW) && (SD==HIGH)){ //Si el Sensor SI detecta negro y el Sensor SD detecta blanco
ATRAS(); // Hacia atrás.
delay (2000);
GIRODERECHA();
delay (750);
}
else if ((SI==HIGH) && (SD==LOW)){ //Si el Sensor SI detecta blanco y el Sensor SD detecta negro
ATRAS(); // Hacia atras.
delay (2000);
GIROIZQUIERDA();
21Departamento de Tecnología
IES Valentín Turienzo
delay (1000);
}
else{ // Si no hace nada de lo anterior
ADELANTE(); // Paro.
}
}
void ADELANTE(){ // SUBRUTINA ADELANTE.
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la
placa)
motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la
placa)
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
motorMI.setSpeed(255); // Set de velocidad MI fijada en 255
}
void PARO(){ //SUBRUTINA PARO.
motorMD.run(FORWARD); // Motor Derecho hacia delante
motorMI.run(FORWARD); // Motor Izquierdo hacia delante
motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para.
motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para.
}
void GIROIZQUIERDA(){ //SUBRUTINA GIRO IZQUIERDA.
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la
placa)
motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la
placa)
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para.
}
22Departamento de Tecnología
IES Valentín Turienzo
void GIRODERECHA(){ //SUBRUTINA GIRO DERECHA.
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la
placa)
motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la
placa)
motorMD.setSpeed(0); // Set de velocidad MD fijada en 0.El motorD se para
motorMI.setSpeed(255); // Set de velocidad MI fijada en 255.
}
void ATRAS(){ //SUBRUTINA ATRAS.
motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad en la
placa)
motorMI.run(BACKWARD); // Motor Izquierdo hacia atras (si gira al revés cambiamos la polaridad en la
placa)
motorMI.setSpeed(255); // Set de velocidad MI fijada en 255
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
}
23Departamento de Tecnología
IES Valentín Turienzo
Sketch 6: Sensor de Ultrasonidos HC-SR04
En esta práctica vamos a conocer el funcionamiento de los sensores de Ultrasonidos HC-SR04.
Este tipo de sensor emite ultrasonidos por el
PIN TRIG los cuales, al encontrar un objeto, rebotan
y es el PIN ECHO el que recibe la onda. En función
del tiempo entre el pulso emitido y el recibido se
puede calcular la distancia del objeto. Recordad que
la velocidad del sonido es 340 m/s.
Estos sensores tienen un rango de acción de
2 cm hasta 3 m con una precisión de 3 mm.
La librería Ultrasonic.h facilita mucho la programación del sensor de Ultrasonidos. Para su
instalación procederemos como se explicó anteriormente.
Vamos a realizar un sencillo programa para leer los valores de distancia utilizando el puerto
serie.
24Departamento de Tecnología
IES Valentín Turienzo
//SumoBotCBR
// By CantabRobots
// TEST DE Ultrasonidos de SumoBOTCBR
// MOTOR IZQUIERDO (MI) es el M2
// MOTOR DERECHO (MD) es el M1
// SENSOR IZQUIERDO (SI) en el A3
// SENSOR DERECHO (SD)en el A2
// SENSOR TRASERO (ST)en el A1
// SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5
// Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este
Sketch
//Test del sensor de Ultrasonidos.
#include <Ultrasonic.h>
Ultrasonic ultrasonic(A4,A5); // (Trig PIN,Echo PIN)
void setup() {
Serial.begin(9600);
}
void loop()
{
Serial.print(ultrasonic.Ranging(CM)); // CM or INC
Serial.println(" cm" );
delay(1000);
}
Al abrir el Monitor serie tendríamos
que tener lecturas semejantes a estas.
25Departamento de Tecnología
IES Valentín Turienzo
Sketch 7: Búsqueda y ataque
Con este programa el robot girará sobre sí mismo buscando al oponente y cuando este esté a
menos de 30 cm atacará.
//SumoBotCBR
// By CantabRobots
// BUSQUEDA Y ATAQUE de SumoBOTCBR
// MOTOR IZQUIERDO (MI) es el M2
// MOTOR DERECHO (MD) es el M1
// SENSOR IZQUIERDO (SI) en el A3
// SENSOR DERECHO (SD)en el A2
// SENSOR TRASERO (SA)en el A1
// SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5
// Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este
Sketch
//BUSQUEDA Y ATAQUE.
#include <AFMotor.h>
#include <Ultrasonic.h>
Ultrasonic ultrasonic(A4,A5); // (Trig PIN,Echo PIN)
AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1
AF_DCMotor motorMI(2); // Definimos el Motor Izquierdo en la conexión M2
int SI=A3;
int SD=A2;
int ST=A1;
void setup() {
pinMode(SD,INPUT);
pinMode(SI,INPUT);
pinMode(ST,INPUT);
pinMode(A4, OUTPUT);
pinMode(A5, INPUT);
motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar
desde 0 (parado) a 255 (velocidad máxima) por la salida PWM)
motorMI.setSpeed(250); // Set de velocidad MI fijada en 250 (esta velocidad se puede variar
desde 0 (parado) a 255 (velocidad máxima) por la salida PWM)
motorMD.run(RELEASE); // Motor Derecho preparado
motorMI.run(RELEASE); // Motor Izquierdo preparado
}
void loop() {
if (ultrasonic.Ranging(CM) < 30){ // Si hay un objeto a menos de 30 cm ir hacia adelante
ADELANTE();
}
26Departamento de Tecnología
IES Valentín Turienzo
else{ // Si no hace nada de lo anterior
GIRODERECHA(); // Gira a derecha
}
}
void ADELANTE(){ // SUBRUTINA ADELANTE.
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
motorMI.setSpeed(255); // Set de velocidad MI fijada en 255
}
void PARO(){ //SUBRUTINA PARO.
motorMD.run(FORWARD); // Motor Derecho hacia delante
motorMI.run(FORWARD); // Motor Izquierdo hacia delante
motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para.
motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para.
}
void GIROIZQUIERDA(){ //SUBRUTINA GIRO IZQUIERDA.
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para.
}
void GIRODERECHA(){ //SUBRUTINA GIRO DERECHA.
motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la
polaridad en la placa)
motorMD.setSpeed(0); // Set de velocidad MD fijada en 0.El motorD se para
motorMI.setSpeed(255); // Set de velocidad MI fijada en 255.
}
void ATRAS(){ //SUBRUTINA ATRAS.
motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad
en la placa)
motorMI.run(BACKWARD); // Motor Izquierdo hacia atras (si gira al revés cambiamos la polaridad
en la placa)
motorMI.setSpeed(255); // Set de velocidad MI fijada en 255
motorMD.setSpeed(255); // Set de velocidad MD fijada en 255
}
27Departamento de Tecnología
IES Valentín Turienzo
Ejercicio FINAL:
Con todo lo visto hasta este momento, dispones de suficiente información como para hacer tu
propio programa completo de un robot de sumo que busque a su oponente, ataque y que se mueva
dentro de los límites del Dohjo sin salirse.
Cambia las velocidades de los motores, los tipos de giros, las velocidades en los giros, sus
sentidos,… diseña una estrategia,…
En cantabRobots.es puedes descargar toda la información del SumoBotCBR.
Pincha aquí.
Las carpetas de documentos son las siguientes:
.- Diseño. Archivos .skp y .stl
.- Librería.
.- Documentación. PDF con los datasheets de driver, sensores…
.- Todos los sketches del manual.

Más contenido relacionado

PPTX
leyes-de-kirchhoff.pptx
PPTX
Leyes de kirchhoff
PDF
Ley de kirchoff ejercicio resuleto.pdf
PPT
Energia Nuclear
PPT
Mecanismos 3ºeso
PDF
Biblioteca de tinkercad.pdf
PPTX
Introduccion a la electricidad
PDF
Tutorial veloci botcb rv.4
leyes-de-kirchhoff.pptx
Leyes de kirchhoff
Ley de kirchoff ejercicio resuleto.pdf
Energia Nuclear
Mecanismos 3ºeso
Biblioteca de tinkercad.pdf
Introduccion a la electricidad
Tutorial veloci botcb rv.4

La actualidad más candente (20)

PDF
PROYECTOS CON PIC 16F84
PPT
96339772 ud4-bis-automatismos-industriales-cableados-1
PDF
Lista de ejercicios ca de simu
PPTX
Tipos de sensores
PPTX
Circuitos integrados
PDF
ingeniería de control moderna 5ta Edición Katsuhiko Ogata.pdf
PDF
Hobetuz domotica 1 - Logo Siemens
PDF
modelos de administracion
PDF
Transistor igbt
PDF
PLC: Ejercicios de programación resueltos con step-7
PPTX
Presentacion Componentes Electronicos
PDF
Proyecto3
PPTX
Street Light that Glows on Detecting Vehicle Movement
PDF
Pdf logica-cableada-parte-11
PPT
Fuentes+de+voltaje
PDF
Unidad 1 curso de plc
PPTX
STREET LIGHT THAT GLOWS ON DETECTING VEHICLE MOVEMENT
PPTX
Sistema de control para el llenado de un tanque de agua
PPTX
Modulación por desplazamiento de fase (psk) exposicion
PROYECTOS CON PIC 16F84
96339772 ud4-bis-automatismos-industriales-cableados-1
Lista de ejercicios ca de simu
Tipos de sensores
Circuitos integrados
ingeniería de control moderna 5ta Edición Katsuhiko Ogata.pdf
Hobetuz domotica 1 - Logo Siemens
modelos de administracion
Transistor igbt
PLC: Ejercicios de programación resueltos con step-7
Presentacion Componentes Electronicos
Proyecto3
Street Light that Glows on Detecting Vehicle Movement
Pdf logica-cableada-parte-11
Fuentes+de+voltaje
Unidad 1 curso de plc
STREET LIGHT THAT GLOWS ON DETECTING VEHICLE MOVEMENT
Sistema de control para el llenado de un tanque de agua
Modulación por desplazamiento de fase (psk) exposicion
Publicidad

Similar a Tutorial SumoBOTCBR (20)

DOCX
Informe del sumo ktm arduim
PDF
Guia mci servo motor con arduino
PDF
Servo motor 360 con arduino
PDF
Proyecto mecatronica industrial control de servomotores
PDF
Informe N°3-Microcontroladores
PDF
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
PDF
PDF
Innovación en torno con prototipo en CP.pdf
PDF
Enduro8 cc ed300
PDF
Proyecto brazo robotico ksr10 enero marzo 2015 a 9 v-version_2
PPTX
Proyecto Brazo Robótico con arduino.pptx
PPT
Biomecanica
DOCX
Practica 1 demostracion desensamble de computo
PDF
Fase 1 informe ensamble y mantenimiento de computadoes UNAD
DOCX
Como crear un robot de sumo autónomo y barato
PPT
Biomecanica
DOCX
Informe final 4 microcontroladores
PDF
RELOJ DIGITAL TTL 24 horas
PDF
Paso a paso - Instalación Led en Instrumental (por Cristian Bouzas)
Informe del sumo ktm arduim
Guia mci servo motor con arduino
Servo motor 360 con arduino
Proyecto mecatronica industrial control de servomotores
Informe N°3-Microcontroladores
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
Innovación en torno con prototipo en CP.pdf
Enduro8 cc ed300
Proyecto brazo robotico ksr10 enero marzo 2015 a 9 v-version_2
Proyecto Brazo Robótico con arduino.pptx
Biomecanica
Practica 1 demostracion desensamble de computo
Fase 1 informe ensamble y mantenimiento de computadoes UNAD
Como crear un robot de sumo autónomo y barato
Biomecanica
Informe final 4 microcontroladores
RELOJ DIGITAL TTL 24 horas
Paso a paso - Instalación Led en Instrumental (por Cristian Bouzas)
Publicidad

Más de Jandres73 (7)

PDF
Apuntes hardware software
PDF
Apuntes hardware software
DOCX
Ejercicios de mecanismos de poleas y palancas 2º eso
PPTX
Poliedros y cuerpos redondos
PPTX
Informática (pp1)jose andrés 1
PPT
Como crear una cuenta en slideshare by j.a.
PPTX
Informática (pp1)jose andrés
Apuntes hardware software
Apuntes hardware software
Ejercicios de mecanismos de poleas y palancas 2º eso
Poliedros y cuerpos redondos
Informática (pp1)jose andrés 1
Como crear una cuenta en slideshare by j.a.
Informática (pp1)jose andrés

Último (20)

DOCX
V UNIDAD - PRIMER GRADO. del mes de agosto
PDF
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
PDF
ACERTIJO Súper Círculo y la clave contra el Malvado Señor de las Formas. Por ...
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
PDF
Híper Mega Repaso Histológico Bloque 3.pdf
PPTX
caso clínico iam clinica y semiología l3.pptx
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
DOCX
V UNIDAD - SEGUNDO GRADO. del mes de agosto
PDF
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
PDF
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
PDF
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PDF
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
PDF
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
PPT
Cosacos y hombres del Este en el Heer.ppt
PDF
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
V UNIDAD - PRIMER GRADO. del mes de agosto
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
ACERTIJO Súper Círculo y la clave contra el Malvado Señor de las Formas. Por ...
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
Híper Mega Repaso Histológico Bloque 3.pdf
caso clínico iam clinica y semiología l3.pptx
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
V UNIDAD - SEGUNDO GRADO. del mes de agosto
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
2 GRADO UNIDAD 5 - 2025.docx para primaria
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
Cosacos y hombres del Este en el Heer.ppt
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf

Tutorial SumoBOTCBR

  • 1. 1Departamento de Tecnología IES Valentín Turienzo
  • 2. 2Departamento de Tecnología IES Valentín Turienzo Introducción. SumoBotCBR es un robot de la categoría de minisumo que ha sido diseñado por alumn@s de Tecnología Industrial de 1º de Bachillerato del IES Valentín Turienzo de Colindres, Cantabria. Las principales premisas en su diseño fueron las siguientes: .- Sencillez de montaje, utilizando el menor número de tuercas, tornillos, adhesivos,… .- Menor coste de los componentes y material y facilidad en su adquisición. .- Control realizado con Arduino. .- Chasis impreso en 3D y diseñado con SketchUp. .- Homologado para la categoría de minisumo. (10 x 10 cm) y menos de 500 gr. El objetivo principal de este proyecto es que cualquier persona que quiera construir un robot de minisumo, ya sea profesor, estudiante, aficionado,… lo pueda hacer en muy poco tiempo, con las mínimas complicaciones y el mínimo coste. Descarga los archivos .stl para imprimir aquí. Descarga los archivos .skp por si quieres modificar y personalizar en robot.
  • 3. 3Departamento de Tecnología IES Valentín Turienzo Material necesario Listado de componentes SumoBotCBR Artículo Imagen 1 x Arduino UNO 1 x Shield L293 control de motores 2 x Motorreductor DC120 3 x Módulo seguidor IR Sensor TCRT5000 1 x Sensor de ultrasonidos HC-SR04 40 x Cables dupot hembra-hembra 20 cm 1 x Conector y pila 9 v Chasis y cubierta impreso en 3D Ruedas impresas en 3D Cinta "tapafugas" para las ruedas El coste total aproximado del robot completo no supera los 45 €.
  • 4. 4Departamento de Tecnología IES Valentín Turienzo Montaje y Conexiones. MONTAJE: Empezaremos montando los dos motorreductores CC en el chasis utilizando dos tornillos de 3 x 25 mm de cabeza hexagonal por cada motor. Previamente se deben realizar las conexiones de los cables a los terminales del motor. Si el motorreductor tuviera doble eje sería necesario cortar uno de los ejes. IMPORTANTE NO APRETAR DEMASIADO LOS TORNILLOS. Puede llegar a presionar la reductora del motor y hacer que este se quede trabado. A continuación colocaremos los tres sensores TCRT5000 y el sensor de ultrasonidos HC-SR04 En un primer momento su alojamiento está diseñado para colocarlos simplemente por presión, pero se podría sustituir esta sujeción por tornillos de 2,5 x 6 mm., o utilizar una gota de termocola. Después colocaremos los cables dupot en todos los terminales de los sensores. Tornillos 3x25 Los motorreductores deben ir colocados como muestra la imagen.
  • 5. 5Departamento de Tecnología IES Valentín Turienzo Una vez colocados los cables se colocará la tapa haciendo pasar estos por los orificios practicados para tal fin. Seguidamente colocaremos la Arduino UNO sobre la tapa sujetándola con tres tornillos, y sobre ella colocaremos la Shield L293 en la parte superior, tal y como se ve en la foto. IMPORTANTE La Shield de motores L293 no tienen soldados los pines A0-5 (donde van conectados los sensores) por lo que es necesario soldarlos previamente.
  • 6. 6Departamento de Tecnología IES Valentín Turienzo CONEXIONADO: El siguiente paso consiste en conectar los motorreductores a la Shield. Visto el robot desde arriba, el motor Izquierdo (MI) lo conectaremos a los terminales M2 y el motor Derecho (MD) a los terminales M1. *Cuando se realice el Test de motores habrá que revisar su polaridad. Los tres sensores TCRT5000 y el sensor de Ultrasonidos HC-SR04, los vamos a llamar de la siguiente manera: Sensor Derecho (SD). Sensor Trasero (ST). Sensor Ultrasonidos (SUS) Sensor Izquierdo (SI).
  • 7. 7Departamento de Tecnología IES Valentín Turienzo Su conexión a la shield será: Sensor Pines de la Shield Sensor Trasero (ST) A1 Sensor Derecho (SD) A2 Sensor Izquierdo (SI) A3 Sensor Ultrasonidos TRIG A4 ECHO A5 Este será el aspecto final de nuestro SumoBotCBR;
  • 8. 8Departamento de Tecnología IES Valentín Turienzo IMPORTANTE** No todos los sensores denominados TCRT5000 que nos encontramos en el mercado son iguales, tienen ligeras variaciones de tamaño y sobre todo de sensibilidad. Por ese motivo se ha diseñado otra carcasa para el SumoBOTCBR en la cual los sensores van en la parte superior. En un principio no parece la colocación ideal, pero su montaje es más sencillo y funcionan correctamente. Los archivos .STL de esta nueva configuración son: ChasisSumoV9.3 y CubiertaV5.2.
  • 9. 9Departamento de Tecnología IES Valentín Turienzo PROGRAMACIÓN Antes de empezar con la programación, debemos instalar la librería AFMotor.h. y la librería Ultrasonic.h Podemos realizar una de las siguientes opciones: .- OPCIÓN 1: Abrimos el IDE de Arduino, Pinchamos en Sketch, Importar en librería y finalmente en Add Library. En este punto añadiríamos las librerías AFMotor.h y Ultrasonic.h (la carpeta entera en formato ZIP tal y como se ha descargado). .- OPCIÓN 2: Si la opción anterior nos diera algún problema, podemos meter directamente las carpetas descomprimidas en C:archivos de programa (x86)arduinolibraries
  • 10. 10Departamento de Tecnología IES Valentín Turienzo Sketch 1. Test motor DERECHO Vamos a comenzar con la programación y para ello realizaremos un sencillo programa para controlar el motor DERECHO (MD). Haremos que gire hacia delante durante 1 seg, que se pare 2 seg y que giren hacia atrás 1 seg. Con esta práctica se pretende comprobar el correcto conexionado del motorreductor, conocer su sentido de giro y su control. El Sketch correspondiente sería este: //SumoBotCBR // By CantabRobots // TEST DE MOTORES DE SumoBOTCBR // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (SA)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //MOVIMIENTOS BÁSICOS DEL MOTOR REALIZADOS ADELANTE (1seg), PARO (2seg.) y ATRAS (2 seg.) #include <AFMotor.h> AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1 void setup() { motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMD.run(RELEASE); // Motor Derecho preparado } void loop() { motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 delay(1000); // Se mantien durante 1 s.
  • 11. 11Departamento de Tecnología IES Valentín Turienzo motorMD.run(FORWARD); // Motor Derecho hacia delante motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para. delay(2000); // Se mantien durante 2 s. motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 delay(2000); // Se mantien durante 2 s. } *Recuerda, Si el motor DERECHO no girara en el sentido que le indicamos debemos cambiar su polaridad en la Shield. Ejercicio: Realiza los cambios necesarios para Testear el motor IZQUIERDO y comprobar su sentido de giro Sketch 2. Movimientos Básicos del SumoBotCBR Los movimientos básicos del SumoBotCBR son los siguientes; Adelante, Paro, Atrás, Giro Derecha, Giro Izquierda. Ahora vamos a trabajar con los dos motores a la vez. Para realizar los giros debemos parar el motor que esté en el sentido que queramos girar, por ejemplo, si queremos girar a la izquierda debemos parar el motor izquierdo y si queremos girar a la derecha, debemos parar el motor derecho. //SumoBotCBR // By CantabRobots // TEST DE MOTORES DE SumoBOTCBR // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (SA)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //MOVIMIENTOS BÁSICOS DEL ROBOT: ADELANTE, PARO, GIRO IZQUIERDA, GIRO DERECHA, ATRAS.
  • 12. 12Departamento de Tecnología IES Valentín Turienzo #include <AFMotor.h> AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1 AF_DCMotor motorMI(2); // Definimos el Motor Izquierdo en la conexión M2 void setup() { motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMI.setSpeed(250); // Set de velocidad MI fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMD.run(RELEASE); // Motor Derecho preparado motorMI.run(RELEASE); // Motor Izquierdo preparado } void loop() { motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 delay (1000); motorMD.run(FORWARD); // Motor Derecho hacia delante motorMI.run(FORWARD); // Motor Izquierdo hacia delante motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para. motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. delay (1000); motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. delay (1000); motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(0); // Set de velocidad MD fijada en 0.El motorD se para motorMI.setSpeed(255); // Set de velocidad MI fijada en 255. delay (1000);
  • 13. 13Departamento de Tecnología IES Valentín Turienzo motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.run(BACKWARD); // Motor Izquierdo hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 delay (1000); } *Podemos hacer otro tipo de giros más suaves sin necesidad de parar el motor del interior. En lugar de bajar a 0 su setSpeed podemos variar su PWM entre 20 y 100, siempre más bajo que la velocidad del motor exterior. HAZ PRUEBAS. Sketch 3. Movimientos Básicos con SUBRUTINAS del SumoBotCBR Continuamos con nuestra programación y para ello vamos a introducir el concepto de SUBRUTINAS. Las subrutinas son unos «miniprogramas», unas funciones, que se ejecutan al ser llamadas desde el programa principal. La declaración de funciones, no va ni en el SETUP, ni en el LOOP, va de forma independiente entre los dos. En esta actividad crearemos 5 subrutinas ADELANTE, ATRAS, PARO, GIRODERECHA y GIROIZQUIERDA. El Sketch correspondiente sería este: //SumoBotCBR // By CantabRobots // TEST DE MOTORES DE SumoBOTCBR // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (ST)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //MOVIMIENTOS BÁSICOS DEL ROBOT REALIZADOS CON SUBRUTINAS ADELANTE, PARO, GIRO IZQUIERDA, GIRO DERECHA, ATRAS. #include <AFMotor.h> AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1 AF_DCMotor motorMI(2); // Definimos el Motor Izquierdo en la conexión M2 void setup() { motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM)
  • 14. 14Departamento de Tecnología IES Valentín Turienzo motorMI.setSpeed(250); // Set de velocidad MI fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMD.run(RELEASE); // Motor Derecho preparado motorMI.run(RELEASE); // Motor Izquierdo preparado } void loop() { ADELANTE(); delay (1000); ATRAS(); delay (1000); PARO(); delay (1000); GIRODERECHA(); delay (1000); GIROIZQUIERDA(); delay (1000); } void ADELANTE(){ // SUBRUTINA ADELANTE. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 } void PARO(){ //SUBRUTINA PARO. motorMD.run(FORWARD); // Motor Derecho hacia delante motorMI.run(FORWARD); // Motor Izquierdo hacia delante motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para. motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. } void GIROIZQUIERDA(){ //SUBRUTINA GIRO IZQUIERDA. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. } void GIRODERECHA(){ //SUBRUTINA GIRO DERECHA.
  • 15. 15Departamento de Tecnología IES Valentín Turienzo motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(0); // Set de velocidad MD fijada en 0.El motorD se para motorMI.setSpeed(255); // Set de velocidad MI fijada en 255. } void ATRAS(){ //SUBRUTINA ATRAS. motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.run(BACKWARD); // Motor Izquierdo hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 } Ejercicio: Completa el programa realizando SUBRUTINAS de giros más suaves hacia DERECHA e IZQUIERDA cambiando el PWM del motor que queda en el interior. Ejercicio: Utilizando las SUBRUTINAS, realiza un programa en el que tu robot describa un cuadrado perfecto, llegando al mismo punto de la salida. Ya hemos visto cómo controlar los motores DERECHOS e IZQUIERDOS del SumoBotCBR, ahora vamos a ver cómo hacerlo girar aún más rápido. Se pueden realizar tres tipos de giros, por llamarlos de alguna manera, lentos, suaves y rápidos. Los “lentos” consistirán en dejar parados los motores del interior del giro haciendo avanzar los del exterior, para los “suaves” cambiamos el PWM del motor interior a valores más pequeños que el exterior. Y los “muy rápidos” haciendo que los motores del interior giren hacia atrás mientras que los del exterior van hacia adelante. Ver cuadro siguiente: CASOS DE GIROS STOP GIRO A IZQUIERDAS LENTO GIRO A IZQUIERDAS RÁPIDOGIRO A IZQUIERDAS SUAVE
  • 16. 16Departamento de Tecnología IES Valentín Turienzo Sketch 4: Sensor Infrarrojos. En esta práctica vamos a conocer el funcionamiento de los sensores IR. Más concretamente el sensor infrarrojo TCRT5000. Un sensor infrarrojo es un dispositivo optoelectrónico capaz de medir la radiación electromagnética infrarroja de los cuerpos en su campo de visión. El sensor que nos ocupa está compuesto por un diodo emisor de luz y un fototransistor. Si el fototransistor recibe luz da una señal de cero, si no recibe luz da un 1. Características:  Dimensiones: 10mm x 40mm  Voltaje de operación: 4.5V a 5.5V  Distancia de operación: Desde 1mm hasta 12mm  Sensor TCRT5000  Salida digital  Posee filtro bloqueador de luz de día  Voltaje de trabajo: 5VDC  Posee 3 pines: VCC (+), GND (-), OUT (Vout)  Si detecta un objeto color claro (ej. línea blanca) Vout >4 V  Si no detecta nada (ej. línea negra) Vout =0 V Más información de los sensores IR GIRO A DERECHAS RÁPIDO STOP GIRO A DERECHAS LENTO GIRO A DERECHAS SUAVE +5V GND PIN A1… OJO!!!!! No todos los sensores tienen la misma configuración de los pines. Comprobar antes de realizar la conexión.
  • 17. 17Departamento de Tecnología IES Valentín Turienzo Para conocer los valores del sensor IR vamos a realizar un sencillo Sketch utilizando el Monitor Serial. De esta manera observamos que cuando el sensor detecta línea negra su valor es 1 y cuando detecta blanco su valor es 0. (En el propio sensor hay un led rojo que se enciende cuando marca 0). Ejercicio: Escribe un nuevo código para comprobar el valor de los 3 sensores con un Serial.print de tal forma que vaya escribiendo que sensor es y su valor, por ejemplo: El valor de SI es 0 El valor de SD es 1 El valor de ST es 1… int IR = A1; void setup() { Serial.begin (9600); pinMode(IR, INPUT); } void loop() { IR = digitalRead (A1); Serial.print("El valor del IR es "); Serial.println (IR); delay(1000); }
  • 18. 18Departamento de Tecnología IES Valentín Turienzo Código para lectura de color (Blanco o Negro) para testear los sensores. //SumoBotCBR // By CantabRobots // TEST DE Sensores // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (ST)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //TEST DE SENSORES int SI=A3; int SD=A2; int ST=A1; void setup() { Serial.begin(9600); pinMode(SD,INPUT); pinMode(SI,INPUT); pinMode(ST,INPUT); } void loop() { int valorSD=digitalRead(A2); if(valorSD==1){ Serial.println("valorSD es blanco"); }else{ Serial.println("valorSD es negro"); } delay(1000); int valorSI=digitalRead(A3); if(valorSI==1){ Serial.println("valorSI es blanco"); }else{ Serial.println("valorSI es negro"); } delay(1000); int valorST=digitalRead(A1); if(valorST==1){ Serial.println("valorST es blanco"); }else{ Serial.println("valorST es negro"); } delay(1000); }
  • 19. 19Departamento de Tecnología IES Valentín Turienzo Sketch 5: Retroceder y girar al llegar al límite del Dohjo El Dohjo es el tablero sobre el que se hacen las competiciones de sumo y minisumo. Tienen un metro de diámetro y generalmente son de fondo negro, con una línea blanca de 5 cm que los rodea y de la que no se puede salir el robot. En esta práctica vamos a utilizar los dos sensores IR delanteros para que cuando el SumoBotCBR detecte la línea blanca retroceda 1 segundo, gire y continúe avanzando hasta encontrar otra vez la línea blanca. //SumoBotCBR // By CantabRobots // Sumo básico DE SumoBOTCBR // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (SA)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //MOVIMIENTOS DENTRO DEL DOHJO. #include <AFMotor.h> AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1 AF_DCMotor motorMI(2); // Definimos el Motor Izquierdo en la conexión M2 int SI=A3; int SD=A2; // Sólo se van a utilizar los sensores delanteros. void setup() { pinMode(SD,INPUT); pinMode(SI,INPUT);
  • 20. 20Departamento de Tecnología IES Valentín Turienzo motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMI.setSpeed(250); // Set de velocidad MI fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMD.run(RELEASE); // Motor Derecho preparado motorMI.run(RELEASE); // Motor Izquierdo preparado } void loop() { int SI = digitalRead(A3); int SD = digitalRead(A2); if ((SI==HIGH) && (SD==HIGH)){ //Si el Sensor SI detecta blanco y el Sensor SD detecta blanco ATRAS(); // Hacia atrás. delay (2000); GIRODERECHA(); delay (750); } else if ((SI==LOW) && (SD==HIGH)){ //Si el Sensor SI detecta negro y el Sensor SD detecta blanco ATRAS(); // Hacia atrás. delay (2000); GIRODERECHA(); delay (750); } else if ((SI==HIGH) && (SD==LOW)){ //Si el Sensor SI detecta blanco y el Sensor SD detecta negro ATRAS(); // Hacia atras. delay (2000); GIROIZQUIERDA();
  • 21. 21Departamento de Tecnología IES Valentín Turienzo delay (1000); } else{ // Si no hace nada de lo anterior ADELANTE(); // Paro. } } void ADELANTE(){ // SUBRUTINA ADELANTE. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 } void PARO(){ //SUBRUTINA PARO. motorMD.run(FORWARD); // Motor Derecho hacia delante motorMI.run(FORWARD); // Motor Izquierdo hacia delante motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para. motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. } void GIROIZQUIERDA(){ //SUBRUTINA GIRO IZQUIERDA. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. }
  • 22. 22Departamento de Tecnología IES Valentín Turienzo void GIRODERECHA(){ //SUBRUTINA GIRO DERECHA. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(0); // Set de velocidad MD fijada en 0.El motorD se para motorMI.setSpeed(255); // Set de velocidad MI fijada en 255. } void ATRAS(){ //SUBRUTINA ATRAS. motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.run(BACKWARD); // Motor Izquierdo hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 }
  • 23. 23Departamento de Tecnología IES Valentín Turienzo Sketch 6: Sensor de Ultrasonidos HC-SR04 En esta práctica vamos a conocer el funcionamiento de los sensores de Ultrasonidos HC-SR04. Este tipo de sensor emite ultrasonidos por el PIN TRIG los cuales, al encontrar un objeto, rebotan y es el PIN ECHO el que recibe la onda. En función del tiempo entre el pulso emitido y el recibido se puede calcular la distancia del objeto. Recordad que la velocidad del sonido es 340 m/s. Estos sensores tienen un rango de acción de 2 cm hasta 3 m con una precisión de 3 mm. La librería Ultrasonic.h facilita mucho la programación del sensor de Ultrasonidos. Para su instalación procederemos como se explicó anteriormente. Vamos a realizar un sencillo programa para leer los valores de distancia utilizando el puerto serie.
  • 24. 24Departamento de Tecnología IES Valentín Turienzo //SumoBotCBR // By CantabRobots // TEST DE Ultrasonidos de SumoBOTCBR // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (ST)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //Test del sensor de Ultrasonidos. #include <Ultrasonic.h> Ultrasonic ultrasonic(A4,A5); // (Trig PIN,Echo PIN) void setup() { Serial.begin(9600); } void loop() { Serial.print(ultrasonic.Ranging(CM)); // CM or INC Serial.println(" cm" ); delay(1000); } Al abrir el Monitor serie tendríamos que tener lecturas semejantes a estas.
  • 25. 25Departamento de Tecnología IES Valentín Turienzo Sketch 7: Búsqueda y ataque Con este programa el robot girará sobre sí mismo buscando al oponente y cuando este esté a menos de 30 cm atacará. //SumoBotCBR // By CantabRobots // BUSQUEDA Y ATAQUE de SumoBOTCBR // MOTOR IZQUIERDO (MI) es el M2 // MOTOR DERECHO (MD) es el M1 // SENSOR IZQUIERDO (SI) en el A3 // SENSOR DERECHO (SD)en el A2 // SENSOR TRASERO (SA)en el A1 // SENSOR ULTRASONIDOS (SU) el TRIG en A4 y el ECHO en A5 // Es necesario instalar las librerías AFMotor.h y Ultrasonic.h para que funcione correctamente este Sketch //BUSQUEDA Y ATAQUE. #include <AFMotor.h> #include <Ultrasonic.h> Ultrasonic ultrasonic(A4,A5); // (Trig PIN,Echo PIN) AF_DCMotor motorMD(1); // Definimos el Motor Derecho en la conexión M1 AF_DCMotor motorMI(2); // Definimos el Motor Izquierdo en la conexión M2 int SI=A3; int SD=A2; int ST=A1; void setup() { pinMode(SD,INPUT); pinMode(SI,INPUT); pinMode(ST,INPUT); pinMode(A4, OUTPUT); pinMode(A5, INPUT); motorMD.setSpeed(250); // Set de velocidad MD fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMI.setSpeed(250); // Set de velocidad MI fijada en 250 (esta velocidad se puede variar desde 0 (parado) a 255 (velocidad máxima) por la salida PWM) motorMD.run(RELEASE); // Motor Derecho preparado motorMI.run(RELEASE); // Motor Izquierdo preparado } void loop() { if (ultrasonic.Ranging(CM) < 30){ // Si hay un objeto a menos de 30 cm ir hacia adelante ADELANTE(); }
  • 26. 26Departamento de Tecnología IES Valentín Turienzo else{ // Si no hace nada de lo anterior GIRODERECHA(); // Gira a derecha } } void ADELANTE(){ // SUBRUTINA ADELANTE. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 } void PARO(){ //SUBRUTINA PARO. motorMD.run(FORWARD); // Motor Derecho hacia delante motorMI.run(FORWARD); // Motor Izquierdo hacia delante motorMD.setSpeed(0); // Set de velocidad MD fijada en 0. El motorD se para. motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. } void GIROIZQUIERDA(){ //SUBRUTINA GIRO IZQUIERDA. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 motorMI.setSpeed(0); // Set de velocidad MI fijada en 0. El motorI se para. } void GIRODERECHA(){ //SUBRUTINA GIRO DERECHA. motorMD.run(FORWARD); // Motor Derecho hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMI.run(FORWARD); // Motor Izquierdo hacia delante (si gira al revés cambiamos la polaridad en la placa) motorMD.setSpeed(0); // Set de velocidad MD fijada en 0.El motorD se para motorMI.setSpeed(255); // Set de velocidad MI fijada en 255. } void ATRAS(){ //SUBRUTINA ATRAS. motorMD.run(BACKWARD); // Motor Derecho hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.run(BACKWARD); // Motor Izquierdo hacia atras (si gira al revés cambiamos la polaridad en la placa) motorMI.setSpeed(255); // Set de velocidad MI fijada en 255 motorMD.setSpeed(255); // Set de velocidad MD fijada en 255 }
  • 27. 27Departamento de Tecnología IES Valentín Turienzo Ejercicio FINAL: Con todo lo visto hasta este momento, dispones de suficiente información como para hacer tu propio programa completo de un robot de sumo que busque a su oponente, ataque y que se mueva dentro de los límites del Dohjo sin salirse. Cambia las velocidades de los motores, los tipos de giros, las velocidades en los giros, sus sentidos,… diseña una estrategia,… En cantabRobots.es puedes descargar toda la información del SumoBotCBR. Pincha aquí. Las carpetas de documentos son las siguientes: .- Diseño. Archivos .skp y .stl .- Librería. .- Documentación. PDF con los datasheets de driver, sensores… .- Todos los sketches del manual.