Вы находитесь на странице: 1из 35

MS

Luchador de Sumo
Gua de usuario

Introduccin
MS es un robot autnomo de morforloga mvil, diseado para competiciones de
luchador de sumo en la categora de Min (10 X 10 cm y un peso de 500 gramos). Se
trata de un robot de tipo diferencial, su traccin basa en dos motores de corriente
directa, alimentado por una batera de 9 Voltios.
MS utiliza un microcontrolador de la marca Atmel modelo Atmega328, con firmware
de Arduino, lo cual facilita su programacin.

Advertencias de seguridad y precauciones de uso


MS, Mini-sumo, no es un juguete. Puede ser usado por nios y jvenes bajo la supervisin y ayuda de
un adulto. El uso o abuso del producto es responsabilidad del usuario final. El distribuidor no se
hace responsable por daos o lesiones que ste pueda causar durante su uso. Este producto no est
diseado para jugar, no debe usarse fuera de la A continuacin se indican las precauciones:

Antes de comenzar por favor lea cuidadosamente el manual.


Utiliza bateras alcalinas o recargables. En el caso de las alcalinas asegrate que sean nuevas, y
si compras recargables verifica que tengan suficiente carga, de lo contradio al programar lo
puedes inutilizar para siempre.
Condiciones de trabajo:
superficie lisa, de preferencia melamina,
interiores con luz controlada.
No colocar la tarjeta de circuito impreso (PCB) sobre superficies metlicas.
El robot MS esta ensamblado y soldado con piezas que contienen plomo y estao, por lo cual
es necesario lavarse las manos despus de manipularlo.
Los componentes del robot estn expuestos, por lo que es importante no tocarlo con las
manos mientras est en funcionamiento. Si nuestras manos estn mojadas se puede causar un
corto circuito y daar uno o varios componentes.

Primeros pasos de MS
Qu necesitas?
Batera de 9V. Utilice de preferencia bateras alcalinas o recargables. Si trabajar durante
tiempos prolongados con el robot, le recomendamos usar bateras recargables de NiquelMetal Hidruro, NiMH. No olvide comprar el cargador correspondiente.
Cable A B, USB a Micro USB. MS no requiere un programador externo, todo el
hardware electrnico ya se incluye en el robot, pero para la comunicacin entre la
computadora y el robot se requiere dicho cable.
Computadora. Necesitas una computadora para programar el robot. Para ello se utiliza la
interfaz de programacin de Arduino, plataforma libre, que funciona en cualquiera de los
siguientes sistemas operativos:
Windows
Mac
Linux
Material para pruebas. Es necesario que tenga a mano papel, cartulinas, cartoncillo y cinta
aislante negra o blanca, para improvisar pistas y probar el robot.

Conoce ms de MS

Figura 1. Vista frontal de robot luchador de sumo MS


Ms es un robot de morfologa mvil de tipo diferencial, es decir se desplaza por medio de dos ruedas
con dos motores, uno para cada una. El cerebro de esta robot es un Arduino Nano, y est encargado
de procesar la informacin que le proveen los sensores para realizar correccines a travs de los
motores, bajo el esquema bsico de control.
Hardware de MS
En la figura 1 se muestra el hardware del robot. Observe que se cuenta con varios componentes y
dispositivos electrnicos. Reconoce alguno?, a continuacin se explican brevemente.
Sensores reflectivos de contraste, son los encargados de percibir la informacin del ambiente,
en este caso el contraste, la diferencia entre o blanco y lo negro, lo que no brilloso y lo opaco.
Este dispositivo se compone de dos partes: emisor y receptor. Tanto el primero como el
segundo trabajan en el rango infrarrojo de la luz. sta no es perceptible por el ojo humano,
pero con ayuda de una cmara digital se observa.

LEDs. Diodos emisores de luz por sus siglas en ingls, son dispositivos que emiten una luz al
circular una corriente por sus terminales. En MS se usan como indicadores y son programables
por el usuario por medio del Arduino.
Driver para motor. Basado en un circuito integrado de Puente H, es el que proveen de potencia
a los motores, siendo la interfaz entre el microcontrolador y el motor.
Botones. Son interruptores de encendido al contacto. El robot cuenta con 2, el primero para
reiniciar el microcontrolador (arduino), y el segundo como botn de usuario para propsito
general.
Motorreductores. Son motores de corriente directa (CD, como el de las bateras), con una caja
de engranes adaptada. Los usados en MS tienen una reduccin de 48:1, esto es, por cada 48
vueltas que gire el motor, el eje del reductor girar 1 vuelta. De este modo se incrementa el
torque, fuerza, y se reduce la velocidad.
Batera. Es la que provee de energa elctrica a todo el robot, arduino, sensores, LEDs,
motores, pulsadores. Es tipo rectangular de 9V.

