Anda di halaman 1dari 13

Curso: Arduino y AppInventor para mejorar tus clases.

Nivel Medio Autor: Antonio Cano Morcillo

Mod.1: Comunicación entre Arduinos

ÍNDICE

1 Comunicación entre Arduinos...................................................................................................2


1.1 Introducción: necesidad de interconexión..........................................................................2
1.2 Tipos de comunicación entre Arduinos...............................................................................3
2 Protocolo I2C.............................................................................................................................4
2.1 Origen de I2C (o I2C)............................................................................................................4
2.2 Funcionamiento básico del bus I2C....................................................................................4
3 Librería Wire (I2C)......................................................................................................................5
4 Ejemplo 1...................................................................................................................................6
5 Ejemplo 2...................................................................................................................................8
6 Práctica 1: lectura de sensores remotos..................................................................................11
7 Práctica 2: activar LEDs remotamente.....................................................................................12
8 Práctica 3 (opcional): tres o más Arduinos en red...................................................................13
Curso: Arduino nivel intermedio

1 Comunicación entre Arduinos

1.1 Introducción: necesidad de interconexión.


Arduino es cada vez más empleado en educación, sobre todo por la inmensa cantidad de
documentación y proyectos disponibles online y a la gran comunidad de usuarios en todo el
mundo. Su aplicación en todos los campos de la electrónica ha hecho que su uso se extienda
más allá de las primeras aplicaciones. Entre ellas, hay algunas en las que es conveniente
repartir las tareas entre distintos sistemas. Como ejemplo que podamos aplicar en el aula
podemos citar:

• estaciones meteorológicas: cada sensor (o grupo de sensores localizados en una


determinada zona) debe procesar sus datos de forma autónoma, por lo que no es
conveniente simplemente conectarlos a una placa Arduino ‘central’, sino que conviene
repartir las tareas

• alarmas: mismo principio, es posible que algunos sensores requieran un procesado


antes de enviar la información a un procesador central

• 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

1.2 Tipos de comunicación entre Arduinos


Podemos tener comunicaciones cableadas o inalámbricas. Las comunicaciones cableadas, a su
vez, pueden ser de distintas formas:

• Paralelo: varios bits simultáneamente (requiere multitud de cableado)

• Serie: secuencial, bit a bit (menos hilos requeridos)

◦ Síncronas (reloj presente en una de las líneas): I2C, SPI…

• No requieren módulos externos

• Asíncronas (reloj no presente en la línea, pero velocidad conocida):

◦ Puerto serie integrado, niveles TTL (0/5 V)

◦ RS-232, RS-485... (requieren componentes externos)

En cuanto a las comunicaciones inalámbricas, pueden ser de distintas formas empleando


distintos módulos (o shields) externos:

• Bluetooth: se verá en otra sesión de este curso

• 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

2.1 Origen de I2C (o I2C).


I²C (Inter-Integrated Circuit) se creó inicialmente para comunicación entre dispositivos
(circuitos integrados) dentro de una misma placa. Hace unas décadas se usaba habitualmente
para interconectar memorias EEPROM (anteriores a las actuales flash), relojes a tiempo real,
convertidores A/D y D/A, etc., a un microcontrolador, empleándose muchos de ellos en
equipos como televisores, receptores de radio y vía satélite, y otros muchos equipos de
consumo. Con el tiempo se extendió el uso de I2C, diseñado inicialmente para trabajar entre
componentes de una misma placa, extendiéndose su uso a la comunicación entre distintas
placas de un mismo equipo, pudiéndose emplearse entre distintos equipos siempre que la
distancia no sea demasiado grande. Nno es posible definir esta distancia, pues depende de la
velocidad de transmisión y de otros factores, como puede verse en las especificaciones del bus
I2C: https://www.i2c-bus.org/specification/.

2.2 Funcionamiento básico del bus I2C.


Solo utiliza dos hilos: reloj (SCL) y datos (SDA), aparte de VCC (alimentación) y GND (masa). Es
un sistema half-duplex: no permite TX y RX simultánea. Usa una forma de comunicación
maestro-esclavo (master-slave), permitiendo múltiples esclavos y maestros, si bien la
configuración típica es con un maestro y uno o varios esclavos. Las velocidades van desde los
100 kbps (standard), hasta los 400 kbps (fast), 1 Mbps (fast plus) o 3,4 Mbps (high-speed).

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.

3 Librería Wire (I2C)

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

El código para el maestro será:

En cuanto al esclavo, el código sería:

-7-
Curso: Arduino nivel intermedio

5 Ejemplo 2

A veces desconocemos la dirección (o identificación, id) de un dispositivo esclavo I2C. Para


conocerla, el maestro debería interrogar al esclavo cambiando la dirección hasta que responda.
Con este ejemplo localizaremos la dirección de cualquier esclavo conectado a nuestro maestro.

En el esclavo, tendremos dos pulsadores:

• PIN 2: incrementa la dirección I2C del esclavo (inicialmente: 5, máx 127)


• PIN 3: decrementa la dirección I2C del esclavo (mín 1)
Los pulsadores se leen cada 500 ms para evitar incrementos/decrementos rápidos. El maestro
muestra la dirección en formato hexadecimal (01-7F, de 1 a 127). Se advierte que en un
dispositivo real no están disponibles las 127 direcciones, pues hay algunas reservadas.

El montaje propuesto sería:

-8-
Curso: Arduino nivel intermedio

El código para el maestro sería:

-9-
Curso: Arduino nivel intermedio

En cuanto al esclavo, el código del ejemplo sería:

-10-
Curso: Arduino nivel intermedio

6 Práctica 1: lectura de sensores remotos

Se simulará la lectura de sensores remotos conectados a un esclavo desde el maestro,


visualizándose el estado de los mismos mediante LEDs. Estos sensores, en un caso real, podrían
ser: detectores de movimiento, apertura de puerta o ventana, etc (para aplicaciones en
alarmas), termostatos, etc. Se configurará un Arduino como maestro y otro como esclavo.

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.

Para simplificar el desarrollo de la práctica, se adelanta cuál sería el montaje de la misma:

-11-
Curso: Arduino nivel intermedio

7 Práctica 2: activar LEDs remotamente

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

Donde ‘x’ será ‘S’ para encendido y ‘N’ para apagado

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

8 Práctica 3 (opcional): tres o más Arduinos en red


Como ampliación de las tareas propuestas, se configurará un Arduino como maestro y dos más
como esclavos. Cada esclavo tendrá una dirección diferente. En cada esclavo se conectarán 4
pulsadores o interruptores (pines 2, 3, 4 y 5).

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.

El montaje propuesto podría ser:

-13-

Anda mungkin juga menyukai