Manual de Actividades Con ArduinoBlocks y El Robot Imagina 3dbot Arduino - Castellano PDF
Manual de Actividades Con ArduinoBlocks y El Robot Imagina 3dbot Arduino - Castellano PDF
Índice
Introducción ...................................................................................................................................................... 4
¿Cómo funciona un robot? ................................................................................................................................ 5
ArduinoBlocks .................................................................................................................................................... 6
ArduinoBlocks y el robot Imagina 3dBot Arduino ............................................................................................. 7
Tabla de entradas y salidas utilizadas ............................................................................................................... 9
Material ............................................................................................................................................................. 9
Material opcional............................................................................................................................................. 10
Herramientas ................................................................................................................................................... 11
Preparativos: montaje de la placa ................................................................................................................... 12
Preparativos: instalación de los drivers y programas...................................................................................... 13
Programación Arduino con ArduinoBlocks...................................................................................................... 14
Actividades con la placa Imagina Arduino ....................................................................................................... 17
A01. – Encender un LED ......................................................................................................................... 17
A02. – Encender un LED con el pulsador ............................................................................................. 19
A03. – Medir la luminosidad con LDR ................................................................................................... 22
A04. – Medir la temperatura con NTC ................................................................................................... 25
A05. – Mide distancias (sensor ultrasonidos HC-SR04) .................................................................... 28
A06. – Generador de notas musicales con el zumbador.................................................................... 30
A07. – Funciones ...................................................................................................................................... 31
A08. – Dando expresión al robot ............................................................................................................ 34
A09. – Alarma de intrusos (sensor PIR) ................................................................................................ 37
A10. – Controlar un servomotor ............................................................................................................. 38
Actividades con el Imagina 3dBot Arduino completo ..................................................................................... 39
Preparativos: montaje completo del robot Imagina3dBot ................................................................... 39
A11. – Controlar un motor CC ................................................................................................................ 44
A12. – Controlar dos motores CC .......................................................................................................... 46
A13. – Control del robot con un encoder (codificador rotatorio)........................................................ 52
A14. – Control del robot con infrarrojos................................................................................................. 54
A15. – Robot seguidor de líneas ............................................................................................................ 61
A16. – Control del robot por bluetooth................................................................................................... 65
Introducción
En este manual os proponemos una serie de actividades relacionadas con la robótica educativa
utilizando el robot Imagina 3dBot Arduino.
El objetivo de este manual es el de proporcionar unas actividades guiadas para aprender a
programar de una manera entretenida y divertida.
La placa Arduino Uno, placa en que está basado el robot Imagina 3dBot Arduino, se programa con
un lenguaje de programación tipo texto que se llama “C++”, pero en este manual se explicará cómo
hacerlo con ArduinoBlocks, un lenguaje de programación visual basado en bloques.
El portal es www.arduinoblocks.com.
Los robots funcionan de forma similar a nosotros. Cuando nuestro cerebro recibe información de
los sentidos (oído, olfato, gusto, vista y tacto), analiza esta información y da estímulos a las cuerdas
vocales para emitir sonido u órdenes a los músculos para que se muevan. Los 5 sentidos equivalen
a entradas de información y, la voz y los músculos serían las salidas sonoras y motrices.
En el caso de un robot, un chip hace la función de cerebro. Este chip se llama microcontrolador y
tiene unas entradas de información donde se conectan los sensores de luz (LDR), temperatura (NTC),
sonido… y también tiene salidas, donde se conectan los motores, LEDs…
La diferencia principal es que, así como nuestro cerebro ya sabe lo que tiene que hacer porque lo
ha aprendido a lo largo de nuestra vida a base de estímulos positivos y negativos, el robot tiene su
memoria vacía, es decir, no sabe lo que debe hacer. Entonces nosotros tenemos que decirle como
tiene que actuar en función de las señales que recibe de los sensores. ¡A esta acción se le llama
programar!
ArduinoBlocks
ArduinoBlocks es un lenguaje de
programación gráfico por “Bloques” creado por
Juanjo López. Está pensado para que niños y
niñas aprendan a programar con placas
Arduino a partir de los XX años.
Los distintos bloques sirven para leer y escribir
las distintas entradas y salidas de la placa, así
como programar funciones lógicas, de control,
etc.
En este manual usaremos un menú dedicado solo al Imagina 3dBot Arduino, con estos bloques
conectaremos con las entradas y salidas de la placa Arduino Uno a través del Shield Imagina
Arduino, que entre otras cosas permite adquirir valores de temperatura, luminosidad y controlar el
printbot (robot impreso con tecnología 3D) llamado Imagina 3dBot.
Seleccionaremos “Nuevo
proyecto” y “Iniciar un
proyecto personal”.
Nunchuck
Zumbador
Receptor IR
Alimentación
Power Bank y
entrada de datos
Interruptor
ON/OFF
NTC
Alimentación con
pilas 6V LDR
Ubicación de componentes
Además, tenemos pulsadores, leds y otros elementos ya incorporados para poder practicar sin
necesidad de ningún montaje extra.
A0 Zumbador D0 Bluetooth RX
A1 Sensor de línea fotoeléctrico, sensor D1 Bluetooth TX
PIR, servo o cualquier otro sensor
A2 Sensor de luz (resistencia LDR) D2 Sensor Ultrasonidos
Pulsador
A3 Sensor de temperatura D3 Diodo LED verde
(resistencia NTC) Emisor infrarrojo
A4 D4 Sensor Ultrasonidos
En la segunda parte, con el robot totalmente montado; descubriremos como transferir el programa
creado por nosotros al robot, para poder desconectar el cable de datos USB y que este actúe según
las indicaciones que le hemos dado.
Material
Material opcional
Herramientas
Para programar la placa Imagina Arduino a través de la placa Arduino Uno Rev3 con el programa
online ArduinoBlocks, necesitaremos instalar un pequeño programa disponible en la sección de
“Enlaces”. Se trata de ArduinoBlocks Connector.
*En caso de que no nos reconociera la placa, como paso opcional podemos descargar e instalar el
programa oficial Arduino IDE para que se instalen los drivers necesarios, ni tan si quiera es
necesario ejecutarlo.
Será necesario validar la cuenta en el correo recibido en nuestra dirección de correo (sin no aparece
en “Bandeja de entrada”, revisar la carpeta “Spam” o “Correo Basura”) y validar clicando sobre el
link recibido.
Seguidamente ya podremos “Iniciar sesión”.
Esta opción nos presentará los menús necesarios para poder programar nuestro robot de forma
fácil y sencilla con las funciones preparadas expresamente para el Imagina 3dBot Arduino.
A continuación, vamos a aprender a usar las herramientas básicas para trabajar con nuestro robot.
Os proponemos una serie de actividades para aprender, paso a paso, cómo funcionan los sensores
de vuestro robot, incorporados en la placa, para más adelante montar el robot completo y darle
“vida”.
El led se enciende totalmente introduciendo un 255 en la parte derecha del bloque. Para apagarlo
basta con poner un 0. También se puede variar la intensidad de brillo. Para ello, cualquier valor
entre 0 y 255 hará que el brillo del led aumente proporcionalmente hasta llegar a su máximo en 255.
A01_01 Encender mi primer led:
Tras cargar este programa, el led verde deberá permanecer encendido constantemente. Si es así,
tienes bien conectada la placa y has conseguido cargar tu primer programa. ¡Seguimos!
A01_02 Juego de luces con el bloque “Esperar”.
El bloque “Esperar” lo podemos encontrar en el apartado “Tiempo”. Se corresponde con el famoso
“Delay”. Lo que hacemos al insertar un bloque de “Esperar”, es dejar el robot en el estado en el que
estaba justo antes de la espera, durante el tiempo que ésta dure.
Cuidado porque el tiempo usado en este bloque está en milisegundos, por lo que para esperar por
ejemplo medio segundo, tendremos que introducir un 500.
Programa ejemplo:
Con este programa conseguimos que el led verde parpadee con una frecuencia de 1 segundo de
encendido y apagado. Puedes probar a cambiar tiempos e introducir más leds, así como a variar su
intensidad de brillo.
El problema de la función “Esperar” es que deja la placa bloqueada en el estado anterior durante
ese tiempo de espera, es decir, no recibe ni envía nuevas órdenes en ese tiempo. Es por esto que,
en ciertos casos, es más conveniente utilizar el bloque “Ejecutar cada” que veremos en futuros
apartados.
LED Verde
Pulsador
En este ejercicio ya empezamos a utilizar funciones del menú “Lógica” con las funciones de
condición.
Condiciones “Si…hacer”.
Se trata del famoso bucle Si (if en inglés) que es uno de los pilares de la programación, ya que
permite evaluar estados y tomar decisiones en consecuencia.
Funciona como una oración condicional en español, si se cumple la condición incluida en su primer
apartado, entonces se realiza la acción incluida en su segundo aparado. En caso contrario, no se
hace nada.
Programa A2_01:
En el siguiente programa hacemos que al pulsar el botón se encienda el led.
Ampliando el condicional.
Haciendo clic sobre el símbolo del engranaje señalado con la flecha roja en la imagen inferior, nos
aparece un cuadro con funciones con las que podemos ampliar el condicional “Si”.
Hay dos opciones que se consiguen arrastrando los bloques como se aprecia en las siguientes
imágenes:
Veremos ejemplos del uso de estas variantes a lo largo de diferentes programas en este documento.
Pero siguiendo con el ejemplo del led, realizaremos un programa que al pulsar el botón se
encenderá el led durante un segundo, si no se pulsa, se apagará.
A02_02 Ampliando el condicional.
Comprobad su funcionamiento.
Anteriormente hemos comentado que existe la función “Ejecutar cada”, aprovecharemos esta
función junto con la función “Enviar” para ver los datos del sensor de luminosidad en la pantalla del
ordenador.
Pero antes de hacer el ejercicio vamos a ver las distintas funciones poco a poco.
- Gestión de tiempos con el bloque “Ejecutar cada”.
Encontramos el bloque en la sección “Tiempo”. Este bloque ejecuta una
vez cada X tiempo las órdenes que estén dentro de él. Cuidado porque
NO detiene el programa en el estado anterior a él, como si hace el bloque
“Esperar”.
Junto con “Enviar”, es una función muy útil para imprimir datos en el ordenador. Vamos a verlo con
un ejemplo en el siguiente apartado, en el que aprendemos a enviar datos desde el Imagina 3dBot
Arduino al ordenador.
- Imprimir en el puerto serie (enviar datos al ordenador).
En la sección “Puerto serie” tenemos el bloque “Enviar”, mediante el que mandamos valores a la
pantalla del ordenador.
Podemos enviar cualquier orden o dato que queramos solo con introducirlo en el espacio en blanco
entre comillas del bloque.
Programa ejemplo:
Con este programa lo que hacemos es enviar a la pantalla del ordenador la palabra “Innova Didactic”
una vez por segundo (1000 ms).
Hay que destacar que, si no usamos el bloque “Ejecutar cada”, enviamos al ordenador un dato
cientos de veces por segundo, lo que satura la comunicación y bloquea el sistema. De ahí la
importancia de este bloque.
También podríamos usar el bloque “Esperar” para enviar datos cada segundo, pero entonces, en
los tiempos de espera, el robot no podría escuchar otras órdenes ni realizar otras acciones.
Tranquilos, veremos todo esto más adelante con calma… ¡y con más ejemplos!
Ahora vamos a aplicar estos dos conceptos para leer los valores del sensor LDR incorporado en la
placa.
En esta actividad se pretende que cuando oscurezca se encienda el LED
amarillo, como si de una sonda crepuscular se tratara.
Sensor LDR
Para hacerlo vamos a utilizar el bloque de la LDR (Resistencia Dependiente de la Luz) como dato
para enviar a la pantalla del ordenador.
Introducimos el siguiente programa y abrimos la consola:
Comprobad su funcionamiento.
Vemos cómo cambia de valor si tapamos el sensor con el dedo y nos permite saber el valor con luz
ambiental o a oscuras.
¿Cómo podríamos hacer para que se active el LED amarillo a partir de cierto nivel de luz?
Las variables son elementos muy comunes en programación. Básicamente, crear una variable es
darle un nombre a un dato o a una lectura. Por ejemplo, las mediciones de valores de temperatura
las podemos guardar en una variable que se llame “Temperatura”. No es obligatorio su uso, pero
nos permiten trabajar más cómodamente, además, como podemos personalizar su nombre, ayudan
a clarificar el código y utilizar un lenguaje más natural.
Al trabajar con variables vamos a tener dos tipos de bloques principales:
1. El bloque en el que le damos valor a la variable:
2. Y el bloque de la propia variable creada, para poder insertarla y combinarla con otros
bloques:
Una vez creada la nueva variable, podemos seleccionarla haciendo clic sobre el desplegable:
Ten en cuenta que las variables solo pueden estar formadas por una palabra. Si quieres incluir
varias palabras, puedes usar el truco de separarlas con una barra baja “_”, como en el ejemplo,
Valor_Temperatura.
Usaremos el mismo procedimiento para descubrir el
valor de la Temperatura como hemos hecho con el
valor de Luminosidad.
En el caso que se adjunta, vemos que el valor
ambiental es sobre el 24 y cogiendo el sensor de
temperatura con los dedos, sube más de 25.
Así que ya estamos listos para hacer nuestro detector de incendios, se activará el led cuando
sobrepasemos un valor determinado.
Con la instrucción “Distancia”, utilizando las variables y la opción de enviar datos a la pantalla del
ordenador realizaremos un programa donde podremos jugar con la distancia.
Vemos en el programa que la frecuencia con la que se realiza cada ciclo, que equivale a la
frecuencia con la que damos cada pitido, depende directamente de la distancia del 3dBot al objeto.
A05_03: Sensor de distancias
En el programa anterior hay un inconveniente, y es que el robot siempre va a pitar, aunque el objeto
que esté delante se encuentre a mucha distancia. Ahora vamos a poner una nueva condición para
que este pitido solo comience cuando el objeto esté a una determinada distancia mínima. Para el
ejemplo que se propone, se ha probado con 20cm, pero, igual que antes, podéis ajustarlo como
queráis.
A07. – Funciones
Una función es simplemente un conjunto de instrucciones a las que damos un nombre, para no
tener que repetirlas en diferentes partes del programa y para clarificar y ordenar el código. Al crear
una función, se genera automáticamente un bloque de dicha función, que ya puede ser insertado
en cualquier parte del programa.
Para ello, tenemos que usar el bloque “para” que encontramos en el apartado “Funciones” de
ArduinoBlocks.
Primero tenemos que darle un nombre a la función, e incluir dentro de la misma, el conjunto de
instrucciones que queremos que realice el robot cada vez que la usemos.
Por ejemplo, podemos definir una función con el nombre “Luz 1”
cuya finalidad sea encender el led verde y apagar el amarillo y el
rojo.
Si ahora vamos a la sección “Funciones” del panel izquierdo de
ArduinoBlocks, encontraremos ya la nueva función creada,
disponible para ser seleccionada e insertada en cualquier parte
del código.
Es importante destacar que las funciones no se definen dentro del “Bucle”. Se crean fuera y luego
se insertan dentro en los momentos en los que queramos que se ejecuten.
Cuando creamos un programa pequeño (de pocos bloques), no suele merecer la pena definir
funciones, ya que no ahorra mucho tiempo. Pero cuando realizamos programas más extensos o
con partes iguales que se repiten, es una buena práctica hacer uso de ellas, tanto por comodidad,
como por claridad del programa realizado.
Podéis probar a crear más funciones, insertarlas en diferente orden, cambiar los tiempos, etc.
A07_02 Juegos de luces con sonido.
Siguiendo el programa anterior, vamos a añadir unos “ruiditos” en las funciones, con el bloque
“Zumbador”. Para que siga a la misma velocidad, ahora quitamos los tiempos de espera en el
bucle, ya que el zumbador ya incluye ese tiempo de espera.
Igual que en el caso anterior, podéis probar a cambiar los tiempos, el tono, el orden de las
funciones…
Tenemos muchos accesorios opcionales para poder conectar al robot. Hay un par de opciones
muy interesantes que son una pantalla de texto y una matriz de leds:
A08_01 Pantalla
En la pantalla podemos enviar datos como los valores de los distintos sensores, temperatura,
luminosidad y por ejemplo la distancia detectada por el sensor de “Distancia”.
En el bloque “Pantalla LCD” encontramos la función “LCD Iniciar”, sirve para indicar que vamos a
usar la pantalla, que hay que poner al bloque “Inicializar”, y la función “LCD Imprimir” que hay que
poner el bloque “Bucle”.
Se puede “imprimir” los datos en la primera fila=0 o en la segunda fila=1 y empezar a escribir en la
columna deseada des de la primera columna=0 hasta la última columna=15 o 19 (según modelo).
Hay varios bloques para jugar, pero otro muy curioso es el bloque de “Bitmap”:
Seleccionando “Ayuda” con el botón
derecho, se nos abre otra ventana/pestaña
del navegador con la opción de dibujar lo que
deseamos:
Cuando se detecta un intruso debe sonar la alarma 10 veces seguidas. La alarma constará de un
sonido tipo sirena.
Ahora ya podemos practicar con distintos grados, y observar donde apunta la “flecha” del eje.
Un servo motor nos puedes servir para accionar una pala para nuestro 3dBot Imagina Arduino,
para mover un brazo de un robot humanoide, las posibilidades son muchas.
Estas actividades se proponen ya con el robot montado completamente, se adjuntan los pasos de
montaje detalladamente, la programación no tiene ningún paso adicional, basta con subir el
programa, desconectarlo del ordenador y conectar la batería.
Si introducimos este programa observaremos que el motor A va hacia adelante a una velocidad
rápida durante 2 segundos, luego a una velocidad más lenta otros 2 segundos y finalmente estará
parado y repite el proceso.
Hasta aquí hemos visto que podemos controlar los motores de forma individual, pero para hacer
funcionar el Imagina 3dBot Arduino existe una función aún más fácil que se llama “Mover”.
Ahora ya estamos listos para sacarnos el carné básico de “Entrenador de robots”.
Con un solo bloque, “Mover”, que encontramos en el apartado “3dbot”, podemos dar las ordenes de
avanzar, retroceder, girar, rotar sobre sí mismo y parar. ¡Así de sencillo!
Vamos a realizar una serie de ejercicios para practicar todo lo que hemos aprendido hasta ahora y
mezclar los temas de funciones, variables,…
A12_01: ¡A bailar!
El siguiente programa hace que el robot rote sobre si mismo constantemente:
A12_03 Giro y control de los leds rojo, amarillo y verde: Semáforo loco.
Empieza el espectáculo: Leds, cámaras y… ¡Acción!
Ahora nuestro robot va a rotar todo el tiempo a la izquierda, mientras sus tres leds se encienden y
apagan de forma secuencial. ¡Recuerda que el ritmo desenfrenado lo marcas tú!
Ten en cuenta que el robot va a estar rotando a la izquierda todo el tiempo, independientemente
de lo que hagan los leds, ya que nunca le ordenamos que pare.
A12_04 Para poder conocer todos los sentidos de giro posibles que puede hacer el robot, os
proponemos que realicéis los programas de los movimientos siguientes.
Vamos a combinar este último bloque con funciones ya aprendidas, para comparar un valor de
iluminación fijado por nosotros, con el valor de iluminación que esté leyendo el robot. En este caso,
vamos a guardar los valores de iluminación leídos en la variable “Luminosidad”.
Ahora, sacamos el bloque de números del apartado “Matemáticas”, para realizar la comparación, y
lo incluimos en el bloque general:
Si tras cargar el programa el robot se mueve todo el tiempo (aunque no se le enfoque con la linterna),
querrá decir que el nivel de luz de la sala es mayor que ese 300 incluido en el programa. En ese
caso, simplemente habrá que aumentarlo hasta conseguir el resultado deseado.
Por otro lado, solo con cambiar el operando de la comparación, conseguiremos el efecto contrario,
que el robot avance cuando haya poca luz y se pare cuando el nivel suba:
¿Qué es un encoder?
En pocas palabras, un encoder es un dispositivo de detección que proporciona una respuesta. Los
encoders convierten el movimiento en una señal eléctrica que puede ser leída por algún tipo de
dispositivo de control en un sistema de control de movimiento, como por ejemplo nuestro robot. Nos
permitirá saber cuándo avanza y retrocede nuestro robot.
Hemos visto en el montaje del robot que en la rueda izquierda hay un sensor óptico con el fin de
actuar como un encoder. La función del encoder es convertir en señales eléctricas el giro de la
rueda, para así saber cuánto ha girado en cada momento.
Como se aprecia en la siguiente figura, el sensor óptico se activa cuando detecta un radio de nuestra
rueda delante de él y se desactiva cuando no hay nada (espacio entre radios).
Teniendo en cuenta que la rueda tiene 12 radios, cuando hayamos contado 12 pulsos querrá decir
que la rueda ha dado una vuelta completa.
Pasamos a controlar el robot en tiempo real. Vamos a utilizar inicialmente el mando de Keyestudio,
que dispone de un bloque específico en ArduinoBlocks, lo que hace que la programación sea muy
rápida y sencilla.
Posteriormente aprenderemos a utilizar cualquier mando, incluido el de la tele, que
siempre está muy a mano.
Y finalmente, haremos un programa un poco más avanzado en el que, no solo
cambiaremos la dirección del robot, sino también su velocidad.
A14_01: Control de la dirección.
Para este ejemplo vamos a utilizar el mando de infrarrojos (IR) de Keyestudio.
Concretamente usaremos las teclas de dirección para mover al robot en las cuatro
direcciones. Además, con el botón central de “OK”, haremos que pare.
Para ello, necesitamos dos nuevos bloques:
- En el apartado “3dBot” tenemos el bloque “Receptor IR” que lee los datos procedentes de
un mando con infrarrojos:
En la variable “Mando” guardamos los valores leídos por el receptor infrarrojos, para así compararlos
con los valores correspondientes al mando. El programa resultante lo podemos ver a continuación:
La velocidad del motor se controla con el dato numérico que hay en la parte derecha del bloque. Su
velocidad aumenta proporcionalmente al número incluido, siendo 0 motor parado, y 255 motor a su
máxima velocidad. Ahí podemos incluir una variable para que ese valor de velocidad provenga de
una lectura del mando IR, por ejemplo.
En el desplegable al lado de la palabra “Motor”, seleccionamos qué motor queremos controlar:
Vamos a utilizar también un nuevo tipo de variable, las variables de texto. Las encontramos también
en el apartado “Variables” de ArduinoBlocks. En ellas podemos guardar palabras, como: “Adelante”,
“Derecha” o “Izquierda”.
Una vez conocidos los nuevos elementos, vamos a realizar el programa. Para ello, se van a definir
las variables que representan los movimientos que podrá efectuar el robot. Como decíamos, la
velocidad la tomaremos de una variable “Velocidad” que crearemos en el bucle del programa.
Funciones:
- “Adelante”: Con los dos motores girando en el sentido de avance, hacemos que se mueva
en línea recta:
Bucle:
Primero leemos los datos recibidos por el receptor IR y los guardamos en la variable “Mando”. A
continuación, diferenciamos los datos recibidos en dos tipos:
- Datos para el cambio de velocidad.
- Datos para el cambio de dirección.
Los datos para el cambio de velocidad los guardamos en la variable numérica “Velocidad” y los
datos para el cambio de sentido de giro los guardamos en la variable de texto “Giro”.
Como hemos visto en la definición de las funciones, la variable “Velocidad” la insertamos en los
bloques de movimiento de los motores, dentro de la definición de las funciones.
Finalmente, establecemos las condiciones para que, dependiendo del valor de la variable “Giro”,
vaya en la dirección deseada.
Dependiendo de qué botón se pulse, aparecerá un valor u otro. Es importante tener en cuenta que,
si no accionamos ningún pulsador, lo habitual será recibir un 0. Obtendréis algo así, tras conectaros
a la “Consola”:
A continuación, anotamos a qué pulsador corresponde cada valor recibido, para así añadirlo
posteriormente a la programación. Para nuestro ejemplo, queda la siguiente tabla:
Flecha
551542784 Giro izquierda
izquierda
Se le pueden añadir más funciones, como la de movimiento hacia atrás, que en este caso no se ha
programado, rotaciones, luces, etc.
En el caso A de la imagen superior, el robot se ha salido hacia la izquierda, por tanto, habrá que
hacer que gire a la derecha hasta que ambos sensores se vuelvan a encontrar en línea negra. En
el caso B, el robot debe avanzar en línea recta porque va bien, y en el caso C, deberá girar hacia la
izquierda para corregir su rumbo, ya que se ha salido a la derecha. Con las curvas, el funcionamiento
es el mismo.
Además, hay que añadir el caso en que el robot se sale totalmente de la línea negra (D), momento
en que ambos sensores están en superficie blanca.
A15_01 Robot seguidor de línea. Versión 01
Para empezar, vamos a hacer un programa que actúe frente a los casos A, B y C. Para el caso D,
en el que el robot pierde totalmente la referencia de la línea, vamos a hacer simplemente que se
pare.
Lo primero que hacemos al iniciar el programa, es guardar el estado de cada sensor de línea en
una variable booleana, que son aquellas que solo pueden tomar como valores 0 y 1. Esto quiere
decir que, o se detecta línea negra, o se detecta línea blanca ¡Aquí no hay medias tintas!
Las variables booleanas las encontramos, al igual que las demás, en el apartado “Variables” de
ArduinoBlocks.
También vamos a usar el bloque correspondiente a los
sensores ópticos “Línea negra detectada”. Este bloque
nos permite diferenciar entre una superficie negra y una
blanca, y lo podemos encontrar en el apartado “3dBot”.
*Es importante tener en cuenta que este bloque indica señal de activación cuando se encuentra
sobre línea negra.
Así, al guardar las lecturas del sensor de línea en una variable booleana, cuando el sensor esté
sobre línea negra, esa variable valdrá 1. Sobre línea blanca, valdrá 0.
La combinación de estas variables con los condicionales “Si”, funciona de forma directa, sin tener
que usar bloques de comparación. En la siguiente imagen vemos una condición que expresa
directamente que, si la variable “sensorIzquierdo” vale 1, entonces que se ejecute la acción…
Para completar el proceso, hay que señalar también el uso del bloque “no”, situado en apartado
“Lógica” de ArduinoBlocks, que lo que hace es negar lo que se coloque detrás de él.
Es importante destacar que, dependiendo de la velocidad del robot y de lo cerradas que sean las
curvas, es posible que en alguna de ellas el robot se pierda y se pare. Esto es porque, como
decíamos, aún no le hemos dicho que hacer si ambos sensores detectan línea blanca a la vez.
¡Vamos a solucionarlo!
En esta actividad aprenderemos a controlar nuestro robot con un móvil Android a través del módulo
bluetooth.
Como hemos visto antes del montaje de la placa Imagina
Arduino encima de la placa Arduino Uno, el módulo
bluetooth se encuentra en la parte inferior, podemos
observar su funcionamiento a través del LED de actividad
que esta justo debajo del símbolo “Bluetooth”.
*Los módulos bluetooth ya vienen configurados por
defecto a 57600 Bauds.
Bloque “Inicializar”:
Lo primero que debemos hacer al empezar la programación, es fijarnos en el número que trae
impreso el módulo, porque esa es la velocidad de transmisión de datos a la que está configurado.
Este dato es el único que tenemos que poner en la inicialización de parámetros. Encontramos el
bloque en el conjunto de instrucciones “Bluetooth”:
Si la App indica que cuando pulsas la flecha de movimiento hacia delante, envía por bluetooth una
U, por ejemplo, nosotros tendremos que seleccionar una U en la programación en ArduinoBlocks,
mediante el siguiente bloque:
El bloque para traducir los datos leídos en bytes (Valor ASCII), se
encuentra al final del menú “Texto”.
Para vincular el móvil con nuestro robot, activaremos la función bluetooth de nuestro teléfono.
Cuando nos aparezcan los distintos “Dispositivos disponibles”, seleccionaremos nuestro robot
según la etiqueta del módulo ubicado debajo de la placa, por ejemplo, INNOVA_YELLOW_0 e
introducimos la contraseña 1234. Una vez aceptada ya debería aparecer el robot en “Dispositivos
vinculados”.
A17_02 La segunda estrategia consistirá en hacer que cuando se pare, gire a la derecha 90 grados
y siga adelante. Para realizarlo va a ser especialmente importante utilizar el encoder que hemos
explicado en la actividad A13.
Hemos visto también en la actividad A13 que, para girar
90 grados a la derecha, basta con girar a la derecha
durante 6 pasos (aproximadamente).
En lugar de la función “girar”, que sólo mueve una rueda, se puede utilizar la función “rotar”, en la
que giran ambas ruedas en sentido contrario. Vamos a ver los dos ejemplos.
- Programa utilizando el giro:
Si comparamos ambos ejemplos, vemos que el número de pasos necesario para rotar 90 grados
no es el mismo que para girar 90 grados. Podéis probar con distintos valores para ver los resultados
y así marear un poco al 3dBot.
También es muy importante tener en cuenta que solo disponemos de encoder en la rueda izquierda
y que en los giros a izquierdas esta no se mueve, por tanto, en ese giro no podremos controlar el
ángulo girado. Como en las rotaciones si se mueven ambas ruedas, ahí si podemos medir el ángulo
girado a izquierdas.
Por último, se puede cambiar la distancia mínima a la que detecta un obstáculo.
A17_03: Robot explorador autónomo en laberinto.
En el programa anterior, el robot solo puede esquivar obstáculos en una dirección, lo que provoca
que cuando la única dirección posible es la izquierda, el robot se pierde o vuelve por donde ha
venido.
Para evitarlo, vamos a utilizar dos rotaciones diferentes, una de 90 grados y otra de 180 grados.
Estos dos movimientos los vamos a definir, por comodidad, en las siguientes funciones:
Tras esto, si vamos al apartado “Funciones”, veremos las nuevas funciones creadas y listas para
insertar en cualquier parte de nuestro programa:
Además, vamos a introducir nuevas condiciones que le den a nuestro robot más herramientas a la
hora de enfrentarse a obstáculos.
Como antes el robot solo giraba a la derecha, esto provocaba que, cuando la única dirección posible
era a la izquierda, el robot se perdía o volvía por donde había venido.
Insertar imagen superior del 3dbot en un laberinto con giro a la izquierda
Para evitarlo, vamos a decirle que si gira a la derecha e inmediatamente vuelve a encontrar otro
obstáculo y va a volver a girar a la derecha, querrá decir que realmente tenía que haber girado hacia
la izquierda (es lo más probable). Teniendo en cuenta que acaba de realizar un giro de 90 grados
en la dirección equivocada, le diremos que gire 180 grados para ir en la dirección opuesta.
Veremos en el programa que, para hacer esta condición explicada más efectiva, el robot va a tomar
la decisión descrita, no solo cuando haya interpretado dos giros inmediatamente seguidos a la
derecha, sino también cuando los haya interpretado en menos de 800 ms, aunque en ese tiempo sí
haya avanzado brevemente en línea recta.
Recordad dejar en la misma pantalla las funciones antes definidas. La definición de estas funciones
no tiene que ir dentro de bucle. En total queda algo así:
Nunchuck
128
Y
0
Vamos a hacer un programa básico para poder controlar el robot hacia adelante y atrás, y girar
sobre sí mismo:
Bonus track.audio
Las notas musicales son, simplemente, sonidos con una frecuencia determinada. Por tanto,
conociendo la frecuencia correspondiente a cada nota, y configurando los tiempos adecuados de
cada una (junto con los silencios) podemos programar una melodía.
Frecuencia de las notas musicales en Hertzios
A este programa se le pueden añadir movimientos del robot, para que “baile” al ritmo de su propia
música.
Bonus track.iluminación
En el menú “NeoPixel” tenemos el bloque para inicializar la tira o elemento, hay que ponerlo dentro
del bucle “Inicializar”.
Aparte de estos, que son los esenciales, hay algún otro para matrices, crear dibujos… pero ahora
vamos a lo interesante i a practicar con los comentados:
Bonus track: “El coche fantástico”.
Utilizando una tira de leds Neopixel vamos a crear la mítica luz del coche fantástico.
La función “contar con” se encuentra en el menú de “Control”. Con ella lo que vamos a hacer es
incrementar el valor de una variable, en este caso “i” un número determinado de veces. Se ejecuta
esta función hasta que llega al valor final, en el ejemplo del coche fantástico, hasta 29, luego el
programa sigue con la siguiente instrucción.
Lo que conseguimos es que mientras el contador va incrementando el valor de la variable “i”, esta
se usa para encender un determinado led. Dentro de la función contador hacemos tres acciones,
dejamos la tira limpia, seleccionamos el led y lo hacemos mostrar en la tira, cada vez con un valor
de “i” más alto.
Luego repetimos decreciendo el contador.
¡Hasta aquí el tutorial para el robot Imagina 3dBot Arduino!
Lo que hemos visto es solo una pincelada del mundo Arduino. Hay infinidad de proyectos para crear
con la gran cantidad de sensores y actuadores que existen. Consulta los Kits para primaria,
secundaria y profesional disponibles en Innova Didactic.
Material Arduino