Saltar a contenido

Actividades básicas con la placa Imagina 3DBot

Utilizaremos la placa Imagina 3DBot como shield de la ESP32 STEAMakers.

En todas las actividades es muy importane tener presente el siguiente aviso:

Aviso
Aviso

A01. Encender un LED

Trabajaremos con los LEDs que vemos en la imagen siguiente:

Diodos LED
Diodos LED

A01_1. Activar un LED como indicativo de que todo va bien

En el apartado "3dBot" de Arduinoblocks encontraremos el bloque "Led", que nos permite encender y apagar los LED verde, amarillo y rojo de la Imagina 3DBot.

A01_1. Activar un LED
A01_1. Activar un LED

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 alcanzar su máximo en 255.

A01_1. Activar un LED
A01_1. Activar un LED
Acceder al programa

Después de cargar este programa, el LED rojo tendrá que permanecer encendido indefinidamente a la mitad de su brillo. Si es así, tienes bien conectada la placa y has conseguido cargar tu primer programa. ¡Seguimos!

A01_2. Juego de luces con bloque “Espera”

El bloque “Esperar” lo podemos encontrar en el apartado “Tiempo”. Se corresponde con el famoso delay. Lo que hacemos al insertar un bloque “Esperar” es dejar la placa en el estado en el que se encontraba justo antes de la espera durante el tiempo que ésta dure, es decir, se detiene el procesador durante ese tiempo.

A01_2. Bloque esperar
A01_2. Bloque esperar

Cuidado, porque el tiempo utilizado en este bloque está en milisegundos, por lo que para esperar, por ejemplo medio segundo, deberemos introducir un 500.

Programa ejemplo:

A01_2. Juego de luces
A01_2. Juego de luces

Acceder al programa

Con este programa conseguimos que el LED verde parpadee con una frecuencia de 1 segundo de encendido y apagado. Puedes intentar cambiar tiempo e introducir más LED, así como variar su intensidad de brillo.

El problema de la función Esperar es que deja la placa bloqueada en el estado anterior durante este tiempo de espera, es decir, no recibe ni envía nuevas órdenes durante este tiempo. Por eso, en ciertos casos, es más conveniente utilizar el bloque “Ejecutar cada” que veremos en futuros apartados.

A02. Encender un LED con el pulsador

Los componentes implicados los vemos en la imagen siguiente:

A02. Componentes utilizados
A02. Componentes utilizados

En esta actividad queremos encender el LED verde al presionar el pulsador de la placa. Para ello debemos empezar a utilizar funciones del menú "Lógica" con las funciones de condición.

Condiciones “Si … hacer …”

Se trata del famoso bucle if, que es uno de los pilares de la programación, puesto que permite evaluar estados y tomar decisiones en consecuencia.

Funciona como una oración condicional: si se cumple la condición incluida en su primer apartado, entonces se realiza la acción incluida en su segundo apartado. De lo contrario, no se hace nada.

A02. Condicional Si ... hacer
A02. Condicional Si ... hacer

Para el programa ejemplo vamos a utilizar un nuevo bloque que controla el pulsador que incorpora la placa Imagina 3dBot. Lo podemos encontrar en el apartado "3dBot".

A02. Bloque 'Botón se ha pulsado'
A02. Bloque 'Botón se ha pulsado'

Con este bloque crearemos la condición. Como acción a ejecutar si se cumple la condición, vamos a encender un LED. Para ello volveremos a utilizar wl bloque 'Led' que localizamos en la misma sección que el pulsador.

A02_1. Al pulsar el botón se enciende un LED

A02_1. Al pulsar el botón se enciende un LED
A02_1. Al pulsar el botón se enciende un LED

Acceder al programa

Ampliando el condicional

Otros bloques condicionales: si... hacer... si no... o si... hacer... si no si... hacer....

El bloque si … hacer … si no … está en “Lógica”:

A02. Bloque si... hacer... si no...
A02. Bloque si... hacer... si no...

La ampliación de los bloques, como el bloque si... hacer... si no si... hacer.... se consigue haciendo clic sobre el signo mas de la esquina superior izquierda. Vemos el proceso en la animación siguiente:

A02. Ampliar los bloques lógicos
A02. Ampliar los bloques lógicos

Veremos ejemplos del uso de estas variantes a lo largo de distintos programas.

