ÍNDICE
• sistemas domóticos: cada vez más el hogar digital y la interconexión de todos los
dispositivos en una vivienda es algo viable tanto a nivel técnico como económico; hay
multitud de proyectos online basados en Arduino, pero a veces requieren la
colaboración entre sistemas más o menos autónomos
• aprendizaje básico sobre redes de datos: aunque las redes de datos es algo común para
todos nuestros alumnos, muchas veces nos limitamos a la parte software, de
configuración, y pocas veces se presta atención al hardware, al montaje necesario para
ello. Además se genera la falsa idea de que sólo es posible el trabajo en red con
potentes ordenadores o smartphones. Trabajar con varios sistemas interconectados
ayuda a comprender el funcionamiento básico de una red de datos y es por tanto una
buena herramienta para el trabajo en el aula en este campo
• acercamiento a IoT (Internet of Things, o Internet de las Cosas): Arduino como tal (al
menos en sus versiones más básicas, como UNO, la empleada en este curso) no
permite el acceso directo a Internet, al carecer de interfaz Ethernet o WiFi. Esto cambia
cuando añadimos alguno de los múltiples módulos disponibles para conectar Arduino
directamente a la red (vía WiFi o Ethernet), o bien cuando usamos Arduino como un
periférico de otro sistema conectado a su vez a la red. Esto nos puede servir como
introducción para el estudio de IoT, generando pequeños sistemas conectados a la red
que interactúen con nuestro entorno. Unido a lo comentado en los sistemas
domóticos, permite desarrollar un completo sistema de automatización de la vivienda
(hogar digital), crear pequeños wearables y otros sistemas que permitan entrar en
contacto con el denominado Internet de las Cosas, que tanto potencial y desarrollo
tiene en la actualidad.
-2-
Curso: Arduino nivel intermedio
• WiFi: no está previsto en los contenidos básicos, pero se verá una práctica optativa
como introducción. Hay varias formas de acceder vía WiFi desde Arduino: una es usar
el propio shield de Arduino, que como inconveniente tiene un precio algo elevado; otra
es usar otras placas, basadas muchas de ellas en el microcontrolador ESP8266: muchas
de ellas están diseñadas para trabajar de forma autónoma (no es preciso conectarlas a
Arduino ni a ningún otro sistema) pero son muchas las ventajas de usarlas junto a
Arduino: programación vía USB sin dispositivos externos, usar todos los pines de
entrada y salida de Arduino (incluyendo los analógicos) para trabajar conjuntamente...
• otras formas: hay módulos que utilizan bandas libres ISM (Industrial, Scientific and
Medical), en especial módulos de muy bajo coste trabajando a 433 MHz; son
empleados a menudo en mandos a distancia y otras aplicaciones de control remoto:
por un precio inferior a 2 euros podemos tener tanto el transmisor como el receptor,
que con las adecuadas librerías para Arduino podremos utilizar de forma sencilla
-3-
Curso: Arduino nivel intermedio
2 Protocolo I2C
Permite, por tanto, conectar dos o más Arduinos, siempre que las distancias no pueden ser
excesivas. Si se requieren grandes distancias, mejor RS-485, Ethernet y otros sistemas
diseñados ya para ello, y que con los módulos necesarios podrán usarse desde Arduino.
Especialmente es recomendable la comunicación RS-485, que permite grandes distancias y la
conexión de múltiples dispositivos mediante sólo dos hilos.
Las resistencias que aparecen en la figura no son obligatorias entre Arduinos, pero al incluirse
(se recomienda unos 4k7 ohmios) podrá incrementarse la distancia y la velocidad, a costa de un
mayor consumo de corriente.
-4-
Curso: Arduino nivel intermedio
El maestro siempre lleva la iniciativa para escribir (TX) o leer (RX). Si un esclavo tiene algo que
decir, tiene que esperar a que el maestro lo lea. Habitualmente se usa una técnica denominada
polling en programación: consiste en una lectura secuencial de los dispositivos: el maestro
hace un barrido desde el esclavo n.º 1 al n.º n y lee/escribe. Debe llevar la cuenta de los
esclavos que hay en la red, y sólo leer y escribir en ellos. Al inicio de la aplicación, y después
con la frecuencia que se desee, el maestro puede explorar la red para localizar esclavos que se
acaben de incorporar, permitiendo la conexión en caliente de distintos dispositivos.
Emplearemos I2C para conectar Arduinos, implementando con ello pequeñas redes cableadas.
Se empleará la librería Wire para la comunicación entre dispositivos I2C. Se puede encontrar
una descripción detallada: https://www.arduino.cc/en/reference/wire. Se utilizará un código
para el Arduino trabajando como maestro (master) y otro diferente para el/los esclavo/s
(slave). Así, la inicialización y estructura básica del maestro (master):
El esclavo (slave) necesita un código especial, un evento, que será llamado siempre que el
maestro lo solicite; no está dentro de loop(). La inicialización y estructura típica del esclavo es:
-5-
Curso: Arduino nivel intermedio
4 Ejemplo 1
Se configurará un Arduino como maestro y otro como esclavo. Cuando se active un pulsador en
el esclavo, el maestro enviará por el puerto serie un mensaje al PC. El montaje será el siguiente:
-6-
Curso: Arduino nivel intermedio
-7-
Curso: Arduino nivel intermedio
5 Ejemplo 2
-8-
Curso: Arduino nivel intermedio
-9-
Curso: Arduino nivel intermedio
-10-
Curso: Arduino nivel intermedio
El maestro tendrá 4 LEDs conectados en los pines 8, 9, 10 y 11, con sus correspondientes
resistencias. El esclavo tendrá 4 pulsadores en los pines 2, 3, 4 y 5; no es necesario poner pull-
ups si se configuran las entradas de forma adecuada.
Los LEDs del maestro responderán al estado de los pulsadores del esclavo. Para ello, el maestro
leerá el estado de los pulsadores del esclavo cada 100ms. Se debe realizar el montaje y escribir
el código correspondiente.
-11-
Curso: Arduino nivel intermedio
Se propone ahora que el maestro envíe datos al esclavo. Una vez más, se configurará un
Arduino como maestro y otro como esclavo. El esclavo tendrá 4 LEDs conectados en los pines
4, 5, 6 y 7, con sus correspondientes resistencias.
El maestro estará conectado vía I2C al esclavo, y vía USB al ordenador. Desde el ordenador
(monitor serie), se deberá enviar una cadena de caracteres que indique el estado de los leds en
el siguiente formato:
1x2x3x4x
Por ejemplo, si queremos encender el LED 1 y apagar los LEDs 3 a 4, enviaremos por el puerto
serie (usando el monitor):
1S2N3N4N
Como tarea opcional, en caso de formato incorrecto lo deberá indicar con un mensaje de
error , que puede ser el que se desee, pudiendo indicarse el error exacto o simplemente
enviando un mensaje genérico cuando el formato no corresponda con el esperado. Para ello,
se propone que el montaje sea el siguiente, teniendo en cuenta que el maestro irá conectado
al PC vía USB y la información será accesible a través del monitor serie de Arduino:
-12-
Curso: Arduino nivel intermedio
Se advierte que esta práctica no es necesariamente más compleja que la n.º 2, de hecho el
código resultante puede resultar mucho más compacto, al no tener que comprobar el formato
del mensaje enviado desde el PC en la práctica 2.
El maestro estará conectado vía I2C a los dos esclavos, y vía USB al ordenador. El maestro
deberá enviar por USB al ordenador (monitor serie) el estado de los pulsadores de cada
esclavo, por ejemplo con el siguiente formato:
Dispositivo 1: 1x2x3x4x
Dispositivo 2: 1x2x3x4x
Donde ‘x’ será ‘S’ para encendido y ‘N’ para apagado. Como ampliación de esta práctica, se
propone leer valores analógicos desde los esclavos y enviar la lectura al PC, desde el maestro,
debidamente formateada.
-13-