Published using Google Docs
ArduinoBlocks Free Book - ES
Updated automatically every 5 minutes

ArduinoBlocks - Free Book

Free Book

ArduinoBlocks.com

Juan José López Almendros

arduinoblocks@gmail.com

Colaborador oficial:

 

https://shop.innovadidactic.com/es/

Distribuidor oficial de componentes:

 


1 Introducción

1.1  Plataforma Arduino

1.2  Plataforma ArduinoBlocks

1.3  ArduinoBlocks - Connector

2  Hardware

2.1  Conceptos básicos de electrónica

2.2  La fuente de alimentación

2.3  Arduino: UNO y Nano

2.4  Arduino: Leonardo y ProMicro

2.5  Arduino: Mega

2.6  ESP8266: NodeMCU y WeMos

2.7  ESP32

2.7.1 ESP32 STEAMakers

2.8  Sensores

2.9  Actuadores

2.10  Comunicaciones

2.10.1  Comunicación serie

2.10.2  Comunicación I2C / TWI

2.10.3  Comunicación SPI

2.10.4  Comunicación Ethernet

2.10.5  Comunicación WiFi

3  Software

3.1  Algoritmos

3.2  Bloques de uso general

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  Bloques Arduino

3.3.1  Entrada/Salida

3.3.2  Tiempo

3.3.3  Puerto serie

3.3.4  Bluetooth

3.3.4.1 Bluetooth HID (ESP32 / ESP32 STEAMakers)

3.3.5  Sensores

3.3.6  Actuadores

3.3.7  Pantalla LCD (4-Bits)

3.3.7.1 Pantalla LCD (I2C)

3.3.8  Pantalla OLED

3.3.9  Memoria EEPROM

3.3.10  Motores

3.3.11  Motor-Shield

3.3.12  Keypad

3.3.13  Reloj de tiempo real (RTC DS3231)

3.3.14  GPS

3.3.15  Tarjeta SD

3.3.16  MQTT

3.3.17  Neopíxel / WS2812

3.3.18  RFID

3.3.19  Matriz de leds 8x8

3.3.20  Reproductor Mp3

3.3.21  Domótica

3.3.22  Teclado / Ratón

3.3.23 Blynk

3.3.24 Conectividad ESP8266 / ESP32 / ESP32 STEAMakers

3.3.24.4 Servidor HTTP

3.3.24.5 Ciente HTTP

3.3.24.6 Wifi-Mesh

ANEXO I: Bloques incompatibles con bloqueos de tiempo.

ANEXO II: Arduino UNO R3 pinout

ANEXO III: Enlaces de interés y bibliografía:


1 Introducción

        

La plataforma ArduinoBlocks permite iniciarnos en el mundo de la electrónica,  robótica y el mundo “makerde 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.

1.1  Plataforma Arduino

        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.

        Puedes consultar más información sobre la historia y el entorno Arduino en wikipedia:

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

Arduino 2006

Arduino 2016

arduino_chip

ArduinoUnoSmd

Existen múltiples placas Arduino con diferentes características y distintos microcontroladores.

El más utilizado y estándar es el Arduino UNO, sin embargo en algunos casos podemos necesitar otra placa Arduino para adaptarnos al tipo de proyecto a realizar.

https://www.arduino.cc/en/Main/Boards

Algunas de las placas Arduino más utilizadas:

Arduino UNO

Es el modelo más estándar y el más utilizado.

ArduinoUnoSmd

Arduino MEGA

Mayor potencia, más recursos hardware y más memoria

ArduinoMega2560_R3_Front

Arduino Nano

Similar potencia que el Arduino UNO pero de

 menor tamaño

http://www.robotshop.com/media/catalog/product/cache/15/image/800x800/9df78eab33525d08d6e5fb8d27136e95/a/r/arduino-nano-usb-microcontroller-v3-no-headers_1.jpg

NodeMCU

Placa basada en el microcontrolador ESP8266 programable en entorno Arduino

ESP32 STEAMakers

Placa basada en el microcontrolador ESP32

Wifi, Bluetooth, microSD, sensores integrados, conexión modular, etc.

        

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)

1.2  Plataforma ArduinoBlocks

        

        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:

www.arduinoblocks.com

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”.

        Lo primero que debemos hacer es crar una organización. Puede ser el nombre de nuestro centro, academia, etc.

        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

        Los usuarios administradores de la organización podrán:

                -Crear nuevos usuarios, editar y eliminar usuarios gestionados

                -Cambiar la clave de los usuarios (no pueden ver la actual, pero sí cambiarla)

                -Crear proyectos como profesor para estos alumnos

                -Eliminar la organización y todos los usuarios

        Los usuarios gestionados dentro de la organización podrán:

                -Crear proyectos personales (sin archivos adjuntos)

                -Unirse a proyectos de profesor, siempre que el profesor sea administrador de la organización.

                -Cambiar su propia clave

                -Exportar un proyecto a archivo (si tienen una cuenta de usuario normal, de esta forma pueden exportar e importar proyectos entre cuentas)

        

        

Iniciar un nuevo proyecto que sólo será accesible para el usuario. Posteriormente se puede compartir al resto de la comunidad si se desea.

Iniciar un proyecto como profesor. De esta forma no se inicia un proyecto como tal, sino que se especifican los datos del proyecto y se genera un código para que los alumnos se puedan suscribir al proyecto. El profesor podrá supervisar y valorar los proyectos de sus alumnos.

De esta forma nos unimos a un proyecto planteado por el profesor. Nosotros realizaremos el proyecto como si de un proyecto personal se tratara, pero el profesor podrá supervisar y valorar nuestro trabajo.

Podemos obtener un código o un enlace para que los alumnos se puedan suscribir al proyecto fácilmente.

En caso de un proyecto personal o como profesor debemos seleccionar en el siguiente paso la placa Arduino a utilizar:

Se debe indicar un nombre descriptivo corto y una descripción más detallada.

En la sección componentes podemos indicar los componentes utilizados en el proyecto:


Las principales secciones del área de programación son:

Herramientas:

Área de programa:

Opciones:

Bloque de inicialización

Bloque de bucle del programa principal

Subir el programa a la placa Arduino conectada:

Mostrar la consola serie:

Puerto de conexión

de la placa Arduino:

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.

Código generado por ArduinoBlocks

Código en Arduino IDE

        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

La opción más rápida y sencilla es la compilación y programación directa desde el propio navegador junto a la aplicación ArduinoBlocks-Connector:

http://www.arduinobocks.com/web/site/abconnector


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.

Ejemplo: enlace público para compartir nuestro proyecto:

Al indicar nuestro proyecto como “público” aparecerá en la lista búsqueda de proyectos compartidos para todos los usuarios de ArduinoBlocks.

           