Pero siguiendo con el ejemplo del LED, realizaremos un programa que al pulsar el botón se encienda el LED durante un segundo; si no se acciona el pulsador, se apagará el LED.

A02_2. Ampliando el condicional

A02_2. Ampliando el condicional
A02_2. Ampliando el condicional

Acceder al programa

A03. Medir la luminosidad con la LDR

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 realizar el ejercicio vamos a ver las diferentes funciones poco a poco.

  • Gestión de tiempo con el bloque “Ejecutar cada”
    Encontraremos el bloque en la sección “Tiempo”. Este bloque ejecuta una vez cada X tiempo los comandos que se encuentren dentro de él. Cuidado, porque NO detiene el programa en el estado anterior a él, como sí lo hace el bloque “Esperar”.

A03. Bloque Ejecutar cada
A03. Bloque Ejecutar cada

Junto a "Enviar", es una función muy útil para mostrar datos en el ordenador. Vamos a verlo con un ejemplo en el siguiente apartado, en el que aprenderemos a enviar datos desde Imagina 3dBot con la placa ESP32 STEAMakers al ordenador.

  • Imprimir en el puerto serie (enviar datos al ordenador)
    En la sección “Comunicaciones → Puerto serie” tenemos el bloque “Enviar”, mediante el cual enviamos valores a la pantalla del ordenador.

A03. Bloque Enviar
A03. Bloque Enviar

Podemos enviar cualquier orden o dato que queramos sólo introduciéndolo en el espacio en blanco entre comillas del bloque.

  • Programa ejemplo

Ejemplo 3DB_Ej10
Enlace a ejemplo 3DB_Ej10

Con este programa lo que hacemos es enviar a la pantalla del ordenador las palabras "Imagina 3dBot" una vez por segundo (1000 ms).

Después de cargar el programa, pulsando el botón “Consola” y a continuación “Conectar” veremos en la pantalla del ordenador los valores enviados:

Ejemplo 3DB_Ej10: Consola
Ejemplo 3DB_Ej10: Consola

Cabe destacar que, si no utilizamos 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 utilizar el bloque “Esperar” para enviar datos cada segundo, pero entonces, en tiempos de espera, la placa no podría escuchar otros comandos ni realizar otras acciones. Tranquilos, veremos 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.

Los componentes implicados los vemos en la imagen siguiente:

A03. Componentes utilizados
A03. Componentes utilizados

Para ello vamos a utilizar el bloque de la LDR (Resistencia Dependiente de la Luz) como dato para enviar a la pantalla del ordenador.

A03. Bloque "Sensor de luz"
A03. Bloque "Sensor de luz"

Introducimos el siguiente programa y abrimos la consola:

A03_1. Medir la luminosidad con la LDR
A03_1. Medir la luminosidad con la LDR

Acceder al programa

A03_1. Medir la luminosidad con la LDR: Consola
A03_1. Medir la luminosidad con la LDR: Consola

Comprueba su funcionamiento observando como 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?

A03_2. Interruptor crepuscular
A03_2. Interruptor crepuscular

Acceder al programa

A04. Medida de la temperatura con la NTC

En esta práctica realizaremos un detector de incendios, de forma que deberá encenderse el LED rojo cuando se supere un determinado valor del sensor de temperatura.

El sensor de temperatura que utilizamos es de tipo analógico, y se llama NTC (Coeficiente de Temperatura Negativo).

Los componentes implicados los vemos en la imagen siguiente:

A04. Componentes utilizados
A04. Componentes utilizados

Aprovecharemos para introducir el concepto de variable.

Las variables son elementos comunes en programación. Básicamente, crear una variable es dar un nombre a un dato o lectura. Por ejemplo, las medidas de valores de temperatura se pueden guardar en una variable llamada “Temperatura”. No es obligatorio su uso, pero nos permite trabajar más cómodamente. Además, puesto que podemos personalizar su nombre, ayudan a clarificar el código y utilizar un lenguaje más natural.

Hay 3 tipos de variables distintas que son:

  • Número: son variables para números (como indica el nombre de la variable) Texto: son variables para texto (como indica el nombre de la variable)
  • Booleana: son variables para datos digitales que sólo pueden ser 0 y 1

Para crear una variable escogemos el tipo y le ponemos un nombre, lo que hacemos de la forma siguiente:

