Libro ArduinoBlocks
Libro ArduinoBlocks
ii
ArduinoBlocks.com
iii
Juan José López Almendros
2ª EDICIÓN
arduinoblocks.com
iv
Copyright © 2017 - Juan José López Almendros
www.innovadidactic.com
ÍNDICE
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 La placa Arduino UNO
2.4 Sensores
2.5 Actuadores
2.6 Comunicaciones
2.6.1 Comunicación serie
2.6.2 Comunicación I2C/TWI
2.6.3 Comunicación SPI
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.5 Sensores
3.3.6 Actuadores
3.3.7 Pantalla LCD
3.3.8 Memoria EEPROM
3.3.9 Motores
3.3.10 Keypad
3.3.11 Reloj (RTC)
3.3.12 GPS
3.3.13 Tarjeta SD
3.3.14 MQTT (IoT)
4 Proyectos resueltos (x40)
1 INTRODUCCIÓN
https://www.arduino.cc/en/Main/Boards
1
Juan José López Almendros
Arduino UNO
Arduino MEGA
Arduino Nano
Muy pequeño.
Ideal para “wearables”
2
ArduinoBlocks.com
www.arduinoblocks.com
3
Juan José López Almendros
x Inicio de sesión
4
ArduinoBlocks.com
5
Juan José López Almendros
6
ArduinoBlocks.com
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)..
http://www.arduinoblocks.com/web/help/libraries
http://www.arduinobocks.com/web/site/abconnector
7
Juan José López Almendros
8
ArduinoBlocks.com
x Guardar
x Barra de información
x Importar un proyecto:
x “Me gusta”
9
Juan José López Almendros
10
ArduinoBlocks.com
11
Juan José López Almendros
x Comentarios:
x Duplicar:
Crea una copia del bloque actual.
x Entradas en línea:
Modifica el aspecto del bloque de forma compacta o en línea.
x Desactivar bloque:
El generador de código no tendrá en cuenta este bloque.
12
ArduinoBlocks.com
x Eliminar:
Elimina el bloque.
x Ayuda:
Abre un enlace con ayuda sobre la función del bloque.
13
Juan José López Almendros
1.3 ARDUINOBLOCKS-CONNECTOR
http://www.arduinoblocks.com/web/site/abconnector
ArduinoBlocks-Connector ArduinoBlocks-Connector
ejecutándose bajo Windows ejecutándose bajo Ubuntu
14
ArduinoBlocks.com
15
Juan José López Almendros
2 HARDWARE
16
ArduinoBlocks.com
Keyestudio EASY-plug
Ejemplo de conexión modular:
17
Juan José López Almendros
C.A. C.C.
Voltaje o tensión eléctrica: Energía acumulada por unidad de carga que hace
que las cargas circulen por el circuito (genera una corriente). Se mide en voltios (V)
P=V·I
Ley de Ohm: Es una sencilla fórmula matemática que relaciona estas tres
18
ArduinoBlocks.com
V=I·R
A través de los pines 3.3v , 5v, GND y Vin obtenemos la alimentación para
circuitos auxiliares, sensores, shields, etc.:
19
Juan José López Almendros
20
ArduinoBlocks.com
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
32 KB (ATmega328P)
Memoria Flash
(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
https://www.arduino.cc/en/Main/ArduinoBoardUno
21
Juan José López Almendros
PINES DE ALIMENTACIÓN:
22
ArduinoBlocks.com
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.
23
Juan José López Almendros
24
ArduinoBlocks.com
https://www.arduino.cc/en/Reference/SoftwareSerial
25
Juan José López Almendros
+información:
https://www.arduino.cc/en/Main/ArduinoShields
26
ArduinoBlocks.com
2.4 SENSORES
-D
Digital: un sensor digital sólo tiene dos estados: activado/desactivado,
ON/OFF, 1/0, Alto/Bajo, … En este caso conectaremos el sensor a una de las
entradas digitales de Arduino para leer el estado.
27
Juan José López Almendros
-A
Analógico: el sensor nos puede dar un rango de valores, normalmente se
traduce en un valor de tensión o de corriente variable en función de la señal
captada al sensor. En este caso conectaremos el sensor a una de las entradas
analógicas de Arduino. El rango de entrada será una tensión entre 0v (GND) y 5v.
28
ArduinoBlocks.com
-D
Datos: el sensor ofrece su información a través de una interfaz de
comunicación. La forma de comunicación puede ser por sistemas estándar como
I2C o SPI (ver apartado 2.6 sobre buses de comunicación) o algunos sensores
usan su propio protocolo para codificar la información y debemos realizar desde el
software la decodificación correcta para interpretar los datos del sensor
(normalmente los desarrolladores de este tipo de sensores ofrecen una librería
software para Arduino que hace todo el trabajo)
29
Juan José López Almendros
Codificador (encoder)
Sensor de temperatura Sensor de obstáculos
rotativo
Sensor DHT-11 de
Joystick Sensor de efecto Hall
temperatura y humedad
30
ArduinoBlocks.com
2.5 ACTUADORES
31
Juan José López Almendros
2.6 COMUNICACIONES
32
ArduinoBlocks.com
Para poder desde un ordenador visualizar los datos recibidos vía puerto serie
debemos utilizar una aplicación de tipo “terminal” o “consola” serie:
A la hora de establecer una conexión serie los dos extremos que intervienen
en la conexión (en este caso Arduino y el PC) deben establecer el mismo valor en
la velocidad de la conexión.
Velocidad en baudios estándar: 9600 bits por segundo
Otras velocidades utilizadas: 4800, 19200, 38400, 57600, 115200, …
33
Juan José López Almendros
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.
34
ArduinoBlocks.com
SDA: Pin A4
SCL: Pin A5
35
Juan José López Almendros
Tarjeta micro SD
Pantalla OLED Reloj de tiempo real (RTC)
MOSI: Pin 11
MISO: Pin 12
SCLK: Pin 13
SS/CS: Depende de la programación, puede usarse cualquier pin.
36
ArduinoBlocks.com
3 SOFTWARE
37
Juan José López Almendros
3.1 ALGORITMOS
38
ArduinoBlocks.com
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:
39
Juan José López Almendros
= Igual
≠ Distintos
< Menor que
≤ Menor o igual que
> Mayor que
≥ Mayor o igual que
y Se cumple si las
“and” dos operandos
son verdaderos
o Se cumple si
“or” alguno de los dos
operandos es
verdadero.
Ejemplo:
Ejemplo:
40
ArduinoBlocks.com
estados posibles
On = Verdadero
Off = Falso
3.2.2 CONTROL
Ejemplo:
Ejemplo:
41
Juan José López Almendros
Ejemplo:
3.2.3 MATEMÁTICAS
42
ArduinoBlocks.com
x Operaciones básicas:
+ 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
x Funciones matemáticas:
43
Juan José López Almendros
Ejemplo:
-Sensor de temperatura: 10ºC … 50ºC
-Arduino lectura analógica: 0 … 1023
Ejemplo:
Ejemplo:
44
ArduinoBlocks.com
Ejemplo:
45
Juan José López Almendros
3.2.4 TEXTO
46
ArduinoBlocks.com
Ejemplo:
47
Juan José López Almendros
Ejemplo:
48
ArduinoBlocks.com
Ejemplo:
x Partir texto: Obtiene una parte del texto, indicando la posición de inicio y
fin dentro del texto para crear la subcadena.
Ejemplo:
Ejemplo:
49
Juan José López Almendros
3.2.5 VARIABLES
Ejemplo:
Ejemplo:
Ejemplo:
50
ArduinoBlocks.com
Ejemplo:
Ejemplo:
Ejemplo:
51
Juan José López Almendros
3.2.6 LISTAS
x Listas numéricas:
Ejemplo:
52
ArduinoBlocks.com
Ejemplo:
x Listas de textos:
Ejemplo:
53
Juan José López Almendros
Ejemplo:
3.2.7 FUNCIONES
54
ArduinoBlocks.com
Definición:
Llamada:
Llamada:
55
Juan José López Almendros
Definición:
56
ArduinoBlocks.com
3.3.1 ENTRADA/SALIDA
x Leer pin digital: Obtiene el valor digital del pin (0/1, ON/OFF,
verdadero/falso). (Recuerda para leer un ON/1 debemos aplicar 5v en la
entrada digital y 0v para leer un OFF/0)
Ejemplo:
x Escribir pin digital: Escribe el valor en un pin digital pin (0/1, ON/OFF,
verdadero/falso).
(Si se activa, la salida suministrará 5v en caso contrario 0v)
57
Juan José López Almendros
Ejemplo:
Versión equivalente:
Ejemplo:
58
ArduinoBlocks.com
3.3.2 TIEMPO
Milisegundos
Microsegundos
59
Juan José López Almendros
Milisegundos
Microsegundos
60
ArduinoBlocks.com
Programa equivalente:
61
Juan José López Almendros
62
ArduinoBlocks.com
63
Juan José López Almendros
Ejemplo:
Ejemplo:
x Enviar byte: Envía un valor numérico como un byte (8 bits). Por tanto el
valor debe estar comprendido entre 0 y 255.
64
ArduinoBlocks.com
x Recibir texto: Lee una cadena de texto recibida por el puerto serie. Si se
indica la opción “hasta salto de línea” en cuanto se encuentra un salto de
línea devuelve el texto recibido. Si no, hasta que se dejen de recibir
datos.
Ejemplo:
65
Juan José López Almendros
x Recibir como número: Leer una cadena de texto recibida por el puerto
serie e intenta interpretarla como un número (analiza la cadena de texto
buscando un formato numérico válido)
66
ArduinoBlocks.com
67
Juan José López Almendros
3.3.4 BLUETOOTH
68
ArduinoBlocks.com
x Enviar byte: Envía un valor numérico como un byte (8 bits). Por tanto el
valor debe estar comprendido entre 0 y 255.
x Recibir texto: Lee una cadena de texto recibida por el puerto serie. Si se
indica la opción “hasta salto de línea” en cuanto se encuentra un salto de
línea devuelve el texto recibido. Si no, hasta que se dejen de recibir
datos.
x Recibir como número: Leer una cadena de texto recibida por el puerto
serie e intenta interpretarla como un número. Funciona igual que el
boque del puerto serie (ver detalles de funcionamiento en el puerto serie)
69
Juan José López Almendros
70
ArduinoBlocks.com
3.3.5 SENSORES
71
Juan José López Almendros
Conexión: Conexión:
sin presionar “off” / presionado: “on” sin presionar “on” / presionado: “off”
72
ArduinoBlocks.com
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%
73
Juan José López Almendros
Tipo: Datos
Pin: 2-13/A0-A5
Valor: Temperatura: -40º - 125ºC ±0.5ºC / Humedad: 0-100% ±2%
74
ArduinoBlocks.com
75
Juan José López Almendros
Tipo: Datos
Pin Trigger (emisión): 2-13/A0-A5
Pin Echo (recepción): 2-13/A0-A5
Valor: 2 – 400 cm
76
ArduinoBlocks.com
Tipo: Datos
Pin: 11
77
Juan José López Almendros
Para evitar este problema podemos 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).
78
ArduinoBlocks.com
Tipo: Datos
Pin: Clk (A): 2 / Dt (A): 3
Valor: posición virtual del encoder (variable interna)
Tipo: Analógico
Pin: A0-A5
Valor: 0-100 % posición X o Y
79
Juan José López Almendros
80
ArduinoBlocks.com
81
Juan José López Almendros
82
ArduinoBlocks.com
83
Juan José López Almendros
84
ArduinoBlocks.com
85
Juan José López Almendros
86
ArduinoBlocks.com
87
Juan José López Almendros
Ejemplo 1: Lectura del valor de luz con LDR para obtener más precisión.
88
ArduinoBlocks.com
3.3.6 ACTUADORES
89
Juan José López Almendros
Tipo: PWM
Pin R/G/B: 3,5,6,9,10,11
Valor: Color
90
ArduinoBlocks.com
91
Juan José López Almendros
Tipo: PWM
Pin R/G/B: 3,5,6,9,10,11
Ms: Duración del tono en milisegundos
Hz: Frecuencia del tono
92
ArduinoBlocks.com
Al igual que con los sensores, puede que tengamos actuadores digitales o
analógicos no implementados en ArduinoBlocks o que queramos controlar de una
forma diferente a como lo hacen los bloques. Para ello podemos utilizar
directamente los bloques de entrada/salida genéricos.
Con los bloques genéricos (Naranja => Rojo = 204, Verde=153, Azul=51)
93
Juan José López Almendros
94
ArduinoBlocks.com
(La dirección I2C depende del módulo o pantalla LCD, 0x27 es la más común)
95
Juan José López Almendros
0 0
1
2
3
4 1
5
6
7
8 2
9
10
96
ArduinoBlocks.com
11
… …
97
Juan José López Almendros
3.3.9 MOTORES
98
ArduinoBlocks.com
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:
99
Juan José López Almendros
Servomotor
Los servomotores son motores DC a los que se les ha añadido una reductora
y una electrónica de control PID que permite controlar el motor situándolo en una
posición muy precisa. El servomotor está intentando siempre situarse en la
posición indicada, de forma que si se le fuerza o impide ir hasta la posición
indicada intentará moverse a la posición indicada continuamente.
Los servomotores pueden situarse en una posición entre 0º y 300º
aproximadamente según el modelo. Un servomotor no permite el giro libre a no ser
que se modifique con ese propósito.
100
ArduinoBlocks.com
101
Juan José López Almendros
102
ArduinoBlocks.com
103
Juan José López Almendros
3.3.10 KEYPAD
x Configuración del keypad: define los pines de conexión para las filas y
columnas del keypad.
104
ArduinoBlocks.com
105
Juan José López Almendros
x Obtener texto con la fecha: permite obtener un valor de tipo texto con la
fecha formateada como DD/MM/YYYY
x Obtener texto con la hora: permite obtener un valor de tipo texto con la
fecha formateada como hh:mm:ss
Ejemplo: Ajuste de fecha y hora del reloj RTC desde PC (vía consola serie)
106
ArduinoBlocks.com
107
Juan José López Almendros
3.3.12 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.
x GPS Iniciar: Inicia el módulo GPS indicando los pines utilizados para la
comunicación serie con el módulo.
108
ArduinoBlocks.com
x Distancia entre: Calcula los metros de distancia en línea recta entre dos
puntos indicando la latitud y longitud del punto inicial y final.
109
Juan José López Almendros
110
ArduinoBlocks.com
3.3.13 TARJETA SD
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).
x Iniciar SD: Inicia el uso del módulo de tarjetas SD indicando los pines
donde está conectado. (los pines SPI son fijos, sólo indicamos el pin CS)
111
Juan José López Almendros
x Leer cada byte: Permite leer byte a byte todos los datos de un archivo.
112
ArduinoBlocks.com
Ejemplo: Registrar el nivel de luminosidad medido con una LDR cada 30s
113
Juan José López Almendros
3.3.13 MQTT
114
ArduinoBlocks.com
Por otro lado podemos utilizar brokers MQTT públicos disponibles en internet
con fines experimentales o docentes y en cualquier otro caso podemos contratar
servicios de brokers de pago con diferentes limitaciones de ancho de banda o
número de conexiones según nuestras necesidades.
iot.eclipse.org
broker.hivemq.com
www.cloudmqtt.com
(con usuario y clave, opción gratuita limitada en velocidad y conexiones)
115
Juan José López Almendros
x Publicar MQTT: Permite enviar un mensaje al broker para que los nodos
suscritos a este topic reciban el valor. El tema es el “topic” a publicar y el
valor puede ser un valor fijo (texto o numérico) o el valor de una variable.
Para variables numéricas (el valor recibido debe ser un número válido y se
guardara en la variable indicada)
116
ArduinoBlocks.com
MyMQTT (Android)
117
Juan José López Almendros
118