Tipos de proyectos entre los que se puede cambiar de placa:

I

IMPORTANTE: El cambio es irreversible en muchos casos,

por lo que se aconseja hacer una copia del proyecto antes del cambio.

  1. Bloque “inicializar” o “setup”:

El contenido de este bloque sólo se una vez durante el inicio del microcontrolador de Arduino (o si pulsamos el reset y la placa Arduino se reinicia).

Este bloque se utiliza para inicializar variables, configurar sensores, actuadores o periféricos, etc.

  1. Bloque “bucle” o “loop”:

El contenido de este bloque se repite indefinidamente. Dentro de este bloque añadiremos los bloques de nuestro programa con la funcionalidad deseada.

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).

Importante: El “bootloader” de Arduino normalmente tiene configurada la opción de resetear el microcontrolador cuando se inicia una conexión serie, por tanto si conectamos con la consola serie del PC hay que tener en cuenta que se reiniciará el programa y se ejecutará el bloque “inicializar

La configuración se realiza arrastrando los modificadores del bloque de la parte izquierda a la parte derecha:

        En las mejoras del editor (noviembre 2021) algunos bloques permiten la configuración más sencilla con simples botones de + y -

                  

        

https://shop.innovadidactic.com

Restaurar escala y centrar.

Ampliar o reducir escala (zoom).

Arrastrando bloques sobre la papelera podemos eliminarlos fácilmente.

Ajustar el zoom para visualizar todos los bloques

Captura de pantalla de los bloques (exportar en formato PNG)

Filtro para buscar por tipos de proyectos:

1.3  ArduinoBlocks - Connector

        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

Windows, Linux (debian/ubuntu), macOS, RaspberryPi, ChromeOS

Ejemplo: ventana de la aplicación ArduinoBlocks-Connector en Windows y en Linux

ArduinoBlocks-Connector

ejecutándose bajo Windows

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.

        Para programar remotamente un Arduino conectado a un ordenador en red con la aplicación ArduinoBlocks-Connector, debemos modificar el Host con la dirección IP del equipo en la red al que está conectado la placa Arduino (en lugar de localhost).

Ventana de configuración al ArduinoBlocks-Connector,

por defecto en el mismo equipo (localhost):


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).        

        ArduinoBlocks no restringe al uso de ningún hardware en concreto, aunque con fines educativos y para facilitar el uso recomendamos el uso de componentes modulares o de fácil conexión para los más pequeños.

        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.

Placa prototipos / Breadboard

Modular

EasyPlug

Ejemplo: Algunos Kits de Arduino modular y EasyPlug

Modular: http://shop.innovadidactic.com/index.php?id_category=87&controller=category

EasyPlug: http://shop.innovadidactic.com/index.php?id_category=86&controller=category

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:

        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.

        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.

Ejemplo de conexiones modulares en la placa ESP32 STEAMakers:

        Para cada pin tenemos las señales G (GND) , V (5v) y S (señal)

        Hub I2C integrado x5 con señales GND,V,SDA,SCL


Nomeclatura doble (Arduino + ESP32) :

Comparativa de conexionado con Arduino UNO (Led y sensor DHT11)

Ejemplo: Módulo sensor de luz LDR

Ejemplo: hub i2c para ramificación i2c

Kits Arduino modulares:

http://shop.innovadidactic.com/index.php?id_product=665&controller=product

http://shop.innovadidactic.com/index.php?id_product=666&controller=product


Kit EasyPlug + módulos con conexión RJ

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.

Al crear un nuevo proyecto en ArduinoBlocks podemos indicar el tipo de proyecto “EasyPlug”:


2.1  Conceptos básicos de electrónica

        

        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.

        Las principales magnitudes físicas que debemos conocer son:

        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 (Ω)

        Potencia: es la energía consumida o desprendida por un elemento en un momento determinado. Se mide en Watios (W)                 P = V · I

        Ley de Ohm: Es una sencilla fórmula matemática que relaciona estas tres magnitudes básicas entre sí.

        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.)

 

2.2  La fuente de alimentación

        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.:

• 3.3v proporciona una tensión de 3.3v y una corriente máxima de 50mA

• 5v proporciona una tensión de 5v y una corriente máxima de 300mA

• GND es el nivel 0v de referencia

• 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).

Fig9

eliminadores-hasta-1a-de-9v-5v-o-12v-jack-21mm-arduino-18560-MLM20157815136_092014-F

20141029063841-plug

ArduinoUNO_Running_From_1x9V_Battery

Ejemplo: Conexión recomendada de la tensión de alimentación a la placa de prototipos

fuente alimentacion protoboard_bb

Placa de prototipos o breadboad:  https://es.wikipedia.org/wiki/Placa_de_pruebas

2.3  Arduino: UNO y Nano

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:

Resultado de imagen de arduino uno

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)
(0.5 KB para el bootloader)

SRAM

2 KB (ATmega328P)

EEPROM

1 KB (ATmega328P)

Velocidad de reloj

16 MHz

Largo

68.6 mm

Ancho

53.4 mm

Peso

25 g

El tamaño de la memoria para programa de la placa Arduino UNO es de 32 KBytes.

La placa Arduino UNO dispone de múltiples pines de conexión en formato de conector hembra:

Conector hembra Arduino - 6 pines

Los pines están agrupados por función o tipo:

IOREF

Indica la tensión de trabajo de las E/S de este modelo de placa. (Arduino UNO IOREF = 5V)

RESET

Permite reiniciar la placa a través de este pin

3.3V

Suministra 3.3v

5V

Suministra 5v

GND

Tierra o 0V (negativo)

Vin

Obtiene el voltaje aplicado por la fuente de alimentación con la que se está alimentando. También permite alimentar la placa por este pin, aplicando tensión de entrada (7-12v)

Pin digital configurado como entrada:

Tensión aplicada externamente al pin:

0v…1,5v = OFF / 0 / desactivado

3v…5v = ON / 1 / activado

Pin digital configurado como salida:

Tensión suministrada por el pin:

OFF /  0 / desactivado = 0v

ON / 1 / activado = 5v

Pines: 0, 1

Estos dos pines se pueden utilizar como entradas / salidas digitales.

ArduinoBlocks no utiliza los pines 0,1 como pines de E/S. Los reserva para la conexión serie y la programación desde el PC.

Pines: 2…13

Pines digitales de uso general. Podemos utilizarlos como entrada o salida. Según utilicemos un actuador o un sensor ArduinoBlocks configurará automáticamente el pin como entrada o salida según sea necesario.

Pines A0…5

Los pines de entrada analógicos también se pueden usar como pines de E/S digitales convencionales.

Pines: 3,5,6,9,10,11

