2 Programación en bloques mBlock

Programación mBlock

mBlock es un programa especializado en el manejo de los robots de Makeblock (ver cursos de mBot en Aularagon), estos robots al principio estaban basados en Arduino por lo tanto este programa permitía programar Arduino. Actualmente permiten muchas arquitecturas de placas.

Se puede descargar gratuitamente en https://www.mblock.cc/en/download/, actualmente esta la versión 5, aunque verás que algunos vídeos de este curso enseñan la versión 3 pero las capturas se realizan en la versión actual

Dos formas de programar mBlock

OPCIÓN Programación en vivo

mBlock (y los otros S4A, Snap4Arduino... también) permite la programación en vivo Es decir, que el programa reside en el ordenador, y en la placa hay instalado un Firmware para ir escuchando y ejecutando lo que manda el ordenador. 

OPCIÓN Programación cargar a la placa

Todos los programas editores de Arduino (tanto los que programan con código como el Arduino IDE) como los editores de programas gráficos en bloque (mBlock, Snap4Arduino, Arduinoblocks, ...) permiten cargar el programa en la placa.  Las ventajas y desventajas son las opuestas de trabajar en vivo.

MÉTODOS PARA INTERACTUAR CON LOS OBJETOS

En mBlock 3.0 la comunicación era inmediata, fíjate en este script de una alarma:

embedded-image-xGEexnUg.jpeg

Mezcla en el mismo script:

Con mBlock 5.0 YA NO SE PUEDE, pero tenemos unos trucos

MÉTODO UTILIZAR VARIABLES GLOBALES                                                                          

Se pueden crear variables, en cualquier objeto, y las lee cualquier objeto,

Este método se utiliza con la opción EN VIVO

variablesglobales.jpg

De esta manera si creamos una variable frase para todos los objetos:

frase3.jpg

Podemos usarla en el robot

frase1.jpg

y el programa del objeto que queramos, en este caso el oso panda lo puede visualizar

frase2.jpg

MÉTODO UTILIZAR MENSAJES                                                                                  

Cualquier objeto tiene a su disposición enviar mensajes a los otros

Este método se utiliza con la opción EN VIVO

mensajes.jpg

MÉTODO EXTENSIÓN BROADCAST = TRANSMITIR MENSAJES                                  

Es parecido al anterior, hay que ir al + que hay abajo para instalar extensiones

arduino-pelotahinchadistancia3.png

Buscar la extensión "Broadcast" e instalarla 

broadcast.jpg

Se instala primero descargándola con el + aquí

broadcast1.png

Y luego añadir una vez descargada

broadcast2.png

Entonces aparecen unas nuevas instrucciones

broadcast3.png

Este método se utiliza con la opción EN CARGA

y se instalan unas instrucciones extras parecidas a las anteriores pero más potentes

El resto de objetos trabajan en modo vivo, es decir, si cambias un bloque, automáticamente se ven los efectos

A lo otros objetos TAMBIÉN hay que instalar la extensión BROADCAST

DESVENTAJA no se pueden transmitir mensajes de objetos a la placa. Sólo de la placa a los objetos

Preparando mBlock y Arduino

Hay que hacer dos cosas

Lo mejor un tutorial muy breve:

INTERRUPTOR CREPUSCULAR

Conocimientos previos

SENSOR DE LUZ LDR


El LDR es una resistencia que varía su valor con la luz, cuanto más OSCURO más grande es su valor, por lo tanto por la ley de Ohm V= I*R  este módulo nos da una señal analógica (voltios) que aumenta con la oscuridad. Para saber más del LDR te recomendamos esta página de Luis Llamas.

Los valores analógicos en el Arduino van desde 0 a 1023, luego hay que elegir un valor umbral, el cual, a partir de ese valor es un valor digital 1 o un 0, nosotros hemos elegido 500.

Por hardware puedes regular el potenciómetro que tiene el módulo para que produzca el cambio cuando lo desees:


MODULO LED RGB

Este módulo tiene 4 pines que podemos proporcionar valores analógicos desde 0V a 5V para conseguir diferentes colores:

Pines B = Blue G = Green R = Red (-) = GND

Recuerda que Arduino tiene entradas digitales, entradas analógicas, salidas digitales, pero no tiene salidas analógicas. En vez de ello tiene salidas PWM ¿Qué no sabes lo que es? 🤔 eso es porque te has saltado un capítulo anterior.

De momento conectaremos el pin G (Green) a una salida digital normal (pin 7), luego sólo se puede encender o apagar.

Más adelante usaremos los colores Blue y Red a salidas PWM

En esta página puedes encontrar más detalles de este módulo y un ejemplo curioso de utilización sin cables.

RETO

Solución esquema

Solución Video

Solución programa

El programa lo tienes aquí https://planet.mblock.cc/project/3255351

Utilizaremos la técnica variables globales https://libros.catedu.es/books/domotica-con-arduino/page/programacion-mblock

Objeto placa arduino

Nota: el pin digital 3 bajo es por si tienes puesto el buzzer, para que no suene, lo veremos más adelante.

interruptor-crepuscular1.jpg

Objeto panda

