Arduino + Xbee (2)

A mesma idéia do vídeo anterior: dois Arduinos se comunicando pelos módulos Xbee. Dessa vez, quando apertamos o botão em um Arduino, o outro apagava o LED e acionava o buzzer, fazendo uns barulhos muito loucos.


Vídeo feito pelo Marquito — valeu Marquito!

Isso não aparece no vídeo, mas a intenção na verdade era testar o alcance do sinal do Xbee em um espaço mais aberto, sem muitas interferências. Percebi que o sinal não tem um alcance tão longo quanto eu imaginava (conseguimos uns 5 metros, sem paredes?). Movendo um dos Arduinos pela sala de modo a aumentar a distância entre os dois módulos XBee, muitas vezes o sinal se perdia, e mesmo voltando a aproximar os módulos XBee, a comunicação entre eles só era reestabelecida quando apertava o botão de ‘reset’ no Arduino.

Por outro lado, a despeito do alcance ser menor do que eu imaginava, considerando que o módulo é minúsculo e opera sem qualquer antena, até que ele fez um bom trabalho.

Arduino + Xbee

Recentemente adquiri um kit XBee, para fazer a comunicação sem fio entre o Arduino e o computador, ou entre dois Arduinos. Desde então, não havia sequer tirado o kit da embalagem.

Hoje finalmente consegui arrumar um tempinho pra investigar esse negócio. Depois de ler o tutorial XBee para iniciantes no site da Sparkfun, e de ler esse artigo no O’Reilly, consegui botar o sistema pra funcionar.

Claro, o experimento é bem simples. Queria era ver se o kit estava funcionando – especialmente porque ele vem com alguns componentes soltos que eu precisei montar e soldar, o que não é muito a minha especialidade. Mas deu tudo certo.

A programação usada em ambos os Arduinos é a mesma.


#define RED 12 // Pino Digital 12, chamar de 'RED', controla o LED vermelho
#define BLUE 11 // Pino Digital 11, chamar de 'BLUE', controla o LED azul
#define BUTTON 7 // Pino Digital 7, chamar de 'BUTTON', controla o botão

int pressureReading; // variável ‘pressureReading’ vai guardar o valor do botão
int incomingByte; // variável ‘incomingByte’ vai carregar o valor S ou N, S=botao ligado, N=botao desligado

void setup ()
{
Serial.begin(9600);
// define a taxa de transferência de dados da porta serial.
// 9600 e’ o padrão default do Xbee

pinMode (RED, OUTPUT); // RED é um dispositivo de saída de dados
pinMode (BLUE, OUTPUT); // BLUE é um dispositivo de saída de dados
pinMode (BUTTON, INPUT); // BUTTON é um dispositivo de entrada de dados
}

void loop ()
{

pressureReading = digitalRead(BUTTON);
// Verifica se o botao esta ativado
// e armazena o resultado em
// ‘pressureReading’

// Se botao estiver ligado, envia sinal ‘S’ pela porta serial.
// Caso contrario, envia sinal ‘N’.
// O XBee envia e recebe dados pela porta serial.

if (pressureReading == HIGH) // HIGH significa que o botão está ativado.
{
Serial.println(‘S’);
digitalWrite(BLUE, HIGH); // acende o LED azul
}
else
{
Serial.println(‘N’);
digitalWrite(BLUE, LOW); // apaga o LED azul
}

// Verifica se chegaram dados pela porta serial.
// Se receber o sinal ‘S’ acende a LED, sinal ‘N’ apaga o LED.

if (Serial.available())
{
incomingByte = Serial.read();
if (incomingByte == ‘S’)
{
digitalWrite(RED, HIGH); // acende o LED vermelho
}
if (incomingByte == ‘N’ )
{
digitalWrite(RED, LOW); // apaga o LED vermelho
}
delay (10);
}
}

— UPDATE —

Novo teste dia 11/10:

Novo teste com XBee