Arduíno

Ir a Arduíno en tecnoloxia.org

Comunicación entre arduínos

Por que conectar dous arduínos?

Imos conectar dous arduinos entre si para que funcionen de maneira sincronizada. Hai diversas ocasións nas que podemos necesitalo, pero vou resaltar dúas delas:

Programas en paralelo

procesos

[tecnoloxia.org By-SA]

Unha importante razón é que necesitemos executar instrucións en paralelo. Por exemplo, queremos que mentres a porta dun garaxe se estea abrindo ou cerrando, un LED escintile e e un zumbador envíe un son. Isto en Arduíno non se pode facer (a non ser que utilicemos novos métodos de programación, como eliminar os delays e utilizar interrupcións, que aquí non imos ver), xa que o control se realiza a través dun microcontrolador, que só é capaz de executar un único programa. Os delays ou tempos de espera que utilizamos para o acendido e apagado dos LEDS ou os do son afectan a todo o programa, tamén ao motor.

Se usásemos un microprocesador (como no caso dun LEGO ou unha Raspberry Pi) isto non tería problema, pois permite a execución de varios programas de maneira simultánea.

Unha solución é utilizar dúas placas: unha se encarga do control do motor de apertura e peche da porta e outra das luces, son, alarma, etc., e sincronizamos os programas mediante o envío de mensaxes desde unha placa a outra.

Necesitamos moitos pins

semaforo_peons2

[CC0 Public Domain]

As tarxetas Arduíno UNO teñen un número de entradas e saídas analóxicas e dixitais moi limitado, e para determinados proxectos pode ser preciso utilizar más. A maneira máis común de aumentar o número de entradas ou saídas é mediante a utilización de chips electrónicos que se encarguen da tarefa. Por exemplo, podemos utilizar un rexistro de desprazamento para o control dun display 7 segmentos, ou podemos usar un multiplexor para aumentar o número de entradas analóxicas.

Sin embargo pode ser tamén interesante traballar na clase a conexión entre arduinos. Por exemplo, nun proxecto dun cruce de semáforos, un compoñente do equipo pódese encargar do control dos LEDs dos semáforos, outro da programación do contador e son dos pasos de peóns, e outro de programar nunha matriz de LEDs o boneco que se move cando o semáforo está verde. No canto de unificar todo iso nunha única placa (non nos chegarían os pins), facer de novo as conexións e unificar os programas nun programa global podemos facer que o programa de control dos semáforos envíe unha orde a outra placa para que active o contador e a matriz de LEDs cando sexa preciso.

Conexión serial:

serial_mestreescravo

[tecnoloxia.org By-SA]

Imos utilizar de forma simplificada o que se coñece por arquitectura mestre/escravo na que un compoñente realiza labores de control, supervisión e coordinación (denominado mestre), e os restantes realizan tarefas específicas (denominados escravos), devolvendo os resultados ao compoñente mestre.

Para poder establecer a comunicación serie entre dous arduínos requírense unha conexión Rx-RT cruzada e unir as masas:

  • Para envío de datos do mestre ao escravo: Pin Tx do mestre co pin Rx do escravo.
  • Para envío de datos do escravo ao mestre: Pin Tx do escravo co pin Rx do mestre.
  • Unión das masas dos dispositivos.

A distancia máxima  que soporta o bus serie depende da
velocidade de transmisión de datos pero aproximadamente a 9600 baudios podemos poñer unha distancia máxima de 15 metros.

Antes de subir el código a cada Arduíno cómpre desconectar os pins Rx  e Tx, pois estes pins tamén son usados para comunicarse por USB e non poderiamos instalar o programa.

Prácticas:

Nos programas, para enviar e recibir datos utilízanse os mesmos comandos que utilizamos para comunicarnos coa consola serie: Serial.print(‘A’), Serial.available(), Serial.parseInt(), Serial.read(), etc.

1. Probamos

1. Probamos: Imos facer unha práctica sinxela para entender como hai que facer para enviar datos dunha placa a outra: Nun Arduíno conectamos un pulsador e noutro conectamos un LED. O LED debe cambiar de estado cada vez que prememos no pulsador.

serial_probando

[tecnoloxia.org CC By-SA from Fritzing]

Programa da placa mestra:

Programa da placa escrava:

Lembra que se envías un número e non un carácter, para recibilo no canto de usar Serial.read() debes usar Serial.parseInt()

2. Movemento e luz

2. Movemento e luz: Agora imos facer que un servo se mova lentamente de o a 180º e despois en sentido contrario de forma cíclica. Cada vez que xira nun sentido escintila un LED verde, e cando xira en sentido contrario escintila un LED vermello.

serial_servoleds

[tecnoloxia.org CC By-SA from Fritzing]

Programa mestre:

Programa escravo:

Prácticas:

  1. Outras accións: Engade á práctica “1. Probamos” outro botón, de xeito que cando o premamos envíe outro dato diferente, e que a placa escrava execute outra acción diferente (que o LED escintile, que soe unha melodía, etc.)
  2. Datos de volta: Nas anteriores prácticas o mestre funcionou como transmisor (Tx) e o escravo coma receptor (Rx). Fai agora que a segunda placa devolva un dato á primeira despois de executar un proceso, e que ao recibilo execute algunha acción.