Retos: Imagina TDR STEAM y ArduinoBlocks

Introducción

Esta guía ha sido elaborada por Fernando Hernández García, Ingeniero Técnico Industrial Especialidad Electrónica, formador del profesorado y profesor del Institut Torre del Palau (Terrassa – Barcelona).

Se basa en documentaciones anteriores y ha sido desarrollado para el concurso RETOS CON IMAGINA TDR STEAM de Innova Didactic y Robolot.

Agradecer el soporte de ArduinoBlocks, Robolot Team e Innova Didàctic.

image-1653904910565.6BXCN1.png   image-1653904926410.DW9XM1.pngimage-1653904941737.MDV1M1.png

 

 

 

Instrucciones

Instrucciones

1. Primeros pasos

El presente manual pretende ser una herramienta base para iniciarse en el mundo de la programación, la electrónica y la robótica utilizando para ello la placa basada en Arduino: ImaginIa TDR STEAM (sobre una placa Keyestudio UNO) y el entorno de programación ArduinBlocks. La placa Imagina TDR STEAM es una Shield (placa/escudo). Significa que es una placa que tiene que ir colocada sobre otra que contiene el sistema de control. En este caso, sobre una placa Keyestudio UNO. La placa Imagina TDR STEAM tiene numerosos sensores y actuadores que permitirán hacer infinidad de proyectos.

image-1653905107352.016.png

En este documento no pretende ser únicamente un manual para aprender programación. El manual presenta una serie de actividades guiadas y retos para aprender a programar de una manera entretenida y divertida mientras aprendemos conceptos relacionados con las S.T.E.A.M. (Science, Technology, Engineering, Arts, Math).

Para realizar la programación con la placa Imagina TDR STEAM utilizaremos un lenguaje de programación visual basado en bloques llamado ArduinoBlocks, Hay quien podría pensar que un lenguaje de este estilo es muy básico y limitado, pero ya veremos a lo largo del manual la gran potencialidad y versatilidad que tiene este programa.

image-1653905171741.017.jpg

Con la placa Imagina TDR STEAM tenemos la mayoría de sensores y actuadores que necesitamos para poder introducirnos en el mundo de la programación de entornos físicos (Physical Computing). También tenemos conexiones de expansión para poner conectar más elementos externos.

Página del entorno de programación: ArduinoBlocks.

www.arduinoblocks.com

Página de información: Didactrónica.

www.didactronica.com

Página para comprar material: Innova Didactic S.L.

shop.innovadidactic.com

Instrucciones

2. Funcionamiento de un sistema de control programado

Un sistema de control programado funciona de manera similar a la de un ser humano. Cuando nuestro cerebro recibe información de los sentidos; oído, olfato, gusto, vista y tacto; analiza esta información, la procesa y da órdenes a nuestros músculos para realizar movimientos, dar estímulos a las cuerdas vocales para emitir sonidos, etc. Los 5 sentidos equivalen a entradas de información y la voz los músculos serían las salidas.

image-1653905273499.018.png

En el caso de un sistema de control programado, un microcontrolador hace la función de cerebro. Este componente electrónico 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, zumbadores, etc.

image-1653905300771.019.png

La diferencia principal es que, así como nuestro cerebro ha ido aprendido lo que tiene que hacer a lo largo de nuestra vida a base de estímulos, el sistema programado 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. Estas órdenes se generan mediante el código de programa que introducimos en nuestro sistema de control.

En todo sistema de control automático, los sensores (entradas) convierten las magnitudes físicas, químicas, etc. en eléctricas, creando así la información. Esta información se envía a la unidad de control (proceso) que procesa dicha información y genera las órdenes mediante señales eléctricas que serán convertidas en los actuadores (salidas) en otro tipo de magnitudes.

image-1653905307498.020.png

Instrucciones

3. Componentes de la placa Imagina TDR STEAM

La placa Imagina TDR STEAM es una placa didáctica desarrollada por el equipo ROBOLOT TEAM que presenta la gran ventaja de tener una gran cantidad de sensores, actuadores y conexiones de expansión incorporados directamente en ella. Únicamente hay que conectar esta placa (shield) a una placa Arduino UNO (en nuestro caso, una placa compatible llamada Keyestudio UNO) y ya está todo listo para empezar a programar.

image-1653905378502.021.jpg

Tabla con la relación de elementos que hay en la placa Imagina TDR STEAM y sus conexiones:


Sensor/ Actuador/ Módulo Pin de conexión
1 Dos pulsadores (SW1, SW2) D2 y D7
2 Dos leds (Azul Led3 y Rojo Led4) D13 y D12
3 Led RGB D6-D9-D10
4 Módulo DHT11 Sensor de Temperatura y Humedad D4
5 Zumbador o Piezoeléctrico D8
6 Dos puertos (Entradas/Salidas) digitales D3 y D5
7 Módulo receptor de infrarrojos (IR) D11
8 Módulo potenciómetro giratorio A0
9 Sensor de luminosidad (LDR) A1
10 Sensor de temperatura (LM35) A2
11 Interface I2C compatible con sensores y módulos Keyestudio SDA-A4 SCL-A5
12 Puerto Entrada Analógico A3
13 Conexión de comunicaciones Bluetooth y Wifi (Swich On/Off) Rx - Tx
14 Botón de reinicio. -

image-1653905389546.022.jpg

Instrucciones

4. Placa de control Keyestudio UNO (compatible con Arduino UNO)

La placa de control que gestiona la placa Imagina TDR STEAM está basada en una placa Arduino UNO. Arduino es una plataforma de prototipos electrónicos de código abierto (Open-Source) basada en hardware y software libre, flexible y fácil de usar, con una comunidad muy grande que genera muchísima información. Esta plataforma permite crear diferentes tipos de sistema para diferentes usos. Puede ser empleada por artistas, diseñadores, ingenieros, profesores, alumnos, etc., y en general, cualquier persona que esté interesada en crear objetos o entornos interactivos, prototipos, sistemas robóticos, etc.

image-1653905461501.023.jpg

image-1653905474361.024.jpg

Al ser hardware libre existen multitud de fabricantes que han desarrollado versiones basadas en Arduino. Uno de esos fabricantes es Keyestudio.

image-1653905565482.png

La placa Keyestudio UNO lleva un microcontrolador que está basado en el ATmega328. Tiene 14 pines digitales de entrada / salida (de los cuales 6 se pueden usar como salidas PWM), 6 entradas analógicas, un cristal de cuarzo de 16 MHz, una conexión USB, un conector de alimentación, un conector ICSP y un botón de reinicio (reset).

image-1653905492775.026.jpg

Especificaciones:

Las conexiones de la placa TDR STEAM con la placa Keyestudio UNO son las siguientes:

image-1653905628237.png

Para realizar la programación la podemos hacer mediante la IDE de Arduino o mediante ArduinoBlocks. Como podemos ver son dos sistemas diferentes. En la IDE de Arduino la programación se realiza mediante instrucciones (derecha de la imagen) y en ArduinoBlocks se realiza mediante bloques (izquierda de la imagen). En la siguiente imagen se hace una comparación de código entre ArduinoBlocks y Arduino IDE.