interruptor-crepuscular2.jpg

APERTURA PUERTA

Conocimientos previos

SERVOMOTORES

Visita esta página para que veas dos vídeos y entiendas la diferencia entre:

servo.jpg
Tranquilo, que el servo que nos interesa es un servo convencional donde simplemente se fija el ángulo con la instrucción en mBlock



Si quieres saber más sobre servos te aconsejamos visitar esta página de Luis Llamas.

INTERRUPTOR TÁCTIL




No tiene mucho misterio: detecta una acumulación de carga y dispara un pulso positivo. Si quieres saber más mira esta página de Luis Llamas.

BUZZER ACTIVO



La diferencia con el pasivo es que no es necesario enviarle pulsos para que emita una frecuencia, sólo tenemos que dar la orden y él reproduce un tono.

Ojo que funciona con lógica negativa es decir:

Si quieres saber más de este componente visita esta página

RETO

Cuando se pulse el interruptor táctil ....

(sería como una llave táctil)

Solución esquema

Solución Video

Solución programa

El programa lo tienes aquí https://planet.mblock.cc/project/3251877

Se utiliza la técnica de envío de mensajes https://libros.catedu.es/books/domotica-con-arduino/page/programacion-mblock

El dispositivo ARDUINO

domotica-aperturapuerta1.png

El objeto OSO PANDA

domotica-aperturapuerta2.png

El objeto puerta tiene este sencillo programa:

domotica-aperturapuerta3.png


ALARMA AGUA

Conocimientos previos

SENSOR DE AGUA



Es un sensor muy sencillo: Al mojar los conductores, aumenta la conductibilidad y se traduce en una salida HIGH en su pin de salida S.
Si quieres saber más de este sensor visita esta página de Luis Llamas.

Con sólo tener los dedos húmedos ya lo detecta.

Hay que tener en cuenta que sólo queremos detectar AGUA o NO AGUA, o sea digital. Hay otros sensores de humedad que están indicados para medir la humedad del suelo, (tienen forma de dos pinchos para clavarlos) en estos casos que queremos medir la cantidad de humedad la señal es más precisa y analógica. Ver

RETO

Si detecto agua : Aviso de agua en el fondo y en el objeto Panda y cierro la puerta pues entra el agua de la lluvia con el mismo procedimiento que en apartado anterior.

Solución esquema

El esquema el sensor de agua es uno de humedad, pero no había otro en Fritzing  😳

Solución Vídeo

Solución programa

El programa lo tienes aquí https://planet.mblock.cc/project/3255438

Se utiliza la técnica de variables globales https://libros.catedu.es/books/domotica-con-arduino/page/programacion-mblock

Dispositivo ARDUINO

domotica-agua1.png

Objeto Oso panda

domotica-agua2.png

JOYSTICK

Conocimientos previos

JOYISTICK

Yo no sé qué tiene este componente que llama la atención a los chavales



Así que vamos a aprovecharlo: Tiene 2 potenciómetros según los ejes X e Y y un interruptor central. Las dos primeras salidas son analógicas, el microruptor (cuando presionas el joystick) lo trataremos también analógico, pues nos faltarán entradas y salidas digitales cuando lleguemos al final  y queramos poner un Bluetooth.

Si quieres saber más de este componente visita esta página. de Luis LLamas

SALIDAS PWM

Como Arduino no tiene valores de salida analógicos, utilizaremos los pines PWM (~) para simular tensiones variables de salida.

De esta manera la luz Roja y Azul serán variables pudiendo crear el ambiente que queramos.

¿No sabes lo que es PWM (~)?  eso es que no te has leído los capítulos anteriores


RETO

Solución esquema

Al ser un componente analógico lo conectaremos en las entradas analógicas: * La salida eje X que gradúa la luz azul en A1 * La salida eje Y que gradúa la luz roja en A2 * La salida Switch central en A3

Solución vídeo

Solución esquema

El programa lo tienes aquí https://planet.mblock.cc/project/3255492

Se ha utilizado el truco DE ENVIOS MENSAJES BROADCAS ver https://libros.catedu.es/books/domotica-con-arduino/page/programacion-mblock

Elegimos esta opción pues el programa es muy complejo para ejecutarlo EN VIVO es mejor cargar, y que la placa Arduino envíe los mensajes correspondientes. Si se realiza EN VIVO da problemas

Para ir simplificando se ha utilizado la creación de bloques, y cada mensaje que envía la placa Arduino lo recogerá un objeto

DISPOSITIVO ARDUINO

Ejecuta siempre los 4 bloques

DOMOTICA-JOYSTICK1.png

Bloque NOCHE

DOMOTICA-JOYSTICK2.png

Bloque AGUA

DOMOTICA-JOYSTICK3.png

Bloque PULSADOR

DOMOTICA-JOYSTICK4.png

Bloque ABERPUERTA-Y-DESPUESICERRA

DOMOTICA-JOYSTICK5.png

Finalmente bloque JOYSTICK -RGB que lee los pines de entrada A2 y A3.

Son valores desde 0 hasta +1024 pero la posición central del Joystick está en 500, luego tenemos que contar desde 500 hasta 1024, luego hay que convertirlos a 0-255

