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

Esse post foi publicado em vídeos e marcado , por mauro pinheiro. Guardar link permanente.

Sobre mauro pinheiro

Professor adjunto do Departamento de Desenho Industrial da Universidade Federal do Espírito Santo (UFES), coordenador do Laboratório de Psicologia da Computação (LabPC). Minhas pesquisas acadêmicas tratam dos seguintes assuntos: design de interação, usabilidade, interação homem-computador, ubiquidade computacional, computação pervasiva, design da experiência, design da informação, questões sociais do uso de sistemas computacionais.

13 pensou em “Arduino + Xbee

  1. Não senti muita firmeza no alcance. Testei aqui em casa em todos os cômodos. Quando tinha mais de uma parede no caminho, o sinal se perdeu. Não sei como ele se comporta em ambiente aberto, sem interferência de paredes. Talvez o sinal vá mais longe.

    Vamos testar! 😉

  2. Poxa, achei muito legal essa coisa aí! Super bacana ter disponibilizado o código também, porque além de ficar olhando o video, eu pude entender como a coisa toda acontece.

    Acho que testar isso em ambiente aberto promete heim!

    • Nane, repare que o código contém as instruções pros dois componentes do sistema. Tem partes que servem pra controlar o envio de sinal, e partes que servem pra controlar a recepção. Ou seja, em cada contexto tem partes sobrando, eu poderia ter feito a programação separadamente. Por outro lado, dessa forma qualquer um dos arduinos está programado pra desempenhar qualquer uma das funções.

  3. Muito bacana! Agora seria o caso de fazer reconhecimento com um celular?
    Eu fiz dia desses um experimento semelhante pra um kit RF. Foi o mesmo caso de se enviar dados de um arduino para outro e sinalizar com o led.
    Dependendo do projeto fica ai a sugestão com custo inferior ( sai sem o frete aqui no Brasil por R$ 14,00 o receptor e o transmissor. )

  4. Parabéns pelo experimento. Uma pergunta: os dois Xbees estão configurados no modo API? porque a informação está sendo coletada pelo arduino certo?

  5. Boa tarde. Fiz tal configuração porém no meu caso os LEDs ficam piscando… Saberia me dizer se tem algum detalhe na configuração dos Xbees para sanar este problema?

    • Oi Leandro,

      Difícil dizer, sem ver como está montado o seu sistema. Pode ser um problema na configuração de fios e portas no seu caso.

      O meu XBee usava a porta de comunicação serial do Arduino (pinos digitais 0 e 1, ou ‘RX’ e ‘TX’). Como essa porta serial normalmente também é usada pelo ‘Serial Monitor’ do Arduino, você precisa ajustar uma chave no shield XBee quando for rodar o programa. Isso faz com que o Arduino se comunique da forma correta quando abre a porta serial (Serialbegin…).

      No meu shield XBee essa é uma chave escrito DLINE e UART. Eu não estou com minhas traquitanas aqui por perto, e não mexo com isso há anos, então posso me enganar aqui, mas se me lembro bem a cada vez que eu queria fazer upload do programa para o Arduino eu tinha que mudar a posição dessa chave, e quando queria executar o programa, tinha que mudar de novo, e resetar o Arduino. Confesso que não me lembro bem.

      Mas pode ser apenas algum problema no modo como você ligou os fios, os LEDs. Não necessariamente é um problema ou defeito no hardware, ou na programação. Tem que ver se o setup dos componentes no protoboard está correto.

  6. Alguém saberia me dizer se o mesmo pode ser feito do Xbee receptor pro Xbee transmissor, somente com o acréscimo de mais um LED, ou precisaria de mais um par de Xbees?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *