ArduinoBlocks Free Book - ES
ArduinoBlocks Free Book - ES
Free Book
ArduinoBlocks.com
Colaborador oficial:
https://shop.innovadidactic.com/es/
1 Introducción
2 Hardware
2.7 ESP32
3 Software
3.1 Algoritmos
3.2.1 Lógica
3.2.2 Control
3.2.3 Matemáticas
3.2.4 Texto
3.2.5 Variables
3.2.6 Listas
3.2.7 Funciones
3.3.1 Entrada/Salida
3.3.2 Tiempo
3.3.4 Bluetooth
3.3.5 Sensores
3.3.6 Actuadores
3.3.10 Motores
3.3.11 Motor-Shield
3.3.12 Keypad
3.3.14 GPS
3.3.15 Tarjeta SD
3.3.16 MQTT
3.3.18 RFID
3.3.21 Domótica
3.3.23 Blynk
1 Introducción
La plataforma ArduinoBlocks permite iniciarnos en el mundo de la electrónica, robótica y el mundo
“maker” de una forma sencilla e intuitiva.
La motivación de desarrollar la plataforma ArduinoBlocks y escribir este libro nace de mi trabajo como
docente con alumnos de entre 12 y 18 años, sin previos conocimientos de programación, que quieren adentrarse
en el mundo Arduino partiendo de una nociones básicas de electricidad y electrónica.
ArduinoBlocks es la herramienta perfecta para niños, jóvenes y no tan jóvenes que quieren iniciarse en el
mundo Arduino de una forma divertida e intuitiva.
Aprender a programar con bloques, aunque parece un juego, es una forma totalmente válida de obtener
los conceptos básicos de programación que posteriormente se podrán aplicar a cualquier otro lenguaje de
programación, ya sea visual o escrito. Programando con bloques nos olvidamos principalmente de los fallos de
sintaxis pero tenemos que aprender de igual forma conceptos básicos como secuenciación, bucles, variables,
condiciones, funciones, etc. Desarrollamos la capacidad de abstracción de un problema para convertirlo en una
secuencia de comandos, o bloques, que resolverán el problema, es decir, aprenderemos a pensar como un
programador.
Por experiencia, creo que el aprendizaje con un sistema visual suele ser menos estresante y permite
obtener resultados mucho más rápido, obteniendo una experiencia mucho menos fustrante para el programador
novel. Y en muchos casos, se utiliza esta iniciación como trampolín para dar el salto a una programación
avanzada mediante código escrito obteniendo muchas más éxito.
Arduino es un proyecto de hardware libre que ideó una plataforma completa de hardware y software
compuesta por placas de desarrollo que integran un microcontrolador y un entorno de desarrollo IDE. La idea
surgió para facilitar el uso de la electrónica en proyectos multidisciplinarios.
El hardware consiste en una placa de circuito impreso con un microcontrolador, normalmente Atmel AVR,
y puertos digitales/analógicos de entrada/salida donde conectar sensores y/o actuadores.
La primera placa Arduino fue introducida en 2005, ofreciendo un bajo costo y facilidad para uso de novatos
y profesionales.
Arduino UNO
Es el modelo más estándar y el más utilizado.
Arduino MEGA
Mayor potencia, más recursos hardware y más
memoria
Arduino Nano
Similar potencia que el Arduino UNO pero de
menor tamaño
NodeMCU
Placa basada en el microcontrolador ESP8266
programable en entorno Arduino
Dentro de nuestros proyectos, la placa Arduino será el “cerebro” que gestiona toda la información
recogida desde los sensores, toma decisiones y actúa sobre los elementos de control conectados.
Según las necesidades del proyecto deberemos elegir la placa Arduino más apropiada. ArduinoBlocks
soporta multitud de placas y robots basados en Arduino: Arduino UNO, Nano y MEGA, Leonardo, ProMicro,
EasyPlug, Otto DIY, KeyBot, 3dBot,...
Por otro lado el “framework Arduino” se ha adaptado a otros microcontroladores de bajo costo y muy
potentes como esl el caso del “ESP8266”, en concreto podremos programas las placas de desarrollo basadas en
este chip: NodeMCU y WeMos D1 / mini..
Una de las características de Arduino, es su “bootloader” que permite grabar el programa dentro del
microcontrolador directamente desde la conexión USB del ordenador.
El tamaño de memoria Flash para el programa de un Arduino UNO es de 32KB de los cuales debemos
restar el tamaño del “bootloader” pregrabado (0.5KB en Arduino UNO y 2KB en Arduino NANO)
ArduinoBlocks es una plataforma donde podemos programar nuestra placa Arduino de forma visual sin
necesidad de conocer el lenguaje C++/Processing que utiliza Arduino IDE.
ArduinoBlocks se basa en el framework Blockly de Google y la programación se realiza con bloques al
estilo AppInventor o Scratch. No tenemos que escribir líneas de código y no nos permitirá unir bloques
incompatibles evitando así posibles errores de sintaxis.
La plataforma ArduinoBlocks genera, compila y sube el programa a la placa Arduino por medio de la
conexión USB. Una vez subido el programa, la placa Arduino no necesitará de la conexión al PC para funcionar
pudiendo alimentarla con baterías o una fuente de alimentación para que funcione de forma autónoma.
ArduinoBlocks actualmente funciona con todos los navegadores de última generación: Mozilla Firefox,
Google Chrome, Opera, Safari, etc. (recomandado Firefox y Chrome)
Registrándonos como usuarios de la plataforma ArduinoBlocks podemos aprovechar todas estas
posibilidades:
● Guardar tus proyectos en la nube de ArduinoBlocks.
● Exportar el proyecto completo como .zip incluyendo librerías para Arduino IDE
● Programar directamente Arduino desde el propio navegador (Con la aplicación: ArduinoBlocks-
Connector, ver apdo. 1.3)
● Utilizar la consola serie desde el propio navegador
www.arduinoblocks.com
● Registro de nuevo usuario: Para empezar a usar ArduinoBlocks y tener acceso a todas sus
funcionalidades debemos de registrarnos para tener nuestra cuenta de usuario. Para ellos debemos
pinchar en “iniciar sesión” y a continuación en la opción “nuevo usuario”:
En el formulario de registro debemos completar nuestros datos, y usar un correo electrónico válido
donde recibirremos un correo de confirmación para activar la
A continuación revisa tu bandeja de entrada del correo electrónico y recibirás un correo con un enlace
para confirmar y activar tu cuenta de usuario. A partir de ese momento puede iniciar sesión y crear tus proyectos
dentro de tu cuenta de ArduinoBlocks.
Si eres profesor y quieres crear cuentas para tus alumnos o centro educativo sin utilizar el correo
electrónico de los alumnos, puedes crear “cuentas gestionadas”.
● Inicio de sesión: Debemos iniciar sesión o crear previamente una nueva cuenta en caso de acceder por
primera vez. Esto nos permitirá acceder a nuestros proyectos en la nube y a todas las ventajas de la
comunidad ArduinoBlocks.
● Usuarios gestionados: Si eres profesor y quieres crear cuentas para tus alumnos o centro educativo
puedes utilizar la opción de usuarios gestionados. De esta forma no se necesita correo electrónico de los
alumnos y los usuarios están bajo el control de la cuenta de usuario del profesor (o profesores). Los
usuarios gestionados tienen algunas limitaciones como no permitir archivos adjuntos en los proyectos o
no poder crear proyectos como profesor.
Podemos añadir a otros profesores a partir de su cuenta (con el correo electrónico) para que sean
colaboradores dentro de la organización y también puedan gestionar alumnos.
Cada usuario gestionado tendrá un nombre y para iniciar sesión el nombre de usuario será:
nombre.organización
-Exportar un proyecto a archivo (si tienen una cuenta de usuario normal, de esta forma pueden
exportar e importar proyectos entre cuentas)
● Perfil de usuario: Dentro del perfil del usuario podemos ajustar datos personales y configuración
específica del usuario:
● Creación de un nuevo proyecto : Para iniciar un nuevo proyecto debemos hacer clic en el menú:
En caso de un proyecto personal o como profesor debemos seleccionar en el siguiente paso la placa
Arduino a utilizar:
Para añadir bloques al programa arrastramos desde la barra de herramientas al área de programa,
insertando dentro del bloque de inicialización o de bucle.
Los bloques que estén fuera del bloque de inicialización o del bloque del bucle del programa principal
serán ignorados a la hora de generar el programa (excepto los bloques de funciones o bloques especiales como
interrupciones y otros eventos).
ArduinoBlocks genera el código de Arduino a partir de los bloques. El programa se puede compilar y
subir directamente a la placa Arduino gracias a la aplicación ArduinoBlocks-Connector (disponible para
descargar desde la web), sin embargo si deseamos ver o descargar el código podemos realizarlo desde el área de
bloques.
Si descargamos o copiamos el código generado por ArduinoBlocks en Arduino IDE podemos necesitar
algunas librerías no incluidas con Arduino IDE. Para ello debemos descargarla y añadirlas a la plataforma
Arduino IDE para una correcta compilación del programa, o utilizar la opción descargar .zip para Arduino IDE
lo que nos facilitará un archivo comprimido con el código de nuestro programa y todas las librerías necesarias
incluidas en la misma carpeta.
http://www.arduinoblocks.com/web/help/libraries
● Área de información del proyecto: Un proyecto electrónico debe estar siempre correctamente
documentado. En la sección información podemos añadir información o modificar la indicada
durante la creación del proyecto.
Señalando la opción “público” podemos hacer que nuestro proyecto esté disponible públicamente para
que otros usuarios busquen nuestro proyecto (sin poder editarlo) y pueden importar una copia a su propia cuenta.
Al indicar nuestro proyecto como “público” aparecerá en la lista búsqueda de proyectos compartidos
para todos los usuarios de ArduinoBlocks.
● Área de archivos adjuntos del proyecto: De igual forma podemos adjuntar imágenes, hojas de datos o
cualquier otro archivo relacionado con el proyecto.
● Guardar: ArduinoBlocks guarda automáticamente el proyecto cada cierto tiempo. En caso de querer
asegurarnos el guardado podemos pulsar el botón “Guardar”. También podemos crear un nuevo
proyecto a partir del actual pulsando la opción “Guardar como...”. Automáticamente se abrirá
el nuevo proyecto creado a partir del primero
● Exportar a archivo: La opción “Exportar a archivo” permite generar un archivo con toda la
información del proyecto: bloques, información, archivos adjuntos, etc. De esta forma podemos enviar
un proyecto por email, subirlo a un sitio web para su descarga, o como copia de seguridad del proyecto.
● Cambiar tipo de proyecto: Permite cambiar de tipo de proyecto (tipo de placa Arduino utilizada). Se
podrá seleccionar un tipo de proyecto con una placa similar o más potente.
I
IMPORTANTE: El cambio es irreversible en muchos casos,
por lo que se aconseja hacer una copia del proyecto antes del cambio.
● Importar desde archivo: Permite importar un nuevo proyecto desde un archivo exportado
anteriormente desde la plataforma.
● Captura de pantalla: Mediante el botón con el icono de la cámara de fotos, podemos obtener una
captura del área de bloques del proyecto en formato de imagen PNG. Esta función permite obtener la
imagen de los bloques para documentar proyectos, prácticas, tutoriales, presentaciones, etc.
● Barra de información: En la parte inferior derecha podemos obtener la información de guardado y
algunos avisos que nos muestra la aplicación.
● Importar desde un proyecto compartido: Si accedemos a visualizar un proyecto compartido por otro
usuario aparecerá un botón “importar a mis proyectos”, de esta forma podemos crear una copia del
proyecto en mis proyectos personales para poder modificarlo a nuestro gusto.
● Estructura de un nuevo proyecto: Un proyecto Arduino tiene siempre dos estructuras importantes en
su interior, esto se ve reflejado claramente al crear un nuevo proyecto en ArduinoBlocks.
Cualquier bloque que no esté dentro del bloque de inicialización o de bucle y no forme parte de una
función (ver apartado 3.2.6) será ignorado a la hora de generar el código.
Ejemplo: Al iniciar se establece la variable a 0. Se envía y se incrementa cada segundo indefinidamente:
Ejemplo: Al iniciar (o reset) se envía un mensaje por el puerto serie. El led conectado al pin 13 se
ilumina, espera 500ms, se apaga y espera otros 500ms (este ciclo ser repetirá indefinidamente).
● Comentarios: Si necesitamos añadir un comentario a un bloque desplegamos las opciones del bloque
pinchando con el botón derecho y añadimos un comentario pinchando en el icono del interrogante:
● Contraer / expandir bloque: Reduce el tamaño del bloque para ahorrar espacio mientras no
necesitamos editarlo.
● Eliminar: Elimina el bloque.
● Ayuda: Abre un enlace con ayuda on información sobre el bloque. En algunos bloques la opción
ayuda abrirá una aplicación específica, por ejempo en las pantallas en el bloque Bitmap de las
pantallas OLED abrirá un editor de mapas de bits
● Ayuda contextual: Permite información rápida del bloque, por ejemplo en los sensores
podemos obtener la referencia del módulo recomendado.
● Comprar este producto: Si el bloque corresponde a un sensor, actuador, periférico o cualquier
dispositivo tenemos la opción de acceder directamente a la tienda online para obtener el
componente y asegurarnos que es 100% compatible:
https://shop.innovadidactic.com
ArduinoBlocks-Connector es una aplicación nativa que hace de puente entre la plataforma on-line
ArduinoBlocks y el hardware Arduino.
La aplicación ArduinoBlocks-Connector se encarga de recibir el código generado por ArduinoBlocks,
compilarlo y subirlo a la placa Arduino, sin esta aplicación ArduinoBlocks funciona pero no puede subir el
programa a la placa Arduino pues el navegador web no dispone de posibilidad de realizar estas funciones por sí
sólo.
ArduinoBlocks-Connector está disponible para los principales sistemas operativos. Accede al área de
descargas de arduinoblocks.com para obtener la última versión y más información sobre el proceso de
instalación y configuración.
http://www.arduinoblocks.com/web/site/abconnector
ArduinoBlocks-Connector debe ejecutarse en el equipo donde está conectado Arduino físicamente (por
conexión USB). La configuración normal es instalar ArduinoBlocks-Connector en el mismo equipo donde se
trabaja con ArduinoBlocks.
Podemos configurar la plataforma ArduinoBlocks para conectarse con la aplicación ArduinoBlocks-
Connector en otro equipo.
Ejemplo: Arduino conectado por USB a una RaspberryPi con ArduinoBlocks-Connector instalado. La
programación sería realizada desde una Tablet Android. El programa se compila y sube a la placa Arduino de
forma remota a través de la red local.
2 Hardware
La parte hardware del proyecto Arduino está formada por el conjunto de placas Arduino disponibles en el
mercado o que tú mismo te puedes fabricar (Arduino es un proyecto totalmente abierto)
Además de la placa Arduino para cualquier proyecto robótico o de automatización debemos añadir un
conjunto de sensores y actuadores para realizar las funciones necesarias.
Las conexiones entre sensores, actuadores y Arduino se pueden realizar mediante la ayuda de una placa de
prototipos, de forma modular, o incluso con kits de conexión fácil (EasyPlug).
Publicado por Google Drive – Notificar uso inadecuado
ArduinoBlocks no restringe al uso de ningún hardware en concreto, aunque con fines educativos y para
ArduinoBlocks Free Book - ES facilitar el uso recomendamos el uso de componentes modulares o de fácil conexión para los más pequeños. Actualizado automáticamente cada 5 minutos
ArduinoBlocks toma como referencia en sistemas modulares y fácil conexión los kits del fabricante
Keyestudio por su calidad y facilidad, aunque se pueden utilizar otros fabricantes e incluso fabricarte tus propios
sensores y actuadores a partir de los elementos electrónicos.
EasyPlug
En caso de utilizar un sistema modular (por lo general es lo más recomendable para la mayoría de casos
y entornos educativos), tendremos que conectar distintos sensores y actuadores a la placa Arduino por lo que
tendremos que seguir usando en algunos casos la placa de prototipos para “ramificar” algunos pines como por
ejemplo la alimentación de 5v o 3.3v o los pines de GND.
Como alternativa a la placa de prototipos para el conexionado modular tenemos varias opciones:
● Sensor shield: Es una shield sin electrónica extra, sustituye a la protoboard facilitándonos pines extras
de alimentación (5v y GND) junto a cada pin digital o analógico. Además nos facilita la conexión en los
pines I2C o de comunicación serie. Esta shield se puede añadir a cualquier placa Arduino (existe para
los distintos modelos más populares).
La placa sensor shield agrupa los pines G (GND) , V (5v) , S (Señal del pin correspondiente)
Por tanto si ampliamos, por ejemplo para el pin 7, tendriamos los pines:
Internamente todos los pines G (GND) y V (5v) están interconectados entre ellos.
● Arduino con pines extras: Fabricantes como Keyestudio fabrican modelos de Arduino mejorados como
éste, donde tenemos los pines normales (hembra) ya en la misma placa los pines extra de alimentación
con los pines de señal (machos) además de la conexión I2C y serie. Es quizás la opción ideal que sirve
Publicado
como Arduino estándar, y en caso de necesitarlo equivale por Google
a un Arduino Driveshield
+ Sensor – Notificar
todo enuso inadecuado
uno.
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
Ejemplo del detalle de las conexiones “extras” para los pines D3 y A0.
Internamente todos los pines G (GND) y V (5v) están interconectados entre ellos.
Comparativa de conexionado con Arduino UNO (Led y sensor DHT11)
● Componentes electrónicos con protoboard: Permite conectar cualquier componente electrónico a
Arduino sin soldar. Implica conocer el conexionado y funcionamiento detallado del componente y en la
mayoría de casos componentes extras como resistencias, condensadores, etc. Este sistem requiere unos
conocimientos más avanzados de electrónica.
● Módulos con protoboard: Permite fácilmente conectar módulos usando la protoboard para ramificar
los pines de alimentación (5V y GND). También se puede combinar con el sistema anterior, mezclando
módulos y componentes por separado en la misma protoboard.
● Módulos con sensor shield o Arduino con pines extra: Es el sistema más sencillo, cada pin viene
acompañado de los pines de alimentación por lo que no necesitamos la protoboard para ramificar las
conexiones. Los módulos unifican sus pines de forma sencilla: 5V (+), GND (-) y las señales de entrada
o salida correspondientes. Existen placas para ramificar los pines i2c también si fuera necesario (hub
i2c).
http://shop.innovadidactic.com/index.php?id_product=666&controller=product
http://shop.innovadidactic.com/index.php?id_product=578&controller=product
Se trata de una versión de Arduino personalizada con conectores RJ en vez de pines. Facilita la conexión y con
la ayuda de colores evita equivocacioens. Un opción ideal para los más pequeños.
A la hora de iniciar un proyecto de robótica debemos tener claras algunas nociones de electricidad y
electrónica básicas. El propósito de este libro no es aprender estos conceptos sobre electrónica, por lo tanto se
asumen unos conocimientos previos básicos de electricidad y electrónica.
Vamos a hacer un breve repaso de los conceptos más importantes que debemos conocer:
La corriente eléctrica se define como el movimiento de los electrones a través de un conductor, según el
tipo de desplazamiento se define como corriente continua o alterna.
En la corriente alterna los electrones cambian de dirección de movimiento 50 veces por segundo (en redes
eléctricas como la de España de 50Hz, en otros países puede ser 60Hz). El movimiento descrito por los
electrones es sinusoidal.
En la corriente continua los electrones se desplazan siempre en la misma dirección. Arduino funciona con
corriente continua.
C.A. C.C.
Voltaje o tensión eléctrica: Energía acumulada por unidad de carga que hace que las cargas circulen por el
circuito (genera una corriente). Se mide en voltios (V)
Intensidad: número de electrones que atraviesan la sección de un conductor por unidad de tiempo. Se
mide en amperios (A)
Resistencia: mide la oposición que ofrece un material al paso de corriente eléctrica. Se mide en Ohmios
(Ω)
Circuito eléctrico: Conjunto de elementos unidos de tal forma que permiten el paso de corriente
eléctrica para conseguir algún efecto (luz, calor, movimiento, etc.)
La placa Arduino necesita energía para funcionar, existen varias formas de alimentar la placa Arduino:
-A través del conector USB: cuando conectamos al ordenador para programarlo o utilizando un “power
bank” con conexión USB por ejemplo.
-A través del conector de alimentación externa: La fuente de alimentación conectada debe ofrecer un
voltaje DC de 7 a 12v. Internamente la placa Arduino UNO regula la tensión a 5v.
-A través de los pines 5v o Vin: A través del pin 5v podemos alimentar con una fuente de alimentación
de 5v, o a través del pin Vin podemos alimentar de igual forma que con el conector externo con un voltaje de
entre 7 a 12v, pues se ajutará a 5v con el regulador interno.
En el caso de alimentar desde USB o a través del conector externo, por los pines 3.3v , 5v, GND y Vin
obtenemos la alimentación para circuitos auxiliares, sensores, shields, etc.:
• Vin proporciona la tensión de alimentación conectada al conector de alimentación (sin regular, igual a
la tensión de la fuente de alimentación conectada)
Normalmente alimentaremos la placa Arduino a través del USB durante su programación desde el PC.
Si la placa Arduino va a funcionar de forma autónoma sin interactuar con el PC podemos alimentarla desde una
fuente de alimentación o con una batería a través del conector Jack (aplicar de 7 a 12v).
Arduino UNO es la placa Arduino más utilizada de todas las versiones existentes, Arduino Nano es muy
similar a Arduino UNO en características pero en un formato más pequeño. Aqui se pueden ver dos modelos de
la placa Arduino UNO y Arduino Nano:
http://shop.innovadidactic.com/index.php?id_product=690&controller=product
Especificaciones técnicas:
Microcontrolador ATmega328P
Alimentación 5V
Alimentación (recomendada) 7-12V
Alimentación (límite) 6-20V
Número de pines E/S 14 (6 con salida PWM)
Número de pines PWM 6
Número de pines analógicos 6
Corriente pines E/S 20 mA
Corriente pin de 3.3V 50 mA
Memoria Flash 32 KB (ATmega328P)
La placa Arduino UNO dispone de múltiples pines de conexión en formato de conector hembra:
● Pines de entradas/salidas digitales: Los pines digitales permiten trabajar con dos estados
(ON/OFF, Activado/Desactivado, 1/0). Los pines se pueden configurar como entrada o como
salida según se necesite conectar un sensor o un actuador.
● Pines de salidas analógicas (PWM): Arduino no tiene salidas puramente analógicas, pero
podemos imitar a una salida analógica mediante la técnica PWM (Pulse Width Modulation =
Modulación en Anchura de Pulso).
● Pines de entradas analógicas: Estos pines sólo se pueden utilizar como entradas. Las entradas
analógicas leen un voltaje entre 0 y 5V y a través de un ADC (Analog to Digital Converter)
obtienen un valor de 10 bits proporcional a la señal de entrada.
10 bits = 1024 valores (0Publicado
… 1023)por Google Drive – Notificar uso inadecuado
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
● Pines de comunicación serie: Estos pines conectan con la unidad serie (UART) interna del
microprocesador de Arduino. Una conexión serie utiliza un pin para la señal de envío de datos
(TX) otro para la recepción de datos (RX) y la señal GND.
Otra ventaja evidente del sistema Arduino es el entorno de programación “Arduino IDE” sencillo
ofrecido de forma totalmente libre y que facilita enormemente la programación de este tipo de
microcontroladores para inexpertos.
La clave del éxito de la plataforma Arduino es que es una plataforma totalmente abierta y existe una gran
comunidad de colaboradores y desarrolladores. Un ejemplo de las aportaciones de la comunidad Arduino son las
conocidas como “shields”, que son módulos de extensión apilables para Arduino con las que podemos añadir
rápidamente funcionalidades a la placa Arduino.
Ejemplos de “Shields” para Arduino UNO:
Shield Ethernet Shield Relés Joystick y botones
http://shop.innovadidactic.com/index.php?id_category=93&controller=category
Publicado por Google Drive – Notificar uso inadecuado
ArduinoBlocks Free Book - ES 2.4 Arduino: Leonardo y ProMicro Actualizado automáticamente cada 5 minutos
Los modelos Arduino Nano y ProMicro son similares en características y tamaño a los modelos UNO y
Nano respectivamente, la principal diferencia es que la comunicación USB para la programación y la
comunicación con el PC está integrada en el mismo controlador. Gracias a esta característica estos modelos de
Arduino además pueden emular el comportamiento de un dispostivio USB tipo HID (Human Interface Device),
es decir, ser detectados por el PC y comportarse como un teclado o un ratón.
De esta forma es sencillo implementar periféricos HID para el control del PC o como forma de
intercambiar información. Por ejemplo podemos implementar dispostivos para controlar el puntero del ratón y
las pulsaciones de los botones o implementar un controlador de juegos enviando los códigos de teclas pulsadas
como si de un teclado se tratara.
Más información sobre los bloques de programación de teclado y ratón
http://shop.innovadidactic.com/index.php?id_product=728&controller=product
Arduino Mega implementa un número considerablemente mayor de pines de E/S tanto digitales como
analógicos, además de varios puertos serie implementados por hardware (a parte del que se utiliza para
comunicación USB y programación). Por otro lado tiene una mayor cantidad de memoria RAM y memoria
FLASH para almacenar el programa.
Debemos elegir este tipo de Arduino cuando nuestro proyecto vaya a necesitar un número de
entradas/salidas superior al Arduino UNO o en casos de realizar programas grandes donde la memoria de
Arduino UNO pueda ser un problema. Otro aspecto importante a tener en cuenta es la posibilidad de utilizar
varias conexiones serie (puertos serie) implementados por hardware en el propio microcontrolador. Mienstras
que los Arduinos de gama inferior tienen un único puerto serie (compartido con la comunicación USB), Arduino
MEGA tiene 4 puertos serie hardware.
http://shop.innovadidactic.com/index.php?id_product=848&controller=product
Una de las características en las que se diferencian de Arduino principalmente es que trabajan con un
voltaje de 3.3v en vez de 5v, por lo que hay que llevar cuidadoPublicado
con éstopor Google
y en algúnDrive
caso – Notificar
será usoutilizar
necesario inadecuado
adaptadores de tensión 3.3v - 5v
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
Tienda: http://shop.innovadidactic.com/index.php?id_product=859&controller=product
2.7 ESP32
El microcontrolador ESP32 se puede considerar una alternativa al ESP8266 del mismo fabricante. Por
práctimante el mismo precio tendremos un microcontrolador de alto rendimiento, con una gran versatilidad en
todos sus pines (todos permiten uitlizarse como E/S, salidas PWM, entradas analógicas,...) Y lo más importante
es que implementa tanto comunicación Bluetooth como WiFi en el chip sin necesidad de ningún hardware extra.
https://shop.innovadidactic.com/es/standard-placas-shields-y-kits/929-keyestudio-esp32-wroom-32d-
modulo-core-board-wi.html
● Digital: un sensor digital sólo tiene dos estados: activado/desactivado, ON/OFF, 1/0, Alto/Bajo, … En
este caso conectaremos el sensor a una de las entradas digitales de Arduino para leer el estado.
Ejemplo: un pulsador es un tipo de sensor sencillo que sólo nos da dos estados, “pulsado o no pulsado”.
Conectado a la placa Arduino debe generar 0v en reposo y 5v al pulsarlo. De esta forma desde el programa de
Arduino podremos leer el estado del botón.
● Analógico: el sensor nos puede dar un rango de valores, normalmente se traduce en un valor de tensión
o de corriente variable en función de la señal captada al sensor. En este caso conectaremos el sensor a
una de las entradas analógicas de Arduino. El rango de entrada será una tensión entre 0v (GND) y 5v.
Ejemplo: Conexión de un sensor potenciómetro al pin de entrada analógico A0:
(versión modular)
http://shop.innovadidactic.com/index.php?id_category=87&controller=category
2.9 Actuadores
Un actuador es un dispositivo capaz de transformar la energía eléctrica en la activación de un proceso
con la finalidad de generar un efecto sobre elementos externos.
Un actuador o periférico de salida permite actuar sobre el mundo real desde el programa de Arduino.
http://shop.innovadidactic.com/index.php?id_category=87&controller=category
2.10 Comunicaciones
Es muy importante tener en cuenta que este puerto serie es el que se utiliza para “subir” el firmware y
reprogramar la placa Arduino desde un ordenador (bootloader).
Las primeras placas Arduino disponían de un conector de puerto serie tipo DB9 de 9 pines utilizado
antiguamente para este tipo de conexiones. Hoy en día se utiliza un chip de conversión serie a USB que permite
emular en el equipo un puerto serie estándar.
Durante el uso normal podemos utilizarlo como vía de comunicación sencilla entre el microcontrolador y el
un PC.
Arduino UNO sólo dispone de un puerto serie hardware aunque podemos emular más puertos serie vía
software. La conexión serie es utilizada por algunos periféricos o sensores para interactuar con Arduino:
Shield GPS Módulo Bluetooth HC-06
(comunicación serie) (comunicación serie)
Para poder desde un ordenador visualizar los datos recibidos vía puerto serie debemos utilizar una
aplicación de tipo “terminal” o “consola” serie:
A la hora de establecer una conexión serie los dos extremos que intervienen en la conexión (en este caso
Arduino y el PC) deben establecer el mismo valor en la velocidad de la conexión.
Velocidad en baudios por defecto: 9600 bits por segundo
Otras velocidades utilizadas: 4800, 19200, 38400, 57600, 115200,
SerialPlotter
Otra funcionalidad relacionada con la comunicación serie es el “Serial Plotter” que nos permite enviar
información desde Arduino al PC y visualizarla en forma de gráfica en tiempo real. Además el “Serial Plotter”
implementa un sencillo datalogger con el que podemos ir grabando los datos para exportarlos posteriormente en
formato CSV (Excel, Calc,...)
Ejemplo de uso del serial plotter:
La función de datalogger (registro de datos) la podemos activar desde el panel superior derecho y
veremos un icono de un comecocos “comiendo” datos mientras estamos recopilando los datos para su posterior
exportación:
Si superamos el número de datos máximo especificado, se sobreescribirán los datos más antiguos.
Cuando paremos la recogida de datos podremos descargar los archivo de datos CSV, uno por cada serie de datos
recogida (un archivo por cada variable que representemos en la gráfica)
Ejemplo de procesamiento de los datos exportados en CSV en una aplicación externa (LibreOffice
Calc):
El bus I2C (I²C o TWI) es un bus de datos seire desarrollado por Philips.
Se utiliza principalmente internamente para la comunicación entre diferentes partes de un circuito, por
ejemplo, entre un controlador y circuitos periféricos integrados.
La dirección de I2C estándar es el primer byte enviado por el maestro, aunque los primeros 7 bits
representan la dirección y el octavo bit (R/W-Bit) es el que comunica al esclavo si debe recibir datos del maestro
(low/bajo) o enviar datos al maestro (high/alto). Por lo tanto, I2C utiliza un espacio de direccionamiento de 7
bits, lo cual permite hasta 112 nodos en un bus (16 de las 128 direcciones posibles están reservadas para fines
especiales).
Cada uno de los circuitos integrados con capacidad de soportar un I2C tiene una dirección
predeterminada por el fabricante, de la cual los últimos tres bits (subdirección) pueden ser fijados por tres pines
de control. En este caso, pueden funcionar en un I2C hasta 8 circuitos integrados. Si no es así, los circuitos
integrales (que precisan ser idénticos) deben ser controlados por varios buses I2C separados.
Pantalla LCD con módulo de conexión I2C
El Bus SPI (del inglés Serial Peripheral Interface) es un estándar de comunicaciones, usado
principalmente para la transferencia de información entre circuitos integrados en equipos electrónicos. El bus de
interfaz de periféricos serie o bus SPI es un estándar para controlar casi cualquier dispositivo electrónico digital
que acepte un flujo de bits serie regulado por un reloj (comunicación sincrónica).
Incluye una línea de reloj, dato entrante, dato saliente y un pin de Chip Select, que conecta o desconecta la
operación del dispositivo con el que uno desea comunicarse. De esta forma, este estándar permite multiplexar las
líneas de reloj.
● MOSI (Master Output Slave Input): Salida de datos del Master y entrada de datos al Slave.
También llamada SIMO.
● MISO (Master Input Slave Output): Salida de datos del Slave y entrada al Master. También
conocida por SOMI.
● SS/CS/Select: Para seleccionar un Slave, o para que el Master le diga al Slave que se active.
También llamada SSTE.
SCLK: Pin 13
SS/CS: Depende de la programación, puede usarse cualquier pin.
Ejemplo: conexión de módulo para tarjetas SD (el pin SS está conectado al pin 4):
La conexión Ethernet nos permite la conexión a la red (normalmente para acceder a internet) a través de un
cable Ethernet, conectado a nuestro routero o switch. Esta conexión se caracteriza por usar el conector RJ45 y
es una forma sencilla de conectar nuestro Arduino a la red.
Para añadir la conectividad lo más sencillo es usar una Shield Ethernet w5100.
http://shop.innovadidactic.com/index.php?id_product=679&controller=product
Para más información consultar el uso de los bloques MQTT para intercambio de información a través
de conexiones IP con conexión Ethernet o WiFi.
Otra forma de conectar a la red por la que podemos optar con Arduino es mediante una conexión
inalámbrica WiFi. Sin embargo las shields WiFi a parte de tener un precio bastante alto (comparado con el
precio habitual de los componentes Arduino) la mayoría han sido descatalogadas en favor de placas con WiFi
integrado.
Una opción sencilla y económica para la conexión de cualquier modelo Arduino a internet a través de
WiFi es usar un ESP-01 (placa basada en el chip ESP8266) como periférico WiFi a través de una conexión serie,
es decir, usando dos pines (RX,TX).
El periférico ESP-01 necesita un sencillo adaptador para ajustar los niveles de voltaje en la
comunicación:
http://shop.innovadidactic.com/index.php?id_product=866&controller=product
El módulo ESP-01 comunica con protocolo serie y por defecto trabaja a una velocidad de 115200 bps,
por lo que sólo funcionaría correctamente conectándolo a un puerto serie hardware de Arduino (en otros pines se
usaría una comunicación serie emulada por software a un máximo de velocidad de 57600 bps).
Por tanto a velocidad de 115200 bps , en Arduino UNO solo podemos usar el periférico ESP-01 en los
pines:
En Arduino Mega, disponemos de varios puertos serie hardware por lo que podemos dejar libre los pines
0,1 para no interferir en la progrmación USB, y utilizar cualquiera de los otros puertos implementados en la
placa.
Puertos serie en Arduino MEGA:
Pin RX Pin TX
Serial 0 0 1
Serial 1 19 20
Serial 2 17 16
Serial 3 15 14
En las placas basadas en ESP8266, como el NodeMCU o WeMos, no necesitamos añadir ningún periférico
extra para la conexión pues el propio microcontrolador implementa la conexión WiFi.
De igual forma que con la conexión Ethernet, la conexión a la red por cable o WiFi nos permite utilizar los
bloques MQTT para intercambiar información a través de la red o internet.
Si utilizamos dispositivos con WiFi integrado (ESP8266 o ESP32) no tendremos que configurar ningún
módulo externo para utilizar la conectividad WiFi desde los bloques MQTT o Blynk:
NodeMCU (ESP8266) con WiFi incorporado:
https://shop.innovadidactic.com/es/standard-placas-shields-y-kits/1458-keyestudio-esp8266-shield-wi-fi-con-
cable-microusb.html
3 Software
Una vez tenemos definido el hardware necesario para un proyecto el siguiente paso es programar el
microcontrolador de la placa Arduino para que realice las tares necesarias para el funcionamiento deseado.
La programación de la placa Arduino se realiza normalmente en lenguaje C++ desde el entorno Arduino
IDE. Para programar debemos conocer primero este lenguaje, lo cual supone mucho tiempo del que muchas
veces no disponemos.
En los últimos años han aparecido entornos mucho más sencillos e intuitivos para desarrollar aplicaciones
que nos permiten introducirnos de forma práctica y sencilla en el mundo de la programación. Es el caso de
Scratch, un entorno de desarrollo de videojuegos multiplataforma, y AppInventor, un entorno de desarrollo de
aplicaciones para dispositivos móviles Android.
ArduinoBlocks, al igual, es un entorno online que nos permite programar Arduino (sin necesidad de
conocer el lenguaje de programación C++) de forma visual al estilo de programación de bloques.
ArduinoBlocks implementa bloques generales comunes a cualquier entorno de programación y por otro
lado bloques específicos para Arduino donde podemos acceder a leer/escribir datos de los pines de
entrada/salida, acceder a información de sensores conectados, manejar actuadores, periféricos como la pantalla
LCD y muchas funcionalidades más.
3.1 Algoritmos
Un algoritmo es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y finitas que
permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha
actividad.
A la hora de programar en cualquier lenguaje de programación lo primero que tenemos que hacer es
plantear el algoritmo que queremos desarrollar y posteriormente implementarlo en el lenguaje de programación
elegido.
A pesar de que la programación por bloques es muy intuitiva y visual, siempre es recomendable plantear el
algoritmo antes de empezar un proyecto.
Los bloques de uso general nos permiten implementar funciones comunes en cualquier entorno o
sistema programable. Esto incluye funciones lógicas, matemáticas, condiciones, bucles, funciones de texto, etc.
3.2.1 Lógica
Con estos bloques tenemos acceso a las funciones lógicas necesarias para implementar en nuestro programa
de Arduino.
Las funciones lógicas trabajan con valores o expresiones de “verdadero” o “falso”
● Condición / decisión: Evalúa una condición lógica, si se cumple realiza el bloque “hacer” si no se
cumple realiza el bloque “sino” (opcional)
Ejemplo de comparaciones:
= Igual
≠ Distintos
< Menor que
≤ Menor o igual que
> Mayor que
≥ Mayor o igual que
Publicado por Google Drive – Notificar uso inadecuado
Ejemplo: Comparción numérica “mayor o igual que”
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
= Igual
≠ Distintos
● Constantes lógicas: son valores booleanos indicando uno de los dos estados posibles
On = Verdadero
Off = Falso
3.2.2 Control
Ejemplo:
● Contar: Realiza un bucle contando con un variable índice. Se define un valor de inicio, una valor de fin
y los incrementos que se realizarán en cada iteración del bucle. Dentro del bucle podremos usar esta
variable.
Ejemplo:
3.2.3 Matemáticas
● Número entero / sin signo: Trata el valor como un entero. Si especificamos sin signo, trata el valor
como una variable sin signo internamente.
Para las variables ArduinoBlocks utiliza el tipo de dato “double” cuando traduce el programa a lenguaje
C++. En caso de hacer la conversión se trata como un “cast” a un tipo de datos “long” o “unsigned long”
Trata el valor como tipo entero
● Ángulo: Permite definir un valor de ángulo en grados. Es un valor numérico tal cual, pero con la ventaja
que permite definir el valor de una forma visual viendo el ángulo gráficamente.
● Operaciones básicas:
+ Suma
- Resta por Google Drive – Notificar uso inadecuado
Publicado
x Multiplicación
÷ División
^ Potencia
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
Ejemplo:
● Cambiar variable por: Aumenta o disminuye el valor de una variable por el valor indicado (si es un
valor positivo aumenta si es negativo disminuye)
Aumenta la variable en +1
variable = variable + 1
Disminuye la variable en -1
variable = variable – 1
● Funciones matemáticas:
● Mapear: 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.
Ejemplo:
-Sensor de temperatura: 10ºC … 50ºC
-Arduino lectura analógica: 0 … 1023
Necesitamos convertir del rango 0-1023 leído al rango 10ºC-50ºC:
Ejemplo:
Ejemplo:
Ejemplo:
3.2.4 Texto
Las funciones de texto son especialmente útiles con la utilización en el puerto serie (consola), y otros
periféricos como pantallas LCD. Permiten trabajar con variables de tipo texto o con textos prefijados.
● Formatear número: Obtiene en forma de texto el valor de una variable o constante numérica en el
formato especificado.
Ejemplo:
● Formatear número con decimales: Realiza la conversión de una variable o constante numérica a texto
Publicado
igual que el bloque anterior pero pudiendo indicar el número por Google
de decimales a Drive – Notificar uso inadecuado
mostrar.
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
● Crear texto con: Crea un texto a partir de la unión de otros textos o variables. Las variables
especificadas se convertirán a texto con formato decimal.
Ejemplo:
● Comparación de textos: Permite comparar dos cadenas de texto. El resultado es un valor lógico de
verdadero o falso.
● Contiene el texto: Comprueba si existe un texto dentro del texto indicado. Devuelve verdadero si existe
y falso en caso contrario.
Ejemplo:
● Buscar en el texto: Busca la posición de un texto dentro de otro texto. Si el texto buscado no se
encuentra devuelve el valor 0, en otro caso devuelve la posición donde empieza el texto.
Ejemplo:
● Partir texto: Obtiene una parte del texto, indicando la posición de inicio y fin dentro del texto para
crear la subcadena.
Ejemplo:
● Reemplazar en texto: Reemplaza todas las ocurrencias del texto indicado por el nuevo dentro de la
variable de texto seleccionada.
Ejemplo:
Publicado por Google Drive – Notificar uso inadecuado
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
● Valor ASCII: Obtiene un valor numérico correspondiente al valor de la tabla ASCII del caracter
correspondiente. Este bloque es útil para detectar pulsaciones de teclas que son enviadas por
comunicación serie, bluetooth, etc. como bytes independientes.
3.2.5 Variables
Una variable es un hueco en la memoria donde el programa puede almacenar valores numéricos. El sistema
nos permiten asignarles un nombre simbólico como por ejemplo “temperatura exterior”, “velocidad”, “posición
servo 1”,”estado”,… para facilitar su uso.
Ejemplo:
Ejemplo:
Ejemplo:
Ejemplo:
● Variables booleanas: permite almacenar valores lógicos booleanos de dos estados (verdadero/falso,
ON/OFF, HIGH/LOW, …)
Ejemplo:
Ejemplo:
3.2.6 Listas
Las listas de datos nos permiten almacenar un listado de valores y acceder a ellos por su posición en la lista.
Las listas pueden ser de tipo numéricas o de texto.
● Listas numéricas:
Podemos crear una lista asignándole un nombre a la lista y asignándole valores iniciales.
Para saber el número de elementos que tenemos en una lista podemos usar el bloque:
En una lista podemos obtener el valor de una posición (desde la 0 hasta el número de elementos -1 en la
lista) con el bloque, por ejemplo si tenemos 10 elementos podremos acceder a ellos desde el 0 al 9:
Ejemplo:
Posicionamiento de un motor (servo) en distintas posiciones (grados) prefijados en una lista.
● Listas de textos:
Podemos crear una lista asignándole un nombre a la lista y asignándole valores iniciales.
Ejemplo:
Para saber el número de elementos que tenemos en una lista podemos usar el bloque:
En una lista podemos obtener el valor de una posición (desde la 1 hasta el número de elementos en la
lista) con el bloque:
Publicado por Google Drive – Notificar uso inadecuado
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
3.2.7 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.
● Definición de una función: La definición consiste en crear el grupo donde podremos insertar el código
de bloques que forma la función. Debemos darle un nombre representativo que utilizaremos para llamar
a esa función y ejecutarla.
● Parámetros: A las funciones se les pueden añadir parámetros para especificar en la llamada.
● Llamada a una función: Permite llamar a la ejecución de la función, se ejecutarán los bloques internos
de la función y al terminar se seguirá la ejecución por donde se había realizado la llamada a la función.
Llamada:
Llamada:
En el siguiente apartado veremos los bloques relacionados con funciones propias de la placa Arduino.
Estos bloques nos permitirán acceder a funcionalidades del propio microcontrolador y otros estarán orientados a
sensores, actuadores o periféricos que podemos conectar a la placa Arduino para desarrollar nuestros proyectos.
3.3.1 Entrada/Salida
Las funciones de entrada/salida genéricas nos permiten leer o escribir en los pines digitales y analógicos
de la placa Arduino descritos en el apartado 2.3.
● Leer pin digital: Obtiene el valor digital del pin (0/1, ON/OFF, verdadero/falso). (Recuerda para leer un
ON/1 debemos aplicar 5v en la entrada digital y 0v para leer un OFF/0)
Ejemplo:
● Escribir pin digital: Escribe el valor en un pin digital pin (0/1, ON/OFF, verdadero/falso).
(Si se activa, la salida suministrará 5v en caso contrario 0v)
Ejemplo:
Versión equivalente:
Ejemplo:
● Escribir pin analógico: Establece el valor del ciclo de pulsos activo/inactivo de una salida digital
PWM. El valor debe estar en el rango entre 0 y 255.
● Leer pulso: Lee un pulso en un pin hasta que el valor de la entrada cambie a estado alto (ON) o bajo
(OFF). Mide la duración del pulso en microsegundos. Si se supera el tiempo de espera indicado sin
cambiar de estado devolverá el valor 0.
● Interrupción externa: permite ejecutar un bloque de código cuando se produce una interrupción
externa indicando el tipo de “trigger” que produce el evento:
Los bloques dentro de una interrupción externa no deben utilizar mucho tiempo del
microcontrolador, deben realizar tareas sencilla y no bloquear durante mucho tiempo (en ningún caso
usar bloques “esperar” , …)
● Leer/Escribir en E/S digitales externas (extensor I2C): En caso de necesitar más pines de E/S digital
podemos utilizar un extensor con conexión I2C para ampliar de 8 en 8 el número de E/S digitales (hasta
64)
● Escribir analógica PWM (PCA9685): Si necesitamos ampliar salidas de tipo PWM para
control de intensida, servos, etc… podemos usar el extensor PCA9695 ampliando de 8 en 8 el
número de salidas PWM disponibles. Una opción interesante, por ejemplo, para proyectos con
un gran número de servos.
https://shop.innovadidactic.com/es/standard-placas-shields-y-kits/657-keyestudio-driver-para-
servo-de-16-canales-con-int.html
3.3.2 Tiempo
Publicado por Google Drive – Notificar uso inadecuado
ArduinoBlocks Free Book - ES Las funciones de tiempo o retardo nos permiten realizar pausas y obtener información sobre el tiempo Actualizado automáticamente cada 5 minutos
transcurrido dentro del microcontrolador.
● Esperar: Realiza una pausa (bloquea la ejecución del programa) hasta seguir con la ejecución del
siguiente bloque.
Milisegundos
Microsegundos
● Tiempo transcurrido: Obtiene un valor con el tiempo transcurrido desde el inicio o reset del
microcontrolador de la placa Arduino. El valor puede ser en milisegundos o microsegundos.
Milisegundos
Microsegundos
Ejemplo : Ejecutar la Tarea1 cada 3 segundos y la Tarea2 cada 7 segundos sin bloquear la ejecución
del programa:
● Esperar por siempre: Bloquea indefinidamente la ejecución finalizando por tanto el programa.
Ejemplo: Ejecuta los bloques en su interior si el tiempo transcurrido desde la última ejecución
es mayor o igual a 1000 ms
Programa equivalente:
Cuando necesitemos realizar distintas tareas periódicas y que parezca que se ejecuten paralelamente sin
bloquearse unas a otras utilizaremos este tipo de bloque “ejecutar cada”.
Si en el programa utilizamos bloques como por ejemplo el GPS (Apdo. 3.3.12) obligatoriamente
debemos evitar los bloques de “esperar” si queremos que el programa funcione correctamente. Consultar Anexo
I para ver los bloques incompatibles con bloques tipo “esperar”
La precisión de la ejecución de tareas de esta forma depende del tiempo que emplea cada tarea, si una
tarea “tarda” mucho bloqueará y “retrasará” al resto. Para un funcionamiento correcto cada tarea debe ejecutarse
en el menor tiempo posible y no usar nunca bloques de tipo esperar o realizar bucles de indeterminada duración
que puedan quedarse en ejecución por tiempo indefinido.
Ejemplo: Juego en el que tenemo que pulsar un botón periódicamente sin dejar que pase nunca más de
10s entre pulsaciones, en caso contrario se ilumina un led indicando que hemos perdido
● Dormir: Este bloque pone la placa Arduino en modo bajo consumo durante unos milisegundos.
La comunicación vía puerto serie es muy utilizada. Es una vía de comunicación bidireccional sencilla que
nos permite enviar información desde Arduino que visualizaremos en la consola o al contrario, enviar
información desde la consola que recibiremos en el Arduino.
En muchas ocasiones simplemente se utiliza como una forma de depurar o mostrar información para saber
si nuestro programa dentro del microcontrolador de Arduino está funcionando bien, en otros casos se puede
utilizar de una forma más compleja sirviendo de vía de comunicación con aplicaciones en un PC, con periféricos
como un GPS o comunicando con otros sistemas o por qué no, con otra placa Arduino.
En ArduinoBlocks tenemos acceso a la consola via web (con ArduinoBlocks-Connector instalado) aunque
podemos utilizar si lo preferimos cualquier aplicación de consola o terminal serie compatible con nuestro
sistema.
La funcionalidad de “Serial Plotter” nos permite graficar y registrar datos de forma muy visual y
sencilla:
● Iniciar: Configura la velocidad de la comunicación serie. Este valor debe ser igual en la consola y en el
programa Arduino para establecer una comunicación correcta. Por defecto, y si no se pone nada, la
velocidad es 9600bps.
Ejemplo:
● Enviar: Escribe un valor de texto o el valor de una variable en el puerto serie. La opción “Salto de
línea” permite añadir o no un retorno de carro al final del envío para bajar de línea.
Ejemplo:
● Enviar byte: Envía un valor numérico como un byte (8 bits). Por tanto el valor debe estar
comprendido entre 0 y 255.
● ¿Datos recibidos?: Obtiene un valor de verdadero si hay datos recibidos pendientes de procesar o falso
si no se ha recibido nada por la conexión serie.
● Recibir texto: Lee una cadena de texto recibida por el puerto serie. Si se indica la opción “hasta salto de
línea” en cuanto se encuentra un salto de línea devuelve el texto recibido. Si no, hasta que se dejen de
recibir datos.
Ejemplo:
● Recibir como número: Leer una cadena de texto recibida por el puerto serie e intenta interpretarla
como un número (analiza la cadena de texto buscando un formato numérico válido)
Ejemplo: Recibe un número enviado como texto desde la consola. Interpreta el número. Si es
“1” activa el pin 13 , si es “2” apaga el pin 13:
● Evento serie (interrupción): Ejecuta los bloques en su interior al recibir un evento del puerto serie,
como por ejemplo la recepción de datos nuevos. De esta forma no tenemos que estar haciendo la
comprobación continua en el bucle principal para recibir datos.
● Serial Plotter (gráfica y datalogger): Permite enviar valores desde Arduino al PC con el formato
correcto para visualizarlos en el “Serial Plotter” de Arduinoblocks.
El formato interno de los datos entre Arduino y el Serial Plotter tienen el formato:
Publicado por Google Drive – Notificar uso inadecuado
variable = valor (+ salto de línea)
ArduinoBlocks Free Book - ES ● El nombre de la serie (variable a representar) debe ser un nombre sencillo, sin caracteres Actualizado automáticamente cada 5 minutos
especiales (evitar acentos, eñes, …) y nunca debemos usar el símbolo “=” para evitar errores.
● El datalogger permite registrar (grabar) los datos y exportarlos en formato de archivo CSV para
su posterior procesamiento.
●
Ejemplo: Envío de datos de temperatura y humedad cada 1s
3.3.4 Bluetooth
La comunicación con el módulo Bluetooth HC-06 es exactamente igual que la del puerto serie, de hecho lo
que hace el módulo Bluetooth es encapsular toda la información serie a través de una conexión serie virtual a
través de un perfil Bluetooth de emulación de puerto serie.
Podemos simular una conexión serie con un dispositivo móvil (con Bluetooth compatible con el perfil de
puerto serie), un PC u otro módulo Bluetooth similar en otro dispositivo.
Arduino UNO sólo posee un puerto serie implementado en su hardware, para no utilizar el módulo
Bluetooth en los pines 0 y 1 (correspondientes al puerto serie hardware) e interferir con la comunicación serie o
la programación del dispositivo (como hacen otros entornos) los bloques de Bluetooth implementan un puerto
serie software que funciona exactamente igual pudiendo configurarse en cualquier otro pin digital tanto para RX
(recibir) como para TX (transmitir).
● Iniciar: Permite configurar los pines donde está conectado el módulo Bluetooth y la velocidad a la que
vamos a trabajar.
En el caso del microcontrolador ESP32 con bluetooth integrado, simplemente debemos indicar el
nombre del dispositivo Bluetooth para iniciar la comunicación:
● Nombre: El módulo Bluetooth HC-06 permite configurar el nombre y el código PIN a través de
comandos. Con este bloque podemos hacerlo fácilmente, el único requisito para que funcione es que
ningún dispositivo Bluetooth esté conectado en ese momento al módulo HC-06. Por otro lado
normalmente es necesario reiniciar el módulo para que aparezca la nueva configuración (y desemparejar
el dispositivo móvil si ya lo estaba).
● Enviar: Escribe un valor de texto o el valor de una variable en el puerto serie. La opción “Salto de
línea” permite añadir o no un retorno de carro al final del envío para bajar de línea.
● Enviar byte: Envía un valor numérico como un byte (8 bits). Por tanto el valor debe estar comprendido
entre 0 y 255.
● ¿Datos recibidos?: Obtiene un valor de verdadero si hay datos recibidos pendientes de procesar o falso
si no se ha recibido nada por la conexión serie.
● Recibir texto: Lee una cadena de texto recibida por el puerto serie. Si se indica la opción “hasta salto de
línea” en cuanto se encuentra un salto de línea devuelve el texto recibido. Si no, hasta que se dejen de
recibir datos.
● Recibir como número: Leer una cadena de texto recibida por el puerto serie e intenta interpretarla
como un número. Funciona igual que el boque del puerto serie (ver detalles de funcionamiento en el
puerto serie)
● Fijar timeout: Establece el tiempo máximo de espera en la recepción de datos por la conexión serie
Bluetooth (valor en milisegundos)
3.3.5 Sensores
En el mercado existen infinidad de sensores y módulos para Arduino, aunque con los bloques genéricos
descritos en el apartado 3.3.1 (entrada/salida) podemos leer la información de la mayoría de sensores digitales y
analógicos ArduinoBlocks implementa bloques específicos para los sensores más comunes del mercado. Estos
bloques a veces se limitan a leer la información digital o analógica, según el tipo de sensor, y en otros casos
realizan una adaptación de los datos leídos para ajustarlos a la realidad (por ejemplo al leer un sensor de
temperatura adapta la lectura a grados centígrados con un cálculo interno).
ArduinoBlocks incorpora bloques para la mayoría de sensores modulares que podemos encontrar en el mercado,
algunos muy populares como los sensores de Keyestudio y similares.
ArduinoBlocks es una plataforma online en continua evolución por lo que seguramente desde la edición de este
libro ya incorporará nuevos sensores con nuevas funcionalidades.
● Sensor potenciómetro: Nos permite obtener la posición del mando rotativo. Ángulo de operación de
unos 270º. Varía el valor de voltaje aplicado a la entrada en función de la posición de su resistencia
variable interna.
Ejemplo: Sensor potenciómetro conectado al pin analógico A0 para ajustar una variable de temperatura a un
valor entre 5 y 30 grados.
Dependiendo de la conexión que hagamos del pulsador, o en caso de utilizar módulos de pulsador de
diferentes fabricantes, la lógica de funcionamiento del pulsador puede ser diferente:
Conexión: Conexión:
sin presionar “off” / presionado: “on” sin presionar “on” / presionado: “off”
Alguno módulos de pulsador internamente trabajan de forma inversa por su conexión interna. En ese
caso el pulsador siempre está dado una señal “On” y cuando lo pulsamos genera la señal “Off”. En ese caso
podemos invertir la condición para detectar cuando está pulsado.
● Pulsador filtrado: Es un bloque similar al anterior pero que internamente hace un procesamiento de la
señal del pulsador evitando “rebotes” y además detectando el “pulsar” y el “soltar”
Al igual que en el anterior, si por la conexión interna del pulsador la señal lógica funciona al revés (“on”
en reposo y “off” al pulsar) podemos indicar que trabajo con lógica
Publicado porinvertida:
Google Drive – Notificar uso inadecuado
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
Ejemplo: Mostrar por la consola cada 5 segundos el valor de temperatura y humedad. Sensor conectado al pin
10.
● Sensor de temperatura y humedad (DHT-22): El sensor DHT-22 es una versión mejorada del sensor
DHT-11 con mayor rango de medida y precisión.
● Sensor de luz (LDR): Obtiene el nivel de luz ambiente mediante la resistencia LDR que varía en
función de la luz ambiente aplicada.
Tipo: Analógico Pin: A0-A5 Valor: 0-100 (%) / 0..1023
● Sensor de temperatura (NTC): Obtiene el valor de la temperatura ambiente. Utiliza una resistencia
variable NTC que varía su valor en función de la temperatura ambiente. La relación
resistencia/temperatura no es lineal, pero internamente se calcula el valor en grados aplicando la
siguiente fórmula para obtener el valor corregido en ºC:
● Sensor de distancia (HC-SR04): El sensor genera una serie de tonos de ultrasonidos (no audibles),
estos tonos si rebotan en una superficie vuelven y son captados por un receptor de ultrasonidos que
incorpora el propio sensor. Midiendo el tiempo que tardan en volver los ultrasonidos podemos calcular
la distancia a la que se encuentra el objeto sobre el que han rebotado.
Tipo: Datos
Pin Trigger (emisión): 2-13/A0-A5
Pin Echo (recepción): 2-13/A0-A5
Valor: 2 – 400 cm
● Sensor receptor de infrarrojos: Permite decodificar los protocolos de señales de pulsos infrarrojos
utilizados por los mandos a distancia.
Protocolos detectados: RC5, RC6, NEC, SONY, PANASONIC,JVC, SAMSUNG, WHYNTER, AIWA,
LG, SANYO, MITSUBISHI, DENON.
El valor devuelto por el bloque de recepción será una cadena de texto con valor vacío en caso de no
detectar ningún código, y el valor del código en formato de texto hexadecimal en caso de detectar un código
correcto.
Almacenamos el código en una variable de tipo texto:
Si utilizamos mandos genéricos RC5 como el modelo de Keyestudio, podemos usar el bloque para
comparar los códigos recibidos y así identificar fácilmente cada tecla:
v1 = versión mando con teclas azules de keyestudio
v2 = versión mando con teclas grises de keyestudio
En la consola obtendremos el valor de la cadena de texto en formato hexadecimal para cualquier mando a
distancia compatible:
Dependiendo el tipo de mando recibiremos unos códigos con valores de un tamaño u otro. Algunos
mandos utilizan códigos de 32 bits, al almacenar el valor del código recibido en una variable de ArduinoBlocks
se convierte a un valor decimal de 32 bits con signo y eso puede producir una alteración en el valor mostrado
(número decimales extraños).
Para evitar este problema debemos tratar el valor como un valor entero sin signo de 32
bits añadiendo el bloque “Número entero sin signo” visto en el apartado de bloques matemáticos (3.2.3).
Ejemplo: Mostrar por consola el código recibido:
Si utilizamos mandos genéricos RC5 como el modelo de Keyestudio, podemos acceder a los códigos
directamente con el bloque correspondiente:
● Sensor encoder (codificador) rotativo: Un encoder rotativo es un elemento que indica su posición
mediante posiciones codificadas. Cuando pasamos por cada paso se nota un pequeño salto que indica
que se ha llegado a la nueva posición. Estos codificadores constan de dos pines de señal para el
codificador y un pin para un pulsador que lleva integrado. Los dos pines del codificador nos dan la
información en forma digital con un total de 4 combinaciones: 00, 01, 10, 11.
El encoder no tiene ninguna posición predefinida y no tiene límite de giro en ningún sentido.
Automáticamente mantiene un valor interno con la posición virtual según los pasos en un sentido u otro,
empezando siempre en 0.
Ejemplo: Esperar hasta que el encoder recorra 5 saltos (clicks) hacia la derecha.
● Sensor de joystick: Este tipo de sensor de palanca se basa en dos potenciómetros que detectan la
posición en cada uno de los ejes X e Y.
● Sensor sigue líneas: Su funcionamiento es idéntico al detector de obstáculos por IR. Se utiliza para
detectar superficies blancas/negras.
Tipo: Digital Pin: 2-13/A0-A5 Valor: 0/1 (F/V, Off/On)
● Sensor foto-interruptor: Detecta cuando un objeto interrumpe un haz de luz entre un emisor y receptor.
Tipo: Digital Pin: 2-13/A0-A5 Valor: 0/1 (F/V, Off/On)
● Sensor sonda de humedad: Mide la humedad con la ayuda de una sonda que se introduce en la tierra.
Tipo: Analógico Pin: A0-A5/A0-A5 Valor: 0-100 (%) / 0..1023
● Sensor de campo magnético: El sensor se activa con la presencia de un campo magnético cerca. Por
ejemplo al acercar un imán al sensor.
Tipo: Digital Pin: 2-13/A0-A5 Valor: 0/1 (F/V, Off/On)
● Sensor detector de llama: Detecta el nivel de fuego o una llama detectando la frecuencia de luz del
fuego.
Tipo: Analógico Pin: A0-A5/A0-A5 Valor: 0-100 (%) / 0..1023
● Sensores de gas MQ-X: Están diseñados para detectar ditintos gases. Por lo general no son muy
precisos. Los datos de estos sensores se obtienen sin procesar, con un valor entre 0...1023 o ajustado a
%. En todo caso se deberá consultar las características detalladas del fabricante del sensor en concreto
para interpretar el dato.
Tipo: Analógico Pin: 0-A5/A0-A5 Valor: 0-100 (%) / 0..1023
● Sensor de nivel de luz (TEMT6000): Permite medir la luz ambiente con alta precisión además de ser
un sensor que mide sólo la luz ambiente que percibe el ojo humano, filtrando el espectro de luz no
visible y realizando así una medición más real para ciertas aplicaciones.
Tipo: Analógico Pin: A0-A5 Valor: 0-100 (%) / 0..1023
● Sensor acelerómetro (ADXL335): Este tipo de sensores permite medir la aceleración en los tres ejes
espaciales X,Y y Z. En reposo los ejes X e Y deben tener una valor aproximo de 0G y el eje Z debe
tener un valor aproximadamente de 1G (la aceleración de la gravedad). Ante cualquier sacudida o
movimiento el sensor nos indicará la aceleración en cada eje en unidades G. Este sensor permite medir
desde -3G hasta 3G.
Internamente con cálculos trigonométricos se pueden obtener los ángulos de rotación en X (Roll) y en
Y (Pitch). Sin embargo para calcular la rotación en Z (Yaw) debemos utilizar otro tipo de acelerómetros
que se complementan con un giroscopio.
● Sensor acelerómetro (ADXL345): Acelerómetro de 3 ejes con conexión I2C que permite obtener las
aceleraciones en X,Y,Z y los grados de giro X-Roll,Y-Pitch. La conexión I2C lo hace muy fácil de
utilizar y obtiene uno datos más precisos que el modelo ADXL335 analógico.
Tipo: Datos I2C Pin: A4(SDA) / A5 (SCL) Valor: m/s2, º , 0...1023
● Sensor nunchuck: El controlador Nunchuck se conectar a través de i2c y permite utilizar obtener los
datos de sus sensores internos: acelerómetros, joystick y botones.
Tipo: Datos I2C Pin: A4(SDA) / A5 (SCL)
● Sensor de polvo PM2.5: Este sensor mide con alta precisión las partículas en el aire.
Tipo: Datos Pin: Digital + Analógico Valor: densidad
Ejemplo de conexión:
● Sensor de color (TCS34725): Sensor con conexión i2c para reconocimiento de colores de las
superificies cercanas.
Tipo: Datos I2C Pin: A4(SDA) / A5 (SCL) Valor: RGB / HSV
Publicado por Google Drive – Notificar uso inadecuado
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
● Sensor de temperatura (DS18B20): Sensor con sonda de temperatura, permite varias sondas (#0, #1,
…) y utiliza la conexión 1-wire
Tipo: Datos 1-wire Pin: Digital Valor: Temperatura ºC
● Sensor de CO2/TVOC (CCS811): Sensor de calidad del aire. Obtiene el valor de Compuestos Volatiles
Organicos (TVOC) y de Dioxido de Carbono Equivalente (eCO2)
Tipo: Datos I2C Pin: A4(SDA) / A5 (SCL) Valor: CO2 (ppm)
● Sensor de gestos (PAJ7620): Este sensor identifica hasta 9 gestos que se realizan con la mano cerca del
sensor: izquierda, derecha, arriba, abajo, giro horario, antihorario y ola.
● Sensor de temperatura por infrarrojos (MLX90614): Permite medir la temperatura de un objeto o ser
vivo sin contacto, basándose en la medición de la radiación IR que emite cualquier cuerpo.
https://shop.innovadidactic.com/es/standard-sensores/756-keyestudio-sensor-de-temperatura-
infrarojo-sin-con.html
Publicado por Google Drive – Notificar uso inadecuado
● Sensor de distancia (láser): Permite medir con alta precisión (mm) la distancia a la que se
ArduinoBlocks Free Book - ES encuentra un objeto delante del sensor.
Actualizado automáticamente cada 5 minutos
ArduinoBlocks implementa los sensores vistos anteriormente para simplificar el uso. En algunos casos
procesa los datos leídos para obtener un valor (por ejemplo el sensor de temperatura NTC o LM35) y en otros
casos “normaliza” el valor a un rango de % (0 a 100) para simplificar su uso.
En algunos casos puede que necesitemos leer el valor del sensor directamente para obtener una mayor
precisión o simplemente porque el sensor no está implementado en ArduinoBlocks y necesitamos usar los
bloques de entrada/salida genéricos para obtener datos del sensor digital o analógico.
Ejemplo 1: Lectura del valor de luz con LDR para obtener más precisión.
3.3.6 Actuadores
● Led intensidad (PWM): Permite controlar la intensidad de iluminación de un led conectado a una
salida PWM.
Tipo: PWM Pin: 3,5,6,9,10,11 Valor: 0-255
● Led RGB: Controla un led RGB. Define un color calculando automáticamente los valores de cada
componente R,G y B para definir el color.
Tipo: PWM
Pin R/G/B: 3,5,6,9,10,11
Valor: Color
● Zumbador (pasivo): Un zumbador pasivo es un dispositivo piezoeléctrico que permite generar sonidos.
Podemos generar tonos de la frecuencia deseada. (Si utilizamos un zumbador activo el propio zumbador
genera su frecuencia y lo podremos activar o desactivar con una simple salida digital).
Tipo: Digital Pin: 2-13 Hz: frecuencia del tono / Ms: duración en mseg.
Mediante el bloque de tonos predefinidos podemos indicar las notas musicales en lugar de tener
que indicar el valor de la frecuancia de forma numérica.
● Zumbador melodía RTTTL: Este bloque permite reproducir una melodía a partir de un texto con formato
RTTTL.
El formato RTTTL es un formato creado por Nokia para las primeras melodías de los teléfonos móviles.
Existen sitios webs donde descargar estas melodías.
El bloque de melodías RTTTL predefinidas permite reproducir algunas melodías de forma sencilla.
● Emisor IR: Mediante el módulo emisor IR podemos emitir códigos de infrarojos como un mando a
distancia.
Tipo: Digital Pin: 3 Protocolo y código IR a enviar
Para obtener la información de un mando IR cualquiera y decodificar el protocolo, número de bits y código de
cada tecla podemos seguir este tutorial (tutorial con código avanzado en Arduino IDE)
https://learn.adafruit.com/using-an-infrared-library/hardware-needed
Al igual que con los sensores, puede que tengamos actuadores digitales o analógicos no implementados en
ArduinoBlocks o que queramos controlar de una forma diferente a como lo hacen los bloques. Para ello
podemos utilizar directamente los bloques de entrada/salida genéricos.
Con los bloques genéricos (Naranja => Rojo = 204, Verde=153, Azul=51)
Uno de los periféricos más utilizados y versátil que podemos conectar a Arduino es una pantalla LCD
(display) para mostrar información e interactuar con el usuario.
La pantalla LCD más sencilla y utilizada es el de tipo alfanumérico de 2 líneas y 16 caracteres por línea, o
de 4 líneas y 20 caracteres por línea
LCD 2x16 LCD 4x20
ArduinoBlocks nos permite conectar una pantalla de dos forma diferentes:
Necesitamos 4 bits para datos y dos señales de control En (Enable) y Rs (Register select). La conexión
RW la conectamos fija a GND. Además se debe añadir una resistencia ajustable o un potenciómetro para regular
el contraste de la pantalla.
Esta conexión es bastante compleja y utiliza muchos pines, es muy recomendable utilizar la pantalla con
conexión i2c. A cualquier pantalla LCD le podemos añadir un módulo para convertirla en conexión i2c.
● LCD iniciar: Permite configurar la forma de conexión de la pantalla LCD a la placa Arduino.
Recomendable en el bloque “inicializar”.
-Iniciar con conexión de 4 bits:
(La dirección I2C depende del módulo o pantalla LCD, 0x27 y 0x3F son las más comunes)
● LCD definir símbolo: Permite definir uno de los 8 símbolos personalizables que puede almacenar la
pantalla LCD. El símbolo se define por un mapa de bits (1’s y 0’s indicando cada píxel del símbolo). Los
símbolos tienen una resolución de 5x8 píxeles (blanco o negro).
El bloque definir símbolo normalmente irá dentro del bloque “inicializar” de Arduino.
B00000,B00000,B00000,B01010,B00000,B10001,B01110,B00000
Las pantallas OLED (leds orgánicos) son muy comunes en la actualidad, y las podemos incluir en
nuestros proyectos con Arduino de una forma bastante sencilla.
La pantalla más habitual para Arduino y la soportada por ArduinoBlocks es la pantalla monocromo de
0.96″ (pequeña pero matona!) con conexión i2c.
http://shop.innovadidactic.com/index.php?id_product=751&controller=product
● OLED iniciar: Indicamos el número de pantalla (#), pues podemos usar varias a la vez, indicando la
dirección a la que está conectada. Si queremos más de una pantalla en el bus i2c y controlarlas de forma
independiente deben tener direcciones distintas, por lo que debemos modificar los pines de
configuración.
Resultado:
http://arduinoblocks.didactronica.com/2019/05/graficos-y-animaciones-en-pantallas/
Publicado por Google Drive – Notificar uso inadecuado
● OLED píxel: Dibuja un píxel en las coordenadas especificadas.
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
Origen: X1, Y1
Destino: X2,Y2
Origen: X1, Y1
Ancho: W
Alto: H
Podemos seleccionar si queremos que el rectángulo esté relleno o sólo se dibuje el borde.
Radio: R
Podemos seleccionar si queremos que el círculo esté relleno o sólo se dibuje el contorno.
La memoria EEPROM es un memoria interna del microcontrolador de Arduino que nos permite guardar
información. Tiene la propiedad de no ser volátil, por lo que la información permanece guardada en ella aunque
quitemos la alimentación eléctrica.
Esta memoria es perfecta para almacenar información de configuración de la aplicación o valores de estado
que se necesiten recuperar después de un corte de la alimentación eléctrica.
El microcontrolador de la placa Arduino UNO tiene 1024 bytes de memoria EEPROM, sin embargo en
ArduinoBlocks cada variable usada internamente utiliza 4 bytes por lo que a la hora de almacenar o recuperar
una variable de la memoria EEPROM sólo podemos almacenar en 256 posiciones (256 x 4 = 1024 bytes).
Direccionamiento Arduino: 0-1023 Direccionamiento ArduinoBlocks: 0-255
0 0
1
2
3
4 1
5
6
7
8 2
9
10
11
… …
● EEPROM escribir variable: Guarda un valor o variable en una posición de memoria de la memoria.
IMPORTANTE:
La memoria EEPROM suele venir inicializada a 0xFF
por lo que para un uso correcto deberíamos ponerla a 0 en algunos casos:
3.3.10 Motores
Las salidas de la placa Arduino no proporcionan suficiente corriente para controlar un motor de
corriente continua (Arduino proporciona unos 50mA y un motor puede consumir unos 1000mA) por lo que
necesitaremos realizar un pequeño circuito con un transistor para controlar una corriente mucho mayor.
Utilizaremos un transistor NPN en modo corte/saturación que permitirá, como un interruptor, el paso de una
intensidad de corriente mucho más alta desde un fuente de alimentación auxiliar.
La pila de 9v genera la corriente necesaria para mover el motor. A través del pin 3 generamos la señal
que activa el transistor y permite el paso de corriente de la pila. Si utilizamos la salida como PWM podremos
controlar la velocidad del motor (si se escribe un valor bajo, menos de 100 aproximadamente, el motor no girará
por no aplicarle la suficiente energía)
Si necesitamos controlar además el sentido de giro de motor debemos utilizar un “puente en H” que nos
Publicado
permite invertir la polaridad en el motor. Lo más fácil es utilizar porintegrado
un driver Google Drive
como– el
Notificar uso inadecuado
chip L293D o un
módulo para Arduino que integre todos los componentes.
ArduinoBlocks Free Book - ES Módulo típico con configuración Actualizado automáticamente cada 5 minutos
Esquema de un puente en H para controlar la en puente H para control
dirección de giro de un motor de motores de C.C.
Estos módulos suelen integrar el control para dos motores. Los pines de un módulo de control de
motores en puente en H suele tener estas conexiones:
● Servomotor
Los servomotores son motores DC a los que se les ha añadido una reductora y una electrónica de control
PID que permite controlar el motor situándolo en una posición muy precisa. El servomotor está intentando
siempre situarse en la posición indicada, de forma que si se le fuerza o impide ir hasta la posición indicada
intentará moverse a la posición indicada continuamente.
Los servomotores pueden situarse en una posición entre 0º y 300º aproximadamente según el modelo. Un
servomotor no permite el giro libre a no ser que se modifique con ese propósito.
El control de la posición de un servomotor se realiza mediante PWM por lo que necesitamos conectarlo a
una salida digital de tipo PWM.
En ArduinoBlocks tenemos un bloque que nos permite controlar fácilmente un servomotor indicándole la
posición en grados donde queremos que se sitúe y el retardo en milisegundos para darle tiempo a que se mueva
hasta la posición indicada.
Existe un tipo especial de servomotor que permite la rotación continua. En algunos casos se trata de
servomotores “trucados” de forma que se modifican para permitir la rotación continua quitando los topes
mecánicos y se sustituye el potenciómetro por un divisor de tensión con dos resistencia iguales (en algunos casos
no se ponen resistencias y se bloquea el potenciómetro para que no gire dejándolo justo en su punto central).
En cualquier caso también podemos comprar un servomotor de rotación continua listo para funcionar sin
tener que hacer bricolaje.
El control de un servomotor de rotación continua se realiza de igual manera, pero su reacción es
diferente.
90º Parado
Si utilizamos valores cercanos a 90º el motor girará a una velocidad más lenta en cada uno de los
sentidos.
Este tipo de motor es capaz de avanzar una serie de grados (paso) dependiendo de su entrada de control.
Son ideales para los mecanismos donde se requiera mucha precisión, por ejemplo son utilizados para los
mecanismos de movimiento de las impresoras 3D.
Estos motores están formados por un rotor sobre el que van aplicados varios imanes permanentes y por
un cierto número de bobinas excitadoras en su estator.
La excitación de las bobinas se controla externamente y determina el giro del rotor.
Para controlar un motor paso a paso utilizamos un módulo capaz de controlar cada una de las 4 señales
de control que activan cada bobina. Realizando la secuencia correcta movemos el motor, según el número de
pasos y velocidad a la que avanzamos en la secuencia. Todo esto se realiza internamente automáticamente.
● Pasos/vuelta: Configura la conexión de las bobinas del motor paso a paso así como el parámetro de
pasos por vuelta para controlar el motor correctamente.
● Pasos: Mueve el motor un número de pasos. Si el número de pasos es negativo girará en dirección
contraria.
3.3.11 Motor-Shield
Una opción sencilla y muy utilizada para controlar motores de una forma sencilla es utilizar una
shield de control de motores. La más utilizada posiblemente sea la motorshield v1 diseñada por
Adafruit. Con esta shield podemos controlar 2 servos, 4 motores C.C. y 2 motores paso a paso.
Es importante saber que la shield utiliza todos los pines digitales excepto 0,1,2,13. Y que
podemos tener acceso a los pines analógicos A0...A5 que podremos usar como pines digitales o
analógicos de E/S y el bus i2c a través de A4,A5 sin problemas.
La shield permite alimentar los motores desde una fuente externa a través de un conector atornillable en la
propia placa.
Los bloques son similares a los indicados en el apartado Motores, pero adaptados a la shield.
● Motor-Shield paso a paso: Permite seleccionar uno de los dos posibles motores paso a paso que se
pueden controlar con la shield. El funcionamiento es igual a los bloques indicados en el apartados
Motores.
● Motor-Shield motor (DC / CC): Permite controlad uno de los 4 motores CC que podemos conectar a
la shield. Tensmo un bloque para fijar la velocidad (0 … 255) y otro para controlar el movimiento.
3.3.12 Keypad
El teclado o “keypad” nos permite de una forma sencilla añadir un pequeño teclado numérico a nuestro
proyecto. Se basa en una botonera conectada de forma matricial por filas y columnas. ArduinoBlocks gestiona
Publicado
automáticamente la detección de filas y columnas activadas para detectar por Google
la tecla Drive – Notificar uso inadecuado
pulsada.
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
● Configuración del keypad: define los pines de conexión para las filas y columnas del keypad. Podemos
configurar un keypad de 3x4 o de 4x4
El reloj de tiempo real DS3231 es un reloj de alta precisión. El reloj incorpora una batería para guardar la
fecha y la hora cuando la placa Arduino pierde la alimentación.
Se comunica con el microcontrolador de Arduino por comunicación I2C.
● Fijar campo de fecha/hora: Permite establecer uno de los campos de la fecha / hora por separado.
● Obtener campo de fecha/hora: Permite obtener los campos de fecha y hora de forma independiente.
● Obtener texto con la fecha: Permite obtener un valor de tipo texto con la fecha formateada como
DD/MM/YYYY
● Obtener texto con la hora: permite obtener un valor de tipo texto con la fecha formateada como
hh:mm:ss
Ejemplo: Ajuste de fecha y hora del reloj RTC desde PC (vía consola serie)
3.3.14 GPS
Los módulos GPS nos permiten de forma sencilla obtener los datos de posición global (latitud/longitud),
velocidad, orientación, altitud, … facilitados por el sistema de posicionamiento global. El módulo GPS
conectado debe ser un módulo de conexión serie que proporcione los datos según el protocolo NMEA. Uno de
los módulos más utilizados de este tipo son los GPS NEO-6. Publicado por Google Drive – Notificar uso inadecuado
ArduinoBlocks Free Book - ES Conexióm módulo GPS serie Shield GPS Actualizado automáticamente cada 5 minutos
http://shop.innovadidactic.com/index.php?id_product=844&controller=product
http://shop.innovadidactic.com/index.php?id_product=733&controller=product
● GPS Iniciar: Inicia el módulo GPS indicando los pines utilizados para la comunicación serie con el
módulo.
● ¿Datos válidos?: Indica verdadero en caso de que el módulo GPS reciba señal desde los satélites GPS
de forma correcta y los datos obtenidos sean válidos, si no obtendremos valor falso.
● Posición: Obtiene la latitud y longitud para así obtener la información de la posición actual. Los
valores de latitud y longitud son valores decimales que determinan nuestra posición sobre la Tierra.
● Velocidad: Obtiene el valor de la velocidad a la que nos movemos, puede ser en Km/h o Millas/h.
● Fecha/hora: Obtiene los valores de fecha y hora recibidos desde el satélite GPS.
Ejemplo: Mostrar la distancia en Km hasta Madrid desde nuestra posición actual cada 5s
Los bloques de tarjeta SD nos permiten trabajar con archivos almacenados en una tarjeta SD o microSD
conectada a Arduino. Los módulos para tarjetas SD utilizan la conexión SPI para comunicarse con la placa
Arduino.
Este tipo de almacenamiento nos permite realizar aplicaciones de registro de datos (datalogger), guardar
configuración, etc.
Los módulos o shields SD se conectan con la interfaz SPI utilizando los pines 11,12 y 13 y otro pin para CS
(normalmente las shields utilizan el pin 4).
Módulo SD
Algunas shields como la “Ethernet” incorporan también un módulo para tarjetas SD. Debemos
comprobar su documentación para asegurarnos los pines que utilizan (en el caso de la shield “Ethernet” utiliza el
pin 4 para CS)
● Iniciar SD: Inicia el uso del módulo de tarjetas SD indicando los pines donde está conectado. (los pines
SPI son fijos, sólo indicamos el pin CS)
● Imprimir: Escribe un texto dentro de un archivo de texto en la tarjeta SD. El texto se añade al final del
contenido actual del archivo.
● Leer cada byte: Permite leer byte a byte todos los datos de un archivo.
● Existe el archivo: Obtiene el valor verdadero si el archivo existe o falso en caso contrario.
Ejemplo: Registrar el nivel de luminosidad medido con una LDR cada 30s
http://shop.innovadidactic.com/index.php?id_product=679&controller=product
Protocolo 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.
Podemos implementar nuestro propio servidor/broker. Existen brokers MQTT de código libre como
“Mosquitto” que podemos instalar en diferentes sistemas operativos de forma sencilla. Un ejemplo típico es
configurar una Raspberry Pi como servidor MQTT en casa. Si queremos que el sistema esté abierto a internet
deberemos configurar nuestra conexión adecuadamente al igual que obtener nuestra IP pública actual o contratar
una IP pública fija.
Por otro lado podemos utilizar brokers MQTT públicos disponibles en internet con fines experimentales o
docentes y en cualquier otro caso podemos contratar servicios de brokers de pago con diferentes limitaciones de
ancho de banda o número de conexiones según nuestras necesidades.
Algunos brokers MQTT para utilizar:
iot.eclipse.org
broker.hivemq.com
www.cloudmqtt.com
La comunicación entre los nodos de un sistema MQTT se realizan enviando mensajes. Los nodos envían
los mensajes al broker y éste se encarga de distribuirlos entre el resto de nodos. Cada mensaje consta de un
“topic” o tema y el cuerpo del mensaje en sí. Un nodo se puede suscribir a un “topic” de forma que recibirá
todos los mensajes que tengan ese “topic”. Cada nodo puede publicar mensajes con el “topic” deseado.
Por ejemplo podemos utilizar el topic: “temp/comedor” para que un nodo envíe la temperatura del comedor,
por otro lado todos los nodos que deseen conocer la temperatura del comedor se suscribirán al topic :
“temp/comedor” y recibirán automáticamente los mensajes de este tipo.
Bloques para la programación MQTT:
● Iniciar MQTT (EthernetShield): Inicia la conexión MQTT a través de la shield Ethernet. La
dirección MAC generada es aleatoria, si nuestra shield incluye una etiqueta con la dirección MAC
debemos ponerla. Por otro lado indicaremos el broker y puerto a utilizar, el usuario/clave si es necesario
y el identificador del cliente MQTT. La tarjeta de red Ethernet intentará obtener la configuración IP de
forma automáticamente por lo que nuestra red deberá tener un servidor DHCP activo que proporcione
esta información (cualquier router doméstico lleva esta opción activa por defecto).
● Iniciar MQTT (Esp8266 WiFi): Utiliza un módulo ESP-01 serie para establecer la conexión
serie. Debemos especificar los pines donde se conectan los pines RX y TX del módulo. Si el módulo
está configurado (por defecto) para comunicar a una velocidad de 115200 bps tendremos
obligatoriamente que usar los pines 0,1. Si el móduloPublicado
está configurado para
por Google trabajar
Drive a unauso
– Notificar velocidad
inadecuado
inferior podemos especificar otros pines. En caso de usar los pines 0,1 debemos desconectar el módulo
ArduinoBlocks Free Book - ES durante la programación de la placa Arduino. Por otro lado especificaremos el nombre de la red WiFi y Actualizado automáticamente cada 5 minutos
la clave así como el broker y puerto a utilizar, el usuario/clave si es necesario y el identificador del
cliente MQTT. El router WiFi debe tener el servicio DHCP activado para asignarnos una IP de forma
automática.
● Iniciar MQTT (NodeMCU o WeMos): En caso de las placas con WiFi integrado sólo debemos
especificar el nombre de la red WiFi y la clave, así como los datos de conexión del broker, puerto,
nombre identificativo del cliente y usuario/clave del broker si fuera necesario.
● Publicar MQTT: Permite enviar un mensaje al broker para que los nodos suscritos a este topic reciban
el valor. El tema es el “topic” a publicar y el valor puede ser un valor fijo (texto o numérico) o el valor
de una variable.
● Suscribir MQTT: Este bloque realiza la suscripción a un “topic” o tema. ArduinoBlocks mapea el valor
recibido en el mensaje a una variable de forma que cuando se recibe un mensaje del “topic”
automáticamente el valor de la variable se actualizará.
Para variables numéricas (el valor recibido debe ser un número válido y se guardara en la variable
indicada)
Existen multitud de aplicaciones, especialmente para dispositivos móviles, para conectarse a un broker
MQTT y publicar o suscribirse a topics. Algunas de ellas además permiten crear paneles de control y
monitorización muy llamativos.
MyMQTT (Android)
(recuerda que no debes utilizar bloqueos de tiempo para que el sistema MQTT funcione bien)
Desde la aplicación MQTT Dashboard (Android) podemos modificar los valores de los textos que se visualizan
en cada línea del LCD:
Los leds ws2812 o neopíxel son leds RGB inteligentes que incorporan su propio microcontrolador dentro
de cada led. Normalmente se encuentran en forma de tira de leds conectados uno al siguiente , pudiendo realizar
tiras de decenas o cientos de leds.
Un led RGB ws2812 tiene normalmente 4 pins de contacto:
-VCC: alimentación 3 o 5v
-GND: 0v
-DIN (DI): Entrada de información. Conectado a un pin de Arduino.
-DOUT (DO): Salida de información. Conectado al siguiente led o tira de leds.
Las tiras de leds neopíxel necesitan normalmente una fuente de alimentación externa (si conectamos muy
pocos leds, 5 o menos, no hará falta alimentación externa). En la mayoría de casos necesitaremos la fuente
externa para suministrar suficiente corriente en caso de iluminar varios leds de la tira de leds simultáneamente.
Ejemplo: conexión tira de leds neopíxel con alimentación externa.
● Iniciar: Este bloque se debe definir dentro del “inicializar” o “setup” para indicar la configuración los
leds neopíxel conectados. Indicando varios parámetros:
-Frecuencia: 800Khz / 400Khz, es la velocidad del “bistream” con los datos que se evían a través del
pin DIN con los datos para cada neopíxel. (Una tasa de 400khz ya permitiría controlar más de 1000 leds con un
refresco de 30fps)
-Número de píxeles: indica el número de píxeles conectados en serie, si conectamos una tira de leds
de 100 leds lo indicaremos en este valor.
-Pin: Es el pin de control a través el cual Arduino controlará y enviará los datos a los leds.
● Mostrar: Actualizar los datos enviados a los leds neopíxel. Cualquier operación de las siguientes no se
reflejará hasta que se ejecute el bloque “mostrar”. Esto se realiza por una cuestión de optimización, así
podemos realizar varias operaciones internamente y mostrarla a la vez en una sóla operación.
● Establecer píxel: Permite fijar un píxel (led) en concreto de toda la serie a un color, indicando el
número de led (el primero es el 0) y los valores R,G y B (0...255) o seleccionando el color.
● Establecer matriz: Funciona de forma similar al anterior, pero en caso de usar una matriz de leds
podemos indicar el píxel a modificar mediante sus coordenadas X,Y y los valores R,G,B (0...255)
● Establecer datos: Permite rellenar una matriz de leds a partir de un “bitmap” de datos. Con el botón
derecho y la opción “Ayuda” podemos abrir el editor para obtener los datos del “bitmap”
+Información y ejemplos:
http://arduinoblocks.didactronica.com/tag/neopixel/
3.3.18 RFID
La identificación mediante radio frecuencia, permite leer tarjetas o etiquetas sin contacto simplemente
acercándolas. Al acercar una tarjeta o etiqueta RFID al lector podemos obtener el ID de cada una de ellas (que
será única). Este tipo de dispositivos es perfecto para controles de presencia, controles de acceso, etc.
● ¿Se ha detectado una nueva tarjeta? : Este bloque devuelve verdadero en caso de detectar una tarjeta
cerca del lector pendiente de leer.
● Leer y expulsar tarjeta: Obtiene el código identificativo de la tarjeta o etiqueta. El código será una
cadena de texto con representación hexadecimal de su identificador interno. Una vez leído el código, se
deberá alejar y volver a acercar otra tarjeta para volver a poder leer (se expulsa virtualmente). Lo
recomendable es almacenar este valor en una variable de texto para luego procesar el valor.
Ejemplo: Leer identificación de las tarjetas o etiquetas y mostrar el ID por la consola serie
Las matrices de leds permiten controlas 64 leds monocromo (rojos normalmente) dispuestos en forma de
matriz de 8 filas y 8 columnas. Para controlar los leds la matriz tiene un chip controlador (HT16K33) que
gestiona los leds y se comunica con Arduino mediante bus I2C.
Podemos conectar varias matrices de leds en el mismo bus I2C, para controlarlas individualmente
debemos cambiar la dirección de cada una de ellas.
Configuración de la dirección I2C Configuración de la dirección I2C Hub I2C para ramificar y conectar
mediante pines soldados mediante microswitchs varios dispositivos al mismo bus I2C
● Iniciar: Inicializa una matriz en una dirección en concreto. Posteriormente podremos referirnos a ella
medienta el ID #
● Rotación: Permite ajustar la orientación de la matriz led para indicar en que posición se encuentra y
funcione correctamente.
● Bitmap: Permite establecer un mapa de bits para dibujar en la matriz led. Mediante la opción “Ayuda”
del bloque podemos acceder al editor de mapa de bits.
● Bitmap (predefinidos): Mediante este bloque podemos cargar bitmaps predefinidos de una forma muy
sencilla.
● Línea: Permite dibujar una línea recta entre dos coordenadas en la matriz led.
Punto origen: X1, Y1
Punto destino: X2, Y2
● Círculo: Dibuja un círculo indicando las coordenadas del centro y el número de píxeles de radio.
Centro: X, Y
Radio: R
● Texto: Dibuja un texto en la matrix led. Usando coordenadas fuera de las visibles podemos realizar
textos con desplazamiento con una única matriz led.
● Bitmap: Permite definir un mapa de bits directamente marcando los píxeles encendidos y apagados en
el propio bloque de una forma visual.
El módulo reproductor MP3 consta de un microcontrolador capaz de leer carpetas de archivos de sonido y
decodificar el formato MP3, un amplificador con salida de audio para altavoz o auriculares y una interfaz serie
para controlar el funcionamiento desde un microcontrolador como Arduino.
Estos módulos también conocidos como “serial mp3” están basados en el chip YX5300.
http://shop.innovadidactic.com/index.php?id_product=868&controller=product
https://wiki.keyestudio.com/KS0387_keyestudio_YX5200-24SS_MP3_Module
El formato de la tarjeta micro SD debe ser FAT. Publicado por Google Drive – Notificar uso inadecuado
El nombre de las carpetas debe ser 01, 02, 03… 99
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
Y dentro cada canción o sonido debe empezar con 3 dígitos antes del nombre (001...255).
● Iniciar: Inicializa el módulo indicando los pines utilizados para la comunicación serie (RX/TX)
● Publicado
Ecualizador: Selecciona uno de los ajustes predefinidos por Google
de ecualización del Drive – Notificar uso inadecuado
sonido.
ArduinoBlocks Free Book - ES Actualizado automáticamente cada 5 minutos
+Información y ejemplos:
http://arduinoblocks.didactronica.com/2019/12/modulo-reproductor-mp3-sd/
● PZEM-004T: es un sensor que permite medir voltaje, corriente y potencia de una instalación de
corriente alterna. Los cables se deben atornillar para medir la tensión (V) y por otro lado deben pasar por
la bobina toroidal para medir la corriente que circula (A).
○ Iniciar: Inicia el módulo indicando los pines de conexión para la comunicación serie con el
módulo (RX/TX):
○ Obtener valor medido: Leer el valor de Voltaje (Voltios), Corriente (Amperios) , Potencia
(Watios) o Energía (W/h). Se debe especificar la dirección (#) del módulo, pues pueden
conectarse varios sensores en paralelo a los mismos pines de comunicación.
○ Fijar dirección: El sensor PZEM-004T permite varios sensores conectados en paralelo en los
mismo pines serie. Con este bloque podemos fijar la dirección del módulo conectado.
● INA219: Es un sensor para medir voltaje y corriente pero para corriente continua. Se conecta a Arduino
mediante bus I2C.
○ Iniciar: Inicializar el módulo INA219 indicando la dirección I2C utilizada, de forma que
permite utilizar varios módulos en el mismo bus con distintas direcciones.
○ Obtener medición: Obtiene los datos de Voltaje (Voltios) , Corriente (Amperios), Potencia
(Watios)
Los bloques de teclado / ratón solo están disponibles para Arduino UNO y Micro.
Estos dos modelos de Arduino son detectados como un dispositivo HID (Human Interface Device) , es
decir, como un dispositivo de interfaz humana, lo que quiere decir que puede simular comportarse como un
teclado o ratón. Esta funcionalidad nos permite aplicaciones tan interesantes como realizar un controlador de
juegos con Arduino, enviar datos a una aplicación simulando la pulsación de teclas, mover el cursor del ratón del
sistema operativo a partir de datos de sensores conectados a Arduino , etc.
● Teclado
○ Enviar: envía un texto a través del Arduino como si se hubiera tecleado desde un teclado
conectado por USB, de forma que el texto aparecerá en la aplicación activa. Por ejemplo, si
abrimos un procesador de texto irá apareciendo el texto enviado desde el Arduino como si lo
hubiéramos tecleado.
Hay 3 modos:
● Ratón
Hay 3 modos:
- Click: simula el proceso de pulsar y soltar el botón
- Pulsar: simula la pulsación (y se queda pulsado)
○ Mover: simula el desplazamiento del curso del ratón. Indicamos el valor positivo o negativo de
incremento en píxeles. Siempre será un valor relativo a la posición actual.
Ejemplo: simular clicl del ratón al detectar presencia con un sensor PIR
+Información y ejemplos:
http://arduinoblocks.didactronica.com/category/leonardo/
3.3.23 Blynk
Blynk es una plataforma para IoT compatible con Arduino,ESP8266 y muchísimos sistemas más. Blynk
permite que cualquiera pueda controlar fácilmente su proyecto Arduino con una tablet o móvil con sistema iOS
o Android. Los usuarios tendrán ahora la posibilidad de crear una interfaz gráfica de usuario de “arrastrar y
soltar” en cuestión de minutos. La combinación ArduinoBlocks + Blynk permite desarrollar proyectos IoT muy
potentes en un tiempo récord.
https://github.com/blynkkk
https://blynk.io/en/getting-started
http://docs.blynk.cc/
Simplemente buscando en Google Play o App Store podemos descargar e instalar la aplicación de forma
muy sencilla:
https://play.google.com/store/apps/details?id=cc.blynk&hl=es
https://apps.apple.com/us/app/blynk-iot-for-arduino-esp32/id808760481
● Usar el servidor de Blynk, para lo cual debemos registrarnos y crear una nueva cuenta desde
la app. Esta es la opción más sencilla y rápida. Al usar el servidor de Blynk tendremos
limitaciones (si no queremos pagar), pero puede ser la opción más fácil para iniciarse.
● Usar un servidor Blynk local propio. Esta opción es un poco más complicada pues supone
ejecutar el servidor en un PC en la red y gestionar los usuarios nosotros mismos. Es una opción
muy potente que se explicará en el apartado de “servidor Blynk”.
Partiendo de la primera opción de usar el servidor gratuito con limitaciones, nos registramos e iniciamos
sesión en la aplicación para poder utilizarla.
En esta primera aproximación a Blynk usaremos el servidor online gratuito de Blynk, que aunque tenga
limitaciones (ampliables pagando) no servirá para entender el funcionamiento y una primera prueba.
https://blynk.io/
Podemos optar por la opción de descargar e instalar el servidor de Blynk en nuestro propio equipo o en
un servidor dentro de nuestra red. Por ejemplo, podemos crear un servidor Blynk en nuestro instituto para dar
servicio a los alumnos teniendo control total sobre las cuentas y sobre los datos transferidos o en un mini
ordenador como la Raspberry Pi y configurar nuestro router para tener acceso a nuestro servidor Blynk vía
internet sin limitacioens.
https://github.com/blynkkk/blynk-server
Firmware Blynk
El firmware (programa dentro de nuestro Arduino, NodeMCU, …) será el encargado de interactuar con
el servidor Blynk y así poder intercambiar información para controlar o monitorizar nuestro dispositivo desde la
aplicación móvil.
Si usamos Arduino IDE con código debemos incluir la librería Blynk y programar el funcionamiento
correctamente.
Lo primero que debemos decidir es el dispositivo que vamos a utilizar con Blynk y ArduinoBlocks así
como cuál será el método de conexión a internet del dispositivo.
Los bloques GPS necesitan leer periódicamente los datos desde el módulo para obtener la
información actualizada. Si utilizamos bloqueos en nuestro programa los datos GPS no serán
válidos.
Los bloques MQTT gestionan la comunicación a través de la red Ethernet (TCP/IP) de forma
continua en segundo plano, si bloqueamos la ejecución del programa no se realizará
correctamente la comunicación.
Por lo tanto en estos casos es recomendable seguir siempre un método de programación por tareas utilizando
bloques del tipo “ejecutar cada” (ver apdo. 3.3.2)
Ejemplo: Parpadeo de led cada 5s con bloqueo y sin bloqueo
Utilizando bloqueo de tiempo: Solución sin bloqueos:
http://www.pighixxx.com/test/pinouts/boards/uno.pdf
http://www.arduinoblocks.com
http://arduinoblocks.didactronica.com/
http://shop.innovadidactic.com/index.php
https://www.robolot.online/
https://www.arduino.cc/
http://www.keyestudio.com/
http://realterm.sourceforge.net/
https://es.wikipedia.org/wiki/I%C2%B2C
https://es.wikipedia.org/wiki/Serial_Peripheral_Interface
http://ai2.appinventor.mit.edu
https://learn.sparkfun.com/tutorials/what-is-an-arduino
https://www.arduino.cc/en/Tutorial/HomePage
https://scratch.mit.edu/
http://fritzing.org/home/
https://learn.adafruit.com
http://www.gpsvisualizer.com
http://www.coordenadas-gps.com/
https://www.thingiverse.com/
https://www.facebook.com/ArduinoBlocks
https://www.youtube.com/channel/UCoJwWGyd8a2pxzJHFdftXYw
https://twitter.com/arduinoblocks
https://es.linkedin.com/in/arduinoblocks-programaci%C3%B3n-visual-5169a9133