Arduino MEGA con ArduinoBlocks.com

¡Bienvenido Arduino MEGA!

Ya se puede programar Arduino MEGA con ArduinoBlocks

Resultado de imagen de arduino mega

Aprovecha la potencia de la placa Arduino MEGA con la facilidad y comodidad de ArduinoBlocks!

  • 54 pines digitales (15 compatibles con PWM)
  • 16 entrada analógicas
  • 128 KBytes de memoria para programa
  • 8 KBytes de memoria RAM
  • 16 Mhz

Selecciona la placa Arduino MEGA al crear un nuevo proyecto (usuarios registrados)

Y… a jugar!

+Info:

https://www.facebook.com/ArduinoBlocks/

https://www.amazon.es/ArduinoBlocks-Programación-visual-bloques-Arduino/dp/1535513284

http://www.arduinoblocks.com/shop/libros/5-libro-arduinoblocks.html

 

Compartir

Coche con servos controlado por Bluetooth

Vamos a realizar un pequeño vehículo que utiliza dos servos de rotación continua para el movimiento y un módulo Bluetooth HC06 para comunicarse con una aplicación móvil y ser controlado.

Material necesario:

  • Plataforma metálica
  • 2 x Servo rotación continua
  • 1 x Arduino UNO
  • 1 x Arduino Sensor Shield
  • 1 x Modulo Bluetooth HC06
  • 1 x Batería de 9v 1000mAh

Esquema de conexión

Se ha utilizado una “sensor shield” para simplificar el cableado:

El montaje se va a realizar sobre una plataforma lista para acoplar los dos servos de rotacion continua con ruedas y una rueda loca delante:Los servos están montados de forma invertida, por lo que para que el robot avance debemos hacerlos girar en sentidos inversos para que las ruedas giren en la misma dirección:

Utilizaremos esta aplicación gratuita para dispositivos Android para controlar el coche:

https://play.google.com/store/apps/details?id=braulio.calle.bluetoothRCcontroller

La aplicación envía un comando en forma de letra para indicar cada acción, en ArduinoBlocks la forma más sencilla es leer un byte (equivalente a una letra) y comprobar su valor numérico que será el correspondiente al valor ASCII de cada letra:

Comandos usados:
Avanzar -> ‘F’ (ASCII: 70)
Retroceder -> ‘B’ (ASCII: 66)
Izquierda -> ‘L’ (ASCII: 76)
Derecha -> ‘R’ (ASCII: 82)
Avanzar derecha -> ‘G’ (ASCII: 71)
Avanzar izquierda -> ‘I’ (ASCII: 73)
Parar -> ‘S’ (ASCII: 83)
Control de los servos

El control de los servos de rotación continua funciona de la siguiente manera:

90º -> el motor está parado

-> el motor gira en un sentido a máxima velocidad

180º -> el motor gira en sentido contrario a máxima velocidad

Indicando valores cercanos a 90 podemos hacer que gire más lento en un sentido u otro:

80º -> el motor gira en un sentido a velocidad lenta

100º -> el motor gira en el sentido contrario a velocidad lenta

Por tanto para avanzar programamos los servos así:

Para retroceder hacemos justo lo contrario:

Para girar a la derecha o izquierda hacemos que las ruedas giren en sentidos contrarios y así el robot prácticamente pivota sobre sí mismo:

Y podemos hacer que avance y gire a la vez haciendo las combinaciones de movimientos:

En el bucle principal comprobaremos el comando que hemos recibido por Bluetooth y ejecutaremos la  función correspondiente a cada movimiento:

¡el programa completo queda así de sencillo!

Video del funcionamiento:

Programa + información + descargas:

http://www.arduinoblocks.com/web/project/5284

Enlaces donde conseguir algunos componentes:
Electan:
Microlog:
Feetech:
 www.arduinoblocks.com
Compartir

Bloques de control

Los bloques de control permiten realizar bucles o repeticiones un número determinado de veces o en función de una condición determinada.

Los bloques nos permiten ahorrar código y a la vez hacer más entendible nuestro programa.

Hay que tener cuidado con estos bloques, pues un bucle muy largo (o a veces infinito) puede bloquear el funcionamiento de nuestro programa y provocar un mal funcionamiento.

Bloque repetir

Repite la ejecución de los bloques de su interior un número determinado de veces:

Ejemplo: parpadeo de led 5 veces

Bloque repetir mientras / hasta

Repite los bloques de su interior mientras (o hasta que) se cumpla una condición:

Ejemplo: encender un sistema de calefacción accionado por un relé (pin 4) y esperar a llegar a 15ºC antes de pararlo. El sensor de temperatura sería un DHT11 en el pin 5

Bloque contar

Permite realizar una secuencia aumentando o disminuyendo una variable con un incremento personalizar. Podemos definir el valor de inicio, fin y el incremento de cada paso. El valor lo tendremos accesible dentro del bucle en una variable que irá modificando su valor según los valores indicados (por defecto variable i).

Ejemplo: secuencia de amanecer/anochecer ajustando la intensidad de un led con PWM

+Info y ejemplos:

 

 

Compartir

Led controlado desde móvil por bluetooth (ArduinoBlocks + AppInventor)

La conexión Bluetooth nos va a permitir controlar y monitorizar nuestros proyectos Arduino de forma inalámbrica. El módulo HC-06 es sencillo de conectar y utilizar.

Existen aplicaciones genéricas tipo  “blueterm” que nos permite recibir y enviar datos de forma genérica, pero estas soluciones quedan “poco profesionales”

Aplicación para móvil

Vamos a ver como programar nuestra propia aplicación para móvil gracias a la aplicación AppInventor (sistema Android). Lo único que necesitamos es una cuenta de Google y empezar un nuevo proyecto en la web http://ai2.appinventor.mit.edu

Iniciaremos un nuevo proyecto y en primer lugar tendremos que diseñar la interfaz de usuario:

Y procederemos a realizar la programación por bloques:

  1. Conexión Bluetooth
  2. Desconexión Bluetooth
  3. Envío de un “1” al pulsar el botón “On” y un “2” al pulsar el botón “Off”De esta forma tan sencilla ya tendríamos la aplicación móvil preparada. Sólo falta generar y descargar la aplicación

Programa ArduinoBlocks.

El programa de Arduino que recibe los comandos Bluetooth y enciende o apaga el led también es muy sencillo:

http://www.arduinoblocks.com/web/project/3907

 

+Info y proyectos:

Compartir

¡Conecta tu Arduino al Internet de las cosas! (IoT)

Ya podemos conectar nuestros proyectos de ArduinoBlocks a Internet y controlar y monitorizar remotamente cualquier sensor / actuador que conectemos. Únete al Internet de las Cosas (IoT) con ArduinoBlocks gracias a los bloques que implementan la comunicación MQTT.

Sólo necesitamos una Shield Ethernet (muy económicas) y conectarla a un router para darle conexión a Internet a nuestra placa Arduino.

La red donde conectemos Arduino debe tener un servidor DHCP para asignar automáticamente la dirección IP

IMPORTANTE: La shield Ethernet utiliza los pines: 10, 11,12,13 y el pin 4 si utilizamos la SD que lleva también incorporada la shield.

  • ¿Qué es MQTT?

MQTT es un protocolo de comunicación para redes TCP/IP muy sencillo y ligero en el que todos los dispositivos se conectan a un servidor (llamado “broker“). Los dispositivos pueden enviar (publicar) o recibir (suscribirse) mensajes asociándoles un “topic” (tema).

El “broker” se encarga de gestionar los mensajes y distribuirlos entre todos los dispositivos conectados.

Ejemplo de esquema MQTT con un dispositivo publicando un mensaje y el “broker” los difunde a todos los dispositivos suscritos a ese “topic”:

  • Bloques MQTT en ArduinoBlocks

Iniciar: permite configurar los datos de conexión con el “broker” a utilizar. Por defecto se utiliza el “broker” público y gratuito “iot.eclipse.org“. En caso de utilizar otro “broker” con seguridad debemos indicar el usuario / clave.