Dentro de los pines digitales estos pines permiten utilizar como salida digital PWM (modulación en ancho de pulso) para simular una salida pseudo-analógica.

Ejemplo: Gráficas del funcionamiento del PWM:

10 bits = 1024 valores (0 … 1023)

Pines: A0…A5

6 Entradas analógicas (resolución 10 bits: 0…1023)

Pin 0

RX: a través de este pin se reciben datos hacia Arduino

Pin 1

TX: a través de este pin se envían datos desde Arduino

        

Los pines 0,1 conectan con el puerto serie implementado en el hardware Arduino. En caso de necesidad se podrán implementar otras conexiones serie a través de otros pines digitales emulando el puerto serie con librerías software (por ejemplo para la conexión con el módulo Bluetooth HC-06 explicado más adelante)

        https://www.arduino.cc/en/Reference/SoftwareSerial

        (más información sobre la conexión serie: Apartado 2.6.1)

                

Pin A4 / SDA

Línea de datos del bus I2C

Pin A5 / SCL

Línea de reloj del bus I2C

(más información sobre el bus I2C: Apartado 2.6.2)

Pin 12 / MISO

Master In Slave Out

Pin 11 / MOSI

Master Out Slave In

Pin 13 / SCK

Serial Clock

Pin 10 / SS

Slave Select

        (más información sobre bus SPI: Apartado 2.6.3)

Una de las ventajas de la placa Arduino es que incorpora un programa pregrabado en el microcontrolador. Este programa conocido como “bootloader” o cargador de arranque permite desde el principio reprogramar el microcontrolador de Arduino a través de su puerto USB sin necesidad de un programador externo ni el uso del sistema ICSP (In Circuit Serial Programming) utilizado en otros sistemas.

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

Shield Educativa

TDR STEAM innovadidactic

Shield GPS

Motor shield 1

http://shop.innovadidactic.com/index.php?id_category=93&controller=category

2.4  Arduino: Leonardo y ProMicro

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

2.5  Arduino: Mega

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

2.6  ESP8266: NodeMCU y WeMos

El microcontrolador ESP8266 es un microcontrolador de bajo coste con características tan interensantes como el WiFi integrado, una velocidad de reloj y una tamaño de memoria mucho mayores que los modelos de Arduino. El chip ESP8266 se utiliza como base para algunas placas de desarrollo como NodeMCU o WeMos (versión normal o mini). La comunidad Arduino desarrolló un “framework” compatible con Arduino para permitir progamar las placas basadas en el micrcontrolador ESP8266 de una forma similar a Arduino, de esta forma la mayoría de librerías se han podido reutilizar o adaptar fácilmente.

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 cuidado con ésto y en algún caso será necesario utilizar adaptadores de tensión 3.3v - 5v

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.

Procesador:

CPU: microprocesador de 32-bit Xtensa LX6 de doble núcleo (o de un solo núcleo), operando a 160 o 240 MHz y rindiendo hasta 600 DMIPS

Memoria:

520 KiB SRAM

Conectividad inalámbrica:

  • Wi-Fi: 802.11 b/g/n
  • Bluetooth: v4.2 BR/EDR y BLE

Puertos serie:

x3 UART

I2C:

x2

ADC 12 bits:

x12

DAC 8 bits:

x8

SPI:

x4

Salidas PWM:

x16

+Info: https://es.wikipedia.org/wiki/ESP32

ESP32 Placa de desarrollo de keyestudio:

 

Shield recomendada para facilitar la conexión al ESP32:

https://shop.innovadidactic.com/es/standard-placas-shields-y-kits/929-keyestudio-esp32-wroom-32d-modulo-core-board-wi.html

2.7.1 ESP32 STEAMakers

        

        ArduinoBlocks junto a Innovadidactic y Keyestudio han desarrollado la placa ESP32 STEAMakers, una placa basada en el potente microcontrolador ESP32 con sensores integrados para la medición del consumo energético, una ranura para tarjeta microSD, y un formato Arduino con conexiones modulares para facilitar la conexión de sensores, actuadores y periféricos. Es una placa pensada especialmente para el mundo docente y maker que permite facilitar el uso del potente ESP32 sin necesidad de protoboard y simplificando el cableado. Además ArduinoBlocks ofrece un tipo de proyecto específico que nos permite aprovechar al máximo las funcionalidades de esta placa.

Videos con información y ejemplos de ESP32 STEAMakers:

https://www.youtube.com/watch?list=PL1pKD-Bz2QBAgfy580m8OaQ2Z60v6DOhC&v=MQjIEI7I4ik

2.8  Sensores

        Un sensor es un objeto capaz de detectar magnitudes físicas o químicas y transformarlas en variables eléctricas.

        Los sensores o periféricos de entrada nos permiten obtener información del mundo real para utilizarla desde el programa de Arduino.

 La interfaz de conexión de un sensor con Arduino lo podemos clasificar en tres tipos: digital, analógico o datos.

        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.

Ejemplo: conexión de un sensor digital (pulsador):

Ejemplo: Conexión de un sensor digital de movimiento (PIR):

                Ejemplo: Conexión de un sensor potenciómetro al pin de entrada analógico A0:

esquema-conexion-potenciometro-Arduino

(versión modular)

ArduinoNotebook_img05

Cuando el potenciómetro está en un extremo el voltaje aplicado al pin de Arduino es 5v, en el otro extremo es de 0v. Durante el recorrido, gracias a la variación de resistencia del potenciómetro, se aplica el valor de voltaje proporcional a la posición del potenciómetro entre 0 y 5 voltios.

Ejemplo: Conexión de una resistencia NTC (variable según la temperatura):

(versión modular)

Sensor de acelerómetros

con conexión I2C

Sensor DHT11: temperatura y humedad

con protocolo de comunicación propio

Ejemplo: Trama de datos recibida desde el sensor DHT11

SHT_Sequence

Algunos módulos de sensores utilizados con Arduino:

Pulsador

Potenciómetro deslizante

Sensor de distancia

Sensor de temperatura NTC

Sensor magnético

Sensor de luz LDR

Sensor  DHT-11 de

temperatura y humedad

Sensor humedad suelo

Encoder

Acelerómetro

Sensor de sonido

Receptor IR

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.

Algunos módulos de actuadores utilizados con Arduino:

Módulo relé:

Servomotor:

Módulo led:

Módulo led RGB:

Módulo zumbador:

Pantalla LCD:

Motor paso a paso:

Motor DC:

Reproductor MP3:

http://shop.innovadidactic.com/index.php?id_category=87&controller=category

2.10  Comunicaciones

        La placa Arduino permite múltiples vías de comunicación con el exterior, por un lado disponemos del bus I2C o del SPI pensado para periféricos externos o sensores mientras que como vía de comunicación principal para la programación o monitorización tenemos la conocida como conexión serie (puerto serie) a través del conector USB.

