2 Programación en bloques mBlock
- Programación mBlock
- Preparando mBlock y Arduino
- INTERRUPTOR CREPUSCULAR
- APERTURA PUERTA
- ALARMA AGUA
- JOYSTICK
- ALARMA LASER
- BLUETOOTH pasos previos
- BLUETOOTH
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.
- VENTAJAS
- Te permite interactuar el Arduino y el ordenador, por ejemplo podemos hacer que cuando el detector de humedad detecte agua, que salga por pantalla un fondo acuático, o que pulsando una tecla del teclado se encienda un LED en la placa...
- DESVENTAJAS
- hay que cargar dentro del Arduino el Firmware exclusivo de mBlock para que Arduino haga caso a mBlock
- Hay que tener nuestro ordenador como intermediario, se come los recursos y puede que nuestro programa ne la placa vaya lento
- Por supuesto necesita tener ordenador conectado al Arduino, o sea, trabaja como un esclavo del 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:
Mezcla en el mismo script:
- órdenes específicas de la placa arduino (set digital...)
- órdenes específicas del objeto que exista en mBlock (por defecto el oso panda) say .... switch costume to ....
- órdenes del fondo switch backdrop to ...
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
De esta manera si creamos una variable frase para todos los objetos:
Podemos usarla en el robot
y el programa del objeto que queramos, en este caso el oso panda lo puede visualizar
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
MÉTODO EXTENSIÓN BROADCAST = TRANSMITIR MENSAJES
Es parecido al anterior, hay que ir al + que hay abajo para instalar extensiones
Buscar la extensión "Broadcast" e instalarla
Se instala primero descargándola con el + aquí
Y luego añadir una vez descargada
Entonces aparecen unas nuevas instrucciones
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
- En el mismo mensaje podemos transmitir valores asociados
- Funciona EN MODO CARGA
- Esto es muy útil pues hay instrucciones que sólo se pueden utilizar en modo CARGA, de esta manera podemos pasar valores de la placa electrónica a los objetos del ordenador (oso panda o lo que sea) simplemente teniendo conectado la placa con el ordenador.
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
- Cuando te descargas mBlock por defecto está preparado para utilizarlo con los robots (mBot), hay que decirle que no vamos a conectar un robot, que la placa será Arduino UNO
- Nuestro ARDUINO no pueden entender mBlock por lo que hay que grabarle un software dentro (un software que se graba en una placa hardware se llama FIRMWARE, no se borra cuando se apaga) y este firmware entiende lo que le manda mBlock, es decir, si conectamos otro Arduino y no le hemos grabado el firmware, no entenderá a mBlock.
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
-
Cuando el sensor LDR detecte oscuridad
-
El led RGB se enciende verde
-
Cambiamos a fondo tipo "noche"
-
-
En caso contrario
-
el led RGB está apagado
-
el fondo es día
-
Solución esquema
-
El módulo LDR lo conectamos al pin analógico A0
-
El LED RGB lo conectamos
-
Pin 5 digital - Blue
-
Pin 6 digital - Red
-
Pin 7 digital - Green
-
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.
Objeto panda
APERTURA PUERTA
Conocimientos previos
SERVOMOTORES
Visita esta página para que veas dos vídeos y entiendas la diferencia entre:
- Servos convencionales
- Servos de rotación contínua
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 queremos que suene tenemos que enviar un LOW.
- si queremos que no suene tenemos que enviar un HIGH
Si quieres saber más de este componente visita esta página
RETO
Cuando se pulse el interruptor táctil ....
- Se abre la puerta
-
Al cabo de 5 segundos, tiempo suficiente para entrar
-
Se avisa que la puerta se va a cerrar con 3 pulsos buzzer y cambiando el color el sprite del Panda de mBlock
-
Se cierra la puerta
-
(sería como una llave táctil)
Solución esquema
-
pin 2 digital: El interruptor táctil touchless.
-
pin 3 digital: El buzzer activo.
-
pin 4 digital: Servo de la puerta.
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
El objeto OSO PANDA
El objeto puerta tiene este sencillo programa:
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
-
Pin D8 : Sensor de agua
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
Objeto Oso panda
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
-
Si muevo en el eje X el Joystick la luz RGB se enciende AZUL proporcionalmente a la inclinación del mando Joystick.
-
Si muevo en el eje Y el Joystick la luz RGB se enciende ROJO proporcionalmente a la inclinación del mando Joystick.
-
Si pulso el Switch central
-
Si la puerta estaba cerrada la abre
-
Si la puerta estaba abierta, la cierra, con los avisos correspondientes.
-
- Además vamos a complicar el reto Y TIENE QUE INCLUIR
- Lo visto en interruptor crepuscular:
- Si es luz<500 se hace de noche, tanto en el fondo com el oso panda
- se enciende la luz verde del led RGB
- Lo visto en la apertura y cierre de la puerta con el sensor táctil exterior
-
- si se pulsa el sensor táctil exterior, se abre la puerta, tanto la real, como la del objeto
- se mantiene abierta durante 5 segundos
- avisa que va a cerrar la puerta con tres avisos, el led13 parpadeando y el objeto avisando
- se cierra la puerta, tanto la real como la del objeto
-
- Lo visto en alarma agua, pero modificado
- si hay agua objeto gotera aparece y suena pitido
- Lo visto en interruptor crepuscular:
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
Bloque NOCHE
Bloque AGUA
Bloque PULSADOR
Bloque ABERPUERTA-Y-DESPUESICERRA
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
OBJETO OSO PANDA
recoge la LUZ
El OBJETO PUERTA
Que recoge los mensajes del sensor táctil
OBJETO WATER
recoge el mensaje gotera y aparece si hay
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
- ALARMA
- Si activo la alarma el láser tiene que encenderse
- Una vez activada si se corta el láser, por lo tanto el valor del LDR sube, la alarma se dispara.
- Si desactivo la alarma
- La alarma se apaga si se ha disparado, también por pantalla
- El laser de apaga.
- Si activo la alarma el láser tiene que encenderse
- Mantenemos la alarma agua
- Si se detecta agua, suena un aviso, también por pantalla
- Mantenemos el pulsador exterior
- Si se pulsa, la puerta se abre y se mantiene 5seg
- Se cierra automáticamente pero antes avisa, con un led y por pantalla
- Mantenemos el Joystick
- Si se mueve, se visualiza el led RGB colores azul y verde
- si se pulsa se abre la puerta
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.
- Hemos utilizado dos fijaciones con alambre el LDR para que quede fijo.
- En el láser hemos fijado con una chincheta para fijar el láser además de alambre
- Truco, si la maqueta va a estar fija, una buena gota con la pistola de pegamento es mano de santo para que se quede fijo
Solución conexiones eléctricas
- La alimentación del láser y el del LDR igual que en los casos anteriores
- El control del LÁSER a la salida digital D10
- La lectura del LDR a la entrada analógica A0
- El resto: Joystick, detector fuego, sensor de agua, igual que las páginas anteriores
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
Los otros objetos
Objeto puerta
Objeto gota
Objeto Policia
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
-
Si se pulsa el botón de activación
-
Si la alarma no está activada
-
Activa la alarma, es decir está vigilando.
-
-
Si la alarma está activada
-
Desactiva la alarma, deja de vigilar.
-
-
Si la alarma está disparada
-
Anula el disparo y desactiva la alarma
-
-
-
Si la alarma está activada:
-
Está encendido el led verde para indicar que está vigilando.
-
Si detecta un intruso a menos de 10 cm
-
Se dispara la alarma, es decir se enciende la luz roja y el buzzer de forma intermitente, no se apaga hasta que se pulsa el interruptor.
-
-
Conexiones
-
Entradas y salidas digitales
-
D3 Buzzer
-
D5 Blue de led RGB
-
D6 Red de led RGB
-
D7 Green de led RGB
-
D12 Echo del sensor de ultrasonidos
-
D13 Trg del sensor de ultrasonidos
-
-
Entradas y salidas analógicas
-
A4 Pulsador
-
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:
- ¿Qué es el HC-06?
-
La APP que tienes que intalarte
-
Vincular tu móvil con el HC-06 con tu móvil
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
Y ponemos en el buscador HC-06 nosotros hemos elegido esta, pero podría ser otra, es cuestión de experimentar
IMPORTANTE
- SOLO FUNCIONA CARGANDO EL PROGRAMA en vivo no
- NO PUEDES USAR ESTAS INTRUCCIONES DENTRO DE UN BLOQUE no entiendo por qué, si alguien lo consigue que me lo diga
Un ejemplo: Apertura simple de la puerta
Conectamos:
- RX del HC-06 en 12
- TX del HC-06 en 11
- El servo de la puerta en D4
y el código es:
https://planet.mblock.cc/project/3481632
.
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
Total que el programa del dispositivo Arduino queda bastante monstruoso
Objeto puerta
Objeto gotera
Objeto policia