image-1654078412029.png

Utilizar ArduinoBlocks simplifica y hace más inteligible el código, lo que permite iniciarse en el mundo de la programación de un modo más amigable. ArduinoBlocks también permite programar de diversas formas, ya que tiene bloques específicos que realizan las mismas funciones pero que se pueden entender de forma más sencilla.

Instrucciones

5. Programación con ArduinoBlocks

ArduinoBlocks es un lenguaje de programación gráfico por “Bloques” creado por el profesor Juanjo López. Está pensado para que niñas y niños aprendan a programar con placas Arduino a partir de unos 8-9 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.

image-1654078479427.010.jpg

En esta guía usaremos ArduinoBlocks dedicado al uso de la placa Imagina TDR STEAM, con estos bloques podremos programar las entradas y salidas de nuestra placa para que realice las tareas que queramos.

Podemos programar ArduinoBlocks de diferentes maneras ya que tiene múltiples bloques. También permite exportar el código para la IDE de Arduino. Pero para este manual utilizaremos, principalmente, la programación que se muestra en medio (bloques específicos para Imagina TDR STEAM), ya que es más fácil de entender.

image-1654078538347.png

Si queremos ayuda de cada bloque, podemos pulsar con el botón derecho en Ayuda

2023-05-13 10_36_58-Coding with blocks ;).png

y entramos en el libro online y buscamos el bloque que queramos

2023-05-13 10_38_04-Coding with blocks ;).png

 

Instrucciones

6. Instalación de ArduinoBlocks

ArduinoBlocks trabaja on-line pero tenemos que instalar un pequeño programa que será el encargado de conectar nuestro programa con la placa Keyestudio UNO. Este programa basado en Python se llama Connector.

Primero deberemos crear una cuenta en ArduinoBlocks y después instalar el software Connector.

image-1654078596835.pngimage-1654078639414.png

image-1654078681718.png

image-1654078696911.png

image-1654078725547.png

Retos

Retos

7. Retos con la placa Imagina TDR STEAM

A continuación, os proponemos una serie de actividades y retos para aprender a programar la placa Kesyestudio UNO R.3 y la placa Imagina TDR STEAM con ArduinoBlocks paso a paso para que realicen infinidad de tareas.

En las actividades y retos, primero hay una explicación del componente electrónico que se va a utilizar y, a continuación, una descripción de la práctica a realizar (puede ser más de una práctica). Por último, se propone una actividad de ampliación.

Retos

7.1 Reto A01. El led

Vamos a empezar con nuestro primer reto. Vamos a realizar un programa que va a encender y apagar el led rojo correspondiente al pin D12.

Un LED (Diodo Emisor de Luz) es un diodo semiconductor que emite luz. Se usan como indicadores en muchos dispositivos, y cada vez con mucha más frecuencia en iluminación. Los leds presentan muchas ventajas sobre las fuentes de luz incandescente como un consumo de energía mucho menor, mayor tiempo de vida, menor tamaño, gran durabilidad y fiabilidad.

El led tiene una polaridad, un orden de conexión, y al conectarlo al revés no funciona. Para evitar que se queme siempre debe llevar una resistencia en serie para limitar la corriente eléctrica que le atraviesa.

image-1654079285660.022.png

La placa Imagina TDR STEAM dispone de dos leds (uno azul y otro rojo), conectados en los pines D13 (azul) y D12 (rojo).

image-1654079314970.62T3M1.png


7.1.1 Reto A01.1. ON/OFF led rojo.

Entramos en ArduinoBlocks en el tipo de proyecto para la placa Imagina TDR STEAM. En la columna de la izquierda tenemos las agrupaciones de bloques clasificados en función de su tipología.

En el área de programación siempre hay dos bloques verdes (Inicializar y Bucle). Estos bloques siempre aparecen al iniciar un nuevo programa. Pues bien, todo lo que se meta dentro del bloque de Inicializar sólo se ejecutará la primera vez que se inicie el programa, mientras que si se colocan dentro del Bucle se ejecutarán una y otra vez hasta que apaguemos la placa.

image-1654079619989.png  

image-1654079635691.png

Seleccionaremos el bloque de TDR STEAM. Vamos a meter nuestro bloque de led en el Bucle y elegimos el color del led (Rojo o Azul). El led puede tener dos estados: ON/OFF (encendido/apagado), que podemos cambiar en el menú despegable.

Si sólo dejamos este bloque con el led en estado ON, este quedaría encendido para siempre, para que se apague deberemos cambiar el estado a OFF.

image-1654079654890.027.png

Pero este programa no es correcto del todo. No hay tiempos que indiquen cuanto tiempo tiene que estar encendido o apagado el led. Necesitamos ir al bloque de Tiempo** y seleccionar Esperar (valor) milisegundos (recuerda: 1.000 milisegundos es 1 segundo).

image-1654079684925.png

image-1654079701094.029.png

Ahora tenemos el led encendido durante 1 segundo y apagado otro. Esto ser repetirá por tiempo infinito hasta que quitemos la alimentación a la placa. El programa se quedará guardado en la memoria del microcontrolador, así que, si lo alimentamos con una fuente de alimentación externa, seguirá funcionando.

Actividad de ampliación: prueba ahora de hacer una intermitencia más rápida (500ms ON y 250ms OFF).

7.1.2 Reto A01.2. ON/OFF led rojo y azul

Como hemos comentado anteriormente la placa dispone de dos leds (rojo y azul). Ahora vamos a realizar un programa para que se vayan alternando su encendido y apagado.

image-1654079723058.030.png

Actividad de ampliación: prueba ahora de hacer que los leds rojo y azul se enciendan a la vez y con los siguientes tiempos: 500ms ON y 250ms OFF.

7.1.3 Reto A01.3. ON/OFF led rojo y azul con repeticiones.

Imagina que queremos hacer un ciclo de repetición. Queremos repetir 5 veces el encendido y apagado del led rojo antes de que se encienda el azul. Para realizar esta acción lo podemos hacer de la siguiente forma: en el menú de Control existe el bloque Repetir (valor) veces hacer…

image-1654079804312.031.png

En el siguiente programa fíjate como el led rojo se enciende y apaga cada medio segundo (500ms) 5 veces y después se queda el led azul encendido durante 4 segundos (4000ms).

image-1654079839248.png

Actividad de ampliación: prueba ahora de hacer que el led rojo se encienda 10 veces cada vez que el led azul se enciende 3 veces.

Retos

7.2 Reto A02. El led RGB

Un led RGB es un led que incorpora en su mismo encapsulado tres leds. Las siglas RGB corresponden a: R (Red=rojo), G (Green=verde) y B (Blue=azul). Con estos tres colores, en óptica, se puede formar cualquier color, ajustando de manera individual la intensidad de cada color. Los tres leds están unidos por el negativo o cátodo (RGB de cátodo común).

image-1654080228442.033.pngimage-1654080238074.034.png

En Arduino, cada uno de esos leds podría tomar 256 colores diferentes, es decir, el Rojo podría ir desde 0 hasta 255, el Verde de 0 a 255 y el Azul de 0 a 255, en total un led RGB podría dar más de 16,5 millones de colores diferentes.