Figura 2. Vista trasera de MS

Arduino Nano
Es una pequea y completa placa basada en el mirocontrolador Atmega328 que generalmente se usa
para hacer prototipos. Tiene ms o menos la misma funcionalidad que el Arduino UNO, pero con una
presentacin ms compacta. No posee conector para alimentacin externa, y funciona con un cable
USB Mini-B en ez del cable estndar.

Figura 3. Arduino Nano


Especificaciones
Microcontrolador: Atmega328.
Tensin de operacin (nivel lgico): 5 Voltios.
Tensin de entrada (recomendada): 7-12 Voltios.
Tensin de entrada (lmites): 6-20 Voltios.
Pines E/S digitales: 14 (de los cuales 6 proveen de salida PWM).
Entradas Analgicas: 8
Corriente mxima por cada PIN de Entrada/Salida: 40mA
Memoria Flash: 32KB.
SRAM: 2KB
EEPROM: 1KB.
Dimensiones: 18.5 mm x 23.2 mm.

Alimentacin
El Arduino Nano puede ser alimentado usando el cable USB Mini-B , con una fuente externa no
regulada de 6-20V (pin 30), o con una fuente externa regulada de 5V (pin 27). La fuente de
alimentacin es seleccionada automticamente a aquella con mayor tensin.
El chip FTDI FT232RL que posee el Nano solo es alimentado si la placa esta siendo alimentada usando
el cable USB. como resultado, cuando se utiliza una fuente externa (no USB), la salida de 3.3V (la cual
es proporcionada por el chip FTDI) no est disponible y los pines 1 y 0 parpadearn si los pines
digitales 0 o 1 estn a nivel alto.
Memoria
El ATmega168 posee 16KB de memoria flash para almacenar el codigo (de los cuales 2KB son usados
por el bootloader); el ATmega 328 posee 32KB, (tambin con 2 KB usados por el bootloader). El
Atmega168 posee 1KB de SRAM y 512 bytes de EEPROM (la cual puede ser leida y escrita con la
librera EEPROM); el ATmega328 posee 2 KB de SRAM y 1KB de EEPROM.
Entrada y Salida
Cada uno de los 14 pines digitales del Nano puede ser usado como entrada o salida, usando las
funciones pinMode(), digitalWrite(), y digitalRead(). Operan a 5 voltios. Cada pin puede proveer o
recibir un mximo de 40mA y poseen una resistencia de pull-up (desconectada por defecto) de 20 a 50
kOhms. Adems algunos pines poseen funciones especializadas:
Serial: 0 (RX) y 1 (TX). (RX) usado para recibir y (TX)usado para transmitir datos TTL va serie.
Estos pines estn conectados a los pines correspondientes del chip USB-a-TTL de FTDI.
Interrupciones Externas: pines 2 y 3. Estos pines pueden ser configurados para activar una
interrupcin por paso a nivel bajo, por flanco de bajada o flanco de subida, o por un cambio de
valor. Mira la funcin attachInterrupt() para ms detalles.
PWM: pines 3, 5, 6, 9, 10, y 11. Proveen de una salida PWM de 8-bits cuando se usa la funcin
analogWrite().
SPI: pines 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines soportan la comunicacin SPI, la
cual, a pesar de poseer el hardware, no est actualmente soportada en el lenguaje Arduino.
LED: Pin 13. Existe un LED conectado al pin digital 13. Cuando el pin se encuentra en nivel alto,
el LED est encendido, cuando el pin est a nivel bajo, el LED estar apagado.
El Nano posee 8 entradas analgicas, cada unas de ellas provee de 10 bits de resolucin (1024 valores
diferentes). Por defecto miden entre 5 voltios y masa, sin embargo es posible cambiar el rango
superior usando la funcin analogReference(). Tambin, algunos de estos pines poseen funciones
especiales:
I2C: Pines 4 (SDA) y 5 (SCL). Soporta comunicacin I2C (TWI) usando la librera Wire
(documentacin en la web Wiring).
Hay algunos otros pines en la placa:
AREF. Tensin de referencia por las entradas analgicas. Se configura con la funcin
analogReference().
Reset. Pon esta linea a nivel bajo para resetear el microcontrolador. Normalmente se usa para
aadir un botn de reset que mantiene a nivel alto el pin reset mientras no es pulsado.