A04. Crear, renombrar y eliminar variables
A04. Crear, renombrar y eliminar variables

Así tenemos la variable creada, lo que nos ofrece dos nuevos bloques:

  • El bloque donde damos valor a la variable

A04. Bloque para asignar valor a variable
A04. Bloque para asignar valor a variable

  • Y el bloque de la propia variable creada, para poder insertarla y combinarla con otros bloques.

A04. Bloque con el valor de la variable
A04. Bloque con el valor de la variable

A04_1. Medir el valor de temperatura ambiente

De forma totalmente similar a como hemos realizado la actividad de la luminosidad vamos a descubir el valor de la temperatura.

A04_1. Medir la temperatura ambiente
A04_1. Medir la temperatura ambiente

Acceder al programa

Podemos observar en la consola como el sensor devuelve el valor de la temperatura ambiente con dos cifras decimales.

A04_2. Detector de temperatura elevada

Vamos a hacer que cuando se superen los 30 ºC se encienda el LED rojo y que suene una sirena en el zumbador.

A04_2. Detector de temperatura elevada
A04_2. Detector de temperatura elevada

Acceder al programa

A05. Medir distancias con el sensor HC-SR04

Si disponemos de un sensor de ultrasonidos HC-SR04 podremos realizar medidas de distancia directamente con Arduinoblocks.

El funcionamiento de los sensores de ultrasonidos consiste en emitir un ultrasonido y medir el tiempo que tarda en rebotar con el objeto que tiene delante y volver. Así se puede calcular la distancia a la que se encuentra el objeto que está delante y sobre el que ha rebotado el sonido.

Para realizar esta práctica lo conectaremos directamente al zócalo delantero como se ve en la imagen.

A05. Colocación del sensor HC-SR05
A05. Colocación del sensor HC-SR05

El bloque 'Distancia' del menú 3DBot nos va a permitir trabajar de forma sencilla con el sensor.

A05. Bloque 'Distancia'
A05. Bloque 'Distancia'

A05_1. Medir distancia

El programa que nos mostrará las distancia por consola sería el siguiente:

A05_1. Medir distancia
A05_1. Medir distancia

Acceder al programa

En la consola vemos diferentes distancias medidas.

A05_1. Medir distancia
A05_1. Medir distancia

A05_2. Sensor de aparcamiento de un coche

La placa emitirá un aviso sonoro intermitente cuya frecuencia dependerá de la distancia a la que esté un objeto que se coloque por delante. Cuanto más cerca esté, más veces por segundo sonará.

Hay que tener en cuenta que el tiempo que pasa entre aviso y aviso (que depende de la distancia) se indica en milisegundos. Por eso multiplicamos por un factor (en el ejemplo, 15) que hace que la frecuencia de aviso se adapte a nuestras necesidades. Puedes probar el sistema, variarlo, escalarlo y adaptarlo a tu antojo.

A05_2. Sensor de aparcamiento de un coche
A05_2. Sensor de aparcamiento de un coche

Acceder al programa

Vemos en el programa que la frecuencia con que se hace cada ciclo, equivale a la frecuencia con la que damos cada aviso, que depende directamente de la distancia del sensor al objeto.

A05_3. Sensor de distancia

En el programa anterior existe un inconveniente, y es que la placa siempre dará avisos, aunque el objeto que esté delante se encuentre a mucha distancia. Ahora vamos a poner una nueva condición para que ese aviso sólo comience cuando el objeto se encuentre a una determinada distancia mínima. Para el ejemplo que se propone se ha probado con 20 cm, pero al igual que antes puede ajustarlo como quieras.

A05_3. Sensor de distancia
A05_3. Sensor de distancia

Acceder al programa

A06. Generador de notas musicales con el zumbador

El zumbador es el pequeño “altavoz” situado en una de las esquinas de la placa, junto a los LED, y con él podemos generar melodías musicales.

A06. Generador de notas musicales con el zumbador
A06. Generador de notas musicales con el zumbador

Uno de los parámetros que caracterizan a un sonido es su frecuencia de emisión, siendo la frecuencia el número de veces que se repite por unidad de tiempo (segundo). La transmisión del sonido se realiza por ondas a través en cualquier medio (sólido, líquido o gaseoso) excepto en el vacío. La frecuencia de un sonido nos indica cuantos ciclos por segundo tiene una onda.