La dirección MAC debe ser única en nuestra red local, si no tenemos una facilitada en la EthernetShield podemos dejar la de ejemplo (generada aleatoriamente). El ID de cliente también se genera al azar.

Publicar: Permite enviar un mensaje con un “topic” (Tema) y un valor al “broker” para que difunda el mensaje a todos los suscriptores.

Suscribir: Permite suscribirse a un “Topic” (Tema) para recibirlo. ArduinoBlocks lo asocia a una variable, de forma que cuando se reciba el valor desde la conexión para ese “topic” se actualizará automáticamente el valor de la variable dentro del programa Arduino (sólo funciona con la suscripción a “topics” con valores numéricos)

Estado de la conexión: Permite obtener el estado de la conexión, si está conectado al “broker” o no.

  • ¿Qué “broker” MQTT utilizo para mis proyectos?

iot.eclipse.org (puerto: 1883, sin usuario ni clave)

Es un broker público. Tenemos que tener en cuenta que no es una opción segura pues nuestro mensajes son compartido con todos los dispositivos que utilicen este “broker“. Se utiliza para prueba o fines docentes. Los “topics” deben ser lo más personalizados posibles para evitar entrar en conflicto con otros dispositivos que pudieran utilizar el mismo “topic“:

Ejemplo de "topic": "AB/juanjo/p1/led"

Otro “broker” público muy utilizado para pruebas es:

broker.hivemq.com (puerto: 1883, sin usuario ni clave)

Podemos ver en tiempo real el funcionamiento de éste último:

http://www.mqtt-dashboard.com/

Por otro lado tenemos algunos “brokers” con acceso por usuario/clave que nos permiten un uso limitado con cuentas gratuitas y un uso más intensivo con cuentas de pago, como por ejemplo:

www.cloudmqtt.com

Después de registrarse se facilitan los datos de conexión (servidor, puerto, usuario, clave). Con la modalidad "Cute Cat" tenemos un límite de 10 dispositivos conectados y 10Kb/s de datos que será suficiente para nuestros proyectos.
  • EJEMPLOS

Ejemplo 1 – Envío de la temperatura y humedad cada 5 segundos

Arduino lee la temperatura y humedad del sensor DHT11 y la publica cada 5 segundos con el topic: “AB/temperatura” y “AB/humedad

Desde un dispositivo móvil (por ejemplo Android con la aplicación MQTT Dashboard) conectándonos al mismo “broker” y suscribiéndonos a los mismos  topics “AB/temperatura” y “AB/humedad” recibimos la información… ¡desde cualquier lugar del mundo!

Montaje y programación:

http://www.arduinoblocks.com/web/project/3504

Visualización en aplicación móvil “MQTT Dashboard” y “MQTT Dash” (Android)

 

Ejemplo 2 – Control de led RGB

Montaje y programación:

http://www.arduinoblocks.com/web/project/3505

Control desde aplicación móvil “MQTT Dashboard” (Android):

En funcionamiento:

Ejemplo 3 – Control de relé + monitorización del nivel de luz con LDR

Montaje y programación:

http://www.arduinoblocks.com/web/project/3506

Control y monitorización con aplicación móvil “MQTT Dashboard” (Android):

Video del último ejemplo en funcionamiento:

  • Clientes MQTT para dispositivos móviles:

MQTT Dashboard (Android)

MyMQTT (Android)

MQTT Dash (IoT, SmartHome)

MQTT Tester (iPhone)

  • Enlaces de interés:

https://github.com/mqtt/mqtt.github.io/wiki/public_brokers

https://geekytheory.com/que-es-mqtt

https://en.wikipedia.org/wiki/MQTT

https://github.com/mqtt/mqtt.github.io/wiki

https://es.wikipedia.org/wiki/Internet_de_las_cosas

https://es.aliexpress.com/store/product/1pcs-Arduino-Shield-Ethernet-Shield-W5100-R3-UNO-Mega-2560-1280-328-UNR-R3-W5100-Development/428351_32709442003.html