image-1654080262518.png

La placa Imagina TDR STEAM dispone de un led RGB conectado a los pines (D6-Red, D9-Green y D10-Blue). Estos tres pines son PWM para permitir regular su intensidad.

La modulación PWM permite generar una señal analógica mediante una salida digital. Utiliza un sistema de codificación de 8 bits (en el sistema binario: 28 = 256, per tanto, del 0 al 255).

image-1654080900430.png

Continuando con la práctica anterior, ahora vamos a controlar la intensidad de un led utilizando la modulación PWM. Pero antes vamos a explicar cómo funciona la modulación PWM. PWM es la abreviatura de Pulse-Width Modulation (modulación de ancho de pulso*)*. Las salidas digitales de Arduino sólo tienen dos estados: ALTO/BAJOON/OFFENCENDIDO/APAGADO. Es decir, corresponden a una salida de 5 V (ON) y de 0 V (OFF). Con esto sólo podemos hacer actividades de encender y apagar un led, no podríamos controlar su brillo de menos a más o viceversa. Esto lo realiza por la proporción entre el estado alto (ON) y bajo (OFF) de la señal. El control digital se utiliza para crear una onda cuadrada de ciclo de trabajo diferente, una señal conmutada entre encendido y apagado. Este patrón de encendido y apagado puede simular voltajes entre encendido total (5 voltios) y apagado (0 voltios) al cambiar la parte del tiempo que la señal pasa en comparación con el tiempo que la señal pasa. La modulación de ancho de pulso, o PWM, es una técnica para obtener resultados analógicos con medios digitales. Se utiliza mucho para controlar leds, velocidades de motores, producción de sonidos, etc.

image-1654080389894.IJ51M1.png

La placa Keyestudio UNO tiene un total de 6 salidas PWM, que son digitales 3, 5, 6, 9, 10 y 11, pero en la placa Imagina TDR STEAM sólo se puede controlar por PWM el led RGB (pines 6, 9 y 10). Tenemos dos bloques diferentes para regular el color:

image-1654080407936.4MV7M1.png

7.2.1 Identificación de colores RGB.

Con este sencillo programa vamos a identificar cada color del led RGB con su pin correspondiente. Para ello vamos a utilizar los bloques normales de ArduinoBlocks (no los específicos de la Imagina TdR STEAM).

Encendemos sólo el led correspondiente al Pin 6.

Encendemos sólo el led correspondiente al Pin 9.

Encendemos sólo el led correspondiente al Pin 10.

image-1654080497350.DHZXM1.png

Actividad de ampliación: prueba ahora de ir activando varios leds a la vez para ver qué color aparece (puedes guiarte con la imagen siguiente).

7.2.2 Múltiples colores con el led RGB

ArduinoBlocks tiene bloques específicos para facilitar al máximo la programación de los leds RGB. Al utilizar ese bloque no debemos preocuparnos por saber las conexiones del led RGB porque ya están asignadas internamente en el bloque.

Comprueba como al pulsar sobre el icono del color se despliega una paleta de colores para que puedas elegir cualquier color.

image-1654080560701.Q05AN1.png

También se puede introducir directamente los números de cada uno de los colores RGB.

image-1654080570481.1HJDN1.png

Vamos a realizar ahora un programa que muestre sucesivamente los tres colores primarios.

image-1654080578279.32YTM1.png

Ahora realizaremos el mismo programa, pero poniendo la cantidad de cada color.

image-1654080588775.XYGAN1.png

Actividad de ampliación: prueba ahora de hacer un programa que muestre los colores del arcoíris en orden.

Retos

7.3 Reto A03. El zumbador

El zumbador (Buzzer en inglés) es un transductor electroacústico que produce un sonido o zumbido continuo o intermitente. En función de si se trata de un zumbador Activo o Pasivo, este zumbido será del mismo tono o lo podremos variar. Sirve como mecanismo de señalización o aviso y se utiliza en múltiples sistemas, como en automóviles o en electrodomésticos.

image-1654080653175.C8ZSM1.png

La placa Imagina TDR STEAM tiene un zumbador pasivo que está conectado en el pin D8.

image-1654080843720.png

ArduinoBlocks tiene 4 bloques específicos para programar y trabajar con el zumbador.

image-1654080827607.png

El sonido que emite el zumbador depende de la frecuencia de emisión del sonido. La frecuencia es el número de repeticiones por unidad de tiempo de cualquier evento periódico. Sabemos que el sonido se transmite en forma de onda y la frecuencia de un sonido es el número de oscilaciones o variaciones de la presión por segundo, nos indica cuantos ciclos por segundo tiene una onda.

image-1654080709723.CCS7M1.png

En la siguiente tabla están las frecuencias del sonido de las notas musicales: 

image-1654080725180.4GB6M1.png

7.3.1 Primeros sonidos con el zumbador.

En el bloque Zumbador podemos variar dos parámetros: Ms (1) es el tiempo que dura cada sonido en milisegundos y Hz (2) es la frecuencia a la que vibra la membrana del zumbador para emitir el sonido.

image-1654080962021.png

Prueba con este sencillo programa cómo suena el zumbador.

image-1654080970112.6R5DN1.png

Actividad de ampliación: cambia ligeramente el programa introduciendo tiempos diferentes en la duración de las notas y en las esperas para observar las diferencias que aparecen en la ejecución del programa.

7.3.2 Escalas musicales con el zumbador.

Vamos a hacer una escala de DO4 a DO5 utilizando un bloque que nos permite introducir directamente la nota sin que tengamos que saber los valores de la tabla de notas y frecuencias.

image-1654081045964.2X25M1.png

Haremos una pequeña escala musical.

image-1654081069503.LZN4M1.png

Actividad de ampliación: intenta tocar esta melodía utilizando el zumbador. Las notas negras deben tener una duración de 500ms, la negra con puntillo 750ms y la blanca 1000ms.image-1654081094076.5GHYM1.png

7.3.3 Melodías con RTTTL

Las melodías en formato RTTTL (Ring Tone Text Transfer Language) es un lenguaje muy simple, creado por Nokia, con el objetivo inicial de definir de forma sencilla partituras musicales en formato texto para móviles.

Estas melodías RTTTL se pueden introducir de forma sencilla desde ArduinoBlocks y sólo se necesitan dos bloques.

image-1654081148133.9EHZM1.png

Realiza este programa y elige una de las melodías que hay disponibles en el menú desplegable del bloque RTTTL.

image-1654081161967.GNW0M1.png

Actividad de ampliación: prueba con diferentes melodías RTTL.

Retos

7.4 Reto A04. El pulsador

En el siguiente reto vamos a utilizar el pulsador. Previamente debemos recordar que diferencia hay entre un pulsador y un interruptor. Un interruptor es un dispositivo que abre o cierra en paso de la corriente eléctrica, por ejemplo, los interruptores de la luz de nuestras casas, cada vez que los pulsamos cambian de estado y permanecen en él hasta ser pulsados de nuevo. Sin embargo, un pulsador sólo se activa mientras dure la pulsación volviendo a su estado inicial en el momento en el que se deje de pulsar.