En la imagen y la tabla siguientes vemos un dibujo con un fragmento de las teclas de un piano estando todo referido a una nota estándar, la nota "La" central que tiene una frecuencia de 440 Hz. Podemos ver la nota musical que reproduce, en las dos notaciones más comunes de los sonidos (Inglés: C D E F G A B, Alemán: C D E F G A H, Español, italiano y francés: Do Re Mi Fa Sol La Si) y además se encuentra la frecuencia que produce esa nota musical.

A06. Sección de piano y notas
A06. Sección de piano y notas

Los bloques que tenemos disponibles para programar sonidos son:

A06. Bloques sonido
A06. Bloques sonido

A06_1. Notas musicales

En el programa siguiente se reproducen todas las notas musicales bien especificando la frecuencia o bien especificando la nota.

A06_1. Notas musicales
A06_1. Notas musicales

Acceder al programa

A06_2. Melodias

Si no se pulsa el botón suena una melodia y mientras se mantiene pulsado suena otra.

A06_2. Melodias
A06_2. Melodias

Acceder al programa

A07. Funciones

Una función es simplemente un conjunto de instrucciones a las que damos un nombre, para no tener que repetirlas en distintas partes del programa y para clarificar y ordenar el código. Al crear una función se genera automáticamente un bloque, que ya puede ser insertado en cualquier parte del programa.

Para ello, debemos utilizar el bloque “hacer algo” que encontramos en el apartado “Funciones” de Arduinoblocks.

A07. Bloques “hacer algo”
A07. Bloques “hacer algo”

Primero debemos dar un nombre a la función e incluir el conjunto de instrucciones que queremos que haga la placa cada vez que la utilicemos.

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.

A07. Función Luz 1
A07. Función Luz 1

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:

A07. Función Luz 1
A07. Función Luz 1

Es importante destacar que las funciones no se definen dentro de “Bucle”. Se crean fuera y después se insertan en los momentos en los que queramos que se ejecuten.

Cuando creamos un programa pequeño (de pocos bloques), no suele valer la pena definir funciones. Pero cuando hacemos programas más extensos o con partes iguales que se repiten, es una buena práctica su uso, tanto por comodidad como por claridad del programa realizado.

A07_1. Juegos de luces

En el siguiente programa se definen 3 funciones, creando juegos de luces con los 3 LED de la placa, y a continuación se realiza una secuenciación y repetición de éstas.

Las funciones “Luz 1”, “Luz 2” y “Luz 3” son:

A07. Funciones Luz 1, Luz 2 y Luz 3
A07. Funciones Luz 1, Luz 2 y Luz 3

Después de crear las funciones ya las podemos encontrar en el apartado “Funciones”, como bloques, para insertarlas en el “Bucle”.

El programa completo queda así:

A07_1. Juegos de luces
A07_1. Juegos de luces

Acceder al programa

A07_2. Juegos de luces con sonido

Siguiendo el programa anterior, vamos a añadir unos sonidos a las funciones con el bloque Zumbador. Para que siga a la misma velocidad, ahora eliminamos los tiempos de espera del bucle, ya que el zumbador ya incluye ese tiempo de espera.

A07_2. Juegos de luces con sonido
A07_2. Juegos de luces con sonido

Acceder al programa

A08. Infrarrojos

Los infrarrojos son una clase de radiación electromagnética con una longitud de onda que resulta superior a la longitud de onda de la luz visible, siendo su frecuencia superior a las microondas. Dentro del espectro electromagnético, la radiación infrarroja se encuentra comprendida entre el espectro de luz visible y las microondas. Tiene longitudes de onda mayores o más largas que el rojo. En la imagen siguiente, obtenida del blog de Mercedes González Mas vemos caracterizados los infrarrojos dentro del espectro.

A08. Espectro electromagnetico
A08. Espectro electromagnetico

Como podemos observar en la imagen, los rayos infrarrojos son clasificados, de acuerdo a su longitud de onda, del siguiente modo:

  • infrarrojo cercano, con longitud de onda entre 0.7 µm y 1.1 µm, es la parte del espectro infrarrojo que ese encuentra más próximo a la luz visible.
  • infrarrojo medio, con longitud de onda entre 1,1 µm y 15 µm.
  • infrarrojo lejano o región más cercana a las microondas, con longitud de onda entre 15 µm y 100 µm

