sábado, 19 de mayo de 2012

Otra opción aumentar I/O Arduino

En esta entrada les compartiré una manera bastante simple de poder aumentar las entradas o salidas del Arduino sin necesidad de comprar shift registers, pero teniendo en cuenta que disponemos de 2 Arduinos, esto es el mejor camino para aumentar salidas o entradas cuando tenemos ArduInos de sobra :).
Materiales que ocupamos:


  • 2 Arduinos
  • 1 Led
  • 4 cables 
  • Fuente de poder


Lo primero que vamos a hacer es conectar nuestros Arduinos de una manera muy simple:



Podemos ver que ocupamos los mismos puertos del Arduino master y del Arduino esclavo, conectamos la salida de 5v del master al esclavo, la salida GND del master al esclavo, y las entradas analógicas 4 y 5 del master al esclavo también a la 4 y 5.

Ahora colocamos un led en el pin 13 del Arduino esclavo, ya que nuestro programa tendrá como propósito apagar y prender un led.

Ahora programamos para el Arduino master:

#include <Wire.h>
void setup()
{
Wire.begin();
}
int algo;
void loop()
{
algo = HIGH;
Wire.beginTransmission(2);
Wire.send(13);
Wire.send(algo);
Wire.endTransmission();
delay(500);
algo = LOW;
Wire.beginTransmission(2);
Wire.send(13);
Wire.send(algo);
Wire.endTransmission();
delay(500);
}
view raw gistfile1.java hosted with ❤ by GitHub



Y para el Arduino esclavo:

#include <Wire.h>
int pin;
int estado;
void setup()
{
Wire.begin(2);
Wire.onReceive(receiveEvent);
}
void loop()
{
}
void receiveEvent(int howMany)
{
pin = Wire.receive();
estado = Wire.receive();
digitalWrite(pin, estado);
}
view raw gistfile1.java hosted with ❤ by GitHub



Básicamente estamos diciendo en el programa master en el loop que escriba en el pin 13 del Arduino 2, y manda valores HIGH y LOW cada ciertos segundos para apagar y prender el led.
En el programa esclavo, se recibe el evento y se escribe en la salida digital el estado y el pin que se mando en el master.
Es muy fácil de hacer y bastante útil.

Aquí un vídeo y fotos de como me quedo a mi:



            





2 comentarios:

  1. buenas, en teoria se podria hacer con un atmega 328, es decir solo el micro y los componentes basicos para funcionar, (sin todo lo que tiene el arduino) me entiendes?
    Es que es para mi robot, que quiero agregarle 2 manos o pinzas y me quede corto de pines, tengo el arduino uno y al mirar tu blog me dio esa idea, es casi lo mismo que tu haces pero el esclavo es solo el atmega y componentes discretos, pero en este caso controlaria unos servos. Es posible hacerlo? funcionara

    ResponderEliminar