image-1654081338195.M5BVM1.png

Hay dos tipos de pulsadores; los NA (normalmente abierto) o los NC (normalmente cerrado), con lo que al pulsarlo se activará la función inversa de la que en ese momento este realizando.

image-1654081373685.png

La placa Imagina TDR STEAM tiene dos pulsadores de nominados SW1 y SW2 que van asociados a los pines D2 y D7 respectivamente.

Ahora vamos a realizar un programa en el cual al pulsar sobre el pulsador se encienda el led y se apague cuando lo dejemos de pulsar. En el menú de Sensores encontramos los dos bloques correspondientes al pulsador y el pulsador filtrado.

image-1654081394030.png

7.4.1 Control ON/OFF de un led con un pulsador I

 

Para realizar este programa necesitamos conocer unas de las funciones más utilizadas en programación. Las funciones del menú Lógica con las funciones de condición (condicionales).

Condicionales: 

image-1654081437761.31I3M1.png   si (condición) hacer (acciones)

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.

El funcionamiento es el siguiente: 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.

image-1654081470378.png

En el apartado de condiciones se pueden introducir multitud de factores: estado de sensores (analógicos o digitales), comparaciones, igualdades, operaciones matemáticas, etc.

Usando el bloque lógico condicional de Si…. hacer… el programa quedaría como la imagen.

image-1654081532620.TR99M1.png

No se apaga el led azul nunca, esto no es lógico, en ningún momento del programa decimos que el led tenga que estar en la posición OFF. En el siguiente programa conseguiremos que el led rojo solamente esté encendido cuando apretemos el pulsador 1.

image-1654081543567.CKI0M1.png

Con este otro programa al pulsar el SW1 se enciende el led azul y al pulsar el SW2 se apaga.

image-1654081552529.OEUBN1.png

Actividad de ampliación: prueba ahora de apaga los dos leds con el pulsador SW1 y encenderlos con SW2.

7.4.2 Control ON/OFF de un led con un pulsador II

Necesitar dos pulsadores para tener que controlar un solo Led no parece la mejor opción, necesitamos introducir un sino. Si usamos un único pulsador debemos poner una nueva condición: un sino para cambiar el estado del led a OFF. Para ello debemos ampliar el condicional. Pulsando sobre el símbolo del engranaje (señalado con la flecha roja en la imagen) nos aparece un cuadro con funciones con las que podemos ampliar el condicional Si.

image-1654081609478.png

Hay dos opciones que se consiguen arrastrando los bloques como se aprecia en las siguientes imágenes:

image-1654081627304.png

Podemos ir encadenando varias estructuras (opción B).

Veremos ejemplos del uso de estas variantes a lo largo de diferentes programas en este documento. Pero, continuando con este reto, vamos a realizar un programa que al pulsar el pulsador 2 se encenderá el led azul y sino, se apagará.

image-1654081637415.QMM5M1.png

El código Morse es un sistema de representación de letras y números mediante señales emitidas de forma intermitente. Estas señales pueden ser luminosas como con nuestro Led o también podrían ser acústicas utilizando el zumbador. 

Este es el código Morse:

image-1654081653294.2D6DN1.png

Actividad de ampliación: haz una máquina de código Morse que envíe un mensaje de ayuda (SOS).

7.4.3 Control ON/OFF de un led con un pulsador III

En este reto vamos a hacer que el Led Azul se quede en estado encendido o apagado pulsando una sola vez el pulsador SW1.

En el programa que vamos a hacer a continuación necesitamos asegurarnos que cada vez que accionamos el pulsador sea detectado como una sola señal, ya que vamos a realizar un contador. Para hacer el contador vamos a utilizar una variable que la llamaremos Estado.

image-1654081692820.38E0M1.png

En Inicializar establecemos la variable a 0 y la llamamos ESTADO. Esta variable la utilizaremos como indicador de cambio de estado del pulsador.

image-1654081701654.YBCUM1.png

El contador consiste en ir sumando una unidad a la variable ESTADO cada vez que se dé al pulsador. Cada vez que pulsemos el pulsador, la variable tendrá su valor anterior más 1. Por ejemplo: si al inicio del programa la variable ESTADO tiene un valor de 0, al dar al pulsador su nuevo valor será igual a 0+1=1; al volver a dar al pulsador su valor será 1+1=2; al volver a pulsar 2+1=3, etc.

image-1654081713488.S8RAN1.png

Este programa irá incrementando el valor indefinidamente cada vez que apretemos el pulsador. Pero vamos a hacer que se reinicie la variable cada vez que llegue al valor 2, es decir, que vuelva a poner el valor de la variable a 0. De esa manera, cuando Estado tiene un valor de 0 el Led estará apagado, cuando ESTADO tenga un valor de 1 el Led estará encendido y cuando se vuelva a dar al pulsador el valor de ESTADO será 2 y se le mandará volver a un valor de 0 por lo que el Led estará apagado nuevamente. Este sería el programa:

image-1654081726457.88HDN1.png

image-1654081723480.61D7M1.png

Actividad de ampliación: intenta hacer el mismo programa, pero más simplificado (utilizando menos instrucciones).

Retos

7.5 Reto A05. El potenciómetro

Un potenciómetro es una resistencia cuyo valor es variable ya que son un tipo de resistencias especiales que tienen la capacidad de variar su valor cambiando de forma mecánica su posición. Con ellos indirectamente, se puede controlar la intensidad de corriente que fluye por un circuito si se conecta en paralelo, o controlar el voltaje al conectarlo en serie. Son adecuados para su uso como elemento de control en los aparatos electrónicos como el control de volumen, brillo, etc.

image-1654081830843.79L3M1.png

La placa Imagina TDR STEAM tiene un potenciómetro denominado Rotation que van asociado al pin A0. Las entradas Anúmero son entradas analógicas, así que empezamos con el uso de este tipo de entradas. Este potenciómetro permite realizar un giro de unos 270º entre topes (3/4 de vuelta).

image-1654081842559.png

La diferencia entre un sensor analógico y digital es que mientras este último, el digital, sólo permite dos tipos de entradas, 0-1, alto-bajohigh-lowon-off, un sensor analógico puede tener infinidad de valores. En Arduino, las entradas analógicas pueden tener 210 valores (10 bits de resolución), es decir, valores comprendidos entre 0 y 1023.

En el menú de sensores de ArduinoBlocks, disponemos de un bloque específico para realizar programas utilizando el potenciómetro de nuestra placa.

image-1654081855950.F0XAN1.png

En el desplegable del bloque del sensor, podemos elegir su lectura en porcentaje (%) o en valor (de 0 a 1023).

image-1654081861633.BDB3M1.png

7.5.1 Lectura de valores con el puerto serie

Para realizar una lectura de los valores del sensor es necesario utilizar la Consola (lector de datos por el puerto serie) que nos ofrece ArduinoBlocks, vamos a ver como se hace.

En primer lugar, generamos una variable a la que llamaremos pot.

image-1654081913047.10MTM1.png

