Libro Robot A3-3
Libro Robot A3-3
Al lector,
Muchísimas gracias a usted estimado lector, ¿Por qué?, bueno principalmente al tener en
sus manos la presente obra demuestra su vivo interés en la ciencia y la tecnología, su
curiosidad lo llevará a descubrir más del fabuloso mundo que lo rodea. Nos motiva el hecho
de saber que más personas tienen el ansia de superarse a sí mismos, a causa de llevar el
espíritu creador, materializando sus sueños y haciendo realidad lo que antes se decía “ser
imposible”.
ATTE,
Los Autores.
1 1
“Descubre hasta dónde te puede llevar una idea”
Nuestro objetivo es fomentar y llevar la competencia educativa a su nivel máximo, y
apoyar a los profesores y alumnos en su interés por aportar algo de beneficio a la
comunidad.
2 2
Torneo Latinoamericano de Robótica en Competencia ROBOMATRIX
Robomatrix además funge como eliminatoria continental oficial para asistir a diversos
eventos internacionales, entre ellos: El Concurso Internacional de Robotchallenge a
celebrarse en Viena, Austria, el Concurso Internacional de Proyectos de Cómputo
INFOMATRIX, a celebrarse en Bucarest, Rumania, entre otros.
Mayores informes
www.solacyt.org
[email protected]
facebook.com/solacyt
twitter.com/Solacyt
3 3
Contenido
CAPÍTULO 1 ......................................................................................................................................... 7
Advertencias de seguridad y precauciones de uso. ...................................................................... 9
Introducción.................................................................................................................................. 10
Primeros pasos con el robot Andromie MP. ................................................................................ 10
Conoce más sobre el robot Andromie MP................................................................................... 11
Hardware de robot Andromie MP. .............................................................................................. 11
Arduino UNO. ............................................................................................................................... 14
Especificaciones. ....................................................................................................................... 14
Alimentación............................................................................................................................. 15
Comunicación. .......................................................................................................................... 15
Entrada y Salida ........................................................................................................................ 15
CAPÍTULO 2 ....................................................................................................................................... 16
Programando en Arduino. ............................................................................................................ 17
Componentes del programa de Arduino. .................................................................................... 17
¿Qué es un “Sketch”? ................................................................................................................... 18
Estructuras. ............................................................................................................................... 18
Valores constantes. .................................................................................................................. 19
Variables. .................................................................................................................................. 19
Funciones .................................................................................................................................. 20
Pasos para programar la tarjeta Arduino Uno. ........................................................................... 20
CAPÍTULO 3 ....................................................................................................................................... 23
Un relato del desarrollo de los robots: ........................................................................................ 24
Aparecen los drones. .................................................................................................................... 24
Aprende jugando. ......................................................................................................................... 25
Actividad 1: Danza con robots. ................................................................................................ 25
Un relato del desarrollo de los robots: ........................................................................................ 32
Robots móviles. ............................................................................................................................ 32
Actividad 2: Pisando el acelerador........................................................................................... 33
Un relato del desarrollo de los robots: ........................................................................................ 40
Robots de servicio. ....................................................................................................................... 40
Actividad 3: Insecto bot. ........................................................................................................... 41
Un relato del desarrollo de los robots: ........................................................................................ 48
4 4
Visión artificial. ............................................................................................................................. 48
Actividad 4: Reconociendo el camino. ..................................................................................... 49
Un relato del desarrollo de los robots: ........................................................................................ 55
Teleoperación robótica ................................................................................................................ 55
Actividad 5: Buscando el tesoro. .............................................................................................. 56
Un relato del desarrollo de los robots: ........................................................................................ 63
Un robot de exploración espacial. ............................................................................................... 63
Actividad 6: Escuchando el camino. ......................................................................................... 64
Un relato del desarrollo de los robots: ........................................................................................ 71
El robot Da Vinci. .......................................................................................................................... 71
Actividad 7: El murciélago buscador. ....................................................................................... 72
Un relato del desarrollo de los robots: ........................................................................................ 78
Robótica educativa. ...................................................................................................................... 78
Actividad 8: El camino del guerrero. ........................................................................................ 79
Un relato del desarrollo de los robots: ........................................................................................ 86
El futuro de la robótica. ................................................................................................................ 86
Actividad 9: Regresando a casa. ............................................................................................... 87
CAPÍTULO 4 ....................................................................................................................................... 95
Programando en “Snap!” ............................................................................................................. 97
Instalación en Windows. .............................................................................................................. 97
Ejecutando “Snap!” ...................................................................................................................... 97
Programando un módulo “Hummingbird” en “Snap!” ............................................................... 98
“Motion” (Comandos de movimiento). ................................................................................... 98
“Looks” (Comandos de visualización). ..................................................................................... 98
“Sensing” (Comandos de detección). ....................................................................................... 98
El bloque “Say This” (Decir esto).............................................................................................. 99
Guardando y cargando un Proyecto. ....................................................................................... 99
CAPÍTULO 5 ..................................................................................................................................... 100
“Hummingbird” .......................................................................................................................... 101
Actividad 1: Simulación de terremoto (Geografía). .............................................................. 101
Principios de ciencia: Terremotos y sus tipos. ....................................................................... 105
Actividad 2. Ahorro de energía (ecología). ............................................................................ 106
Principios de ciencia: Aprovechamiento de los recursos energéticos. ................................. 109
5 5
Actividad 3. Termómetro (Química). ..................................................................................... 111
Principios de ciencia: Escalas de Temperatura. ..................................................................... 113
ANEXO A...................................................................................................................................... 115
Instalación de Controladores ................................................................................................. 115
6 6
CAPÍTULO 1
7 7
Arduino / Hummingbird
ROBOT ANDROMIE MP
8 8
Capitulo 1
Utilice baterías alcalinas nuevas o baterías recargables con carga completa, para obtener
una mejor experiencia de uso con el robot Andromie MP.
Las condiciones de trabajo del Andromie MP será sobre superficies lisas de preferencia, no
conductoras de la electricidad (madera, papel, cartón, vitropiso) y en el interior de
habitaciones con luz controlada.
No colocar la tarjeta de circuito impreso (PCB) del robot Andromie MP sobre superficies
metálicas que produzcan daño por corto circuito eléctrico.
No ingerir alimentos y bebidas cuando se esté trabajando con el robot Andromie MP, será
necesario lavarse las manos después de manipularlo.
9 9
Arduino / Hummingbird
Introducción.
- Cable de datos USB con configuración USB-A a USB-B, para la comunicación entre el
robot Andromie MP y la computadora.
Se recomienda que tenga a la mano papel, cartulina y cartoncillo de diferentes tamaños, así
como cinta aislante de color negro o blanco, todo esto con el fin de improvisar pistas y poner
a prueba el robot Andromie MP.
10 10
Capitulo 1
En la figura 1.1, la figura 1.2 y la figura 1.3 se muestran los componentes de vista superior,
inferior y trasera del robot Andromie MP, se da una explicación breve de algunos de ellos.
11 11
Arduino / Hummingbird
luz, que no es perceptible para el ojo humano pero es visible con ayuda de una
cámara digital.
Sensor de proximidad ultrasónico (D7 y D8): Es un sensor que emite y capta ondas
ultrasónicas, inaudibles para el ser humano, cuenta con un emisor y un receptor,
que opera en la frecuencia de 40 KHz.
Botón Reset: Interruptor de contacto sobre la placa Arduino Uno que tiene como
propósito reiniciar el programa almacenado en el microcontrolador.
Motorreductores: Son motores de corriente directa (como las baterías), con una
caja de engranes adaptada y una relación de reducción de 48:1, por cada 48 vueltas
de giro del motor eléctrico el eje del reductor gira 1 vuelta, de este modo se
incrementa el torque y la fuerza al mismo tiempo que se reduce la velocidad.
LEDs: Son dispositivos que emiten una luz al circular una corriente por sus
terminales. En el robot Andromie MP se usan como indicadores de encendido tanto
en la placa Arduino Uno como en la placa controladora de motores. También cuenta
con LEDs en la placa Arduino Uno para indicar que está recibiendo y enviando datos
al ser programado desde la computadora, se identifican por la leyendas TX
(transmitir) y RX (recibir).
12 12
Capitulo 1
13 13
Arduino / Hummingbird
Arduino Uno.
El Arduino Uno es una placa microcontroladora basada en el ATmega 328. Tiene 14 pins de
entrada y salida, 6 pueden usarse como salidas PWM, 6 entradas analógicas, conexión USB-
B, jack de poder y botón de reset. Todo listo para conectarlo a la computadora con un cable
USB o baterías y comenzar a programarlo. (Ver figura 1.4).
NOTA: Debe desconectar el cable USB de la placa Arduino antes de proporcionar voltaje
desde una fuente externa.
Especificaciones.
Microcontrolador ATmega328.
Tensión de operación (nivel lógico) de 5 volts.
Tensión de entrada (recomendada) de 7 a 12 volts.
Tensión de entrada (límites) de 6 a 20 volts.
Se cuenta con 14 pins Entrada/Salida digitales, 6 proveen de salida PWM.
14 14
Capitulo 1
Alimentación.
El Arduino Uno puede ser alimentado a través de la conexión USB o con una fuente de
alimentación externa. Por diseño, el robot Andromie MP usa un conjunto de baterías como
fuente de alimentación externa. El Arduino Uno puede funcionar con un suministro externo
de 6 a 20 volts.
Comunicación.
NOTA: Para instalar los controladores de la tarjeta Arduino Uno consulte el anexo A.
Entrada y Salida.
Cada uno de los 14 pins digitales del Arduino Uno puede ser usado como entrada o salida,
usando las funciones “pinMode()”, “digitalWrite()” y “digitalRead()”.
La tarjeta Arduino Uno posee 6 entradas analógicas, cada una de ellas provee de 10 bits de
resolución (1024 valores diferentes). Por defecto miden entre 5 volts y tierra.
15 15
CAPÍTULO 2
16 16
Capitulo 2
Programando en Arduino.
Para programar el robot Andromie MP, es necesario contar con el entorno de programación
Arduino (ver figura 2.1), el cual puede ser descargado completamente gratis desde la
dirección www.arduino.cc. Se recomienda descargar la versión más reciente del programa.
En la barra superior de la interfaz del programa Arduino, encontrará todos los elementos
necesarios para interactuar con la tarjeta Arduino Uno, se enlistan a continuación:
17 17
Arduino / Hummingbird
¿Qué es un “Sketch”?
Cada ambiente de desarrollo tiene un área de trabajo específica y bien delimitada, por
ejemplo, considere un editor de texto, su tarea es clara, la generación de escritos
electrónicos y la redacción está determinada en cada página virtual, de igual manera la hoja
de trabajo donde se realiza la composición de un código fuente en plataforma Arduino se
llamada “sketch”.
Estructura
Variables y constantes
Funciones
Estructuras.
void setup()
{
Instrucción_1;
18 18
Capitulo 2
}
void loop()
{
Instrucción_2;
}
Valores constantes.
HIGH: Alto
LOW: Bajo
INPUT: Entrada
OUTPUT: Salida
TRUE: Verdadero
FALSE: Falso
Variables.
Una variable es una manera de nombrar y almacenar un valor numérico para su uso
posterior por el programa. Como su nombre indica, las variables son cantidades que pueden
variar continuamente, es lo contrario de las constantes. Una variable debe ser declarada y,
opcionalmente, asignarle un valor. Los siguientes son los tipos de variables más comunes:
char: Caracter
byte: 8 bits
int: Entero
unsigned int: Entero sin signo
long: Entero de 32 bits
unsigned long: Entero de 32 bits sin signo
float: Punto flotante
19 19
Arduino / Hummingbird
Funciones.
Es el conjunto de palabras clave dentro del lenguaje de Arduino, para ordenar la realización
de una tarea al interior de la tarjeta electrónica del Arduino Uno. Las funciones que se
utilizarán en el presente texto son las siguientes:
Una vez generado su código fuente (programa para el robot), lo siguiente es configurar el
programa de Arduino para comunicarse por medio de la computadora y transmitir su código
a la tarjeta Arduino Uno del robot Andromie MP. Primer paso, seleccione la tarjeta Arduino
Uno, dentro del programa Arduino abra la pestaña Herramientas, desplace el cursor a la
opción Tarjeta, luego en el submenú elija Arduino Uno (ver figura 2.2)
20 20
Capitulo 2
Segundo paso, se verifica que el código escrito sea correcto, presione el ícono verificar (ver
figura 2.3):
21 21
Arduino / Hummingbird
Una vez identificado el puerto, continúe con el tercer paso, seleccione en el entorno de
programación la pestaña Herramientas, luego puerto serial y marque el puerto COMx (ver
figura 2.6).
Cuarto paso, cargar el programa en la tarjeta Arduino, presione el ícono de cargar (ver figura
2.7). Esta acción puede tardar algunos segundos.
Si la carga fue exitosa se desplegará el mensaje de confirmación carga terminada (ver figura
2.8). ¡Listo!, ha finalizado el proceso para programar la tarjeta Arduino Uno.
En la próxima sección aplicará las herramientas explicadas en este capítulo, para producir
sus primeros códigos en lenguaje Arduino, trabajando con su robot Andromie MP.
22 22
CAPÍTULO 3
23 23
Arduino / Hummingbird
24 24
Capitulo 3
Aprende jugando.
Bienvenido, usted está por comenzar una increíble aventura y convertirse en un maestro
de la robótica. En esta sección se presentan actividades prácticas con su robot Andromie
MP, donde aprenderá aspectos básicos de la programación en plataforma Arduino,
conocerá las diferentes partes que forman su robot y su funcionamiento, además pondrá
en marcha su creatividad, trabajará en equipo, se interesará más en la ciencia y la
tecnología.
Recuerde, los ejemplos expuestos sólo son un estilo de programación, cada código puede
ser mejorado por usted y superar sus propios límites. Disfrute de cada lección y diviértase
mientras aprende.
En esta lección usted estudiará acerca de las salidas digitales, salidas analógicas, orientación
de las ruedas y movimientos básicos del robot Andromie MP. Utilizará las funciones
“pinMode()”, “digitalWrite()”, “analogWrite()” y “delay()”, trabajará con variables de tipo
entero “int” e instrucciones en “void setup()”. Conocerá la ubicación física de los motores
del robot Andromie MP y el método de manipulación. El lector entrenará su capacidad de
abstracción al interpretar la secuencia lógica del código propuesto en esta actividad.
Primero usted se familiarizará con su robot Andromie MP, el cual es de morfología móvil,
es decir, se puede desplazar de un punto a otro, su tracción es diferencial lo que significa
que no cuenta con ruedas de dirección como los automóviles, únicamente tiene dos ruedas
de tracción y un rodamiento de apoyo llamado rueda loca (tipo roll-on), las ruedas de
tracción se localizan a la izquierda y derecha del robot Andromie MP (ver figura 1.2). El
rodamiento está por debajo del compartimiento de baterías, no ejerce movimiento,
solamente se emplea para disminuir la fricción por arrastre en la superficie. Los
movimientos laterales los realiza mediante combinación de movimientos mecánicos con el
sentido de giro de las ruedas.
Las ruedas son impulsadas por dos motores de corriente directa (CD), los cuales son
manipulados por el controlador de motores, se trata de un chip llamado en electrónica
puente H, ubicado en la parte superior del robot Andromie MP, junto con la tarjeta Arduino
Uno (ver figura 1.1). El controlador de motores necesita cuatro pins de la tarjeta Arduino
para poder trabajar, se designan dos pins digitales (12 y 13) y dos pins analógicos (10 y 11),
más adelante se explicará su uso.
25 25
Arduino / Hummingbird
¿Ha bailado alguna vez? ¿Le parece simple?, bueno, usted le enseñará al robot Andromie
MP algunos pasos. Ponga mucha atención en la siguiente rutina:
Esta rutina natural, es una secuencia lógica de movimiento para el baile, al finalizar solo se
tiene que repetir para volver a bailar, y claro, no perder el ritmo. De esta forma se
comportan los robots y casi todos los equipos autónomos existentes, repitiendo secuencias
lógicas diseñadas por personas hábiles como usted.
Por favor, abra el programa Arduino en su computadora haciendo doble clic en un ícono
parecido al mostrado en la figura 3.1, en la interfaz de desarrollo abra un nuevo sketch (si
requiere más información vea el capítulo 1 bajo el tema Componentes del programa de
Arduino), transcriba el código propuesto para esta actividad:
/* --------------------Inicio de Código-------------------- */
//Se nombran variables para el controlador de motores, se necesitan cuatro pins: 10, 11,
12 y 13
//pins 10 y 12 para motor derecho
int motordervel = 10; //Se relaciona pin 10 a variable "motordervel" para manipular
velocidad
int motorderdir = 12; //Se relaciona pin 12 a variable "motorderdir" para manipular
dirección
//pins 11 y 13 para motor izquierdo
26 26
Capitulo 3
int motorizqvel = 11; //Se relaciona pin 11 a variable "motorizqvel" para manipular
velocidad
int motorizqdir = 13; //Se relaciona pin 13 a variable "motorizqdir" para manipular
dirección
//OJO
//Se introduce el valor "127" no es un pin de la tarjeta Arduino Uno
int acelerador = 127; //Se relaciona "acelerador" variable tipo entero con 127 valor
decimal
//Ciclo principal
void loop()
{
//Robot en alto
analogWrite(motordervel, 0); //Salidas analógicas con valor cero
analogWrite(motorizqvel, 0); //para mantener el robot en reposo
delay(500); //Retardo de ejecución
27 27
Arduino / Hummingbird
//Robot avanza
analogWrite(motordervel, acelerador); //Salidas analógicas cuyo valor lo determina
analogWrite(motorizqvel, acelerador); //la variable "acelerador" que equivale a 127
digitalWrite(motorderdir, HIGH); //Hace girar la rueda derecha en sentido positivo
digitalWrite(motorizqdir, HIGH); //Hace girar la rueda izquierda en sentido positivo
delay(500); //Retardo de ejecución
//Robot retrocede
analogWrite(motordervel, acelerador); //Salidas analógicas cuyo valor lo determina
analogWrite(motorizqvel, acelerador); //la variable "acelerador" que equivale a 127
digitalWrite(motorderdir, LOW); //Hace girar la rueda derecha en sentido negativo
digitalWrite(motorizqdir, LOW); //Hace girar la rueda izquierda en sentido negativo
delay(500); //Retardo de ejecución
}
/* --------------------Fin de código-------------------- */
Una vez transcrito en el programa Arduino, continúe con los siguientes pasos:
Guardar: Evite perder su información, ponga algún nombre fácil de recordar, ej: “robot
bailarín”.
Compilar: Corrija los errores, al hacer clic en el botón de compilar del programa de Arduino,
éste buscará si existe algún error de sintaxis en el código antes de grabarlo en el robot
Andromie MP.
Cargar: Escriba la información al robot Andromie MP, si no hay errores en el código se graba
en la memoria interna de la tarjeta Arduino Uno.
28 28
Capitulo 3
Desconectar: Antes de usar el robot retire el cable USB de la computadora y del mismo, no
olvide que el robot tiene un compartimiento para baterías las cuales proporcionan energía
necesaria para su funcionamiento, no desconectar el cable puede dañar tanto al robot como
a la computadora.
Ejecutar: Coloque las baterías al robot, encienda, observe, tome nota y disfrute su programa
con el robot Andromie MP.
Para poder iniciar, solo se crea la variable de tipo entera llamada “acelerador” y se le asigna
un valor decimal constante de 127, para obtener una velocidad media, también se crean
variables para relacionar los pins para el controlador de motores.
En la sección “void setup()” configuramos los pins digitales dedicados para el controlador
de motores como salidas con la instrucción “pinMode()”, con la siguiente sintaxis:
pinMode(pin, OUTPUT); //La leyenda OUTPUT indica el comportamiento del pin como
salida.
El lector notará las sentencias dentro de la sección “void setup()”, esto para aprovechar la
propiedad de ejecutarse al principio durante el arranque de la tarjeta Arduino, recuerde
que dichas sentencias sólo se llevan a cabo una vez.
29 29
Arduino / Hummingbird
Ahora analizaremos las funciones del lenguaje Arduino aplicadas en el ciclo principal “void
loop()”, para condicionar el sentido de giro de las ruedas de tracción izquierda y derecha se
usa la expresión “digitalWrite()”, acorde a la sintaxis:
Para definir la velocidad se usa el estamento “analogWrite()” para permitir una salida
analógica aproximada, la sintaxis se escribe:
analogWrite(pin , valor); //Donde pin y valor pueden sustituirse por variables haciendo más
dinámico el código.
Giro derecha: Para construir este movimiento se ordena girar a la rueda derecha en sentido
negativo, al mismo tiempo la rueda izquierda gira en sentido positivo, creando un
movimiento en su propio eje, dando la vuelta a la derecha como se ve en la figura 3.2a. En
el código lo encuentra con el título comentado: Robot gira a la derecha.
30 30
Capitulo 3
Ha dado el primer paso para convertirse en un gran maestro de la robótica, pero no pierda
el ritmo, la próxima lección es mucho más emocionante, a tal grado que acelerará su
corazón.
a)
b)
c)
d)
31 31
Arduino / Hummingbird
Robots móviles.
32 32
Capitulo 3
Su robot Andromie MP no puede ver el camino, pero con su ayuda podrá hacerlo, usted
programará al robot con una secuencia lógica para trazar un rectángulo semejante al
circuito de carreras, con curvas de 90°.
Como se habla de un rectángulo, esta figura geométrica se compone por dos lados largos y
dos cortos, sus vértices son rectos, es decir, las intersecciones forman ángulos de 90° (ver
figura 3.3).
33 33
Arduino / Hummingbird
Segundo, el robot Andromie MP iniciará desde uno de los lados más largos como lo refleja
la imagen de la figura 3.3, lo hará a máxima velocidad.
NOTA: Recuerde, si el texto aparece después de “//” o está encerrado por “/*…*/”, se trata
de comentarios que son únicamente para explicar las líneas del código, la tarjeta Arduino
Uno no usa esa información, son una ayuda para que usted comprenda la ejecución de cada
línea de código en el programa.
/* --------------------Inicio de Código-------------------- */
//Se nombran variables para el controlador de motores, se necesitan cuatro pins: 10, 11, 12
y 13
//pins 10 y 12 para motor derecho
int motordervel = 10; //Se relaciona pin 10 a variable "motordervel" para manipular
velocidad
int motorderdir = 12; //Se relaciona pin 12 a variable "motorderdir" para manipular
dirección
//pins 11 y 13 para motor izquierdo
int motorizqvel = 11; //Se relaciona pin 11 a variable "motorizqvel" para manipular
velocidad
int motorizqdir = 13; //Se relaciona pin 13 a variable "motorizqdir" para manipular dirección
//OJO Las salidas analógicas pins 10 y 11, requieren se defina el valor de operación
//OJO Las salidas analógicas de la tarjeta Arduino Uno, usan métodos de aproximación
numérica
//OJO El método de aproximación empleado se llama PWM, el cual determina la cantidad
de energía
//OJO La energía liberada se mide en volts "V", tiene un rango de trabajo de 0 V a 5 V
físicamente
//OJO Para aproximar numéricamente este valor se usa el esquema de división de 5 V entre
255 valores
34 34
Capitulo 3
//OJO Es decir, cada valor decimal permite la salida analógica de 0.0196 V aprox.
//OJO Por lo tanto la velocidad está definida entre 0 y 255 valores equivalente 0 V y 5 V
int acelerador; //Variable tipo entera llamada "acelerador"
//Ciclo principal
void loop()
{
//Secuencia de instrucciones para la rutina de movimiento
acelerador = 255; //Define una velocidad máxima para todas las sub-funciones de
movimiento
avanza();
delay(500); //Demora para el movimiento
alto();
delay(500); //Demora para el movimiento
acelerador = 127; //Define una velocidad media para todas las sub-funciones de
movimiento
derecha();
delay(250); //Demora para el movimiento, son 250 ms aprox. para obtener un giro de 90°
avanza();
delay(500); //Demora para el movimiento
alto();
delay(500); //Demora para el movimiento
derecha();
delay(250); //Demora para el movimiento, son 250 ms aprox. para obtener un giro de 90°
}
35 35
Arduino / Hummingbird
Una vez transcrito el programa de Arduino, continúe con los siguientes pasos:
Guardar: Evite perder su información, ponga algún nombre fácil de recordar, ej: “carrera”.
36 36
Capitulo 3
Compilar: Corrija los errores, al hacer clic en el botón de compilar del programa de Arduino,
el cual buscará si existe algún error de sintaxis en el código antes de grabarlo en el robot
Andromie MP.
Cargar: Escriba la información al robot Andromie MP, si no hay errores en el código se graba
en la memoria interna de la tarjeta Arduino Uno.
Desconectar: Antes de usar el robot retire el cable USB de la computadora y del mismo, no
olvide que el robot tiene un compartimiento para baterías las cuales proporcionan energía
necesaria para su funcionamiento, no desconectar el cable puede dañar tanto al robot como
a la computadora.
Ejecutar: Coloque las baterías al robot, encienda, observe, tome nota y disfrute su programa
con el robot Andromie MP.
Expliquemos un poco sobre el cálculo para obtener salidas analógicas por el método de
modulación de ancho de pulso (PWM por sus siglas en inglés), el cual es una aproximación
numérica de una variable física, en este caso voltaje unidad básica en electrónica, no es
objetivo en el curso un análisis a profundidad sobre PWM se deja a criterio del lector una
investigación más detallada. Basta por el momento con formular la relación entre energía
liberada por la tarjeta Arduino Uno y los valores decimales de referencia de salida. El voltaje
de salida está en el rango de 0 a 5 V, y la configuración interna de PWM para la salida, opera
entre 0 a 255 valores decimales. La fórmula es una simple regla de tres:
5 V = 255 valores.
0 V = 0 valores.
Por lo tanto, cada valor libera en la salida analógica 0.0196 V, entre más valores mayor
energía.
Ya sabe cómo trabajan las salidas analógicas, pero ¿se imagina tener que cambiar los valores
de referencia en cada instrucción “analogWrite()”?, con el fin de evitar esta circunstancia
37 37
Arduino / Hummingbird
se utilizan variables globales, usted las ha usado antes pero no se había percatado, un
ejemplo simple es:
Se considera global porque la puede modificar en cualquier parte del proceso dentro de su
código fuente, si al principio la asocia a un valor, éste será constante para cualquier función,
pero si la deja abierta puede actualizarse en algún momento.
Muy bien, ahora reconoce las variables globales, otra representación es usada por usted al
asignar un pin de la tarjeta Arduino Uno a cierta variable, por ejemplo: las dedicadas al
controlador de motores.
¿Distingue mejor las partes del programa?, si es así, notará la sencillez del ciclo principal,
esto es resultado del uso de sub-funciones, ¿Qué son?, bueno, son instrucciones también
del lenguaje Arduino, se usan para no repetir secuencias y disminuir líneas de código.
Semejante a hacer una síntesis de un texto. La construcción es sencilla, se toma como
ejemplo la rutina de girar a la derecha de la actividad 1:
void sub_función_nombre() //Se le coloca nombre para hacer referencia en el ciclo principal
{
sentencias; //Líneas de instrucciones a ejecutar
} //Los corchetes “{}” indican el alcance de la sub-función
38 38
Capitulo 3
Una vez creada, se tiene que declarar escribiendo el nombre de la sub-función antes del
“void setup()” y su código debe estar al final del ciclo “void loop()”, si usted requiere
emplear la sub-función solo la nombra en el ciclo “void loop()” y se llevará a cabo, ejemplo
de sintaxis:
void derecha();
void setup()
{
………
}
void loop()
{
derecha();
………
}
//Área para sub-funciones
void derecha()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, LOW);
digitalWrite(motorizqdir, HIGH);
}
Ahora entiende por qué fue tan simple grabar en el ciclo principal la ruta de circuito de
carreras, pero no se confié pues en la pista no había obstáculos, ¿Cómo reaccionará el robot
si se topa con un objeto a medio camino? Esto lo averiguará en la siguiente lección.
39 39
Arduino / Hummingbird
Robots de servicio.
40 40
Capitulo 3
En esta lección usted estudiará los sensores de contacto, señales digitales de entrada y
establecerá condiciones de operación. Reconocerá físicamente en el robot Andromie MP la
ubicación de los sensores de contacto. Practicará lo aprendido con las sub-funciones para
determinar el movimiento del robot Andromie MP, usará las funciones “pinMode()”,
“digitalRead()” y la estructura de control “if … else”. El lector pondrá en práctica su
capacidad de discernimiento en la toma de decisiones.
¿Le parece difícil?, pierda el temor, pues usted diseñará un robot muy inteligente capaz de
resolver las problemáticas planteadas en el párrafo anterior. Para identificar los obstáculos
se necesitan sensores, estos dispositivos son el canal por donde el robot Andromie MP
puede procesar la información del medio ambiente a su alrededor, ahora el robot podrá ver
de una forma simbólica. En esta lección trabajará con los sensores de contacto.
Conozca más sobre el robot Andromie MP, los sensores de contacto se ubican en la parte
inferior frontal sobre el disco bajo de la estructura del robot Andromie MP (ver figura 3.4).
Cuenta con uno a la izquierda y el otro a la derecha, son dos switches mecánicos diseñados
para impacto, pero tenga cuidado porque pueden dañarse si se maltratan, tienen
extensiones en forma de antenas para mayor alcance, semejante a un insecto. Estos
sensores de contacto se encuentran conectado a los pins digitales 2 y 3 de la tarjeta Arduino
Uno. Operan con lógica negativa o inversa, significa que si perciben un contacto generan un
pulso digital bajo (LOW), en caso contrario, su pulso digital es alto (HIGH).
41 41
Arduino / Hummingbird
Ahora el robot Andromie MP distingue obstáculos, ¿qué sigue? Tomar decisiones como se
comentó anteriormente. Usted programará un robot inteligente por medio de programas
que determinarán el comportamiento y la capacidad de elegir del robot. El método
propuesto busca determinar las posibles causas de interferencia en el funcionamiento del
robot, las cuales implican no terminar su tarea, la cual es desplazarse de un punto a otro sin
atorarse. Imagine por un instante que usted es un robot caminando de frente y se encuentra
los siguientes casos:
Perfecto, usted es un gran robot. Esta toma lógica de decisiones formará la inteligencia
artificial de su robot Andromie MP. Por favor escriba el código ejemplo propuesto en un
nuevo sketch del programa Arduino:
/* --------------------Inicio de Código-------------------- */
//Se nombran variables para el controlador de motores, se necesitan cuatro pins: 10, 11, 12
y 13
//pins 10 y 12 para motor derecho
int motordervel = 10;
int motorderdir = 12;
//pins 11 y 13 para motor izquierdo
int motorizqvel = 11;
int motorizqdir = 13;
//Se nombra variables para los sensores de contacto izquierdo y derecho, se usan 2 pins: 2
y3
int contactoizq; //La variable entera "contactoizq" para sensor de contacto izquierdo
int contactoder; //La variable entera "contactoder" para sensor de contacto derecho
42 42
Capitulo 3
//Entradas digitales
pinMode(2, INPUT); //Los pins 2 y 3 son digitales
pinMode(3, INPUT); //Se configuran como entrada
//Ciclo principal
void loop()
{
contactoizq = digitalRead(2); //Lectura digital de sensores de contacto y asignación a
variables
contactoder = digitalRead(3);
43 43
Arduino / Hummingbird
izquierda();
delay(250);
}
else
{
if(contactoizq == LOW && contactoder == LOW) //Caso con obstáculo frontal
{
retrocede(); //Acción retroceder y girar a la derecha para librar obstáculo
delay(250);
derecha();
delay(250);
}
}
}
}
}
//Sub-función robot en alto
void alto()
{
analogWrite(motordervel, 0); //Salidas analógicas con valor cero
analogWrite(motorizqvel, 0); //para mantener el robot en reposo
}
//Sub-función robot gira a la derecha
void derecha()
{
analogWrite(motordervel, acelerador); //Salidas analógicas cuyo valor lo determina
analogWrite(motorizqvel, acelerador); //la variable "acelerador" que equivale a 127
digitalWrite(motorderdir, LOW); //Hace girar la rueda derecha en sentido negativo
digitalWrite(motorizqdir, HIGH); //Hace girar la rueda izquierda en sentido positivo
}
//Sub-función robot gira a la izquierda
void izquierda()
{
analogWrite(motordervel, acelerador); //Salidas analógicas cuyo valor lo determina
analogWrite(motorizqvel, acelerador); //la variable "acelerador" que equivale a 127
digitalWrite(motorderdir, HIGH); //Hace girar la rueda derecha en sentido positivo
digitalWrite(motorizqdir, LOW); //Hace girar la rueda izquierda en sentido negativo
}
//Sub-función robot avanza
void avanza ()
{
analogWrite(motordervel, acelerador); //Salidas analógicas cuyo valor lo determina
analogWrite(motorizqvel, acelerador); //la variable "acelerador" que equivale a 127
44 44
Capitulo 3
Guardar: Evite perder su información, ponga algún nombre fácil de recordar, ej:
“insectobot”.
Compilar: Corrija los errores, al hacer clic en el botón de compilar del programa de Arduino,
el cual buscará si existe algún error de sintaxis en el código antes de grabarlo en el robot
Andromie MP.
Cargar: Escriba la información al robot Andromie MP, si no hay errores en el código se graba
en la memoria interna de la tarjeta Arduino Uno.
Desconectar: Antes de usar el robot retire el cable USB de la computadora y del mismo, no
olvide que el robot tiene un compartimiento para baterías las cuales proporcionan energía
necesaria para su funcionamiento, no desconectar el cable puede dañar tanto al robot como
a la computadora.
Ejecutar: Coloque las baterías al robot, encienda, observe, tome nota y disfrute su programa
con el robot Andromie MP.
45 45
Arduino / Hummingbird
Sus sentencias aparecen en el código propuesto como ejemplo al final del ciclo “void
loop()”, simplificando mucho las líneas de código y facilitando su lectura. Solo se escribe el
nombre de la sub-función deseada en el ciclo principal “void loop()”, para ejecutar su acción.
pinMode(pin, INPUT); //La leyenda “INPUT” determina al pin como entrada digital
Hecho esto con los pins 2 y 3, se incluye en “void setup()” algo muy importante para un
robot: las primeras instrucciones, éstas dictan el estado primario del robot, es decir, su
origen.
Más adelante en el ciclo principal, se realiza la lectura digital de los sensores de contacto
mediante la sentencia “digitalRead()”, debe estar antes de otra sentencia para dar prioridad
a la lectura recuerde que los programas son secuenciales, significando la ejecución de línea
de instrucción por línea de instrucción, salvo cuando hay un salto como los provocados por
sub-funciones. Para almacenar la lectura de los pins 2 y 3, se asigna el valor a una variable,
la sintaxis se escribe:
Realizada la lectura el robot podrá distinguir si hay un obstáculo en su paso, tomar una
decisión y seguir avanzando.
Hay cuatro casos muy importantes en el comportamiento del robot Andromie MP, todos
dependen de los sensores de contacto:
46 46
Capitulo 3
Pero, cómo sabe si fue pulsado un sensor de contacto, pues haciendo la comparación en la
condición al interior del “if … else”, tome por ejemplo el caso A, no debe existir ninguna
señal baja (LOW), la referencia inmediata es la señal digital opuesta alto (HIGH), porque solo
pueden tener esos valores, en el código se usa el operador lógico de igualdad “==”:
Las sentencias subsecuentes son el llamado a las sub-funciones de movimiento, para tener
una respuesta inmediata.
Su robot actúa igual a un pequeño insecto detectando los obstáculos con sus pequeñas
antenas, pero un par de antenas no superan la visión de tres ojos, ¿A qué nos referimos? Lo
averiguará en la próxima lección.
47 47
Arduino / Hummingbird
Visión artificial.
Con los avances en tecnología se ha dotado a los robots con gran cantidad de sensores para
reconocer su entorno, sin embargo, desde los primeros robots desarrollados, siempre se
planteó la idea de dotarlos con visión, el hacer que un robot reconozca la ubicación de un
objeto o reconozca el objeto como tal, es una tarea muy difícil.
Con el desarrollo de la robótica nació una rama de estudio llamada inteligencia artificial,
esta rama de la robótica se encarga del estudio, análisis y procesamiento de datos a través
del estudio de imágenes digitales.
Dotando de visión a los robots, éstos pueden realizar diferentes tareas entre las cuáles
podemos citar, reconocimiento de rostros en las personas, inspección de objetos,
reconocimiento de colores y manejo de herramientas.
Para dotar de visión a un robot se suelen utilizar imágenes obtenidas a través de una cámara
o sensores especializados que reconozcan colores y a través de software realizar el
reconocimiento de objetos. Quizá llegue pronto el día en que los robots puedan reconocer
y disfrutar de la belleza de un atardecer.
48 48
Capitulo 3
En esta lección usted reconocerá los sensores de proximidad del robot Andromie MP,
aplicará metodología inversa sobre el ejemplo propuesto en la actividad 3, manipulará
señales digitales de entrada, usará estructura de control y sub-funciones de movimiento
básicas. Repasará las funciones “pinMode”, “digitalRead()” e “if … else”. El lector ampliará
su mente con la nueva herramienta del robot Andromie MP, dando otra perspectiva para
obtener la solución a problemas similares.
Los sensores de contacto vistos en la lección pasada, sólo son un modo de evitar obstáculos,
pero esto implica objetos con una altura menor a la del robot, piense en una saliente, por
ejemplo el refuerzo de una silla, este se coloca entre las patas de la silla, sin embargo, no
toca el suelo, si el robot pasa por el arco formado por las patas de la silla, seguro se atora,
porque los sensores de contacto jamás percibieron algo.
No se preocupe, conocerá otro tipo de canal para percibir el medio alrededor del robot
Andromie MP, los sensores de proximidad, los cuales son dispositivos optoelectrónicos, es
decir, trabajan con fenómenos de la luz, en precisión con la reflexión del espectro infrarrojo
del haz de luz, el cual no se percibe a simple vista. Muchos aparatos en la vida cotidiana lo
ocupan como servidores de papel, llaves automáticas para el agua, controles remotos, etc.
Estos geniales sensores de proximidad se localizan en la parte superior del robot Andromie
MP, sobre el disco de acrílico transparente en la zona del frente como se muestra en la
figura 3.5.
Son tres dispositivos que se ubican a la izquierda, centro y derecha, los laterales
proporcionan un ángulo de visión de 45° respecto al centro, están conectados a la tarjeta
Arduino Uno en los pins 4, 5 y 6, en ese preciso orden. La señal de respuesta es digital,
puede ser alto (HIGH) o bajo (LOW), si un sensor de proximidad reconoce algún objeto
manda un pulso bajo (LOW), si el camino está libre siempre estarán en alto (HIGH).
49 49
Arduino / Hummingbird
/* --------------------Inicio de Código-------------------- */
//Se nombran variables para los sensores de proximidad izquierdo, centro y derecho
int proxizq;
int proxcen;
int proxder;
50 50
Capitulo 3
//Ciclo principal
void loop()
{
//Lectura digital de sensores de proximidad y asignación a variables
proxizq = digitalRead(4); //PIN 4 a sensor de proximidad izquierdo
proxcen = digitalRead(5); //PIN 5 a sensor de proximidad centro
proxder = digitalRead(6); //PIN 6 a sensor de proximidad derecho
if(proxizq == HIGH && proxcen == HIGH && proxder == HIGH) //Condición principal del
programa para avanzar
{
avanza(); //Indicación de avance
delay(250);
}
else
{
if(proxizq == LOW) //Caso con obstáculo a la izquierda
{
retrocede(); //Acción retroceder y girar a la derecha para librar obstáculo
delay(500);
derecha();
delay(250);
}
else
{
if(proxder == LOW) //Caso con obstáculo a la derecha
{
retrocede(); //Acción retroceder y girar a la izquierda para librar obstáculo
delay(500);
izquierda();
delay(250);
}
else
{
if(proxcen == LOW) //Caso con obstáculo al centro
51 51
Arduino / Hummingbird
{
retrocede(); //Acción retroceder y girar a la derecha para librar obstáculo
delay(500);
derecha();
delay(250);
}
}
}
}
}
//Sub-función robot en alto
void alto()
{
analogWrite(motordervel, 0);
analogWrite(motorizqvel, 0);
}
//Sub-función robot gira a la derecha
void derecha()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, LOW);
digitalWrite(motorizqdir, HIGH);
}
//Sub-función robot gira a la izquierda
void izquierda()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, HIGH);
digitalWrite(motorizqdir, LOW);
}
//Sub-función robot avanza
void avanza ()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, HIGH);
digitalWrite(motorizqdir, HIGH);
}
//Sub-función robot retrocede
void retrocede ()
{
52 52
Capitulo 3
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, LOW);
digitalWrite(motorizqdir, LOW);
}
/* --------------------Fin de código-------------------- */
Guardar: Evite perder su información, ponga algún nombre fácil de recordar, ej: “tres_ojos”.
Compilar: Corrija los errores, al hacer clic en el botón de compilar del programa de Arduino,
el cual buscará si existe algún error de sintaxis en el código antes de grabarlo en el robot
Andromie MP.
Cargar: Escriba la información al robot Andromie MP, si no hay errores en el código se graba
en la memoria interna de la tarjeta Arduino Uno.
Desconectar: Antes de usar el robot retire el cable USB de la computadora y del mismo, no
olvide que el robot tiene un compartimiento para baterías las cuales proporcionan energía
necesaria para su funcionamiento, no desconectar el cable puede dañar tanto al robot como
a la computadora.
Ejecutar: Coloque las baterías al robot, encienda, observe, tome nota y disfrute su programa
con el robot Andromie MP.
53 53
Arduino / Hummingbird
contrario están siempre en alto (HIGH), luego los criterios para tomar decisiones son
semejantes:
Estos se construyen con la estructura de control “if … else” anidada (una estructura dentro
de otra), controlando el flujo de la información en el ciclo principal “void loop()”, la sintaxis
resumida es:
if(condición_1)
{
Sentencia_1;
}
else
{
if(condición_2)
{
Sentencia_2;
}
else
{
… … … etc.
}
Finalmente, el objetivo del ejercicio es ilustrar las diversas formas para resolver alguna
problemática, tenga en cuenta las ventajas y desventajas de cada método, elija el más
conveniente a la situación.
Pero estas no son todas las herramientas, el robot Andromie MP puede percibir por
contacto, detectar cuando un objeto se aproxima, sin embargo, no ve el suelo donde se
encuentra. Esto lo aprenderá en la siguiente lección.
54 54
Capitulo 3
Teleoperación robótica
Un sistema robótico de
teleoperación es aquel que
permite manipular objetos que
se encuentran ubicados en
lugares remotos o distantes y
que pueden ser utilizados para
realizar tareas complejas.
Desde un principio el hombre
se ayudó de herramientas que
le permitieran manipular
objetos que fueran peligrosos,
el desarrollo de la robótica
trajo consigo el nacimiento de
la teleoperación, un sistema de
teleoperación permite
controlar el movimiento de un
robot ubicado en una zona
remota.
Teleoperación con exoesqueleto.
La teleoperación ha sido aplicada en diferentes campos de estudio: existen robots que son
empleados para realizar cirugías a distancia, también hay robots que ayudan a desactivar
bombas de manera remota.
Teleoperación en cirugía
55 55
Arduino / Hummingbird
En esta lección el lector reconocerá los sensores de contraste de piso del robot Andromie
MP, estudiará sobre señales analógicas de entrada y repasará lo aprendido de las
estructuras de control. Usará la función “analogRead()” para capturar los valores de los
sensores de contraste de piso y practicará con todo lo visto en las lecciones anteriores. El
lector desarrollará su habilidad de integración y organización.
Los sensores de contraste de piso son dispositivos optoelectrónicos que perciben el rebote
del espectro infrarrojo del haz de luz (no es visible a los ojos), su funcionamiento es
semejante al de sus primos en la parte superior del robot, pero éstos sí varían sus valores
dependiendo de la cantidad de energía registrada, por esta razón se utiliza señales
analógicas.
Los sensores de contraste de piso se componen por dos partes emisor y receptor. El primero
es un LED infrarrojo, es decir, despide una luz no visible para el ojo humano. El segundo es
un fototransistor que se encarga de captar los rayos del espectro infrarrojo, el cual tiene un
filtro diseñado para permitir el paso de este tipo de luz.
El robot Andromie MP tiene cuatro sensores de contraste de piso, usted los puede localizar
si gira el robot y lo observa desde la parte inferior, orientado con las antenas de los sensores
de contacto hacia arriba, están en la parte superior como lo muestra la figura 3.6.
Los sensores de contraste de piso están conectado a la tarjeta Arduino Uno, en los pins
analógicos “A0”, “A1”, “A2” y “A3”, éstos son de uso exclusivo y no se utilizan para otra
tarea. Físicamente los puede identificar como izquierdo, izquierdo-centro, derecho-centro
y derecho, en ese preciso orden.
56 56
Capitulo 3
a) b)
Figura 3.7. Efecto de reflexión
a) Con superficie opaca y b) con superficie clara.
NOTA: Para tener un mejor desempeño recuerde colocar su robot en una superficie lisa, se
recomienda crear una pista de pruebas con cartulina y cinta color negra.
El código propuesto utiliza los sensores de contacto para evitar objetos, por favor redacte
el siguiente código en un nuevo sketch:
/* --------------------Inicio de Código-------------------- */
57 57
Arduino / Hummingbird
//Ciclo principal
void loop()
{
//Lectura analógica de sensores de contraste de piso y asignación a variable
pisoizq = analogRead(A0);
pisocenizq = analogRead(A1);
pisocender = analogRead(A2);
pisoder = analogRead(A3);
//Lectura digital de sensores de contacto y asignación a variables
contactoizq = digitalRead(2);
contactoder = digitalRead(3);
//La condición principal para avanzar depende de los sensores de contraste de piso
//El robot no debe encontrarse sobre una superficie opaca para poder avanzar
//Sí el robot encuentra una superficie opaca significa que ha llegado a su destino
if(pisoizq > 512 && pisocenizq > 512 && pisocender > 512 && pisoder > 512)
{
58 58
Capitulo 3
avanza();
}
else
{
alto();
}
if(contactoizq == LOW) //Caso con obstáculo a la izquierda
{
retrocede();
delay(250);
derecha();
delay(250);
}
if(contactoder == LOW) //Caso con obstáculo a la derecha
{
retrocede();
delay(250);
izquierda();
delay(250);
}
if(contactoizq == LOW && contactoder == LOW) //Caso con obstáculo frontal
{
retrocede();
delay(250);
derecha();
delay(250);
}
}
//Sub-función robot en alto
void alto()
{
analogWrite(motordervel, 0);
analogWrite(motorizqvel, 0);
}
//Sub-función robot gira a la derecha
void derecha()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, LOW);
digitalWrite(motorizqdir, HIGH);
}
//Sub-función robot gira a la izquierda
59 59
Arduino / Hummingbird
void izquierda()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, HIGH);
digitalWrite(motorizqdir, LOW);
}
//Sub-función robot avanza
void avanza ()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, HIGH);
digitalWrite(motorizqdir, HIGH);
}
//Sub-función robot retrocede
void retrocede ()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, LOW);
digitalWrite(motorizqdir, LOW);
}
/* --------------------Fin de código-------------------- */
Guardar: Evite perder su información, ponga algún nombre fácil de recordar, ej: “buscador”.
Compilar: Corrija los errores, al hacer clic en el botón de compilar del programa de Arduino,
el cual buscará si existe algún error de sintaxis en el código antes de grabarlo en el robot
Andromie MP.
Cargar: Escriba la información al robot Andromie MP, si no hay errores en el código se graba
en la memoria interna de la tarjeta Arduino Uno.
Desconectar: Antes de usar el robot retire el cable USB de la computadora y del mismo, no
olvide que el robot tiene un compartimiento para baterías las cuales proporcionan energía
necesaria para su funcionamiento, no desconectar el cable puede dañar tanto al robot como
a la computadora.
Ejecutar: Coloque las baterías al robot, encienda, observe, tome nota y disfrute su programa
con el robot Andromie MP.
60 60
Capitulo 3
El lector se habrá percatado que en los ejemplos propuestos la estructura general no varía,
es decir, se mantiene íntegra, para ilustrarlo se escribe la siguiente sintaxis:
//Declaración de variables
//Declaración de sub-funciones
Void setup()
{
pinMode(pin , salida/entrada);
}
void loop()
{
lectura_digital = digitalRead(pin);
digitalWrite(pin , valor); //Escritura digital
lectura_analogica = analogRead(pin);
analogWrite(pin , valor); //Escritura analógica
if (condición)
{
sentencias_1;
}
else
{
sentecnia_2
}
}
//Sub-funciones
Se podría decir que este es el armazón de todos los códigos propuestos hasta el momento,
téngalo presente mientras se analiza el código fuente para la búsqueda del tesoro. Se
declaran cuatro variables para almacenar los datos suministrados por los sensores
analógicos, estos valores son interpretados por la tarjeta Arduino por un método de
aproximación numérico conocido en electrónica como convertidor analógico digital (ADC
por sus siglas en inglés), no es propósito del curso profundizar sobre el tema, se deja a
criterio del lector investigar al respecto. Para fines prácticos de la obra basta con hacer la
61 61
Arduino / Hummingbird
5 V = 1024 valores
0 V = 0 valores
5 V = 1024 valores
X = 1 valores
if(pisoizq > 512 && pisocenizq > 512 && pisocender > 512 && pisoder > 512) //El símbolo
“&&” implica el cumplimiento de la siguiente condición, en este caso las cuatro tienen que
ser verdaderas.
Resumiendo las acciones, el robot Andromie MP avanzará siempre y cuando no esté sobre
alguna área oscura, durante su recorrido los sensores de contacto estarán pendientes de
los obstáculos a su paso, tomando las decisiones ilustradas en la actividad 3, durante su
marcha el robot estará percibiendo el brillo del suelo con los sensores de contraste,
buscando la marca del tesoro “X”, si pasara por ella finaliza la búsqueda.
62 62
Capitulo 3
La exploración espacial puede ser algo emocionante pero al mismo tiempo puede ser una
tarea muy peligrosa, desde tiempos remotos el hombre ha observado las estrellas con la
ilusión de algún día poder viajar hasta ellas.
Viajar al espacio puede ser peligroso ya que no existe oxígeno ni un ambiente favorable
para el desarrollo de la vida. La astronáutica es la ciencia que estudia lo relacionado con la
tecnología y los vuelos espaciales, desde que se realizaron los primeros viajes al espacio fue
primordial crear robots que ayudaran a los humanos en las tareas de exploración.
La era espacial empezó a mediados de los años 50’s con el lanzamiento del satélite ruso
Sputnik, desde entonces el desarrollo de satélites, vehículos espaciales y robots
exploradores con tecnología cada vez más avanzada ha sido constante.
En noviembre de 2011 la NASA lanzó a Marte el robot Curiosity un robot de morfología móvil para
la exploración del planeta marciano, el robot tiene por objetivo realizar muestras del suelo del
planeta rojo, está equipado con diferentes instrumentos científicos, cámaras de alta resolución,
sensores de radiación, espectrógrafos y un brazo mecánico, además de poseer un generador con
capacidad de vida de 14 años. El Curiosity es el robot más avanzado creado por el hombre en materia
de exploración, se espera que durante los dos años de misión planeados para el robot aporte
conocimientos acerca de la existencia de agua y datos que puedan servir para la futura colonización
del planeta rojo.
63 63
Arduino / Hummingbird
Sobre el funcionamiento del sensor de proximidad ultrasónico, este aparato emite por la
bocina una señal sonora no audible para el ser humano, porque supera la frecuencia del
umbral de audición de las personas (de 20 Hz a 20 KHz), a estos sonidos por su frecuencias
se les llama ultrasónicos. Otro fenómeno acústico relacionado con el sensor es el eco, el
cual se define como el rebote de ondas sonoras en el medio, aquí entra el micrófono del
sensor, el cual capta las ondas sonoras ultrasónicas producto del rebote con algún objeto
(ver figura 3.9). ¿Le suena familiar?, posiblemente porque es semejante al funcionamiento
de los sensores optoelectrónicos vistos en lecciones anteriores.
64 64
Capitulo 3
/* --------------------Inicio de Código-------------------- */
//Declaración de variables
int distancia; //Variable tipo entera para almacenar datos del sensor de proximidad
ultrasonico
//Configuración de Módulos
void setup()
{
//Se inicia el módulo de comunicación serial
65 65
Arduino / Hummingbird
Serial.begin(9600);
//OJO
//Nota que no se declaró ningún pin como entrada o salida
//La razón es sencilla, solo se está usando el sensor de proximidad ultrasónico y la librería
"Ultrasonic.h"
//Esta librería contiene la información necesaria e inclusive configura los puertos de la
tarjeta Arduino Uno
//Por ese motivo es muy importante el orden de los pins en la instrucción del principio
//Ciclo principal
void loop()
{
//Lectura del sensor de proximidad ultrasónico
//OJO
//La función "Ultrasonic.Ranging()" proporciona la distancia en línea recta a algún objeto
enfrente del robot
//Sí usa la función "Ultrasonic.Ranging(CM)", las letras "CM" indica la unidad de conversión
en centímetros
//Sí usa la función "Ultrasonic.Ranging(INC)", las letras "INC" indica la unidad de conversión
en pulgadas
//La distancia máxima de detección del sensor ultrasónico son 50 cm
distancia = Ultrasonic.Ranging(CM); //El valor del sensor de proximidad ultrasónico se
guarda en "distancia"
Serial.print("distancia: "); //Texto que aparece en la pantalla de monitor serial a renglón
seguido
Serial.print(distancia); //Valores que aparece en la pantalla de monitor serial a renglón
seguido
Serial.println(" cm"); //Texto que aparece en la pantalla de monitor serial a renglón seguido
con salto de línea
delay(1000); //Demora de 1 segundo
/* --------------------Fin de código-------------------- */
NOTA: Para abrir la ventana del “Monitor serial”, haz doble clic en el ícono que se
localiza en la esquina superior derecha del programa Arduino, debes tener conectado el
cable USB a la tarjeta Arduino Uno del robot Andromie MP, en caso contrario ocasiona un
error de comunicación indicando ‘Puerto serial COM# no encontrado’.
66 66
Capitulo 3
Guardar: Evite perder su información, ponga algún nombre fácil de recordar, ej:
“ultrasónico”.
NOTA: Se recomienda leer la sección ¿Qué fue lo que pasó?, antes de continuar, para
aclarar el uso de librerías en lenguaje Arduino, una vez finalizada la lectura regrese a este
paso.
Compilar: Corrija los errores, al hacer clic en el botón de compilar del programa de Arduino,
el cual buscará si existe algún error de sintaxis en el código antes de grabarlo en el robot
Andromie MP.
Cargar: Escriba la información al robot Andromie MP, si no hay errores en el código se graba
en la memoria interna de la tarjeta Arduino Uno.
Desconectar: Puede omitir este paso si no requiere alimentación externa para los motores,
es decir, no activara el interruptor de encendido del robot Andromie MP. Lo anterior lo
realiza en actividades de comunicación con el monitor serial del programa de Arduino.
Ejecutar: Observe, tome nota y disfrute su programa con el robot Andromie MP.
67 67
Arduino / Hummingbird
Las librerías configuran los parámetros básicos necesarios para ocupar el nuevo hardware,
también proporcionan el canal o funciones para comunicación con él. De esta forma
simplifica el código y agregan nuevas herramientas al lenguaje de Arduino. Tal es el caso de
la librería “Ultrasonic.h”, la descarga segura la puede hacer desde la siguiente dirección web
(requiere conexión a internet):
http://ingenieriamx.wix.com/aicosoluciones
Dentro del portal diríjase a la pestaña servicios, sección de descargas, el archivo está
comprimido por lo que necesita tener instalado “winrar” en su pc, una vez terminada la
descarga, debe extraer la carpeta llamada “Ultrasonic” al interior de su computadora para
adicionar la librería al programa de Arduino, se ejemplifica la ruta:
"Mis Documentos\Arduino\libraries"
Hecho esto, todas las funciones de la librería están disponibles para usar en el código, la
primera instrucción para configurar el hardware del sensor ultrasónico es:
NOTA: debe respetar el orden al interior del paréntesis, los pins de la tarjeta Arduino Uno
siempre serán 7 y 8. Los pins disparo (bocina) y eco (micrófono) están físicamente
direccionados al sensor de proximidad ultrasónico. No respetar el orden puede causar daño
permanente en el sensor de proximidad ultrasónico.
Ultrasonic.Ranging(CM);
68 68
Capitulo 3
Esta sentencia regresa la distancia en centímetros a un objeto frente al robot Andromie MP,
los cálculos los realiza automáticamente la librería “Ultrasonic.h”, el rango de operación
efectivo es 0 a 50 cm, con error de +/- 1 cm aprox. (el sensor puede dar un mayor alcance
pero el comportamiento del robot se vuelve inestable).
NOTA: Se recomienda tener una regla a la mano para realizar comparaciones en las
mediciones del sensor de proximidad ultrasónico y los valores que aparecen en la ventana
del “Monitor serial”.
69 69
Arduino / Hummingbird
El “Monitor serial” es una herramienta muy usada para el proceso de calibración de los
sensores, permite ver el comportamiento de estos ante algún estímulo y con ello poder
determinar la acción del robot mediante alguna estructura de control, dentro de estas
mediciones se puede obtener un valor de referencia, por ejemplo, el sensor de proximidad
ultrasónico tiene un rango efectivo de 0 a 50 cm. Regresando al código en “void setup()”,
se inicializa el puerto de comunicación serial entre la tarjeta Arduino Uno y la computadora,
con la sentencia:
Compruebe los valores con ayuda de una regla, apoye el robot en la mesa de trabajo,
coloque la marca del cero por debajo del sensor de proximidad ultrasónico, ponga un objeto
sólido (la caja del robot por ejemplo), desplace sobre la regla y compare las lecturas.
70 70
Capitulo 3
El robot Da Vinci.
El robot Da Vinci es el robot quirúrgico más avanzado del mundo. Está compuesto por una
consola de comandos, una plataforma con 4 brazos robóticos y un sistema de visualización
de alta definición, este robot es un sistema de teleoperación, el cual puede realizar tareas
quirúrgicas especializadas con precisión y control.
El robot puede realizar intervenciones quirúrgicas menos invasivas en los pacientes ya que
a los brazos robóticos jamás les temblará el pulso, de esta forma puede evitar daños en el
paciente por hemorragias causadas por realizar un corte demasiado grande, una
intervención quirúrgica menos invasiva también permite que el paciente tenga una
recuperación de salud más pronta.
71 71
Arduino / Hummingbird
¿Sabía usted que el murciélago detecta a sus presas mediante sonidos ultrasónicos?, ¿sabe
cómo lo logran? Por el fenómeno de eco-localización, este mamífero volador emite por
boca o nariz una especie de chillido a una muy alta frecuencia, superior a los 20 KHz, este
sonido impacta sobre insectos (normalmente base de su alimentación), el eco producido
por las ondas sonoras regresa al murciélago y con ayuda de sus orejas las detecta, lo
fantástico es que a través de esta información el murciélago puede orientarse, medir la
distancia y distinguir a su presa (ver figura 3.12).
72 72
Capitulo 3
/* --------------------Inicio de Código-------------------- */
//Declaración de variables
int acelerador = 127;
int distancia; //Variable tipo entera para almacenar datos del sensor de proximidad
ultrasónico
73 73
Arduino / Hummingbird
//OJO
//Para no dañar el sensor de proximidad ultrasónico, los pins siempre deben estar en el
siguiente orden:
Ultrasonic Ultrasonic(7,8); //Esta instrucción indica a la librería cual es el pin disparo(7) y
pin eco (8)
//Ciclo principal
void loop()
{
74 74
Capitulo 3
75 75
Arduino / Hummingbird
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, HIGH);
digitalWrite(motorizqdir, HIGH);
}
//Sub-función robot retrocede
void retrocede ()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, LOW);
digitalWrite(motorizqdir, LOW);
}
/* --------------------Fin de código-------------------- */
Guardar: Evite perder su información, ponga algún nombre fácil de recordar, ej: “batbot”.
Compilar: Corrija los errores, al hacer clic en el botón de compilar del programa de Arduino,
el cual buscará si existe algún error de sintaxis en el código antes de grabarlo en el robot
Andromie MP.
Cargar: Escriba la información al robot Andromie MP, si no hay errores en el código se graba
en la memoria interna de la tarjeta Arduino Uno.
Desconectar: Antes de usar el robot retire el cable USB de la computadora y del mismo, no
olvide que el robot tiene un compartimiento para baterías las cuales proporcionan energía
necesaria para su funcionamiento, no desconectar el cable puede dañar tanto al robot como
a la computadora.
Ejecutar: Coloque las baterías al robot, encienda, observe, tome nota y disfrute su programa
con el robot Andromie MP.
76 76
Capitulo 3
Ahora, en el “void loop()”se debe realizar primero la lectura del sensor ultrasónico y asignar
el valor a la variable “distancia”, ¿por qué? Por el tiempo de respuesta del sensor
ultrasónico, se debe permitir al rebote del sonido regresar linealmente al micrófono, así se
previenen errores de comportamiento con el robot.
Para poder obtener este flujo de información se usa “if … else” anidado, los valores de
referencia están en centímetros para tener congruencia con la lectura, por ejemplo:
if(distancia < 50 && distancia > 15) // El símbolo “&&” es una expresión de implicación
necesaria, es decir, ambas condiciones deben ser verdaderas, de lo contrario no ejecuta la
sentencia.
Para hacer el sondeo, se apoya de las sub-funciones de movimiento, comienza quieto, por
un instante gira a la derecha y si aún no encuentra algo gira a la izquierda. En caso de
visualizar el objeto avanza directamente y al llegar a él se detiene.
ADVERTENCIA: Realice esta actividad sobre una superficie plana y firme, no trabaje sobre
la mesa pues el robot no detecta la altura y podría caer dañándose permanentemente.
Sobre los objetos que sirvan de presa deben estar hechos de preferencia con material
inanimado, no ponga al robot contra sus pies, por error podría golpearlo.
¿Disfrutó la búsqueda? Recuerde, los ejemplos propuestos son sólo un estilo para resolver
la tarea encomendada. No baje la guardia, hoy fue el depredador máximo pero en la
naturaleza también hay rivales a vencer, aprenderá a defenderse en la siguiente lección.
77 77
Arduino / Hummingbird
Robótica educativa.
¿Le agradaría que su profesor de clases fuera un robot?, seguramente sería muy
interesante. Se define a la robótica educativa como el medio de aprendizaje para desarrollar
habilidades conceptuales y físicas, donde participan personas con intereses afines al diseño
y construcción, poniendo en práctica sus conocimientos de ciencias básicas y su destreza en
el manejo de herramienta, asistidos por equipo electrónico y computacional.
78 78
Capitulo 3
El lector aprenderá a integrar los diferentes tipos de sensores del robot Andromie MP y
crear estructuras de control para tareas complejas. Repasará las diferentes funciones del
lenguaje Arduino estudiadas a lo largo de las actividades. El lector dará sus primeros pasos
en la robótica de competencia al programar su robot Andromie MP como boxeador.
Igual que los boxeadores profesionales el robot Andromie MP no puede salir del
cuadrilátero, ésta es la restricción más importante, aquí se proponen algunas reglas básicas:
79 79
Arduino / Hummingbird
Expuestas claramente las reglas del juego, pareciera muy fácil cumplir todos estos
requisitos, sin embargo, participar en un torneo no es sencillo, pueden pasar muchas cosas
al momento de la contienda. Por eso usted se anticipará, acondicionando su robot
Andromie MP con la mejor estrategia, generando la estructura de control para permitir el
mejor flujo de información y tomar las mejores decisiones.
Se debe determinar el comportamiento del robot por grado de importancia, paso a paso:
Esta secuencia lógica de casos define la táctica de desempeño del robot, y usted los
programará en el robot Andromie MP, cabe destacar que hay otros casos o eventos posibles
al momento del combate y entre más compleja sea la tarea mayor el reto de la contienda,
por ello, el método propuesto sintetiza lo más esencial para que su robot sea más fácil de
controlar y usted tenga mayor ventaja en el combate.
Para afirmar estos conceptos se propone el siguiente código ejemplo, por favor redacte el
mismo en un nuevo sketch en el programa de Arduino:
/* --------------------Inicio de Código-------------------- */
80 80
Capitulo 3
//Ciclo principal
void loop()
{
//Lectura analógica sensores de contraste de piso y asignación a variable
pisoizq = analogRead(A0);
pisocenizq = analogRead(A1);
81 81
Arduino / Hummingbird
pisocender = analogRead(A2);
pisoder = analogRead(A3);
//Lectura digital de sensores de contacto y asignación a variables
contactoizq = digitalRead(2);
contactoder = digitalRead(3);
}
//Sub-función robot en alto
void alto()
{
analogWrite(motordervel, 0);
analogWrite(motorizqvel, 0);
82 82
Capitulo 3
}
//Sub-función robot gira a la derecha
void derecha()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, LOW);
digitalWrite(motorizqdir, HIGH);
}
//Sub-función robot gira a la izquierda
void izquierda()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, HIGH);
digitalWrite(motorizqdir, LOW);
}
//Sub-función robot avanza
void avanza ()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, HIGH);
digitalWrite(motorizqdir, HIGH);
}
//Sub-función robot retrocede
void retrocede ()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, LOW);
digitalWrite(motorizqdir, LOW);
}
/* --------------------Fin de código-------------------- */
Guardar: Evite perder su información, ponga algún nombre fácil de recordar, ej:
“gladiador”.
Compilar: Corrija los errores, al hacer clic en el botón de compilar del programa de Arduino,
el cual buscará si existe algún error de sintaxis en el código antes de grabarlo en el robot
Andromie MP.
83 83
Arduino / Hummingbird
Cargar: Escriba la información al robot Andromie MP, si no hay errores en el código se graba
en la memoria interna de la tarjeta Arduino Uno.
Desconectar: Antes de usar el robot retire el cable USB de la computadora y del mismo, no
olvide que el robot tiene un compartimiento para baterías las cuales proporcionan energía
necesaria para su funcionamiento, no desconectar el cable puede dañar tanto al robot como
a la computadora.
Ejecutar: Coloque las baterías al robot, encienda, observe, tome nota y disfrute su programa
con el robot Andromie MP.
El código inicia de forma similar a los anteriores ejemplos, se declaran variables para
controlador de motores, sensores de contacto y sensores de contraste de piso, también la
variable global de control de velocidad. En “void setup()” se configuran entradas y salidas
digitales, y comienza por un breve momento en estado de reposo.
Luego en “void loop()” primero hace una lectura de todos los sensores de contraste de piso
y sensores de contacto, ajusta una velocidad media para comenzar la búsqueda del
oponente, el sistema está pendiente del límite del área de combate con la estructura “if”,
su condicional prioritaria depende de los sensores de contraste de piso para notar el borde
de la plataforma de combate, se explica su escritura:
if(pisoizq < 512 || pisocenizq < 512 || pisocender < 512 || pisoder < 512)
El símbolo “||” implica independencia en las condicionales, es decir, con solo cumplir una
es razón suficiente para ejecutar la sentencia, se usa el operador lógico de desigualdad
menor que “<” para realizar la comparación con el valor de referencia, 512 fue calculado
para una superficie con reflejo moderado como el suelo, si tiene algún inconveniente puede
hacer el ajuste con el proceso de calibración visto en la actividad 6.
¿Qué implica esta comparación?, si existe algún registro menor al umbral indicado por 512,
significa que el robot está llegando al borde del área de combate y la sentencia inmediata
es retroceder y girar a la derecha por convención de navegación. Con esto se cumple el
primer postulado para el comportamiento del robot Andromie MP.
El robot Andromie MP, hará un barrido sobre toda la arena para buscar a su adversario
utilizando las antenas conectadas a los sensores de contacto, si alguna llega a ser tocada
por el oponente, el robot gira en el mismo sentido para tenerlo de frente y arremeter contra
84 84
Capitulo 3
él a máxima potencia. Aquí se consuma el segundo postulado para el buen desempeño del
robot.
NOTA: La estructura “if” no crea lazos forzosos con otras sentencias como lo ejerce la forma
“if … else”, porque sus casos son aislados e independientes del resto del programa,
permitiendo una respuesta más rápida.
NOTA: Si no cuenta con otro robot puede usar algún objeto del mismo tamaño del robot
Andromie MP, a manera de sparring para practicar, un ejemplo sería la caja contenedora
del robot Andromie MP.
¿Siente la adrenalina correr por sus venas?, es normal cuando se trata de torneos
deportivos, y aunque se deje todo en el evento se debe recordar cómo regresar a casa, pero
eso lo descubrirá en la próxima lección.
85 85
Arduino / Hummingbird
El futuro de la robótica.
Hay muchos investigadores trabajando sobre robots y fines prácticos, por citar algunos
ejemplos, considere a “Asimo” robot humanoide fabricado por Honda el cual posee
movimientos biomecánicos muy similares a los del ser humano; también se encuentra “Ask
Nao” desarrollado por Aldebaran Robotics, el cual tiene por objetivo de ayudar a niños
autistas por medio de juegos y aplicaciones para llamar la atención de los pequeños,
mejorando su sociabilidad.
La robótica es hoy en día lo que el fuego para los primeros hombres, es la llave del progreso
de la humanidad. Existen un sinfín de posibilidades y hoy tiene en sus manos ser parte de
esas posibilidades de crecimiento y desarrollo.
86 86
Capitulo 3
Tal vez a usted haya tenido un día muy difícil en la escuela, un examen sorpresa,
posiblemente se desveló por hacer la tarea o simplemente tuvo clases de matemáticas y se
siente completamente agotado, su único pensamiento es volver a casa y descansar. Pero
para poder hacerlo tiene que guardar suficiente energía para realizar el viaje a su hogar de
lo contrario podría desmayarse.
Algo similar le pasa a su robot Andromie MP, recuerde que su robot usa una fuente de
energía limitada, aún no se fabrican generadores de energía auto regenerativos como en la
ciencia ficción, imagínese estar en medio de la competencia de robótica más importante de
la historia y no tener energía para continuar. En la ilustración propuesta, al regresar a casa
usted mide inconscientemente la cantidad de energía utilizada, por ejemplo, en lugar de
correr apresurado, camina tranquilamente.
Piense en sus clases de física, escuchó sobre la ley de la conservación de la energía: “La
energía no se crea ni se destruye solo se transforma”. Justamente de esto hablamos, su
robot Andromie MP emplea 6 baterías AA para generar una fuente de energía de corriente
directa de 9 V, alimentando a todas las partes de su robot (sensores, motores, LEDs y tarjeta
Arduino Uno), usted no lo percibe pero esa energía internamente se trasforma en corriente,
luz, fuerza mecánica, calor, etc. Por lo tanto llega un momento de extenuación en las
baterías, tal que no proporcionan los 9 V iniciales.
¿Nota cómo ha ido desarrollando todas estas habilidades?, es momento de integrar todos
sus conocimientos, para este proceso se propone el siguiente código:
87 87
Arduino / Hummingbird
/* --------------------Inicio de Código-------------------- */
//Se nombran variables para los sensores de proximidad izquierdo, centro y derecho,
int proxizq;
int proxcen;
int proxder;
//Se nombra variables para los sensores de contacto izquierdo y derecho,
int contactoizq;
int contactoder;
//Declaración de variables
int acelerador; //Para control de velocidad
int distancia; //Para determinar distancia
88 88
Capitulo 3
//Entradas digitales
pinMode(4,INPUT); //pin 4 para sensor de proximidad izquierdo
pinMode(5,INPUT); //pin 5 para sensor de proximidad centro
pinMode(6,INPUT); //pin 6 para sensor de proximidad derecho
pinMode(2, INPUT); //pin 2 para sensor de contacto izquierdo
pinMode(3, INPUT); //pin 3 para sensor de contacto derecho
//Ciclo principal
void loop()
{
do//Ciclo principal para la búsqueda "do... while"
{
//Lectura del sensor de proximidad ultrasónico
distancia = Ultrasonic.Ranging(CM); //El valor del sensor de proximidad ultrasónico se
guarda en "distancia"
if(contactoizq == HIGH && contactoder == HIGH) //Condición principal del programa para
avanzar
89 89
Arduino / Hummingbird
{
avanza();
delay(250);
}
else
{
if(contactoizq == LOW) //Caso con obstáculo a la izquierda
{
casa(); //Sub-función para preguntar si el robot encontró la caja
delay(500);
retrocede();
delay(500);
derecha();
delay(500);
}
else
{
if(contactoder == LOW) //Caso con obstáculo a la derecha
{
casa(); //Sub-función para preguntar si el robot encontró la caja
delay(500);
retrocede();
delay(500);
izquierda();
delay(500);
}
else
{
if(contactoizq == LOW && contactoder == LOW) //Caso con obstáculo frontal
{
casa(); //Sub-función para preguntar si el robot encontró la caja
delay(500);
retrocede();
delay(500);
derecha();
delay(500);
}
}
}
}
}while(acelerador > 0); //Sólo se realiza el ciclo de búsqueda hasta encontrar la caja
alto();
delay(500);
}
90 90
Capitulo 3
}
}
//Sub-función robot en alto
void alto()
{
analogWrite(motordervel, 0);
analogWrite(motorizqvel, 0);
}
//Sub-función robot gira a la derecha
void derecha()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, LOW);
digitalWrite(motorizqdir, HIGH);
}
//Sub-función robot gira a la izquierda
void izquierda()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, HIGH);
digitalWrite(motorizqdir, LOW);
}
//Sub-función robot avanza
void avanza ()
{
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, HIGH);
digitalWrite(motorizqdir, HIGH);
}
//Sub-función robot retrocede
void retrocede ()
{
91 91
Arduino / Hummingbird
analogWrite(motordervel, acelerador);
analogWrite(motorizqvel, acelerador);
digitalWrite(motorderdir, LOW);
digitalWrite(motorizqdir, LOW);
}
/* --------------------Fin de código-------------------- */
Guardar: Evite perder su información, ponga algún nombre fácil de recordar, ej:
“regresando”.
Compilar: Corrija los errores, al hacer clic en el botón de compilar del programa de Arduino,
el cual buscará si existe algún error de sintaxis en el código antes de grabarlo en el robot
Andromie MP.
Cargar: Escriba la información al robot Andromie MP, si no hay errores en el código se graba
en la memoria interna de la tarjeta Arduino Uno.
Desconectar: Antes de usar el robot retire el cable USB de la computadora y del mismo, no
olvide que el robot tiene un compartimiento para baterías las cuales proporcionan energía
necesaria para su funcionamiento, no desconectar el cable puede dañar tanto al robot como
a la computadora.
Ejecutar: Coloque las baterías al robot, encienda, observe, tome nota y disfrute su programa
con el robot Andromie MP.
En “void setup()” se configuran los pins de la tarjeta Arduino Uno para que actúen como
entradas o salidas digitales, además se incluye la función “alto” como estado inicial del
robot Andromie MP.
92 92
Capitulo 3
Más adelante en “void setup()”, se determina el flujo de información para los diferentes
estados de comportamiento del robot Andromie MP, se hace una pausa para definir
conceptualmente la actividad del robot, retomando la analogía de una persona cansada, el
robot Andromie MP debe ahorrar energía, para lograr este cometido se regulará la
velocidad para desplazamiento entendiendo a los motores como consumidores primarios
de energía lo cual significa que es el único dispositivo al cual se le debe limitar el consumo
de energía, en otras palabra no hay otro elemento electrónico para ajustar su nivel de
energía. Por lo tanto, el robot Andromie MP, hará las actividades siguientes:
Para la búsqueda, usted aprenderá una nueva estructura de control “do … while”, se trata
de un subciclo condicionado de operación, en principio es similar a “void loop()”, porque se
repite varias veces, sin embargo lo hace hasta el incumplimiento de su condición, su sintaxis
se escribe:
do
{
Sentencia;
Actualizar_condición;
} while (condición)
Esta estructura en el código ejemplo contiene todas las rutinas, implica si la condición del
subcliclo “do … while” deja de cumplirse se finaliza por completo la búsqueda, hasta
reiniciar el ciclo “void loop()”. Su condición depende de la variable “acelerador” el cual se
actualiza al interior del subciclo “do … while”.
Para lograrlo, se usa el sensor de proximidad ultrasónico, ¿por qué?, si hay un obstáculo
frente al robot no debe avanzar a la máxima potencia pues chocaría y toda la energía usada
se desperdiciaría. Lo correcto es aminorar la marcha, dando tiempo a los sensores de
93 93
Arduino / Hummingbird
Se toma de base una velocidad baja con el valor 100 únicamente adicionando el valor de la
variable “distancia”, y al final solo se asigna a la variable “acelerador”, recuerde que es solo
un ejemplo, usted puede trabajar con su propias formulaciones. Casi de manera autónoma
el robot Andromie MP, decide la velocidad proporcionalmente, en otras palabras a mayor
distancia mayor velocidad, y viceversa, a menor distancia menor velocidad.
La estructura “if … else”, se aplica para controlar el flujo de información y enmarcar todos
los casos eventuales al topar con algún objeto. Con esta toma de decisiones se cumple el
tercer aspecto de las actividades a realizar por el robot Andromie MP.
Se destaca que dentro de la estructura “if” existe una nueva sub-función llamada “casa()”
usada para distinguir la caja contenedora del robot, esta sub-función se creó para no realizar
una lectura en cada caso de los sensores de proximidad (encomendados a la tarea de buscar
la caja). Sus sentencias son:
void casa()
{
if(proxizq == LOW || proxcen == LOW || proxder == LOW) //Condición para encontrar caja
{
acelerador = 0; //Si el robot llego a casa se detiene por completo
alto();
delay(500);
}
}
La lectura de sensores se hace solo al principio del subciclo “do … while”. Dando a entender
que el robot debe llegar y detectar la caja con los sensores de contacto, al llamar a la sub-
función “casa()”, es como preguntar ¿realmente es mi casa? Si la respuesta es verdadera,
cualquier sensor de proximidad cumple la condición, detiene el avance, caso contrario
continúa la búsqueda. Abarcando así la cuarta actividad, reconocer la caja y finalizar la
tarea.
94 94
CAPÍTULO 4
95 95
Arduino / Hummingbird
96 96
Capitulo 4
Programando en “Snap!”
Mediante la utilización del programa “BirdBrain Robot Server”, se permite que el módulo
“Hummingbird” sea controlado desde el interior de “Snap!”. Este capítulo describe la
instalación de la utilidad, la apertura de “Snap!” y la programación del módulo
“Hummingbird” en “Snap!”.
Instalación en Windows.
Ejecutando “Snap!”
97 97
Arduino / Hummingbird
NOTA: La caja de verificación para “Open Snap! locally” permite ejecutar “Snap!” si no hay
una conexión de internet activa. La aplicación comprueba al iniciar si hay una conexión con
el sitio web de “Snap!” y automáticamente se marca si no encuentra alguna conexión.
Nos enfocaremos en explicar cómo usar el módulo “Hummingbird” que hemos añadido a
“Snap!”.
Los módulos “Hummingbird” están distribuidos entre las categorías de “Motion”, “Looks” y
“Sensing” de “Snap!”.
Hummingbird Servo: Ajuste de servos de 1 hasta 4 con valores desde 0 hasta 180
grados.
Hummingbird Motor: Ajuste de motores de 1 hasta 2 con valores desde -100 hasta
100.
Hummingbird Vibration: Ajuste de motores de vibración de 1 hasta 2 con valores
de intensidad desde 0 hasta 100.
98 98
Capitulo 4
Hemos agregado un bloque más a las librerías de bloques del “Hummingbird”. Ésta es
llamada “Say This” y hará que la computadora pronuncie el texto que se coloque en el
espacio de la caja de texto. Está en la categoría “Snap! Sound”.
“Snap!” prevé tres diferentes maneras para guardar un proyecto; depende de usted cuál
usar, son:
Para acceder al menú de archivo y guardar, da clic en el botón archivo en la esquina superior
izquierda. Si tú elijes “Save” o “Save as” abrirás una ventana desde la cual puedes elegir
entre guardar el archivo localmente o en la nube. Para crear un archivo *.xml en su lugar,
haga clic “Export Project”. Para cargar un proyecto desde la memoria caché del navegador
o desde la nube, da clic en “Open”. Para abrir un proyecto desde un archivo *.xml, da clic
en “Import” y navegar a la ubicación de tu archivo *.xml.
99 99
Arduino / Hummingbird
CAPÍTULO 5
100 100
Capitulo 5
“Hummingbird”
Te has preguntado alguna vez, ¿Cómo es que un terremoto se manifiesta en una ciudad o
pueblo? ¿Qué tipo de efectos tiene sobre los edificios o casas? Simularemos un terremoto
en una pequeña ciudad (ver figura 5.1), para hacerlo debemos contar con el siguiente
material.
101 101
Arduino / Hummingbird
Procedimientos:
102 102
Capitulo 5
En la figura 5.2, se muestran las conexiones entre cada uno de los bloques para el desarrollo
de la práctica.
103 103
Arduino / Hummingbird
Si las conexiones de los bloques han sido correctas, al presionar la tecla espaciadora de tu
computadora, el sistema hará una repetición de 10 momentos iguales, haciendo que los
servomotores se muevan de 0 grados a 180 grados consiguiendo que el tornillo colocado
en el volante, empuje por uno de los costados del cartón flotante, al terminar el recorrido
espera 1 segundo y regresa a su posición original, es decir se le indica que vaya de 180
grados a 0 grados y espere un segundo, el siguiente par de instrucciones indican que los
motores eléctricos deben comenzar a girar con el valor máximo de 100 que equivale a la
velocidad máxima a la que pueden hacerlo, ya que se acomodaron con la finalidad de
empujar el cartón hacia arriba, lo llevan a cabo con ayuda del clip acoplado en su eje. La
siguiente instrucción envía un mensaje sonoro que dice “Earthquake”. Al finalizar los 10
ciclos, las cuatro instrucciones regresan los motores a sus condiciones iniciales, en el caso
de los servomotores se regresan a cero grados de posición y para los motores eléctricos se
detienen.
104 104
Capitulo 5
105 105
Arduino / Hummingbird
¿Ha escuchado de sacarle jugo al sol? No, bueno no sería de extrañar, estas palabras se
refieren a obtener el máximo provecho de la energía proveniente del sol, tal vez haya oído
hablar sobre celdas solares, sistemas ahorradores de electricidad o fuentes alternativas de
energía, son algunos esfuerzos por beneficiarnos del sol. Ha inspirado a personas para crear
equipos capaces de controlar la iluminación de un edificio con el fin de minimizar el
consumo eléctrico, todo con ayuda del sol.
Usted diseñará un sistema ahorrador de energía eléctrico, se hará paso a paso, por favor,
busque los materiales enlistados a continuación:
Procedimiento:
106 106
Capitulo 5
107 107
Arduino / Hummingbird
Una vez realizada las conexiones con la tarjeta Hummingbird, se procede a conectar a la
computadora, se abre el entorno Snap, los bloques utilizados serán los siguientes:
La lógica es la siguiente, al hacer clic en la bandera de inicio, se realiza la lectura del sensor
de luz para poder seleccionar una acción de cuatro casos o eventos totales. Recuerde que
tratamos de ahorrar energía, por lo tanto los casos referidos son la cantidad de luz
despedida por el LED en el borne 4, si hay luz de sol no es necesario encender el LED, y
conforme anochece el LED incrementa su intensidad, minimizando la pérdida de
electricidad, muy semejante a los faros en vías públicas. Cada evento compara los niveles
del sensor de luz dentro de los rangos preestablecidos de operación, esto se logra
combinando los bloques “si”, “<”, “>”, “=”, “y” y “o”.
un cambio proporcional al valor del sensor rotatorio. Este tipo de sistemas es muy común
en las casas con principios de domótica. Toda esta actividad se realiza al instante, por éso
se anida todo en un bloque “por siempre”, para repetirse infinitamente.
Así de simple es sacar el mayor beneficio a nuestro gran amigo el sol y con ello minimizar el
impacto al medio ambiente por la generación de electricidad.
Por esta razón, se han tomado acciones directas para tratar de optimizar el uso de los
recursos energéticos, desde la búsqueda de nuevas fuentes de energía renovable libre de
109 109
Arduino / Hummingbird
contaminantes hasta concientizar a la sociedad para cambiar sus hábitos de consumo. Una
sociedad más conciente es la base para un cambio global, surgiendo la pregunta ¿Por qué
es importante ahorrar energía? Si la gente gasta menos energía, disminuye la presión de
aumentar el suministro de construir centrales de energía nuevas, o de importar energía. Por
consiguiente, ¿Cómo podemos ahorrar energía? Son varias las formas, a continuación se
enlistan algunas:
110 110
Capitulo 5
Material a utilizar:
Procedimiento:
111 111
Arduino / Hummingbird
Una vez realizada las conexiones con la tarjeta Hummingbird, se procede a conectar la
tarjeta a la computadora, se abre el entorno Snap, los bloques utilizados serán los
siguientes:
En la figura 5.6, se muestra el código fuente empleado y las conexiones de cada uno de los
bloques
112 112
Capitulo 5
- El punto de congelación, una solución de hielo o nieve y sal (el cual era el punto de
congelación más bajo que se podía obtener en esa época).
- Un punto correspondiente a la temperatura del ser humano
Ferenheit dividió en 96 partes iguales la distancia entre éstas 2 escalas obtenidas, ajustó la
medición para que la escala de congelación del agua fuera 32 °F y la temperatura de
ebullición del agua fuera de 212 °F.
En 1740 el científico Anders Celcius desarrolló una escala llamada centígrada debido a que
esta escala estaba dividida en 100 partes iguales, el punto de fusión del hielo le fue asignado
0 y 100 al punto de ebullición del agua. En 1948 el término grado centígrado fue
reemplazado por grado Celcius, también fue la escala utilizada en el Sistema Métrico
Decimal.
113 113
Arduino / Hummingbird
Pese a ser bien conocida la escala, en la cual se asigna el valor más bajo como de 0 °C, y 100
°C a la temperatura de ebullición del agua, inicialmente Ander Celcius no la propuso así, él
tomó 0° para asignar el punto de ebullición del agua y 100° para el congelamiento del agua,
fue en 1745, un año después de la muerte de Celcius fue que el explorador y botánico Carlos
Linneo cambió la escala al revés, asignando 0° al punto de congelación del hielo y 100° al
punto de ebullición del agua, lo cual resultó que fuese mucho más práctica (ver figura5.7).
114 114
Anexo
ANEXO A
Instalación de Controladores
- Dé clic en el menú Inicio, Panel de Control, Sistema y seguridad, Sistema. Una vez
que se abrió la ventana de Sistema, abra el Administrador de dispositivos.
- En el menú de la ventana de Administrador de dispositivos, la tarjeta Arduino Nano
aparece en la sección desplegable “Otros dispositivos” como “FT232R USB UART”
- Dé clic con el botón derecho del mouse en la opción “FT232R USB UART” y escoja la
opción “Actualizar software del controlador”
- En la siguiente ventana elija la opción “Buscar software del controlador en el
equipo”.
115 115
Arduino / Hummingbird
116 116