Diagrama Pictrico

Figura 4. Diagrama pictrico de circuito de MS

Programando en Arduino
Para programa el robot luchador de sumo es necesario contar con el entorno de programacin de
Arduino. Si an no lo tiene lo puede descargar en: www.arduino.cc en la seccin de descargas. Es
recomendable que la versin de arduino que descarque sea igual o posterior a las 1.0.

Figura 5. Captura de pantalla de entorno de programacin Arduino versin 1.0.1


Componentes de Arduino IDE

Figura 6. Icono Verificar


Verificar. inspecciona el cdigo generado, marca errores y posibles soluciones.

Figura 7. cono: Cargar


Cargar: Cuando se presiona este botn se compila y ensambla el cdigo contenido en la
ventana y se descarga a la tarjeta electrnica de Arduino. Este proceso puede tardar algunos
segundos o tal vez un para de minutos.

Figura 8. cono: Nuevo.


Nuevo: crea un nuevo sketch en blanco.

Figura 9. cono: Abrir.


Abrir: abre un sketch, cdigo, ya existente.

Figura 10. cono: Guardar.


Guardar: salva las modificaciones realizadas en el cdigo.

Figura 11. cono: Monitor Serial.


Monitor Serial: abre la aplicacin de monitor serial, que puede servir para diferentes
propsitos.

Referencias del lenguaje


Los programas hechos con Arduino se dividen en tres partes principales:
Estructura,
valores (variables y constantes),
funciones.
El lenguaje de programacin Arduino se basa en C/C++.
Estructuras
Las dos estructuras principales son las siguientes:
setup(), es la estructura donde se configura las entradas, salidas y los mdulos. Es llamado
tambin como inicializacin. Lo contenido en esta estructura se ejecuta slamente una vez al
inicio del programa.
loop(), es la estructura donde se escribe el cdigo, y se repetir infintas veces.
Valores
Constantes
HIGH, alto,
LOW, bajo,
INPUT, entrada,
OUTPUT, salida,
True, verdadero,
false, falso,

Variables:
boolean, booleando,
char, carcter,
byte, 8 bits
int, entero,
unsigned int, entero sin signo,
long, entero de 32 bits,
unsigned long, entero 32 bits sin signo,
float, punto flotante.
Funciones
pinMode(), configura si el pin digital ser salida o entrada,
digitalWrite(), si el pin ha sido configurado como salida digital, su voltaje de salida ser 0 o 5V.
digitalRead(), lectura del valor digital del pin especificado,
analogRead(), lectura del valor analgico del pin especificado,
analogWrite(), configura la modulacin por anchura de pulso de un pin (PWM),
delay(), pausa en milisegundos.
Serial, librera incluida para el uso y configuracin del mdulo serial.
Revisa la referencia del lenguaje de arduino para aprender ms acerca de las estructuras, variables y
funciones de Arduino.

El primer programa en Arduino para MS


Un sencillo programa de demostracin est disponible en los ejemplos de Arduino,
Archivo/Ejemplos/01.Basics/Blink.

Figura 12. El primer programa en Arduino


Este sencillo programa prende y apaga un LED, colocado en la patilla, pin 13.
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
*/
// Pin 13 has an LED connected on most Arduino boards.
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {

digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)


delay(1000);
// wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000);
// wait for a second

Abierto el programa de ejemplo es necesario seleccionar la tarjeta correspondiente, en el caso del


robot seguidor de lnea, se trata de un Arduino Nano Atmega328, para ello dirjase al men
Herramientas/Tarjeta/Arduino Nano w/Atmega328.

Figura 13. Seleccin de tarjeta Arduino Nano w/ATmega328


Ahora se verificar que el cdigo escrito sea correcto, presione el cono verificar:

Lo que har esta funcin ser traducir todo lo codificado a un idioma que entienda el microcontrolador. Observe los avisos y errores de salida mostrados. Si el programa se compila

correctamente, el mensaje de salida deber ser como se muestra en la figura:

Figura14. Mensajes de salida


Una vez compilado y verificado el programa, y en vista que no existen errores o advertencias, se
procede a cargar el programa a la tarjeta de Arduino. Para ello antes es importante seleccionar el
puerto de comunicacin serial COM correcto. Para ello se puede hacer lo siguiente:
Abra el administrador de dispositivos,
En la pestaa Puertos (COM y LPT), verifique el puerto en el cual est ubicado el Arduino.
Generalmente tiene el nombre de USB Serail Port.