En la imagen siguiente, obtenida de wikipedia, sobre espectro electromagnético podemos ver más información del tema.

A08. Espectro electromagnetico
A08. Espectro electromagnetico

Todos los cuerpos emiten una cierta cantidad de radiación, y aunque esta resulta invisible para el ojo humano, existen dispositivos electrónicos capaces de "verla" por estar diseñados para ello.

Receptor de infrarrojos

Un diodo receptor de infrarrojos típico de 38 KHz tiene el siguiente aspecto:

A08. Diodo receptor de infrarrojos
A08. Diodo receptor de infrarrojos

En la placa Imagina 3DBot se localiza en la posición que observamos en la imagen siguiente:

A08. Diodo receptor de infrarrojos en la Imagina 3DBot
A08. Diodo receptor de infrarrojos en la Imagina 3DBot

El dispositivo sirve para controles remotos universales y utiliza la codificación NEC. El receptor de infrarrojos permite codificar los protocolos de señales de pulsos infrarrojos utilizados por los mandos a distancia. Los protocolos detectados son los siguientes: RC5, RC6, NEC, SONY, PANASONIC, JVC, SAMSUNG, WHYNTER, AIWA, LG, SANYO, MITSUBISHI y DENON. Es decir, detectaría cualquier señal emitida por cualquiera de esos mandos.

Emisor de infrarrojos

En nuestro caso como emisor de infrarrojos vamos a utilizar el control remoto de Keyestudio que vemos en la imagen siguiente:

A08. Control remoto de Keyestudio
A08. Control remoto de Keyestudio

El mini control remoto tiene 17 teclas de función y tiene las siguientes especificaciones:

  • Batería: pilas de botón CR2025
  • Distancia de transmisión: hasta 8 m
  • Ángulo efectivo: 60°

El control remoto, o mando a distancia, por IR funciona emitiendo trenes de pulsos de luz infrarroja. Diferentes señales corresponden a botones diferentes La señal infrarroja transmite el código correspondiente al botón del mando a distancia pulsado al dispositivo en forma de una serie de impulsos de luz infrarroja. El receptor recibe la serie de impulsos de infrarrojos y los pasa a un procesador que decodifica y activarán una determinada función del dispositivo. En el reto y las actividades del mismo obtendremos estos códigos. En ArduinoBlocks se han asignado los siguientes nombres a las teclas:

A08. Nombre teclas control remoto en Arduinoblocks
A08. Nombre teclas control remoto en Arduinoblocks

Bloques en Arduinoblocks

El sensor receptor de infrarrojos permite obtener la cadena de texto con el código en formato hexadecimal correspondiente al tren de pulsos de IR generado al pulsar una determinada tecla. Si utilizamos mandos genéricos RC5 como el modelo de Keyestudio, podemos usar los bloques de la imagen siguiente para comparar los códigos recibidos y así identificar fácilmente cada tecla.

Sensores En 3DBot

El valor devuelto por el bloque de recepción será una cadena de texto con valor vacío en caso de no detectar ningún código. Al devolver el bloque una cadena de texto debemos recordar que lo tenemos que almacenar en una variable de tipo texto.

A08_1. Tecla OK pulsada

Vamos a realizar un programa en el que si pulsamos la tecla Ok del control remoto se nos encienda el diodo LED rojo. El programa lo vemos en la imagen siguiente:

A08_1. Tecla OK pulsada
A08_1. Tecla OK pulsada

Acceder al programa

A08_2. Código de la tecla pulsada

Vamos a realizar un programa que nos muestre por consola el código hexadecimal correspondiente a cada una de las teclas pulsadas junto a un texto descriptivo indicador de la tecla pulsada en cada caso, es decir, que mantenga una estructura del tipo: El CODIGO se corresponde con la tecla TECLA pulsada.

A08_2. Código de la tecla pulsada
A08_2. Código de la tecla pulsada

Acceder al programa

Para facilitar la visualización se han dividido las teclas en grupos por funciones y dos de ellas se muestran con los bloques contraidos.

En la imagen siguiente vemos el resultado:

A08_2. Código de la tecla pulsada
A08_2. Código de la tecla pulsada