+Info, ejemplos y proyectos resueltos en el libro oficial:

Compartir

ArduinoBlocks Academy – Prácticas de iniciación

¿No sabes por donde empezar?  ¿Eres profesor y quieres empezar con tus alumnos?

Prácticas resueltas para iniciarse progresivamente. En cada práctica se aplican conceptos nuevos y se reutilizan los anteriores para mejorar los proyectos planteados... ¡A qué esperas!

ArduinoBlocks es un sistema libre orientado a la docencia e ideal para iniciarse con Arduino. En el repositorio de GitHub puedes descargar todas las prácticas de iniciación en format abierto odt “Open Document”

Personaliza, reutiliza, comparte, mejora, crea… ¡eres libre!

https://github.com/arduinoblocks/academy

Recomendado utilizar LibreOffice 5

+Info y proyectos:

 

Compartir

Memoria EEPROM en ArduinoBlocks

La memoria EEPROM nos permite almacenar información de forma persistente (no volátil) aunque desconectemos la fuente de alimentación de la placa Arduino. Es el sistema para guardar información importante como valores de configuración, histórico de valores, etc…

La memoria EEPROM de Arduino es de 1024 bytes, pero ArduinoBlocks trabaja internamente con variables que utilizan 4 bytes (valor decimal “double” de 32 bits) por lo que en la práctica  en ArduinoBlocks podemos guardar 256 variables en la EEPROM (1024 bytes / 4 bytes por variable  = 256 variables)

Para guardar un valor en la memoria EEPROM simplemente indicamos la posición (dirección) donde guardar y el valor a almacenar:

Para recuperar un valor especificamos la posición (dirección) y obtendremos el valor almacenado:

IMPORTANTE: La memoria EEPROM de Arduino suele venir pregrabada a 255 (0xFF) en cada uno de sus bytes. En la mayoría de ocasiones es recomendable hacer un pequeño programa inicial para fijar toda la memoria a valor 0:

Ejemplo 1: Guardar el valor máximo, mínimo de temperatura registrado en la memoria EEPROM.

Programa para iniciar la EEPROM con valores máximo y mínimo correctos:

Programa para el funcionamiento normal:

Ejemplo 2: Obtener la configuración desde la memoria EEPROM.

Movemos un servo poco a poco (de 5 en 5 grados cada medio segundo). Después de cada movimiento se guarda la posición actual. Si apagamos y encendemos continuará por donde se había quedado.

Ejemplo 3: Almacenar lista de valores de una secuencia numérica en la memoria EEPROM.

Iniciamos la memoria EEPROM con este programa (valores de las frecuencias de las primeras 12 notas musicales)

Y este el programa que “toca” la escala musical recuperando los valores de cada nota desde la memoria EEPROM (guardada en el programa anterior)

 

+Info:

http://www.arduinoblocks.com

http://www.arduinoblocks.com/blog

http://www.arduinoblocks.com/blog

Libros:

Compartir

Encendido automático con sensor de movimiento y nivel de luz

Cada vez necesitamos ahorrar más en la factura de la luz, para ello podemos automatizar nuestros sistemas de iluminación sobre todo de zonas de paso como pasillos, escaleras o aseos.

Con este sencillo sistema vamos a automatizar el encendido para que se produzca sólo cuando se detecta movimiento de una persona.

Además podemos añadir un sensor de luz ambiente para actuar sólo en caso de nivel de luz bajo.

Sensores/actuadores utilizados:

Módulo de sensor PIR: sensor de movimiento por infrarrojos

El sensor PIR tiene una salida digital y en la mayoría de casos permite ajustar la sensibilidad de distancia y retardo de la detección.

Módulo LDR: nos permite obtener el nivel de luz ambiente conectado a una entrada analógica. (En caso de no tener el módulo de LDR podemos usar una resistencia de 10k y una resistencia LDR conforme en el esquema de montaje):

Módulo de relé: permite controlar el encendido de la luz. El relé hace la función de interruptor:

Montaje:

Programa:

Más fácil imposible!

+Info:

http://www.arduinoblocks.com

https://www.facebook.com/arduinoblocks

https://www.youtube.com/channel/UCoJwWGyd8a2pxzJHFdftXYw

Más información y proyectos resueltos:

http://www.arduinoblocks.com/shop/libros/5-libro-arduinoblocks.html

https://www.amazon.es/ArduinoBlocks-Programaci%C3%B3n-visual-bloques-Arduino/dp/1535513284/

Compartir

ArduinoBlocks para profesores

¿Eres profesor?

ArduinoBlocks añade funciones para que los profesores puedan plantear proyectos para sus alumnos, visualizar su trabajo y evaluar o comentar su trabajo.

  • Inicia un nuevo proyecto y selecciona la opción “crear un proyecto para mis alumnos”

 

  • Completa la información para que tus alumnos tengan toda la información necesaria para realizar el proyecto: descripción, componentes a utilizar, comentarios…

  • El proyecto asignará automáticamente un código de proyecto único que servirá de inscripción para los alumnos.

  • El siguiente paso es que cada alumno inicie un nuevo proyecto como alumno indicándo el código de proyecto facilitado por su profesor.

  • Como profesor, podrás ver todos los alumnos inscritos dentro del proyecto.

  • Accediendo a cada alumno podemos visualizar su trabajo, programarlo para probar su funcionamiento y finalmente revisar dejando una nota y/o valoración

  • Los alumnos podrán ver las valoraciones y comentarios de su profesor junto a la información del proyecto

Si un alumno quiere posteriormente tener el control del proyecto para realizar modificaciones o realizar mejoras puede “guardar como…” el proyecto y creará una copia del proyecto en su apartado de proyectos personales.

¡Ánimo! Nunca trabajar con tus alumnos en proyectos Arduino fué tan simple y divertido…

Compartir

La conexión serie y la consola

La conexión serie, a través del puerto USB, es el sistema utilizado por Arduino para actualizar el firmware desde un PC. A través de esta conexión ArduinoBlocks con la ayuda de ArduinoBlocks-Connector permite subir el programa realizado al microcontrolador de Arduino (gracias al firmware “bootloader” que las placas Arduino traen pregrabado de fábrica).

Pero esta conexión a parte de para reprogramar el microcontrolador de Arduino nos permite muchas más posibilidades…

La conexión serie puede utilizarse para comunicar la placa Arduino con un PC, con otros periféricos e incluso con otro Arduino.

Las conexiones serie se caracterizan por la forma en que se transmiten los datos. Cada byte se desglosa en una secuencia de bits que se envían de forma consecutiva uno detrás de otro, al contrario de las conexiones paralelas donde varios bits se transmiten simultáneamente.

     

Existen multitud de conexiones serie, desde la conexión RS232 más utilizada en los primeros ordenadores, hasta el SATA utilizado actualmente, pasando por el USB (bus serie universal).

Arduino en sus inicios utilizaba una conexión serie RS232 con conector DB-9 (como los primeros ratones para PC), hoy en día esa conexión se ha modernizado a una conexión USB que simula ese tipo de conexión serie simple.

La conexión serie utiliza dos vías de comunicación, una para recibir datos RX y otra para enviar datos TX.

Estas conexiones que vienen del chip UART interno del microcontrolador están por un lado físicamente conectadas a los pines 0 / RX y 1 / TX (por eso ArduinoBlocks no permite el uso de estos pines para sensores, etc) y por otro lado están conectadas a un chip que hace de puente con la conexión USB.

Si queremos utilizar la conexión serie entre dos Arduinos o con un periférico que utilice niveles de señal TTL (0 y 5 voltios) podemos cablearlos directamente desde los pines 0 y 1, pero por lo general si utilizamos la conexión serie con el PC dejaremos los pines 0 y 1 sin conectar y utilizaremos la conexión USB.