Figura 15. Verificacin del puerto COM del Arduino

Una vez identificado, se selecciona en el IDE, Herramientas/Puerto serial/COMx

Figura 16. Seleccin del Puerto Serial


Cargue el programa a la tarjeta de Arduino presionando el cono de cargar. Esta accin puede tardar
algunos segundos.

Figura 17. Carga de programa a tarjeta de Arduino


Si la carga fue exitosa se desplegar el siguiente mensaje:

Figura 18. Carga Exitosa

Ejemplos y proyectos

Ahora que sabe como compilar y cargar un prorama a la tarjeta de Arduino es tiempo de aprender a
disear y codificar programas ms complicados. Comenzar con los ms sencillos.
Ejemplo 1: Luces estilo el serie de navidad

Figura 19. Tarjeta de MS


La tarjeta del robot seguidor de lnea incluye 3 indicadores LED's para el propsito General. stos se
encuentran en los pines digitales 9,10, 13 marcados como B4, B5, RUN en ese preciso orden.
La secuencia que se quiere lograr es la siguiente:

Figura 20. Luces de navidad


El cdigo de este programa se encuentra disponible en la pgina Web: www.andromie.com en la
seccin del blog en la etiqueta de Luchador de Sumo MS.
/* --------------------Inicio de Cdigo-------------------- */
int runled = 13; //Alias para pin 13
int led0 = 9; //Alias para pin 9

int led1 = 10; //Alias para pin 10


void setup()
{
//Configuracin de entradas y salidas
pinMode(runled, OUTPUT); //Salida digital en runled = pin 13
pinMode(led0, OUTPUT); //Salida digital en led0 = pin 9
pinMode(led1, OUTPUT); //Salida digital en led1 = pin 10
}

//Configuracin de mdulos

void loop()
{
//Cdigo que se repetir infititamente
digitalWrite(led0, HIGH); //Puesta en alto de led0, prende
digitalWrite(led1, LOW); //Puesta en bajo de led1, apaga
//OJOOOO!
//RunLED usa lgica negativa, cuando es ato apaga, y cuando es bajo prende
digitalWrite(runled, HIGH);//Pues en alto de RunLED
delay(250);
digitalWrite(led0, LOW); //Puesta en bajo de led0, apaga
digitalWrite(led1, HIGH); //Puesta en alto de led1, prende
//OJOOOO!
//RunLED usa lgica negativa, cuando es ato apaga, y cuando es bajo prende
digitalWrite(runled, HIGH);
delay(250);
digitalWrite(led0, LOW); //Puesta en bajo de led0, apaga
digitalWrite(led1, LOW); //Puesta en alto de led1, prende
//OJOOOO!
//RunLED usa lgica negativa, cuando es ato apaga, y cuando es bajo prende
digitalWrite(runled, LOW);
delay(250);
}
/* --------------------Fin de cdigo-------------------- */
Es un ejemplo sencillo pero ayuda a comprender el manejo de los pines digitales como salidas.

Ejercicio 1

Desarrollo un cdigo para realice la siguiente secuencia de encendido y apagado de LEDs.

Ejemplo 2: Encendido de un LED con un interruptor sin contacto.


La tarjeta de MS cuenta con 2 sensores del tipo reflectivo infrarrojo. Este tipo est
compuesto de dos componentes un emisor y un receptor. El primero es un LED infrarrojo, luz que no
podemos ver los ojos; el segundo es un fototransistor con filtro de luz de da.
El funcionamiento es el siguiente:

Figura 21. Sensor Reflectivo sobre superficie reflejante.


Cuando el LED infrarrojo se encuentre emitiendo luz, si la superfice es reflejante, por ejemplo blanca,
se refleja una cantidad de luz que es percebida por el fototransistor, que convierte la seal luminosa
en voltaje, permite un flujo de corriente entre sus terminales y por la configuracin de carga de
emisor se obtiene un valor.

Figura 22. Sensor Reflectivo sobre superficie opaca


Por lo contrario si el la superficie es opaca, por ejemplo negra, se refleja poca luz, la cual es percibida
por el fototransisto, pero se genera poca corriente en sus terminales y por consiguiente poco voltaje.
Este sensor no puede servir como un interruptor sin contacto, y se usa comnmente en muchos
procesos de la industra y cotidianos, tal es caso de las llaves automticas de agua usadas en los baos
pblicos. La intensin es que cuando coloque su dedo frente al sensor este active el LED.
A continuacin se propone el cdigo.
/*--------------------------------Inicio del cdigo--------------------------------*/
//Declaracin de variables globales
int PisoDerecho;
int runled = 13; //Alias para pin 13
int led0 = 9;