Para cambiar el nombre de la variable pulsaremos sobre el menú desplegable del bloque de la variable y elegiremos Variable nueva… nos aparecerá una ventana en la que escribiremos el nuevo nombre y daremos a Aceptar. Ahora fijaremos el valor de la variable al valor del potenciómetro, tal y como está en la imagen.

image-1654081926365.ZSVVM1.png

Es importante establecer la variable con el valor del potenciómetro dentro de Bucle, ya que si sólo se hace en Inicializar el valor siempre será el mismo a lo largo de todo el programa. En otras ocasiones interesa establecer las variables en el inicio, pero no es este el caso.

Continuando con el programa, ahora nos faltan los bloques del Puerto Serie. El primero que debemos utilizar es el Iniciar Baudios 9.600 que siempre lo colocaremos en el Inicio y después el bloque Enviar.

image-1654081966347.png

Observa cómo queda el programa resultante:

image-1654081976418.MCPDN1.png

Sube ahora el programa y después pulsa sobre el botón de la Consola

image-1654081986506.HCX6M1.png

Se abrirá la siguiente ventana y pulsaremos sobre el botón conectar. De esta manera podremos ver cada medio segundo el valor de nuestro potenciómetro. Gira el potenciómetro y observa cómo van cambiando los valores.

image-1654081991794.AGYYM1.png

Actividad de ampliación: prueba ahora quitando el tic de Salto de línea a ver qué sucede.

7.5.2 Ajuste de valores de entrada y salida: mapear

Existe un pequeño “problema” entre las entradas y las salidas en Arduino. Las entradas trabajan con 10 bits (210 valores = 0 a 1023) y las salidas trabajan a 8 bits (28 valores = 0 a 255). Debido a esto, debemos realizar un cambio de escala. A este cambio de escala se le llama “mapear”. En el menú Matemáticas existe un bloque llamado mapear. Este bloque permite modificar el rango de un valor o variable desde un rango origen a un rango destino. Esta función es especialmente útil para adaptar los valores leídos de sensores o para adaptar valores a aplicar en un actuador.

image-1654082047764.9XRYM1.png

En esta actividad vamos a imaginar que con el potenciómetro queremos definir un rango de valores entre 0 a 255. Para ello definiremos una variable, llamada consigna, que será el valor mapeado del potenciómetro. En el potenciómetro cambiaremos su opción para obtener datos 0...1023.

image-1654082057689.WSEAN1.png

Continuando el programa para poder realizar lecturas por el puerto serie utilizaremos un nuevo bloque de crear texto con.... Fíjate como al pulsar sobre el símbolo del mecanismo podemos ampliar las líneas añadiendo varNum a la parte derecha.

image-1654082067919.EA8YM1.png

El programa resultante quedará de la siguiente forma: 

image-1654082093466.png

Por último, carga el programa, abre la Consola y comprueba las lecturas moviendo el potenciómetro.

image-1654082113505.X7KUM1.png

Actividad de ampliación: cambia ahora el rango de salida y el texto que envía por el puerto serie.

7.5.3 Control del led RGB con el potenciómetro

En la siguiente actividad vamos a controlar los colores del led RGB utilizando el potenciómetro. Vamos a hacer que cambie de color según varíe el valor del potenciómetro. Es decir, cuando el valor del potenciómetro se encuentre entre 0 y 100 que el color del led sea rojo, cuando se encuentre entre 101 y 200 que sea verde y cuando esté entre 201 y 255 que sea azul.

Del menú Lógica vamos a necesitar dos nuevos bloques; el bloque de Evaluar condición y el bloque de Conjunción/Disyunción. Con ellos crearemos estas condiciones:

image-1654082159180.F79BN1.pngimage-1654082172579.TJI7M1.png

Deberemos crear tres estructuras para hacer los tres rangos.

image-1654082185559.DZB7M1.png

El programa quedaría como muestra la imagen: 

image-1654082195859.YP6TM1.png

También se puede hacer el mismo programa de la siguiente forma:

image-1654082208046.QPJTM1.png

Actividad de ampliación: completa el programa con más condiciones.

Retos

7.6 Reto A06. La fotocélula (LDR – sensor de luz)

Ahora que ya sabemos usar el Puerto Serie para leer los valores de los sensores, vamos a utilizarlo para ver el valor de una fotocélula (LDR). Una LDR (Light Dependent Resistor) es un resistor que varía su valor de resistencia eléctrica dependiendo de la cantidad de luz que incide sobre él. El valor de la resistencia disminuye con el aumento de intensidad de luz incidente.

image-1654082431044.02ECN1.png

En la placa Imagina TDR STEAM la fotorresistencia está denominada como “Light” y viene conectada en el Pin analógico A1.

image-1654082444954.png

En el menú TDR STEAM de ArduinoBlocks hay un bloque específico para el uso de este sensor.

image-1654082462399.png

En este bloque también se puede seleccionar el tipo de lectura del valor del sensor en % o en unidades de 0 a 1023.

image-1654082470602.EKGDN1.png

7.6.1 Encender y apagar un led según el nivel de luz

En esta actividad vamos a simular en el encendido automático de una farola cuando se hace de noche. Utilizando la LDR y el led azul vamos a hacer que cuando la LDR esté a oscuras se ilumine el led azul.

El programa es muy sencillo. Hay que generar una variable que la llamaremos “nivel_luz” y la estableceremos al sensor LDR. Recuerda seleccionar valor 0…1023.

Por último, un condicional en el cual cuando el valor sea menor de 500 que se encienda el led azul y, sino que permanezca apagado.

image-1654082514928.D16WM1.png

Actividad de ampliación: haz un programa que muestre los valores de la LDR por el puerto serie.

Retos

7.7 Reto A07. Sensor de temperatura LM35D

En el siguiente reto vamos a medir la temperatura de una habitación utilizando el sensor de temperatura LM35D. El LM35D tiene un rango de temperatura de 0º a 100º ℃ y una sensibilidad de 10mV/ºC.

La placa Imagina TDR STEAM dispone de este sensor LM35D y está conectado en el Pin analógico A2.

image-1654082592908.png

En el menú TDR STEAM de ArduinoBlocks hay un bloque específico para el uso de este sensor.

image-1654082612944.png

7.7.1 Lectura del valor de la temperatura

Para ello vamos a repasar el concepto de variables. Lo vimos inicialmente con la práctica del LED en la que incrementábamos y disminuíamos su brillo utilizando una variable i. En esta ocasión vamos a profundizar un poco más.

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” o las del sensor de ultrasonidos en una llamada “Distancia”, etc. 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:

image-1654082740800.2718M1.png

image-1654082746959.FZUWM1.png

También podemos personalizar el nombre de la variable, de la siguiente forma:

image-1654082753591.WGWAN1.png

Una vez creada la nueva variable, podemos seleccionarla pulsando sobre el desplegable:

image-1654082766545.RSOWM1.png

Hay que tener 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”.

image-1654082780941.U9WXM1.png

Ahora vamos a realizar el programa que mida la temperatura y la muestre por la consola.

image-1654082788877.V0CYM1.png

Envía el programa a la placa, conecta la Consola y comprueba la información que aparece en el terminal.

image-1654082794609.I491M1.png