2.10.1  Comunicación serie

        El microcontrolador Atmel de Arduino dispone de un controlador de comunicación serie (UART) integrado. La comunicación se realiza de forma bidireccional, utilizando un pin para transmitir los datos y otro para recibir.

        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

(comunicación serie)

Módulo Bluetooth HC-06

(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:

Realterm -  consola serie para Windows:

Arduino IDE - serial monitor:

ArduinoBlocks – consola serie

(Se necesita instalar la aplicación ArduinoBlocks-Connector)

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):

2.10.2  Comunicación I2C / TWI

        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.

Atmel introdujo por motivos de licencia la designación TWI (Two-Wired-Interface) actualmente utilizada por algunos otros fabricantes. Desde el punto de vista técnico, TWI e I2C son idénticos.

El I2C está diseñado como un bus maestro-esclavo. La transferencia de datos es siempre inicializada por un maestro; el esclavo reacciona. Es posible tener varios maestros (Multimaster-Mode). En el modo multimaestro pueden comunicar dos maestros entre ellos mismos, de modo que uno de ellos trabaja como esclavo. El arbitraje (control de acceso en el bus) se rige por las especificaciones, de este modo los maestros pueden ir turnándose.

350px-I2C

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

La conexión I2C en Arduino UNO se realiza en los pines:

SDA:         Pin A4   /     SCL: Pin A5

Ejemplo: conexión de módulo I2C para control de pantalla LCD:

2.10.3  Comunicación SPI

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.

300px-SPI_three_slaves

La sincronización y la transmisión de datos se realiza por medio de 4 señales:

Algunos periféricos SPI:

Tarjeta micro SD

Lector RFID

Ethernet shield

La conexión SPI  en Arduino UNO se realiza en los pines:

MOSI: Pin 11

MISO: Pin 12

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):

2.10.4  Comunicación Ethernet

        

        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

Arduino UNO + Shield Ethernet

Arduino Mega + Shield Ethernet

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.

2.10.5  Comunicación 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:

Módulo ESP-01 con adaptador:

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:

Arduino - Pin 0 (RX)     ->

ESP-01 - Pin TX

Arduino - Pin 1 (TX)     ->

ESP-01 - Pin RX

        

IMPORTANTE: a la hora de programar la placa Arduino a través del USB debemos desconectar (al menos la alimentación) del periférico ESP-01 porque interferirá en el proceso de programación que utiliza también los pines 0,1

        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

(compartido con USB):

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

ESP32 con WiFi incorporado:

https://shop.innovadidactic.com/es/standard-placas-shields-y-kits/929-keyestudio-esp32-wroom-32d-modulo-core-board-wi.html

Conectividad WiFi + Bluetooth integrada en ESP32 STEAMakers

        

        El microcontrolador ESP32 incorpora WiFi y Bluetooth sin necesidad de ningún módulo extra. Además la conexión Bluetooth permite el protocolo HID para simular un ratón o teclado Bluetooth.

        El protocolo WiFi-Mesh permite comunicar placas ESP32 STEAMakers entre ella de forma descentralizada y sin necesidad de un punto de acceso WiFi previo.

   

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.

        Programa de ejemplo generado automáticamente en modo “prueba”

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.

Ejemplos de diagramas de flujo para definir un algoritmo:

2a

        La definición previa del algoritmo nos permitirá agilizar el proceso de creación del programa.  

        Simbología básica para la definición gráfica de un algoritmo:

3.2  Bloques de uso general

        

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”

Ejemplo de comparaciones:

=

Igual

Distintos

<

Menor que

Menor o igual que

>

Mayor que

Mayor o igual que

Ejemplo: Comparción numérica “mayor o igual que”

=

Igual

Distintos

y (AND)

Se cumple si las dos operandos son verdaderos

o (OR)

Se cumple si alguno de los dos operandos  es verdadero.

Ejemplo: condición lógica “y” (AND)

Ejemplo: negación de un detector para saber cuando “no” hay movimiento

On

= Verdadero

Off

= Falso

3.2.2  Control

        Las estructuras de control nos permiten realizar bucles e iteraciones.

Ejemplo:

Ejemplo:


Ejemplo:

3.2.3  Matemáticas

Ejemplo:

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

Trata el valor como tipo entero sin signo

+

Suma

-

Resta

x

Multiplicación

÷

División

^

Potencia

Ejemplo:

Aumenta la variable en +1

variable = variable + 1

Disminuye la variable en -1

variable = variable – 1

Aumenta la variable en +1.5

variable = variable + 1.5

                 

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:

Ejemplo: uso de varios bloques de operaciones matemáticas:

        

Ejemplo de uso de “es NaN”:

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.

HEX

Genera el texto con la representación hexadecimal del valor.

DEC

Genera el texto con la representación decimal del valor.

BIN

Genera el texto con la representación binaria del valor.

Ejemplo:

Ejemplo: enviar por la consola el valor de una variable como texto

 formateado con 6 y 1 decimales respectivamente:

Ejemplo:

Ejemplo de uso de bloques de texto:

Ejemplo: comparación de texto y variables de tipo texto

Ejemplo:

Ejemplo:

Ejemplo:

Ejemplo:

        Tabla ASCII de los caracteres imprimibles:

        

Ejemplo: unir varios datos de variables en formato CSV

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.

        Hay tres tipos de variables en ArduinoBlocks: numéricas, booleanas y de texto.

Ejemplo:

Ejemplo:

Ejemplo:

Ejemplo:

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.

        

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 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:

O cambiar el valor de un elemento indicando su posición y el nuevo valor:

Ejemplo:

Posicionamiento de un motor (servo) en distintas posiciones (grados) prefijados en una lista.

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:

O cambiar el valor de un elemento indicando su posición y el nuevo valor:

Ejemplo: Mostrar saludos en distintos idiomas a partir de una lista

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.

Función sin valor de retorno.

La función ejecuta los bloques de su interior y vuelve al punto de llamada.

Función con valor de retorno.

La función ejecuta los bloques de su interior y devuelve un resultado.

Llamada a una función sin valor de retorno.

Llamada a una función con valor de retorno.

Llamada a una función sin valor de retorno

y con 2 parámetros

Ejemplo: Función para calcular el área de un triángulo

Definición:

Llamada:

Ejemplo: Función para enviar información por la consola

Definición:

Llamada:

Ejemplo: Función para calcular la longitud de una circunferencia

Ejemplo: División en partes funcionales de un programa real.

Definición:

Llamada desde el bucle principal del programa:


3.3  Bloques Arduino

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.

Ejemplo:

 (Si se activa, la salida suministrará 5v en caso contrario 0v)