void setup()
{
//Configuracin de entradas y salidas
pinMode(led0, OUTPUT); //Salida digital en led0 = pin 9
//Configuracin de mdulos
}
void loop()
{
//Cdigo que se repetir infititamente
PisoDerecho = analogRead(A2); //Lectura del sensor Izquierdo
if (PisoDerecho > 512) //Si la superficie es blanca entonces prende LED
{
digitalWrite(led0, HIGH);
}
else //Sino, es decir, es negro, entonces apaga LED
{
digitalWrite(led0, LOW);
}
delay(50);
}
/*--------------------------------Fin del cdigo--------------------------------*/
El funcionamiento de este ser el siguiente, cuando coloque su dedo cerca del sensor marcado como
A2 en el PCB del robot el indicador LED marcado como B4 se encender, sino se mantendr
apagado, como se muestra en la siguiente figura.

Figura 23. Funcionamiento del programa

Ejemplo 3: Accionar de motores.

Para probar los motores tenemos que conectarlos en los terminales (verdes con tornillos), marcados
como Motor A y Motor B. En la siguiente figura se muestra a manera de ejemplo la conexin.

Figura 24. Conexin de motores


Tambin es necesario conectar la batera con interruptor. Sea cuidadoso al conectar la batera,
conecte el cable rojo del broche de la batera (positivo) en el tornillo del terminal verde marcado con
+V, y el negro (comn, tierra) conctelo al otro lado del terminal, marcado con GND.
Puede guiarse de la siguiente figura para conectarlo. Corte la alimentacin con el interruptor.

Figura 25. Conexin de batera

Copie y pegue el siguiente cdigo en la ventana del IDE de Arduino.


/*--------------------------------Inicio del cdigo--------------------------------*/
int runled = 13; //Alias para pin 13
int led0 = 9; //Alias para pin 9
int led1 = 10; //Alias para pin 10
int motorDerecha0 = 6;
int motorDerecha1 = 11;
int pwmDerecha = 5;
int motorIzquierda0 = 7;
int motorIzquierda1 = 8;
int pwmIzquierda= 3;
int ProximidadDerecho;
int ProximidadIzquierdo;
void setup()
{
//Configuracin de entradas y salidas
pinMode(runled, OUTPUT); //Salida digital en runled = pin 13
pinMode(led0, OUTPUT); //Salida digital en led0 = pin 9
pinMode(led1, OUTPUT); //Salida digital en led1 = pin 10
pinMode(motorDerecha0,OUTPUT);
pinMode(motorDerecha1,OUTPUT);
pinMode(pwmDerecha, OUTPUT);
pinMode(motorIzquierda0,OUTPUT);
pinMode(motorIzquierda1,OUTPUT);
pinMode(pwmIzquierda, OUTPUT);
//Configuracin de mdulos
}
void loop()
{
//Cdigo que se repetir infititamente
//Adelante
digitalWrite(motorDerecha0, HIGH);
digitalWrite(motorDerecha1, LOW);
digitalWrite(pwmDerecha, HIGH);

digitalWrite(motorIzquierda0, HIGH);
digitalWrite(motorIzquierda1, LOW);
digitalWrite(pwmIzquierda, HIGH);
delay(1000);
//Atras
digitalWrite(motorDerecha0, LOW);
digitalWrite(motorDerecha1, HIGH);
digitalWrite(pwmDerecha, HIGH);
digitalWrite(motorIzquierda0, LOW);
digitalWrite(motorIzquierda1, HIGH);
digitalWrite(pwmIzquierda, HIGH);
delay(1000);
//detenido
digitalWrite(pwmDerecha, LOW);
digitalWrite(pwmIzquierda, LOW);
delay(1000);

}
/*--------------------------------Fin del cdigo--------------------------------*/
Funcionamiento
El robot deber ir hacia adelante, despus hacia atrs y por ltimo detenerse. Se repetir
infinitamente. Verifique que la secuencia descrita corresponda con el movimiento del robot. Si alguno
de los motores gira en sentido contrario invierta los cables en los terminales de tornillo (verdes).

Ejercicio 2
Acomplete la siguiente tabla. Con los movimientos propuestos y resultantes desarrolle un cdigo en el
ejecuten con una duracin de 1 segundo.
Motor izquierdo