Actividad de ampliación: haz un programa que muestre datos más rápido y que muestre otro texto.

7.7.2. Alarma por exceso de temperatura

Ahora vamos a hacer una alarma sonora y acústica. El programa consistirá en hacer que el led rojo y el zumbador se accionen a la vez cuando el sensor de temperatura detecte una temperatura superior a 28ºC.

Para ello vamos a utilizar las Funciones. Las funciones permiten agrupar bloques de código. Esto es útil cuando un bloque de código se repite en varias partes del programa y así evitamos escribirlo varias veces o cuando queremos dividir el código de nuestro programa en bloques funcionales para realizar un programa más entendible.

Las funciones nos permiten realizar tareas que se repiten a lo largo del programa. En el menú “Funciones” tenemos el bloque “para () hacer algo”. Lo utilizaremos para crear nuestra función como la siguiente imagen.

image-1654082817485.3FQ2M1.png

Debes escribir el nombre de ALARMA dentro de la función. Al hacer esto automáticamente en el menú “Función” aparecerá un nuevo bloque llamado ALARMA.

image-1654082831589.D8YCN1.png

image-1654082834802.OQ77M1.png

El programa final sería el siguiente: 

image-1654082851564.S92EN1.png

Actividad de ampliación: haz un programa que varíe el programa anterior para que encienda de color verde el led RGB si la temperatura inferior a los 28ºC y rojo si la temperatura es superior a los 35ºC. En el rango intermedio se indicará de color azul.

Retos

7.8 Reto A08. Sensor de temperatura y humedad DHT11

En esta actividad vamos a leer los valores de temperatura y humedad utilizando el sensor DHT11. Este sensor mide temperaturas en un rango de acción de 0ºC a +50ºC con un error de +/- 2ºC y la humedad relativa entre 20% y 90% con un error de +/-5%. No es un sensor con una gran sensibilidad, pero cumple nuestros objetivos sobradamente.

El sensor de temperatura es un termistor tipo NTC. Un termistor es un tipo de resistencia (componente electrónico) cuyo valor varía en función de la temperatura de una forma más acusada que una resistencia común.

image-1654159612307.JPVWM1.png

Su funcionamiento se basa en la variación de la resistividad que presenta un semiconductor con la temperatura.

El término proviene del inglés “thermistor", el cual es un acrónimo de las palabras Thermally Sensitive Resistor (resistencia sensible a la temperatura). Existen dos tipos fundamentales de termistores:

La placa Imagina TDR STEAM dispone de un sensor DHT11 conectado al pin D4. En un principio podríamos pensar que se trataría de un sensor analógico o que tuviera dos entradas, una para la temperatura y otra para la humedad. Pero las propias características de diseño del sensor, hace que se puedan realizar todas las lecturas por un solo puerto digital.

image-1654159646042.png

En ArduinoBlocks en el menú de sensores tenemos el bloque específico para programar este sensor:

image-1654159668693.png

7.8.1 Zona de confort con DHT11

Puede definirse confort térmico, o más propiamente comodidad higrotérmica, como la ausencia de malestar térmico. En fisiología, se dice que hay confort higrotérmico cuando no tienen que intervenir los mecanismos termorreguladores del cuerpo para una actividad sedentaria y con una indumentaria ligera. Esta situación puede registrarse mediante índices que no deben ser sobrepasados para que no se pongan en funcionamiento los sistemas termorreguladores (metabolismo, sudoración y otros).

Según la imagen adjunta vamos a marcar unos puntos de temperatura y humedad en los que estaremos dentro de la zona de confort térmico, dentro de una zona de medio confort y fuera de la zona de confort.

image-1654159723710.BKRDN1.png

Usando el Led RGB vamos a indicar esas zonas:

A grandes rasgos estos serían los valores de las tres zonas: 

Para no complicar en exceso el programa de ejemplo, vamos a quedarnos sólo con la zona verde, es decir, el LED brillará en VERDE dentro de los parámetros de la Zona VERDE, para el resto el Led estará parpadeando en color ROJO.

Para realizar este programa necesitaremos varios de los bloques del menú de Lógica. Necesitaremos evaluar una condición Lógica y utilizar conjunciones y disyunciones.

image-1654159767980.Q898M1.png

Antes de evaluar las condiciones debemos establecer las dos variables; la variable Temperatura y la variable Humedad. Recuerda que en el menú desplegable del sensor DHT-11 debes elegir la Temperatura o la Humedad.

image-1654159786704.8Z43M1.png

Usando 3 bloques de conjunciones debes crear el siguiente bloque: 

 image-1654159830584.png

Después ir metiendo las condiciones en cada uno de ellos:

image-1654159843828.5KJYM1.png

Y ve uniendo todo hasta conseguir esta condición final:

image-1654159853312.A05EN1.png

image-1654159867161.P75BN1.png

Por último, debes crear una función, que la puedes llamar ALARMA. Para apagar el led RGB es ponerlo de color negro.

Y con todo esto, el programa final quedaría así: 

image-1654159874173.3WO9M1.png

Actividad de ampliación: realiza un programa con las tres zonas por colores. Ten cuidado con las zonas donde se unen los rangos, ya que si el valor es justo (por ejemplo 40) deberás poner el símbolo >= o <=. También puedes mostrar los valores de humedad y temperatura por el puerto serie.

Retos

7.9 Reto A09. Receptor de infrarrojos (IR)

Una gran parte de los electrodomésticos utilizan mandos a distancia de infrarrojos, como los televisores o equipos musicales. El sensor infrarrojo es un dispositivo optoelectrónico capaz de medir la radiación electromagnética infrarroja de los cuerpos en su campo de visión. Todos los cuerpos emiten una cierta cantidad de radiación, esta resulta invisible para nuestros ojos, pero no para estos aparatos electrónicos, ya que se encuentran en el rango del espectro justo por debajo de la luz visible.

image-1654159907376.3YPEN1.png

En el caso del receptor de infrarrojos (IR) de la placa IMAGINA TDR STEAM 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,image-1654159927216.C8JXM1.png PANASONIC, JVC, SAMSUNG, WHYNTER, AIWA, LG, SANYO, MITSUBISHI y DENON. Es decir, detectaría cualquier señal emitida por uno de esos mandos.

El mando a distancia contiene un circuito interno, un procesador y un led (Light Emitting Diode) que emite la señal infrarroja.

La señal infrarroja transmite el código correspondiente al botón del mando a distancia pulsado y lo transmite al dispositivo en forma de una serie de impulsos de luz infrarroja. Pensemos en el código Morse, que ya vimos en una de las prácticas anteriores, y sus tonos cortos y largos. De forma análoga, los pulsos de luz infrarroja transmitidos son de dos tipos, los llamados 0 y 1. Los 0 podrían verse como los tonos cortos y los 1 como los tonos largos. El receptor IR recibe la serie de impulsos de infrarrojos y los pasa a un procesador que descodifica la serie de 0 y 1 en los bits digitales para después realizar la función que programemos.

En la placa IMAGINA TDR STEAM el sensor receptor IR se encuentra conectado al pin digital D11. En el menú de “Sensores” de ArduinoBlocks tenemos dos bloques para programar nuestro receptor IR, uno propio del sensor y otro para el mando.