Ejemplo:

Versión equivalente:

El conversor interno DAC (Digital Analog Converter) es de 10 bits por lo que los valores leídos de una entrada analógica van de 0 a 1023

10 bits = 2 ^ 10 =  1024 posibles valores

Voltaje en la  entrada analógica

Valor leído

0 voltios

0

2.5 voltios

512

5 voltios

1023

Ejemplo:

Ejemplo: pin 3 al 25%, pin 5 al 50% , pin 6 al 100%

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” , …)

Placa de expansión de salidas PWM:

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

        

Las funciones de tiempo o retardo nos permiten realizar pausas y obtener información sobre el tiempo transcurrido dentro del microcontrolador.

Milisegundos

Microsegundos

Ejemplo: Led 1 segundo encendido, 1 segundo apagado…

Milisegundos

Microsegundos

Ejemplo : Ejecutar la Tarea1 cada 3 segundos y la Tarea2 cada 7 segundos sin bloquear la ejecución del programa:

Ejemplo: al activar la entrada del pin 6 se finaliza la ejecución.

Ejemplo: Funcionamiento equivalente (esperar por siempre):

IMPORTANTE: Este bloque NO bloquea la ejecución del 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”

Ejemplo: tareas simultáneas con distintos periodos de ejecución

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.

Ejemplos de lo que NO se debería hacer dentro de las tareas:

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

3.3.2.1  Multi-Tarea

        

        ArduinoBlocks nos permite utilizar una capa para implementar un sistema multitarea avanzado basado en FreeRTOS. Este sistema permite crear tareas que se ejecutarán de forma paralela (virtualmente). En microcontroladores modestos como el Arduino UNO, Nano o incluso MEGA la multitarea con FreeRTOS es bastante limitada y consume gran parte de los recursos de nuestro Arduino, en caso de necesitar de un sistema multitarea más potente podemos optar por usarlo en placas basadas en ESP8266 o ESP32 con mucha más potencia y recursos (especialmente el ESP32 con doble núcleo y gran potencia de procesamiento y memoria interna)

        Los sistemas software de multitarea utilizan un planificador (scheduler) que se encarga de repartir el tiempo de procesamiento entre las distintas tareas, de forma que a cada una le toca un tiempo de microcontrolador para ejecutar un poquito de su parte de programa.

        

        Esquema con 3 tareas que se van alternando, y en apariencia parece que las 3 se ejecutan a la vez, en este caso el tiempo de procesador se divide igual para cada tarea:

Los planificadores de multitarea permiten además asignar a cada tarea una prioridad, para así darle preferencia a las tareas más críticas o que necesitan más tiempo de procesamiento. Si creamos muchas tareas con “alta” prioridad puede que afectemos a las demás dejando poco tiempo de procesamiento para ellas…

Esquema de varias tareas con distintas prioridades, variando así su tiempo de microprocesador asignado:

Cada tarea tiene su propio espacio de memoria, por lo que crear demasiadas tareas también puede dejarnos el procesador sin memoria. Si la memoria asignada a las tareas tampoco es suficiente para almacenar los datos se podría reiniciar de forma inesperada el Arduino, o funcionar incorrectamente… como siempre, hay que ser consciente de los limitados recursos de los que disponemos.

        Con esta introducción teórica a la multitarea, debemos hacernso otra pregunta… ¿Qué pasa si una tarea accede a un recurso o variable, y el sistema multitarea le da el control a otra tarea y por tanto ese proceso falla o quizás otra tarea acceda al mismo recurso y se solapen?

        Para ese problema de convivencia entre tareas se inventaron los “semáforos”, en concreto el que más nos interesa es el semáforo “mutex” o de exclusión mutua, que permite que bloqueemos el sistema multitarea, hagamos lo que tengamos que hacer crítico, y luego liberemos el control. Por supuesto estas tareas críticas deben ser lo más cortas y atómicas posibles: una escritura crítica en una variable, un envío de un dato, una actualización de una pantalla LCD,... siempre cosas simples. Los semáforos debemos usarlos en casos que tengamos claro que se pueden crear conflictos, pues su abuso puede hacer que el sistema multitarea empiece a fallar.

Esquema de acceso a un mismo recurso por parte de 2 tareas diferentes:

        

        Y por último, pero no menos importante ¿Qué pasa con los bloques tipo “esperar” que estaban tan prohibidos en la programación de Arduino cuando queríamos simular una multitarea antes de tener estos bloques? Pues seguimos teníendoles bastante tirria. Aunque en teoría podríamos usarlos, un bloque esperar hace pensar al microcontrolador que está haciendo algo útil, cuando en realidad no es así, por lo que el sistema multitarea querrá asignarle tiempo de procesamiento a la tarea, aunque sea para eso… ¡para no hacer nada!

Tenemos una solución, tenemos un nuevo bloque de esperar “task friendly” que en lugar de esperar sin hacer nada le dice al sistema: ¡voy a estar un rato sin hacer nada, permite ejecutar otras tareas mientras y luego vuelves!  ….Mucho más “friendly”, claro que sí.

Bloques

Con toda esta información pasamos a ver los bloques disponibles para poner todo ésto en marcha  y después algunos ejemplos:

Permite crear una nueva tarea con su bloque de “inicializar” y su “bucle” al igual que la tarea original de Arduino.

Debemos asignar una prioridad a cada tarea, por defecto dejaría todas a “baja” y luego iría ajustando si hace falta.

Para gestionar mejor las prioridades, es recomendable en algunos casos no utilizar el “inicializar” y “bucle” propio de Arduino que suele tener preferencia sobre todas estas tareas y es más dificil de equilibrar las prioridades.

El bloque esperar óptimo para tareas, pues deja funcionar al resto de tareas de forma más óptima mientras se espera en ésta.

Este bloque tiene menos precisión que el bloque “esperar” original, si necesitamos hacer esperas muy precisas (o de menos de 20 ms) debemos usar el “esperar” tradicional. Pero nos servirá en la mayoría de casos.

Si tenemos que hacer alguna acción crítica que no queremos que sea interrumpida internamente por el planificador del sistema multitarea podemos poner este bloque y dentro los bloques críticos. (no utilizar si no es estrictamente necesario)

Cada tarea tiene su propio espacio de memoria reservado, esta es la cantidad por defecto para las tareas (192 bytes), si necesitamos ajustarla podemos utilizar este bloque en el “inicializar” principal y se ajustará para todas las tareas.

Un mal ajuste puede provocar reinicios del microcontrolador o mal funcionamiento.

Ejemplo: si no quiero usar el bucle principal:

Las tareas en principio, igual que el bucle de Arduino, están pensadas para ejecutarse de forma indefinida, si en un caso una tarea deja de ser necesaria la forma de terminarla es con este bloque que parará la ejecución y liberará la memoria de la tarea en la que se ejecuta.