AVISO: si realizamos una conexión directa a los pines 0 y 1 puede que interfiera con la grabación del Arduino. Debemos desconectar todo de estos dos pines antes de reprogramar la placa Arduino desde el PC.

Pero… ¿para qué podemos utilizar la conexión serie en nuestros programas?

La conexión serie, principalmente con un PC, puede servirnos por ejemplo para uno de estos propósitos:

  • Visualización de datos en el PC (recibidos desde el Arduino)
  • Envío de datos desde el PC al Arduino
  • Creación de sistema de visualización y/o control remotos
  • Debug: permite enviar información al PC sobre el funcionamiento del program interno del Arduino
  • ….

Bloques para usar la conexión serie en ArduinoBlocks

Configura la velocidad de la conexión serie. Por defecto si no se pone este bloque la conexión es a 9600 baudios. La conexión debe configurarse a la misma velocidad en el Arduino y en el PC.

El timeout es el tiempo que espera a la hora de recibir un dato de la conexión serie. Superado este tiempo sin recibir nada se cancela la recepción hasta un nuevo intento. Por defecto es de 1 segundo.

Este es uno de los bloques más utilizados, permite enviar un texto o el valor de una variable a través del puerto serie. Permite añadir o no un retorno de carro al final del envío (para bajar de línea).

Permite enviar un sólo byte a través de la conexión serie. Por tanto el valor enviado puede estar entre 0 y 255.

Este bloque nos permite saber si hay datos recibidos pendientes de leer del puerto. El puerto serie tiene un pequeño “buffer” donde se almacenan los datos recibidos, si hay datos en ese “buffer” pendientes de leer este bloque devolverá “verdadero” y si no hay datos recibidos devolverá “falso”. Antes de leer debemos comprobar si hay datos recibidos.

Lee los datos recibidos (si los hay en el buffer de recepción del puerto serie) y nos los devuelve en forma de texto. Si marcamos la opción “hasta salto de línea” intentará leer los datos hasta recibir un retorno de carro.

Funciona igual que el bloque anterior, pero intenta interpretar el texto recibido como un número válido. Si se puede interpretar correctamente el texto como un número devolverá el número, si no devolverá un “0”

Este bloque lee un byte del puerto serie, el valor leído será un valor entre 0 y 255.

La consola serie en ArduinoBlocks

En el PC tenemos la opción de enviar datos por la conexión serie o visualizar los datos recibidos. Existen multitud de aplicaciones de terminal serie, pero ArduinoBlocks incorpora su propio terminal serie integrado.

IMPORTANTE: Cada vez que se abre la conexión serie el Arduino se reinicia automáticamente (reset) por lo que el programa empezará de nuevo

Pero mejor ver todo esto con ejemplos:

  • Ejemplo 1: envío de datos simples desde Arduino a la consola del PC

Este programa, enviará un mensaje inicial de bienvenida y luego un “Hola” cada segundo. Si abrimos la conexión serie, veremos el resultado…

  • Ejemplo 2: Envío de datos para monitorización remota desde PC

Y en la consola serie veríamos algo así…

  • Ejemplo 3: Control remoto de un led desde el PC

Desde la consola podemos enviar un “1” para encender el led:

O podemos enviar un “2” para apagar el led:

  • Proyecto de ejemplo: Adivina el número…

En este proyecto se implementa un pequeño y sencillo juego con Arduino a través de la consola serie. Arduino “pensará” un numero al azar entre 1 y 100 y tendremos que adivinarlo. Al decirle un número Arduino nos dirá si el número pensado es menor o mayor hasta conseguir adivinar el número. Además contará el número de intentos hasta adivinar el número:

http://www.arduinoblocks.com/web/project/2004


Más información y proyectos resueltos en el libro oficial de ArduinoBlocks

Libro en versión PDF

Libro impreso en Amazon


+Info:

http://www.arduinoblocks.com

https://www.facebook.com/ArduinoBlocks/

https://www.youtube.com/channel/UCoJwWGyd8a2pxzJHFdftXYw

www.linkedin.com/in/arduinoblocks-programación-visual-5169a9133

 

Compartir