image-1654159971298.png

image-1654159990020.png

7.9.1 Recepción de comandos por infrarrojos

Vamos a realizar una pequeña actividad en la que utilicemos el receptor IR y el mando emisor de Keyestudio. Primero crearemos una variable de texto a la que llamaremos “codigo” (sin acento, en programación se debe evitar poner acentos y símbolos) y la estableceremos con el bloque del Receptor IR.

image-1654160021344.V1C2M1.png

Con este bloque podemos saber el código que envía nuestro mando a la placa. Realizaremos un pequeño programa para ver que código envía cada botón del mando.

image-1654160028168.VAICN1.png

A continuación, vamos a hacer otro programa. Consiste en encender el led rojo si pulsamos el botón arriba y que se apague cuando pulsamos el botón abajo. Vigila la versión del mando porque tendrás que cambiar la versión en función del mando.

image-1654160040207.3I83M1.png

Ahora ya podemos completar el programa que queda de la siguiente forma. 

image-1654160048371.VNL0M1.png

Actividad de ampliación: realiza un programa con el que puedas controlar el color del led RGB con diferentes botones del mando y que se muestre el código enviado por el puerto serie.

Retos

7.10 Reto A10. Puertos de expansión I2C: pantalla LCD

El estándar I2C (Inter-Integrated Circuit) fue desarrollado por Philips en 1982 para la comunicación interna de dispositivos electrónicos en sus artículos. Posteriormente fue adoptado progresivamente por otros fabricantes hasta convertirse en un estándar del mercado.

I2C también se denomina TWI (Two Wired Interface) únicamente por motivos de licencia. No obstante, la patente caducó en 2006, por lo que actualmente no hay restricción sobre el uso del término I2C.

El bus I2C requiere únicamente dos cables para su funcionamiento, uno para la señal de reloj (SCL) y otro para el envío de datos (SDA), lo cual es una ventaja frente al bus SPI. Por contra, su funcionamiento es un poco más complejo, así como la electrónica necesaria para implementarla.

image-1654160078963.9NZZM1.png

En el bus, cada dispositivo dispone de una dirección, que se emplea para acceder a los dispositivos de forma individual. Esta dirección puede ser fijada por hardware (en cuyo caso, frecuentemente, se pueden modificar los últimos 3 bits mediante “jumpers” o interruptores, o por software.

En general, cada dispositivo conectado al bus debe tener una dirección única. Si tenemos varios dispositivos similares tendremos que cambiar la dirección o, en caso de no ser posible, implementar un bus secundario.

El bus I2C tiene una arquitectura de tipo maestro-esclavo. El dispositivo maestro inicia la comunicación con los esclavos, y puede mandar o recibir datos de los esclavos. Los esclavos no pueden iniciar la comunicación (el maestro tiene que preguntarles), ni hablar entre si directamente.

El bus I2C es síncrono. El maestro proporciona una señal de reloj, que mantiene sincronizados a todos los dispositivos del bus. De esta forma, se elimina la necesidad de que cada dispositivo tenga su propio reloj, de tener que acordar una velocidad de transmisión y mecanismos para mantener la transmisión sincronizada (como en UART)

image-1654160095805.50HEN1.png

A este bus de comunicaciones se le pueden conectar múltiples dispositivos:

Vamos a proponer una serie de retos con algunos elementos I2C que no vienen integrados en la placa Imagina TDR STEAM pero que se pueden incorporar.

7.10.1 Pantalla LCD 16x2

Vamos a realizar la conexión de una pantalla LCD (16x2). La pantalla LCD utilizada es una pantalla de 16 caracteres (por fila) y dos columnas. Esta pantalla tiene 4 conexiones, dos cables (SDA y SCL para el bus de comunicaciones I2C) y los dos cables de alimentación (VCC y GND).

Conectaremos la pantalla LCD a la placa Imagina TDR STEAM en el conector indicado:

image-1654160165282.png

Hemos de tener cuidado y respetar las conexiones, tal y como se indica en la siguiente tabla:

TdR STEAM Color Cable LCD
GND Negro GND
VCC Rojo VCC
SDA Amarillo SDA
SCL Blanco SCL

Conexión de los cables a la pantalla y a la placa Imagina TDR STEAM. 

image-1654160191322.SSAVM1.png

En la pantalla aparecerán correctamente los datos cuando la coloquemos es esta posición, sino se verán al revés:

image-1654160206573.96K7M1.png

En la configuración de la pantalla hemos de seleccionar la dirección de configuración 0x27.

Vamos a realizar un programa que muestre una información por la pantalla LCD. El programa mostrará un texto por la pantalla LCD y un contador de 0 a 255 que se reiniciará en cada ciclo.

image-1654160251845.W00YM1.png

710.2 NO INCLUIDO EN EL KIT DE CATEDU
La pantalla OLED

La pantalla OLED la conectaremos también en el puerto de comunicaciones I2C respetando las conexiones.

image-1654160265692.T2K7M1.png

La pantalla que vamos a utilizar es una pantalla OLED de 0,96 pulgadas de 128x64 pixeles. OLED es la abreviatura de diodo emisor de luz orgánico. En el nivel microscópico, una pantalla OLED es una matriz de leds que se iluminan cuando emiten energía. La tecnología antigua de las LCD (pantalla de cristal líquido) utiliza polarizadores controlados electrónicamente para cambiar la forma en que la luz pasa o no pasa a través de ellos. Esto requiere una luz de fondo externa que ilumine toda la pantalla por debajo. Esto supone un consume alto de energía porque en el momento en que la pantalla está encendida, se debe proporcionar suficiente luz para todos los píxeles. La nueva tecnología OLED solo usa electricidad por cada píxel que queramos encender. Esto hace que la tecnología OLED sea muy eficiente. Además, la forma en que se construyen estos tipos de OLED permite que sean muy delgadas en comparación con la pantalla LCD.

Vamos a realizar un programa para poder ver los datos del sensor de humedad y temperatura por la pantalla OLED. Existen una serie de bloques específicos para controlar la pantalla.

image-1654160371696.8A5XM1.png

Primero configuraremos la dirección I2C de la pantalla OLED. En el caso de la pantalla utilizada, tendremos que seleccionar 0x3C.

image-1654160399947.BDL2M1.png

Colocamos el bloque dentro de Inicializar y creamos las dos variables (Temperatura y Humedad).

image-1654160410952.C772M1.png

A continuación, podemos hacer diferentes cosas: 

El programa resultante para ver los datos en la pantalla es el siguiente:

image-1654160443354.O938M1.png

Retos

7.11 Reto A11. Serial plotter

Vamos a realizar un programa muy sencillo e interesante que nos permitirá ver los datos del potenciómetro en forma de gráfica y los podremos exportar en formato CSV para poder tratarlos posteriormente. Con este programa conseguiremos realizar un sistema de adquisición de datos.

Este es el programa en ArduinoBlocks que hemos confeccionado.

image-1654160471133.AX86M1.png

Enviamos el programa a la placa y activamos el Serial Plotter.

image-1654160481531.FT7DN1.png

Pondremos la velocidad de comunicación (baudrate) a 9600 y después pulsaremos Conectar para empezar a ver los datos.

image-1654160495857.UOGTM1.png

Para poder guardar los datos en CSV hemos de apretar el botón de grabación, adquirir los datos que queremos y apretar el botón de parar grabación.

image-1654160505870.5PK8M1.png

Podremos ver la cantidad de muestras recogidas. 

image-1654160517921.M9EUM1.png

Ahora pulsamos en el botón CSV para guardar los datos en nuestro ordenador y poder trabajar con el fichero de datos creado.

image-1654160536253.P0YWM1.png

Actividad de ampliación: modifica el programa para que muestre los datos ahora de otro sensor.

Retos

7.12 Sistemas de comunicaciones: Bluetooth y Wifi

En la placa TDR STEAM disponemos de un puerto de comunicaciones serie que nos permite conectar módulos Bluetooth o Wifi. Además, dispone de un interruptor para poder conectarlos o desconectarlos ya que utiliza los mismos pines Rx/Tx que para comunicarse con el ordenador).

