Libro Arduinoblocks Arduino 1
Libro Arduinoblocks Arduino 1
Libro Arduinoblocks Arduino 1
de Programación
Programa ArduinoBlocks
www.edufablab.cl
Página 1 de 65
Indices
Página 2 de 65
Led - Tarjeta
Arduino incorpora un led en la tarjeta conectado al pin 13 a través de una resistencia. De esta
forma podemos hacer un primer test del funcionamiento de la placa sin tener que conectar
ningún componente adicional a la placa Arduino.
Led Tarjeta
El pin 13 funcionará como salida. El programa hace parpadear el led integrado en la placa
Arduino, de forma que permanece un tiempo encendido (ON) y otro tiempo apagado (OFF). El
tiempo de retardo determinará la velocidad de parpadeo, se pueden probar distintos valores
para ver la diferencia de velocidad en el parpadeo. Este proceso se repite infinitamente dentro
del “bucle” principal de forma que el led nunca deja de parpadear.
Página 3 de 65
Led - 2 Parpadeo “led-tarjeta”
El bloque “Led” de los actuadores funciona exactamente igual que el bloque “Escribir Digital”.
Podemos usarlo de la misma forma.
El siguiente programa realizar el parpadeo del led conectado en el pin 13 usando una variable
para fjar el tiempo de retardo y utilizando el bloque “Led”
Página 4 de 65
Secuencias de leds
Página 5 de 65
Secuencias de leds - 2 Deslizar led
Encender un led consecutivamente uno detrás de otro de izquierda a derecha (sólo un led
encendido). Al llegar al último vuelve a empezar la secuencia.
Encender los leds consecutivamente uno detrás de otro de izquierda a derecha hasta
encenderse todos, después se van apagando consecutivamente en el orden inverso que se
han encendido hasta que se queden todos apagados y vuelve a empezar.
Página 6 de 65
Secuencias de leds - 4 Coche fantástico
Realiza una secuencia de leds que los leds se enciendan de fuera hacia dentro y luego al
revés, la velocidad la podremos ajustar simplemente cambiando el valor de una variable
Página 7 de 65
Secuencias de leds - 6 Repetición de secuencias 1+2+3
La función nos permite agrupar bloques bajo un nombre y poder ejecutar todo el bloque
simplemente añadiendo el bloque de llamada de la función.
Crea una función “apagar todo” para iniciar apagar todos los leds, otra función para la “secuencia
1”, otra para la “secuencia 2” y otra para la “secuencia 3”. En el bucle principal ejecuta 3 veces la
secuencia 1, 4 veces la secuencia 2 y 5 veces la secuencia 3 de forma continua.
Añadir bloques
de la secuencia 1
Añadir bloques
de la secuencia 2
Añadir bloques
de la secuencia 3
Página 8 de 65
Salidas PWM
La modulación por ancho de pulsos (también conocida como PWM) de una señal o fuente de
energía es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (cíclica),
para controlar la cantidad de energía que se envía a una carga. Con esta técnica podemos
controlar la intensidad de leds, la velocidad de motores, etc.
Es la forma en la que Arduino genera una señal pseudo-analógica en sus salidas a partir de
pulsos digitales para variar la energía que envía a través del pin correspondiente.
Gráfico de diferentes pulsos PWM Los pines que permiten el funcionamiento como PWM están
(de menos a más intensidad) señalados con el símbolo ~
Los valores que podemos escribir en el pin mediante PWM son de 0 a 255.
Salida PWM a su valor mínimo (0%) Salida PWM a su valor máximo (100%)
Página 9 de 65
Salidas PWM - 1 Regular la intensidad de led
1 0% 0
2 20% 51
3 40%
4 60%
5 80%
6 100% 255
Encendido y apagado suave del Led: Se escribirán los valores de 0 a 255 en el pin 3 de forma
que se ilumine suavemente. Al llegar al 100% (255) se realizará el proceso al revés hasta llegar
a 0. (Modifica el valor de retardo para acelerar o ralentizar el proceso)
Página 10 de 65
Salidas PWM - 3 Intensidad del led aleatoria
Realizar un programa que cada segundo cambie la intensidad del led de forma aleatoria.
Realizar un programa con dos leds conectados a pines PWM, cuando la intensidad de uno
sube la otra baja. Leds conectados a los pines 3 y 5.
Página 11 de 65
Salidas PWM - 5 Secuencias con regulación de intensidad
Realizar una secuencia con aumento de intensidad de los leds progresivamente, luego va
decrementando la intensidad también progresivamente.
Página 12 de 65
Led RGB
Un LED RGB es en realidad la unión de tres LEDs de los colores básicos, en un encapsulado
común, compartiendo el cátodo (-) o el ánodo (+).
Ejemplo de conexión de un led RGB de cátodo común a los pines 9~, 10~ y 11~
Led R
Arduino Pin 9 ~
Led G
Arduino Pin 10 ~
Led B
Arduino Pin 11 ~
Módulo RGB
(con resistencias incorporadas)
Led GND B = Blue
Arduino GND G = Green
R = Red
-=GND
Página 13 de 65
Led RGB - 1 Control ON/OFF del Led RGB
Con el uso de bloques para control de salidas digitales (ON/OFF) mostraremos el color verde,
rojo, azul, amarillo (R+G), blanco (R+G+B) y negro (todo apagado) durante 1 segundo cada
color. (Led RGB de cátodo común)
Página 14 de 65
Led RGB - 3 Control con bloque de Led RGB
Página 15 de 65
Led RGB - 5 Colores aleatorios con transición
Genera colores RGB aleatorios y cambia del color actual al siguiente de forma suave.
Página 16 de 65
Entradas Digitales
Arduino incorpora múltiples pines que pueden funcionar como entrada y salida. Vamos a
probar a utilizar como entrada para leer datos de sensores externos.
Las entradas digitales permiten leer un valor ON / OFF según el voltaje que se aplique en el pin
correspondiente.
Algunos de estos módulos están conectados de forma invertida al esquema anterior, de forma
que la entrada estará activa (HIGH/ON) en reposo y se desactivará (LOW/OFF) al pulsar,
Los bloques utilizados para leer el valor de una entrada digital o un pulsador son:
Pulsador o sensor con salida ALTO/HIGH/ON Pulsador o sensor con salida BAJO/LOW/OFF
cuando está pulsado o activo cuando está suelto o inactivo
Página 17 de 65
Entradas Digitales -1 Encender un led con pulsador
Página 18 de 65
Entradas Digitales - 3 Detector de movimiento PIR
El sensor de movimiento PIR (Passive Infrared) o Pasivo Infrarrojo, reaccionan sólo ante
determinadas fuentes de energía tales como el calor del cuerpo humano o animales. Reciben
la variación de las radiaciones infrarrojas del medio ambiente que cubre. Es llamado pasivo
debido a que no emite radiaciones, sino que las recibe. Estos captan la presencia detectando
la diferencia entre el calor emitido por el cuerpo humano y el espacio alrededor.
Realizar un programa que encienda durante 5s un led conectado en el pin 3 cuando detecte movimiento.
El sensor de movimiento PIR lo conectaremos al pin 7.
Página 19 de 65
Comunicación Serie
Arduino incorpora una conexión serie que permite conexión con el PC (o con otros muchos
dispositivos). Esta es la misma conexión se utiliza para subir el programa al Arduino. Utilizando
esta conexión podemos enviar información desde Arduino al PC y al revés.
Consola de ArduinoBlocks
Para mostrar la información recibida en el PC y poder
enviar datos al Arduino lo más fácil es utilizar un
terminal serie o consola serie.
Página 20 de 65
Comunicación Serie-1 Enviar mensajes desde Arduino
El programa enviará mensajes de texto desde Arduino, para visualizar los datos recibidos
desde la conexión serie utilizaremos la consola que incorpora ArduinoBlocks.
Página 21 de 65
Comunicación Serie-2 Visualizar el valor de una variable
Vamos a ver como enviar el valor de una variable, en este caso una variable que va
incrementándose y mostramos en la consola serie su valor.
Página 22 de 65
Comunicación Serie-4 Regulación de intensidad de led desde PC
Conectar un led al pin 3. Recibir un número desde el ordenador a través del puerto serie. El
número recibido debe estar entre 0 y 255 y se escribirá en la salida analógica (PWM) del pin 3.
Realizaremos un juego donde la placa Arduino “pensará” un número al azar entre 1 y 100.
Desde la consola iremos diciendo números y nos dirá si el número secreto es mayor o menor
hasta que lo adivinemos y nos muestre el número total de intentos que hemos usado.
Página 23 de 65
Entradas Analógicas
Arduino incorpora 6 pines que pueden funcionar como entradas analógicas, vamos a probar
cómo podemos leer datos de sensores externos a través de ellas.
Las entradas analógicas permiten leer el voltaje que se le aplica como entrada. Ese voltaje podrá variar
entre 0 y 5v. El valor del voltaje leído se convierte a un valor numérico comprendido entre 0 y 1023
Los bloques de lectura de una entrada analógica devolverán un valor entre 0...1023
Otro bloque interesante es el “Mapear”, que permite cambiar el rango del valor leído. Por ejemplos
si quiero cambiar el rango leído de 0...1023 a 0..100 puedo “mapearlo” de la siguiente manera:
Página 24 de 65
Entradas Analógicas -1 Leer la posición de un potenciómetro
Página 25 de 65
Entradas Analógicas - 3 Medidor de luz ambiente
Conectaremos una resistencia LDR a la entrada analógica A0, a través de la cual mediremos el
nivel de luz ambiente detectado.
Enviaremos el valor leído a través de la conexión serie para visualizarlo en la consola serie cada 2s
Los módulos tipo “joystick” para Arduino se componen de dos potenciómetros, uno para el movimiento del
eje X y otro para el movimiento del eje Y. También en el mismo módulo suelen incorporar un pulsador.
GND/- GND = 0v
VCC/5V/+ VCC = 5v
Vrx / X Potenciómetro del eje X (a un pin analógico)
Vry / Y Potenciómetro del eje Y (a un pin analógico)
SW Botón (a un pin digital)
Página 26 de 65
Entradas Analógicas - 5 Control de dos leds con joystick
Conectar un joystick (X => A0 / Y => A1) y dos leds a los pines 6 y 7 respectivamente. Un led
variará su intensidad con el eje X y otro con el eje Y. En posición de reposo del joystick los dos
leds deberán estar iluminados a la mitad de intensidad aproximadamente.
Página 27 de 65
Relé
La conexión del relé la realizaremos a través de una salida digital, pues sólo tenemos dos
estados ON / OFF (relé activo o no)
Lo más habitual es conectar un módulo relé que simplifica la conexión pues ya tiene todo el elemento
necesario para la conexión del relé directa a Arduino. Sólo debemos conectar 5V (VCC) , GND y la
señal de entrada de activación del relé que estará conectada al pin de Arduino correspondiente.
Estas dos instrucciones realizan la misma función: Activar la salida del pin 2
Página 28 de 65
Relé - 1 Intermitencia con relé
Realizar un montaje con el módulo de relé conectado al pin 8, realizaremos un programa que
active y desactive el relé en períodos de un 1s.
Página 29 de 65
Relé - 3 Relé activado por nivel de luz (ajustable)
Realizaremos un programa que active el relé cuando el nivel de luz sea mayor que el valor
leído del potenciómetro y lo desactive en caso contrario.
Página 30 de 65
Relé - 4 Control de un relé con sonido
Página 31 de 65
Servomotor
Los servomotores hacen uso de la modulación por ancho de pulsos (PWM) para controlar la
dirección o posición de los motores de corriente continua.
microservo 9g
Ángulo → Posición en grados donde mover el servo. Depende del modelo del servo podremos moverlos
en un rango de ángulo. Los micro-servos 9g (utilizados habitualmente) funcionan entre 0º y 180º
Retardo (ms)→ Retardo que se añade para esperar a que el servo se mueva hasta la
posición indicada. Puede ser 0, pero deberemos controlar en el resto del programa el retardo
hasta el próximo movimiento para darle tiempo a llegar a la posición indicada.
Página 32 de 65
Servomotor - 1 Movimiento básico
El servo conectado en el pin 3 se moverá a la posición indicada por un potenciómetro conectado al pin A0.
El valor leído del servo va de 0...1023 por lo que se debe mapear a un valor proporcional entre 0...180º
antes de posicionar el servo.
Página 33 de 65
Servomotor - 3 Control de servo desde PC
Con el mismo montaje que la práctica Servomotor-1 realizaremos un programa que reciba un número desde el puerto serie
(utlizaremos la consola serie para enviar el número). El número deberá ser entre 0 y 180 y moverá el motor a dicha posición.
Realizaremos un programa que mueva el servo suavemente y con una velocidad regulada con retardos.
Se aumenta de 1 grado en 1 grado desde 0 hasta 180º grados y luego al revés de 180 a 0º.
Página 34 de 65
Servomotor - 5 Control de dos servos con joystick
Página 35 de 65
Pantalla LCD
La pantalla puede ser de 16x2 (16 caracteres de ancho y 2 líneas) o 20x4 (20 de ancho y 4 líneas)
Caracteres imprimibles en el display LCD: Las pantallas LCD tienen la opción de definir hasta 8 caracteres
personalizados, como, por ejemplo:
Página 36 de 65
Pantalla LCD - 1
Conectaremos una pantalla LCD según el siguiente esquema y realizaremos un programa para mostrar
mensajes de prueba cada 2 segundos.
Página 37 de 65
Visualizar la posición de un potenciómetro (%) / LCD
Pantalla LCD - 2 (i2c)
Si disponemos de módulos LDR listos para usar podemos simplifcar el circuito (el módulo lleva la
resistencia incorporada, sólo debemos conectar 5V, GND y la Señal al pin A0):
Página 38 de 65
Pantalla LCD - 4 Mensajes seleccionado desde PC / LCD (i2c)
Ejemplo: envío del valor “1” por la consola para visualizar el primer mensaje:
Página 39 de 65
Pantalla LCD - 5 Cronómetro / LCD (i2c)
Realizamos un montaje sencillo, simplemente conectando la pantalla LCD con el módulo i2c.
El programa mostrará por la pantalla LCD un cronómetro que contará segundos, minutos y horas.
Página 40 de 65
Pantalla LCD - 6 Definir símbolos personalizados / LCD (i2c)
http://www.arduinoblocks.com/web/help/chareditor
Página 41 de 65
Pantalla LCD - 7 Enviar texto desde consola / LCD (i2c)
El siguiente programa recibe textos a través de la conexión serie. El texto recibido lo inserta en la línea
inferior del LCD (fila 1). El texto que había anteriormente en la fila 1 sube a la fila superior (fila 0).
Página 42 de 65
Pantalla LCD - 8 Animación de carga de batería / LCD (i2c)
Página 43 de 65
Zumbador
Un zumbador pasivo permite reproducir tonos con diferentes frecuencias (el sistema utilizado
por ArduinoBlocks es similar al PWM pero por software). De esta forma podemos generar
señales acústicas con el tono deseado y combinando duración, frecuencias y pausas
podremos reproducir sencillas melodías.
Página 44 de 65
Zumbador - 1 Escala musical
Página 45 de 65
Zumbador - 3 Ajuste de tono con potenciómetro
Página 46 de 65
Zumbador - 4 Melodía
¿Reconoces la melodía?
Página 47 de 65
DHT11 - Sensor de temperatura/humedad
El pin GND y el VCC del sensor se conectan en sus correspondientes pines en Arduino (GND y
+5V). El pin “data” se conecta a un pin digital para leerlo (si no es un módulo hay que añadir la
resistencia de 10K)
Página 48 de 65
DHT11 - 1 Mostrar temperatura y humedad por consola serie
Página 49 de 65
HC SR04 - Sensor de distancia por ultrasonidos
El sensor HC-SR04 permite detectar si hay objetos u obstáculos cercanos obteniendo la distancia a
la que se encuentran. Su funcionamiento se basa en un emisor y receptor de ultrasonidos. El
emisor emite una secuencia de impulsos de ultrasonidos y mide el tiempo hasta que el sensor los
recibe (porque rebotan contra un objeto). Con el tiempo medido se calcula la distancia a la que se
encuentra el objeto (si no hay ningún objeto, no se produce el “eco” y no se detecta nada)
Página 50 de 65
HC SR04 - 1 Mostrar distancia medida por la consola serie
Conectar el sensor HC-SR04 al pin 2 (trigger) y 3 (echo) de Arduino. Conectar la pantalla LCD
con conexión i2c. Mostrar por la pantalla LCD la distancia detectada:
Página 51 de 65
Receptor IR
El sensor AX-1838HS, permite recibir una señal infrarroja y convertirla en pulsos de señales
eléctricas que en Arduino con el apropiado software podemos decodificar e interpretar.
Sensor AX-1838HS Módulo listo para conectar Mando IR genérico Podemos reutilizar viejos
mandos en nuestros
proyectos
Los protocolos soportados son: RC5, RC6, NEC, Panasonic, Sony, JVC, Samsung, Whynter, Aiwa,
LG, Sanyo, Mitsubishi,Denon y Pronto (muchas marcas reutilizan protocolos de otras marcas, con
los protocolos anteriores decodificaremos prácticamente cualquier mando de control IR)
Página 52 de 65
Receptor IR - 1 Mostrar códigos recibidos por consola serie
Página 53 de 65
Receptor IR - 2 Mostrar código IR recibido en pantalla LCD
Con la ayuda de una pantalla LCD conectada por I2C mostraremos los códigos de cualquier
mando IR compatible. Este montaje es de gran utilidad para detectar los códigos de cada tecla
de los mandos IR para utilizarlos en proyectos posteriores.
Página 54 de 65
Receptor IR - 3 Control de led RGB con mando IR
Página 55 de 65
Receptor IR - 4 Control de relé con mando IR
Página 56 de 65
Receptor IR - 5 Control de servo con mando IR
Página 57 de 65
Tareas
Arduino no posee un sistema operativo y tampoco incorpora ningún otro sistema que gestione
la multitarea como estamos acostumbrados en otros entornos de programación (por ejemplo,
en Scratch), el programa se ejecuta directamente por el microcontrolador y somos nosotros en
el propio programa los que tenemos que gestionar la manera de ejecutar varias tareas
simultáneamente intentando simular un sistema multitarea.
La teoría de un sistema multitarea es dividir los procesos en pequeños bloques, cada uno de
estos bloques debe realizar un pequeño trabajo (en poco tiempo) y dejar paso al siguiente sin
bloquear el funcionamiento. Al realizar este proceso de forma continua y a mucha velocidad el
resultado final es que todos los bloques se ejecutan simultáneamente.
Para implementar un sistema sencillo de tareas utilizaremos el bloque “tiempo transcurrido”. Este
bloque nos permite obtener el tiempo en ms que ha pasado desde el inicio del programa (reset).
El programa comprobará si han pasado 1000 ms (o más) desde la última ejecución de la tarea,
si es así ejecutará el código de encender/apagar el led.
Página 58 de 65
Tareas - 2 Bloque de tareas simplificado
Todo el programa anterior de la práctica Tareas-1 se puede simplificar con un bloque que
incorpora ArduinoBlocks llamado “ejecutar cada”, donde le especificamos cada cuanto tiempo
se deben ejecutar los bloques contenidos en su interior.
Página 59 de 65
Tareas - 4 Tres tareas a la vez
Conecta la pantalla LCD con el módulo i2c, un led al pin 3 y un servo al pin 5.
Página 60 de 65
El programa debe realizar 3 tareas:
Página 61 de 65
Bluetooth : Comunicación con módulo Bluetooth HC-06
El módulo Bluetooth HC-06 que vamos a utilizar permite “simular” una conexión serie estándar a
través del protocolo inalámbrico Bluetooth de una forma muy sencilla (protocolo RFCOMM/SPP).
La conexión con la placa Arduino utiliza 2 pines, uno para RX y otro para TX. ArduinoBlocks
implementa un puerto serie por software para comunicar con el módulo Bluetooth y así no
interferir con el puerto serie integrado en Arduino UNO (pines 0 y 1) utilizado también para la
programación del microcontrolador de Arduino.
Para conectar con el módulo Bluetooth necesitaremos un dispositivo con conexión Bluetooth
(smartphone, tablet o pc con conexión bluetooth) y una aplicación de consola/terminal serie.
Los bloques para uso de la comunicación Bluetooth son exactamente iguales a los bloques de
comunicación serie vistos en la práctica 6. Además, hay dos bloques para inicializar y ajustar la
configuración interna del módulo HC-06 (nombre y pin):
Página 62 de 65
Bluetooth - 1 Envío de mensajes vía Bluetooth
Página 63 de 65
Bluetooth - 2 Envío de temperatura y humedad via Bluetooth
Conectaremos un relé en el pin 8 y el módulo Bluetooth como anteriormente a los pines 2,3.
En este caso enviaremos un valor numérico desde la consola serie bluetooth del smartphone.
Si la placa Arduino recibe un valor “1” enciende el relé, un “2” apaga el relé, un “3” intermitente.
Página 64 de 65
Bluetooth - 4 Control desde móvil por voz (Android)
www.arduinoblocks.com/web/apk/ArduinoBlocks_ControlVoz.apk
Página 65 de 65