Si implementamos todo nuestro programa en tareas y no usamos la tarea “principal” de Arduino, es decir el “bucle” principal, podemos eliminar esa tarea autocreada y así quedarnos sólo con el resto.

Ejemplo 1: Parpadear varios leds a distintas velocidades

Ejemplo 2: Parpadear led + Mover servo

Ejemplo 3: Melodía RTTTL + Pantalla LCD + Sensor de luz LDR

Tarea 1: Muestra el valor de la LDR en la LCD y el nombre de la canción que suena.

Tarea 2: Va reproduciendo distintas canciones y actualiza el nombre en la variable.

3.3.3  Puerto serie

        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:

Ejemplo:

Ejemplo:

Ejemplo: Enviar byte con valor 64

Ejemplo: Si hay datos pendientes de leer activar el pin 13

Ejemplo: Devolver como eco lo mismo que se ha recibido

Ejemplo:

Ejemplo: Mostrar texto recibido por serie en una pantalla LCD

Ejemplo: Activar el pin correspondiente al byte recibido

Al pulsar “Enviar” en la consola serie, se envía a Arduino:

“1” + código de salto de línea (\n)

En este caso si no está activada la casilla “hasta salto de línea” leeremos el valor enviado “1” y luego un “0” (por error de intentar interpretar el salto de línea como un número)

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:

Ejemplo: recibir datos y devolverlos (eco) mediante el evento serie:

        

        El formato interno de los datos entre Arduino y el Serial Plotter tienen el formato:

                variable = valor (+ salto de línea)

        Ejemplo: Envío de datos de temperatura y humedad cada 1s

Visualización de los datos en el Serial Plotter:

Ejemplo:  registro de datos con el datalogger y descarga del archivo CSV:

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).

Ejemplo de conexión del módulo Bluetooth HC-06

BlueTerm Android

En el caso del microcontrolador ESP32 con bluetooth integrado, simplemente debemos indicar el nombre del dispositivo Bluetooth para iniciar la comunicación:

 

Ejemplo: Envío de una variable contador a través de Bluetooth

Ejemplo: Recepción de un valor por para establecer la intensidad de un led

Ejemplo: pasarela serie <-> Bluetooth

3.3.4.1 Bluetooth HID (ESP32 / ESP32 STEAMakers)

        En las placas basadas en microcontroladores ESP32 tenemos la opción de convertir nuestro dispositivo en un teclado o ratón bluetooth (dispositivo HID: Human Inteface Device).

        De esta forma podemos emparejar nuestra placa con cualquier móvil, tablet, PC o dispositivo compatible con Bleutooth HID y enviar simulaciones de pulsaciones de teclas o de movimientos del ratón, lo que nos permite crear interfaces para juegos, interfaces de control personalizados y adaptados o enviar directamente datos de sensores como si los estuviéramos tecleando en el dispositivo.

 

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.

Tipo: Analógico

Pin: A0-A5

Valor: 0-100 (%)  /  0..1023

Ejemplo: Sensor potenciómetro conectado al pin analógico A0 para ajustar una variable de temperatura a un valor entre 5 y 30 grados.

Tipo: Digital

Pin: 2-13/A0-A5

Valor: 0/1 (F/V,  Off/On)

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:

sin presionar “off” / presionado: “on”

Conexión:

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.

Ejemplo: encender un led cuando el pulsador está presionado y apagar si no lo está

Ejemplo con funcionamiento similar al anterior:

 

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 invertida:

Tipo: Digital

Pin: 2-13/A0-A5

Valor: 0/1 (F/V,  Off/On)

Ejemplo: Encendido del led del pin 13 al detectar movimiento.

Sensor PIR conectado al pin 6:

Tipo: Datos        Pin: 2-13/A0-A5

Valor: Temperatura: 0-50ºC  ±2ºC / Humedad: 20-90% ±5%

Ejemplo: Mostrar por la consola cada 5 segundos el valor de temperatura y humedad. Sensor conectado al pin 10.

Tipo: Datos        Pin: 2-13/A0-A5

Valor: Temperatura: -40º - 125ºC  ±0.5ºC / Humedad: 0-100% ±2%

Tipo: Analógico

Pin: A0-A5

Valor: 0-100 (%)  /  0..1023

Ejemplo: Encendido de un led cuando el nivel de luz es inferior al 25%

Tipo: Analógico

Pin: A0-A5

Valor: -40…125ºC

Ejemplo: Mostrar temperatura por la consola serie cada 5 segundos.

Sensor conectado al pin A3:

http://3.bp.blogspot.com/-3ENNSmRuid4/UedReQlZbxI/AAAAAAAADgw/ISb6kCJtRS8/s1600/d_sensor.png

Tipo: Datos

Pin Trigger (emisión): 2-13/A0-A5

Pin Echo (recepción): 2-13/A0-A5

Valor: 2  – 400 cm

Ejemplo: Activación del led en el pin 13 cuando se detecta

un objeto entre 10 y 80 cm de distancia

Protocolos detectados: RC5, RC6, NEC, SONY, PANASONIC,JVC, SAMSUNG, WHYNTER, AIWA, LG, SANYO, MITSUBISHI, DENON.

Tipo: Datos        Pin: 2-13/A0-A5

Valor: cadena de texto con el código en formato hexadecimal:

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

        

Ejemplo: Detectar y mostrar códigos por la consolas

        En la consola obtendremos el valor de la cadena de texto en formato hexadecimal para cualquier mando a distancia compatible:

        

Ejemplo: Detectar valores de un mando de keystudio (v1=teclas azules, v2=teclas grises)

VERSIÓN OBSOLETA (valor numérico):

Tipo: Datos        Pin: 2-13/A0-A5

Valor: código recibido / 0 = ningún código detectado.

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:

Ejemplo: Detectar teclas “izquierda” y “derecha” de un mando a distancia

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.

Tipo: Datos        Pin:  Clk (A): 2 / Dt (A): 3

Valor: posición virtual del encoder (variable interna)

Obtener la posición “virtual” actual del encoder:

Fijar el valor de posición “virtual” a un valor.

 

 

Ejemplo: Esperar hasta que el encoder recorra 5 saltos (clicks) hacia la derecha.

Tipo: Analógico        Pin: A0-A5

Valor: 0-100 (%)  /  0..1023

Ejemplo:  Mostrar en la consola la posición X e Y:

Tipo: Digital

Pin: 2-13/A0-A5

Valor: 0/1 (F/V,  Off/On)

Tipo: Analógico

Pin: A0-A5/A0-A5

 Valor: 0-100 (%)  /  0..1023

Ejemplo - detector de nivel de sonido alto. Sensor en pin A0

Tipo: Digital

Pin: 2-13/A0-A5

Valor: 0/1 (F/V,  Off/On)

Tipo: Digital

Pin: 2-13/A0-A5

Valor: 0/1 (F/V,  Off/On)

Tipo: Analógico

Pin: A0-A5/A0-A5

Valor: 0-100 (%)  /  0..1023

Ejemplo: Activación del led conectado al pin 13 en caso de detectar un nivel de humedad inferior al 20%. Sensor conectado en el pin A3

Tipo: Analógico

Pin: A0-A5

Valor: 0-100 (%)  /  0..1023

Tipo: Digital

Pin: 2-13/A0-A5

Valor: 0/1 (F/V,  Off/On)

Tipo: Digital

Pin: 2-13/A0-A5

Valor: 0/1 (F/V,  Off/On)

Tipo: Digital

Pin: 2-13/A0-A5

Valor: 0/1 (F/V,  Off/On)

Tipo: Digital

Pin: 2-13/A0-A5

Valor: 0/1 (F/V,  Off/On)

Tipo: Analógico

Pin: A0-A5/A0-A5

Valor: 0-100 (%)  /  0..1023

Tipo: Analógico

Pin: 0-A5/A0-A5

Valor: 0-100 (%)  /  0..1023

MQ-2

Metano, butano, GLP, humo

MQ-3

 Alcohol, Etanol, humo

MQ-4

Metano, gas natural comprimido (GNP)

MQ-5

Gas natural, GLP

MQ-6

Butano, GLP

MQ-7

Monóxido de carbono

MQ-8

Hidrógeno

MQ-9

Monóxido de carbono, gases inflamables

MQ-135

Benceno, alcohol, humo, calidad del aire

MQ-131

Ozono

MQ-136

Ácido sulfhídrico

MQ-137

Amoniaco

MQ-138

Benceno, tolueno, alcohol, acetona, propano, formaldeido, hidrógeno

Tipo: Analógico

Pin: A0-A5

Valor: 0-100 (%)  /  0..1023

Tipo: Analógico

Pin: A0-A5

Valor: 0-100 (%)  /  0..1023

Tipo: Analógico

Pin: A0-A5

Valor: -55…150ºC

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.

Tipo: Analógico

Pin: A0-A5

Valor: -3G … 3G

Ejemplo: Mostrar los valores de aceleración por consola serie

Tipo: Datos I2C

Pin: A4(SDA) / A5 (SCL)

Valor: m/s2, º , 0...1023

Tipo: Datos I2C

Pin: A4(SDA) / A5 (SCL)

Adaptador/Conector para facilitar la conexión

del Wii Nunchuck a los pines Arduino

Tipo: Datos

Pin: Digital + Analógico

Valor: densidad

Ejemplo de conexión:

Tipo: Datos

Pin: Digital + Analógico

Valor: NO2 / CO

Tipo: Datos I2C

Pin: A4(SDA) / A5 (SCL)

Valor: RGB / HSV

Ejemplo: obtener los valores R.G,B del color detectado

Ejemplo: detectar algunos colores

Tipo: Datos I2C

Pin: A4(SDA) / A5 (SCL)

Valor: presión (mb)

Tipo: Datos 1-wire

Pin: Digital

Valor: Temperatura ºC

Tipo: Datos I2C

Pin: A4(SDA) / A5 (SCL)

Valor: CO2 (ppm)

Ejemplo: detección de varios gestos básicos

https://shop.innovadidactic.com/es/standard-sensores/756-keyestudio-sensor-de-temperatura-infrarojo-sin-con.html

Uso de otros sensores:

        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.

Sensor de luz:        

valor del sensor en % (de 0 a 100)

Valor del sensor directamente de la entrada analógica (valor de 0 a  1023)

        

Ejemplo 2: sensor de presión analógico.

Este sensor modificar su resistencia en función de la presión que se ejerce sobre él y por tanto conectado a una entrada analógica variará el voltaje leído en ella. La fuerza aplicada se traduce en un valor analógico leído de 0 a 1023. En estos casos debemos consultar las especificaciones del fabricante para interpretar el dato obtenido.

http://hetpro-store.com/TUTORIALES/wp-content/uploads/2015/02/1.jpg?780145

3.3.6  Actuadores

Tipo: Digital

Pin: 2-13

Valor: 0/1 (F/V,  Off/On)

Ejemplo: Parpadeo de un led cada segundo. Led conectado al pin 5:

Tipo: PWM

Pin: 3,5,6,9,10,11

Valor: 0-255

Ejemplo: Aumento progresivo de la intensidad del led:

Tipo: PWM

Pin R/G/B: 3,5,6,9,10,11

Valor: Color

Ejemplo de conexión de un led RGB

cátodo (-) común

Ejemplo de conexión de un módulo led RGB

ánodo (+) común,

Cada color se activa mediante un valor de 0 (mínimo) a 255 (máximo), en caso de especificar el tipo “ánodo común” el valor se invertirá internamente automáticamente ( 255 - valor especificado).

Tipo: Digital

Pin: 2-13

Valor: 0/1 (F/V,  Off/On)

Ejemplo:  Activación/desactivación de un relé cada 5 segundos:

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.

Ejemplo: reproducir tono desde 1000 hz hasta 5000 hz en pasos de 100hz

con una duración de 50ms para cada tono

Ejemplo: Tonos de medio segundo. Zumbador conectado al pin 3:

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.

Ejemplo: melodía Pac-Man en formato RTTTL

pacman:d=4,o=5,b=112:32b,32p,32b6,32p,32f#6,32p,32d#6,32p,32b6,32f#6,16p,16d#6,16p,32c6,32p,32c7,32p,32g6,32p,32e6,32p,32c7,32g6,16p,16e6,16p,32b,32p,32b6,32p,32f#6,32p,32d#6,32p,32b6,32f#6,16p,16d#6,16p,32d#6,32e6,32f6,32p,32f6,32f#6,32g6,32p,32g6,32g#6,32a6,32p,32b.

Información sobre el formato RTTTL:

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

Descarga de melodías RTTTL:

http://arcadetones.emuunlim.com/

        El bloque de melodías RTTTL predefinidas permite reproducir algunas melodías de forma sencilla.

Tipo: Digital

Pin: 3

Protocolo y código IR a enviar

Ejemplo: enviar el código de Sony para encender/apagar la TV

Código: 0xA90  (decimal: 2704)

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

 

Uso de otros actuadores:

        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.

        Ejemplo 1: Control de un led RGB con salidas analógicas PWM:

Con el bloque específico:

Con los bloques genéricos (Naranja => Rojo = 204, Verde=153, Azul=51)

Ejemplo 2: Control de un relé con salida digital