Estado del interruptor:

image-1654160574133.png

7.12.1 Reto A12.1. Módulo Bluetooth

Para poder hacer la comunicación por Bluetooth con nuestra placa Imagina TDR STEAM hemos de conectar un módulo Bluetooth (en nuestro caso utilizaremos un módulo HC-06).

Primero conectaremos el módulo Bluetooth al conector marcado de nuestra placa. Hemos de tener en cuenta la posición del interruptor:

image-1654160613797.png

Necesitaremos dos programes pera poder trabajar:

7.12.1.1 AppInventor2

Primero deberemos crear una cuenta para AppInventor2 a través del siguiente enlace:

http://ai2.appinventor.mit.edu/

Una vez creada la cuenta procederemos a realizar la programación, tanto en “Designer” como en “Blocks”. A continuación, se detallan las dos partes del programa.

Designer

image-1654160666348.D6LZM1.png

image-1654160680198.DFLVM1.png

Blocks 

image-1654160739359.ZIL0M1.png

image-1654160750522.PJ08M1.png

image-1654160757897.SAWUM1.png

7.12.1.2 ArduinoBlocks

A continuación, procederemos a realizar el programa en ArduinoBlocks y que irá en la placa Imagina TDR STEAM.

image-1654161326842.DW65M1.png

Cuando tenemos preparados los dos programas, seguiremos los siguientes pasos:

Activamos el módulo Bluetooth del teléfono móvil.

image-1654161511924.png

Abrimos el servicio Bluetooth del móvil y buscamos el nuevo dispositivo. Aparecerá un dispositivo llamado HC-06.

image-1654161527390.png

Elegimos este módulo e introducimos la contraseña: 1234 (opcionalmente puede ser 0000).

image-1654161454599.png


Ahora ya tenemos sincronizados los dos dispositivos Bluetooth. 

image-1654161474271.png

A continuación, abrimos la aplicación (en este caso se llama “Bluetooth).

image-1654161557212.png

Apretamos el botón Connexió para poder hacer la conexión (está en letras de color negro). Recordamos que el interruptor ahora está en la posición ON en la placa Imagina TDR STEAM.

image-1654161587421.png

Seleccionamos nuestro módulo Bluetooth (mediante la dirección MAC):

image-1654161622419.png

Ahora el botón Connexió aparecerá con las letras de color azul. 

image-1654161647914.png

Y la luz del módulo Bluetooth de la placa Imagina TDR STEAM quedará fija en el color rojo.

image-1654161667644.png

Si apretamos el botón Encen led se encenderá el led azul. 

image-1654161688207.png

Si apretamos el botón Apaga led se apagará el led azul.

image-1654161710611.png

7.12.2 Módulo Wifi

Para poder realizar la comunicación Wifi hemos de realizar unos pasos similares a la comunicación Bluetooth.

Para poder visualizar los datos enviados desde la placa Imagina TDR STEAM utilizaremos el programa ThingSpeak y la aplicación ThingView. Por tanto, hemos de preparar los siguientes programas:

Para configurar los tres elementos hemos de seguir los pasos descritos a continuación.

7.12.2.1 ThingSpeak

Crear una cuenta en ThingSpeak: https://thingspeak.com/login

image-1654161787395.01EZM1.png

Una vez que hemos creado la cuenta ThingSpeak hemos de apuntar los siguientes datos:

image-1654161810157.ZPM0M1.png

Otros datos importantes están en la pestaña “API Keys”.

image-1654161839609.png

Por último, hemos de hacer la configuración de los canales dónde recibiremos los datos en Channel Settings.

image-1654161902184.png

¡Ya hemos configurado ThingSpeak!

7.12.2.2 ArduinoBlocks

Una vez configurado ThingSpeak, prepararemos el programa de ArduinoBlocks para leer los datos de los sensores y enviarlos vía Wifi.

En el bloque “Inicializar”, configuraremos:

image-1654161991015.png

A continuación, configuraremos la publicación de los datos con la función para: subir datos a la nube:

Estos datos los hemos de poner en cada campo de: Publicar Tema

image-1654162044857.png

¡Ya hemos configurado ArduinoBlocks!

7.12.2.3 ThingView

Si queremos ver los datos en el móvil, podemos instalar la aplicación ThingView. Para hacer la instalación hemos de seguir los siguientes pasos:

image-1654162085845.U075M1.png

Add channel → Channel ID: ponemos el código de nuestro canal de ThingSpeak (Channel ID).

image-1654162095566.HHRYM1.png

Visualización de datos en ThingView. 

image-1654162118506.png

Ya está configurado, ¡a ver datos!

8. Proyectos con la placa Imagina TDR STEAM

A continuación, os proponemos una serie de proyectos finales con las placas Kesyestudio UNO R.3 e Imagina TDR STEAM. Están realizados en unas fichas que ocupan una hoja para que sean más fáciles de visualizar. Cada proyecto tiene dos tipos de actividades muy similares, pero programadas de dos formas diferentes: utilizando los bloques propios de la Imagina TDR STEAM o utilizando los bloques convencionales.

Aquí tenéis un enlace a un recopilatorio de fichas de profesores con proyectos realizados en el curso “Reptes TdR STEAM” impartido por CESIRE y Robolot Team (nota: están pendientes de verificar y comprobar).

https://www.dropbox.com/sh/m04oqajozo4oh1x/AADvpopOeWnjF048q- wS5hkBa?dl=0

También se puede integrar todo el kit de la placa Imagina TDR STEAM dentro de una caja 3D diseñada por Eduard Casadevall. Aquí tenéis las fotografías de este práctico montaje.

image-1654162171619.NXP1M1.pngimage-1654162182644.6HD2M1.png


image-1654162220737.FKS7M1.png


Créditos

Estos contenidos han sido elaboradas por Fernando Hernández García, Ingeniero Técnico Industrial Especialidad Electrónica, formador del profesorado y profesor del Institut Torre del Palau (Terrassa – Barcelona). Enlace de los contenidos. Licencia CC-BY-NC-ND.
Permiso