Motor Derecho

Movimiento de Robot

Adelante

Adelante

Adelante

Atrs

Atrs

Atrs

Atrs

Adelante

Adelante

Atrs

Adelante

Detenido

Detenido

Detenido

Detenido

Ejemplo 4: Visualizacin del valor de los sensores en monitor serial.

Una de las grandes ventajas de las tarjetas de Arduino es su simplicidad para establecer conexin con
una computadora. Esto se realiza gracias al convertivor USB a serial incluido en la tarjeta. A dems el
entorno de programacin cuenta con una aplicacin, monitor serial, que sirve para visualizar, recibir y
enviar informacin.
El siguiente programa obtiene el valor de los sensores reflectivos analgico, los cuantifica y los
despliega. La cuantificacin es el proceso por el cual se le asigna un valor en bits a una seal. Los
convertidores CAD, Analgico a Decimal, cuantifican las seales, es decir entregan un valor en nmero
dependiendo de la resolucin que posean. En el caso del microcontrolador que se usa, Atmega328, la
resolucin es de 10 bits, es decir 1024 divisiones en la escala del 0 al 5V. Una buen analoga es la
siguiente: Suponga que tiene una escalera de 5 metros con 1024 escalones, cada escaln le har subir
0.0048 metros. Si otra persona le indica que tiene que pintar una linea a 2.5 metros del piso, Cuntos
escalones tendr que subir?, esto puede resolverse por una simple regla de tres:
2.5metros1024escalones
Dato=
=512escalones
5metros
A grosso modo eso es lo que hace un convertidor Analgico a Digital, convierte un voltaje en un dato
que pueda manipular.
Para realizar la calibracin los sensores o para obtener informacin de ellos se puede realizar un
programa que muestre los datos en el monitor serial. A continuacin se propone el cdigo para
realizar esta tarea.
/*--------------------------------Inicio del cdigo--------------------------------*/
int runled = 13; //Alias para pin 13
int led0 = 9; //Alias para pin 9
int led1 = 10; //Alias para pin 10
int PisoDerecho;
int PisoIzquierdo;
void setup()
{
//Configuracin de entradas y salidas
pinMode(runled, OUTPUT); //Salida digital en runled = pin 13
pinMode(led0, OUTPUT); //Salida digital en led0 = pin 9
pinMode(led1, OUTPUT); //Salida digital en led1 = pin 10

//Configuracin de mdulos
Serial.begin(9600); //Configuracin de baudrate

void loop()
{

//Cdigo que se repetir infititamente


PisoDerecho = analogRead(A2); //Lectura analgico del sensor derecho
PisoIzquierdo = analogRead(A3); //Lectura analgica del sensor izquierdo
Serial.print("Sensor de piso derecho: "); //Impresin de leyenda (texto)
Serial.println(PisoDerecho); //Imprime el valor obtenido en la lectura
Serial.print("Sensor de piso izquierdo: "); //Impresin de leyenda (texto)
Serial.println(PisoIzquierdo); //Imprime el valor obtenido en la lectura
delay(1000);

}
/*--------------------------------Fin del cdigo--------------------------------*/
Funcionamiento
Una vez compilado y descargado el cdigo se deber abrir el monitor serial dentro del IDE de Arduino
para ver los datos.

Figura 26. Recepcin de datos por el monitor Serial


En la figura se puede observar los valores obtenidos sobre una superficie opaca, en la parte superior, y
en la posterior sobre una superficie reflejante. Estos datos son importantes para la determinacin del
umbral para la deteccin del borde del dohyo.

Ejercicio 3
Desarrolle el cdigo para un programa que muestre por el monitor serial el valor de los sensores en
Voltaje.
Sugerencia
Para obtener el valor en voltaje puede emplear la siguiente frmula:
ValorObtenidoCAD5Voltios
Voltaje=
1024
Si en el ejemplo anterior se obtuvo el valor de 217 para el sensor de piso derecho su equivalente en
voltaje se puede obtener la siguiente manera:
2175Voltios
Voltaje=
=1.05Voltios
1024
1.05 voltios es el valor que se deber desplegar.

Ejercicio 4:
Desarrolle un cdigo para desplegar el valor obtenido por CAD del sensor conectado en la entrada A0.
Coloque el robot en una posicin fija. Coloque objetos a diferentes distancias y haga anotaciones.

Figura 27. Caraterizacin del sensor


Distancia (centmetros)

Valor Obtenido en CAD (0-1024) Valor en Voltaje (0-5Voltios)

60
50
40
20
10
5
A partir de los voltajes obtenidos en cada una de las distancias construya una grfica, colocando en el
eje X la distancia (centmetros) y en el eje Y el voltaje.

Figura 28. Curva caracterstica del Sensor SHARP GP2Y0A21YK


Compare sus resultados con los datos caractersticos del sensor mostrados en la figura.

Ejemplo 5: Minisumo Bsico

Explicacin del concurso


Consiste en un combate entre dos robots que discurrir por una tarima, tambin denominada dohyo o
ring, y consiste en marcar puntos Yukoh.
Los combates se componen de dos asaltos de 3 minutos mximo, cada uno, ms un terecer asalto en
caso de empate. El primer competidor en alcanzar dos puntos de Yukoh ser el ganador de la lucha. El
competidor que gane un punto de yukoh en el tercer combate, ser el ganador.

Figura 29. Competicin seguidor de lnea, persecucin


Construya una pista para pruebas
Es importante tener una pista o construir una con los siguientes materiales.
Cartulina blanca,
cinta de aislar negra,
tijeras.
Para hacer pruebas dibuje un dohyo como el que se muestra en la figura. Por facilidad use una
cartulina blanca, fondo, y la linea que delimite el ring de color negro.
Se propone el siguiente cdigo, copie y pegue en el rea de cdigo del IDE de Arduino.
/*--------------------------------Inicio del cdigo--------------------------------*/
int runled = 13; //Alias para pin 13
int led0 = 9; //Alias para pin 9
int led1 = 10; //Alias para pin 10
int motorDerecha0 = 6;
int motorDerecha1 = 11;

int pwmDerecha = 5;
int motorIzquierda0 = 7;
int motorIzquierda1 = 8;
int pwmIzquierda= 3;
int ProximidadDerecho;
int ProximidadIzquierdo;
int PisoDerecho;
int PisoIzquierdo;
//Funciones
void adelante();
void atras();
void detenido();
void giroderecha();
void giroizquierda();
void setup()
{
//Configuracin de entradas y salidas
pinMode(runled, OUTPUT); //Salida digital en runled = pin 13
pinMode(led0, OUTPUT); //Salida digital en led0 = pin 9
pinMode(led1, OUTPUT); //Salida digital en led1 = pin 10
pinMode(motorDerecha0,OUTPUT);
pinMode(motorDerecha1,OUTPUT);
pinMode(pwmDerecha, OUTPUT);
pinMode(motorIzquierda0,OUTPUT);
pinMode(motorIzquierda1,OUTPUT);
pinMode(pwmIzquierda, OUTPUT);
//Configuracin de mdulos
}
void loop()
{
//Cdigo que se repetir infititamente
PisoDerecho = analogRead(A2);

PisoIzquierdo = analogRead(A3);
if(PisoDerecho < 512 || PisoIzquierdo < 512)
{
atras();
delay(200);
giroderecha();
delay(200);
}
else
{
adelante();
}

void adelante()
{
digitalWrite(motorDerecha0, HIGH);
digitalWrite(motorDerecha1, LOW);
digitalWrite(pwmDerecha, HIGH);
digitalWrite(motorIzquierda0, HIGH);
digitalWrite(motorIzquierda1, LOW);
digitalWrite(pwmIzquierda, HIGH);
}
void atras()
{
digitalWrite(motorDerecha0, LOW);
digitalWrite(motorDerecha1, HIGH);
digitalWrite(pwmDerecha, HIGH);
digitalWrite(motorIzquierda0, LOW);
digitalWrite(motorIzquierda1, HIGH);
digitalWrite(pwmIzquierda, HIGH);
}
void detenido()
{
digitalWrite(pwmDerecha, LOW);
digitalWrite(pwmIzquierda, LOW);
}
void giroderecha()

digitalWrite(motorDerecha0, LOW);
digitalWrite(motorDerecha1, HIGH);
digitalWrite(pwmDerecha, HIGH);
digitalWrite(motorIzquierda0, HIGH);
digitalWrite(motorIzquierda1, LOW);
digitalWrite(pwmIzquierda, HIGH);

void giroizquierda()
{
digitalWrite(motorDerecha0, HIGH);
digitalWrite(motorDerecha1, LOW);
digitalWrite(pwmDerecha, HIGH);
digitalWrite(motorIzquierda0, LOW);
digitalWrite(motorIzquierda1, HIGH);
digitalWrite(pwmIzquierda, HIGH);
}
/*--------------------------------Fin del cdigo--------------------------------*/
Funcionamiento
Una vez descargado el cdigo y en funcionamiento el robot deber deslizarse sobre la superficie del
ring, al llegar al borde, lnea negra, deber regresar hacia atrs y dar vuelta. En este ejemplo
nicamente se usan los sensores para detectar el borde.

Ejemplo 6: Minisumo Intermedio

En el siguiente cdigo se emplean los sensores de proximidad para ubicar al oponente.


El cdigo propuesto
/*--------------------------------Inicio del cdigo--------------------------------*/
int runled = 13; //Alias para pin 13
int led0 = 9; //Alias para pin 9
int led1 = 10; //Alias para pin 10
int motorDerecha0 = 6;
int motorDerecha1 = 11;
int pwmDerecha = 5;
int motorIzquierda0 = 7;
int motorIzquierda1 = 8;
int pwmIzquierda= 3;
int ProximidadDerecho;
int ProximidadIzquierdo;
int PisoDerecho;
int PisoIzquierdo;
//Funciones
void adelante();
void atras();
void detenido();
void giroderecha();
void giroizquierda();
void setup()
{
//Configuracin de entradas y salidas
pinMode(runled, OUTPUT); //Salida digital en runled = pin 13
pinMode(led0, OUTPUT); //Salida digital en led0 = pin 9
pinMode(led1, OUTPUT); //Salida digital en led1 = pin 10
pinMode(motorDerecha0,OUTPUT);
pinMode(motorDerecha1,OUTPUT);
pinMode(pwmDerecha, OUTPUT);
pinMode(motorIzquierda0,OUTPUT);

pinMode(motorIzquierda1,OUTPUT);
pinMode(pwmIzquierda, OUTPUT);
//Configuracin de mdulos
giroderecha();

void loop()
{
//Cdigo que se repetir infititamente
ProximidadDerecho = analogRead(A0);
ProximidadIzquierdo = analogRead(A1);
PisoDerecho = analogRead(A2);
PisoIzquierdo = analogRead(A3);
//Condicin principal
if(PisoDerecho > 512 || PisoIzquierdo > 512)
{
atras();
delay(200);
giroderecha();
delay(200);
}
if(ProximidadDerecho > 350 && ProximidadIzquierdo > 300)
{
adelante();
}
if(ProximidadDerecho < 350 && ProximidadIzquierdo > 300)
{
giroizquierda();
}
if(ProximidadDerecho > 350 && ProximidadIzquierdo < 300)
{
giroderecha();
}
}
void adelante()
{
digitalWrite(motorDerecha0, HIGH);

digitalWrite(motorDerecha1, LOW);
digitalWrite(pwmDerecha, HIGH);
digitalWrite(motorIzquierda0, HIGH);
digitalWrite(motorIzquierda1, LOW);
digitalWrite(pwmIzquierda, HIGH);

void atras()
{
digitalWrite(motorDerecha0, LOW);
digitalWrite(motorDerecha1, HIGH);
digitalWrite(pwmDerecha, HIGH);
digitalWrite(motorIzquierda0, LOW);
digitalWrite(motorIzquierda1, HIGH);
digitalWrite(pwmIzquierda, HIGH);
}
void detenido()
{
digitalWrite(pwmDerecha, LOW);
digitalWrite(pwmIzquierda, LOW);
}
void giroderecha()
{
digitalWrite(motorDerecha0, LOW);
digitalWrite(motorDerecha1, HIGH);
digitalWrite(pwmDerecha, HIGH);
digitalWrite(motorIzquierda0, HIGH);
digitalWrite(motorIzquierda1, LOW);
digitalWrite(pwmIzquierda, HIGH);
}
void giroizquierda()
{
digitalWrite(motorDerecha0, HIGH);
digitalWrite(motorDerecha1, LOW);
digitalWrite(pwmDerecha, HIGH);
digitalWrite(motorIzquierda0, LOW);
digitalWrite(motorIzquierda1, HIGH);
digitalWrite(pwmIzquierda, HIGH);
}

/*--------------------------------Fin del cdigo--------------------------------*/


Funcionamiento
El robot comenzar a rotar sobre su eje hasta encontrar un objeto cercano, con una distancia no
mayor a 25 centmetros. Cuando lo encuentre lo empujar hasta el borde del dohyo y retornar a l.
Ejercicio 4:
Modifique el cdigo para que el robot comience su funcionamiento 5 segundos despus de su
encendido.

Вам также может понравиться