Con bloque específico:

Con bloque genérico

Ejemplo 3: Control de un led con salida digital

Con bloque específico:

Con bloque genérico

3.3.7  Pantalla LCD (4-Bits)

        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.

-Iniciar con conexión de 4 bits:

Sistema de filas y columnas en una pantalla LCD de 2x16:

Mediante click derecho y la opción ayuda

se abre el editor de símbolos

        El bloque definir símbolo normalmente irá dentro del bloque “inicializar” de Arduino.

Ejemplo: definir un símbolo con una cara sonriente

e imprimirlo en el centro de la primar fila de la pantalla LCD

Copiamos el código del mapa de bits:

B00000,B00000,B00000,B01010,B00000,B10001,B01110,B00000

Y usamos el bloque imprimir símbolo indicando el símbolo (1 al 8) y la posición:

3.3.7.1  Pantalla LCD  (I2C)  - versión nueva

        

        En ArduinoBlocks se implementa un nuevo sistema de pantallas LCD basada en conectividad I2C que permite conectar hasta 8 pantallas al mismo bus I2C y utilizarlas de forma independiente y simultanea. Esta opción es totalmente recomendable en contra de la conexión del bus de 4-bits.

Conexión por bus de comunicaciones I2C:

Es la forma más sencilla, necesitamos una pantalla con interfaz I2C o un módulo adaptador que realiza todo el trabajo.

SDA = Arduino Pin A4

SCL = Arduino Pin A5

Permite conectar y controlar hasta 8 pantallas en el mismo bus I2C:

3.3.8  Pantalla OLED

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.

Este tipo de pantalla tiene un tamaño de 128×64 píxeles (Ancho x Alto).

http://shop.innovadidactic.com/index.php?id_product=751&controller=product

Editor de mapa de bits:

Ejemplo: procesar una imagen con el editor de mapa de bits

y mostrarla en la pantalla OLED

Ajuste de parámetros en el editor de bitmaps:

Copiar los datos obtenidos:

Programa de ejemplo con los datos anteriores para mostrar la imagen:

Resultado:

+Información sobre gráficos y animaciones en pantallas OLED:

http://arduinoblocks.didactronica.com/2019/05/graficos-y-animaciones-en-pantallas/

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.

Centro: X,Y

Radio: R

Podemos seleccionar si queremos que el círculo esté relleno o sólo se dibuje el contorno.

3.3.9  Memoria EEPROM

        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

0

1

2

3

4

5

6

7

8

9

10

11

Direccionamiento  ArduinoBlocks: 0-255

0

1

2

Ejemplo: Lee la temperatura cada minuto y guarda la temperatura máxima en la memoria EEPROM para reservarla aunque cortemos la alimentación:

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

        Desde la placa Arduino es fácil controlar varios tipos de 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.

Esquema de conexión:

Montaje en placa de prototipos

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)

Activar giro del motor:

Activar giro controlando velocidad

Ejemplo: Aumento progresivo de la velocidad

Si necesitamos controlar además el sentido de giro de motor debemos utilizar un “puente en H” que nos permite invertir la polaridad en el motor. Lo más fácil es utilizar un driver integrado como el chip L293D o un módulo para Arduino que integre todos los componentes.

Esquema de un puente en H para controlar la dirección de giro de un motor

Módulo típico con configuración

en puente H para control

de motores de C.C.

https://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/H_bridge.svg/2000px-H_bridge.svg.png

https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/H_bridge_operating.svg/350px-H_bridge_operating.svg.png

http://cdn1.bigcommerce.com/server800/a8995/products/205/images/412/L298StepperController__79861.1342485907.1280.1280.jpg?c=2

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:

IN1, IN2

Controla el sentido de giro del motor 1  

IN1 = ON  /  IN2 = OFF

Giro en un sentido

IN1 = OFF / IN2 = ON

Giro en sentido contrario

IN1 = OFF / IN2 = OFF

Parado

IN3, IN4

Controla el sentido de giro del motor 2

IN3 = ON  /  IN4 = OFF

Giro en un sentido

IN3 = OFF / IN4 = ON

Giro en sentido contrario

IN3 = OFF / IN4 = OFF

Parado

EN1

Habilita el motor 1 (control de velocidad del motor 1 con PWM)

EN2

Habilita el motor 2 (control de velocidad del motor 2 con PWM)

Pines 4,5 (IN1, IN2): control de giro

Pin 6 (EN1): control velocidad PWM

Giro cada 5s en un sentido

con distinta velocidad

Ejemplo: control de 2 motores C.C. con módulo L298N y alimentación externa

        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.

Ejemplo: movimiento de un servomotor conectado al pin 5:

Ejemplo: Mover el servo de  0 a 300 grados de 10 en 10 grados

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.

Giro en un sentido (máxima velocidad)

90º

Parado

180º

Giro en sentido contrario

(máxima velocidad)

Si utilizamos valores cercanos a 90º el motor girará a una velocidad más lenta en cada uno de los sentidos.

80º

Giro en un sentido (velocidad lenta)

100º

Giro en sentido contrario (velocidad lenta)

Ejemplo: robot propulsado por dos servos de rotación continua

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.

Secuencia de activación de las bobinas

para giro del motor en una dirección

Motor paso a paso

y módulo de control

http://www.orientalmotor.com/images/101/1-2_phase.jpg

http://cdn.instructables.com/FT6/8TVV/HMMF4Z5P/FT68TVVHMMF4Z5P.MEDIUM.jpg

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.

Ejemplo: Conexión de motor paso a paso con módulo controlador

Ejemplo - Control de dos motores paso a paso

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.

Ejemplo: conexión 4 motores DC y un servo

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 automáticamente la detección de filas y columnas activadas para detectar la tecla pulsada.

Ejemplo de conexión y configuración:

Ejemplo: Detección de las teclas ‘1’ y  ‘#’

3.3.13  Reloj de tiempo real (RTC DS3231)

        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.

        

Ejemplo: enviar la fecha por la consola serie

Ejemplo: enviar la hora completa cada segundo por la conexión serie

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.

Conexióm módulo GPS serie

Shield GPS

http://shop.innovadidactic.com/index.php?id_product=844&controller=product

http://shop.innovadidactic.com/index.php?id_product=733&controller=product

Ejemplo: Mostrar la información de la posición GPS por la conexión serie cada 5s

Ejemplo: Mostrar la distancia en Km hasta Madrid desde nuestra posición actual cada 5s

3.3.15  Tarjeta SD

        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)

http://www.arduinoblocks.com/blog/wp-content/uploads/2016/12/41yB73HT-L._SY355_-150x150.jpg

http://www.arduinoblocks.com/blog/wp-content/uploads/2016/12/SDshield4-150x150.jpg