Esos valores ya normalizados transmitirlos a los pines digitales donde está conectado el pin rojo y azul del led RGB por PWM

DOMOTICA-JOYSTICK6.png

OBJETO OSO PANDA

recoge la LUZ

DOMOTICA-JOYSTICK7.png

El OBJETO PUERTA

Que recoge los mensajes del sensor táctil

DOMOTICA-JOYSTICK9.png

OBJETO WATER

recoge el mensaje gotera y aparece si hay

DOMOTICA-JOYSTICK10.png

ALARMA LASER

Conocimientos previos

El diodo láser es un elemento motivador, barato y fácil de usar con el Arduino pues se activa digitalmente:

Si quieres saber más de este componente, te recomendamos esta página de Luis Llamas. Si tienes que comprar uno, te recomendamos que no sea superior a 5mW, pues puede dañar permanentemente la retina del ojo [+info]. El modelo que te proponemos es de 1mW, no obstante, EVITA SIEMPRE QUE EL LÁSER APUNTE A LOS OJOS especialmente con niños.

Reto

No mantenemos la programación del interruptor crepuscular pues necesitamos el LDR para la alarma

Solución maqueta

En este caso hay que tener cuidado con la fijación del láser y el LDR para que apunte al LDR y otra cuestión son los cables: al instalarse fuera de la casa hay que utilizar cables largos o añadir dos M-H consecutivos.

Solución conexiones eléctricas

Solución vídeo

Solución programa

El programa lo tienes aquí https://planet.mblock.cc/project/3255982

Principalmente el difícil es el bloque Alarma

DOMOTICA-ALARMA.png

Los otros objetos

Objeto puerta

DOMOTICA-ALARMA2.png

Objeto gota

DOMOTICA-ALARMA3.png

Objeto Policia

DOMOTICA-ALARMA4.png

Otra opción

En vez de un láser, con un SENSOR DISTANCIA POR ULTRASONIDOS


Este sensor mide las distancias utilizando el eco:

Un ojo marcado con la T es un altavoz: Emite un sonido ultrasónico fuera de lo audible
El otro ojo marcado con una R es un micrófono que detecta el pulso emitido por T.



Por software hay que calcular la distancia utilizando la fórmula v=e/t donde v es la velocidad del sonido.

Si quieres saber más de este sensor mira esta página de Luis Llamas.

 su código en mBlock es muy sencillo:



Podríamos usar uno más profesional, por ejemplo DETECTOR DE MOVIMIENTO CON ARDUINO Y SENSOR PIR, pero su ángulo de sensibilidad es tan abierto que todo el rato se dispara. (un rollo si se utiliza en clase).

Reto alternativo

Conexiones

Video

El programa lo puedes descargar aquí pero realizado en mBlock3

BLUETOOTH pasos previos

Conocimientos previos

Tienes que visitar las siguientes páginas de la Unidad 4 Comunicaciones con Arduino:

Aprende a configurar los botones de la APP !! diapositiva 12 pero en vez de Up, Down, Right y Left los que se establezcan en el reto

Configuración avanzada pues nosotros somos pitos, y conectaremos el HC-06 en los pines digitales D11 y D12 y no en D0 y D1 pues están ocupados con la comunicación del ordenador.
El RX del HC-06 en 11 y el TX del HC-06 en el 12

En mBlock INSTALAR LA EXTENSIÓN HC-06

Entramos en Extensión

DOMOTICA-BLUETOOTH1.png

Y ponemos en el buscador HC-06 nosotros hemos elegido esta, pero podría ser otra, es cuestión de experimentar

DOMOTICA-BLUETOOTH2.png

IMPORTANTE

DOMOTICA-BLUETOOTH3.png

Un ejemplo: Apertura simple de la puerta

Conectamos:

y el código es: 

https://planet.mblock.cc/project/3481632

mblock-bluetooch-simpleapartura.png

BLUETOOTH

Reto

Controlar nuestra casa con el móvil, para ello vamos a definir los siguientes comandos:

COMANDO VOZ DATO descripción
Comando 1 abrir A abrir la puerta y cierra automáticamente
Comando 2 puerta P abrir/cerrar la puerta
Comando 3 alarma L activar/desactivar la alarma
Comando 4 pit T hace un pit
Comando 5 rojo R enciende luz interior roja
Comando 6 azul B enciende luz interior azul
Comando 7 apaga O apaga luces interiores

Lo tienes que hacer así:

Solución conexiones eléctricas

Solución vídeo

Solución programa

El programa lo tienes aquí : https://planet.mblock.cc/project/3259600

Todo este código, si lo pongo en un bloque, NO FUNCIONA, no sé por qué, así que a lo bruto en el bloque principal

DOMOTICA-BLUETOOTH4.png

Total que el programa del dispositivo Arduino queda bastante monstruoso

DOMOTICA-BLUETOOTH5.png

Objeto puerta

DOMOTICA-BLUETOOTH6.png

Objeto gotera

DOMOTICA-BLUETOOTH7.png

Objeto policia

DOMOTICA-BLUETOOTH8.png