Este post visa exemplificar os primeiros passos com Arduino e Xbee.
Xbee são módulos de rádio para efetuar comunicação serial entre dois pontos (ponto a ponto, ponto a multiponto e etc), conta com protocolo Zigbee e assim garante fidelidade na conexão. Estes são produzidos pela DIGI (antiga MaxStream) e possui duas versões a série 1 e 2. Série 1 e 2 não se comunicam entre si e ambas possuem modelos bem semelhantes:
Xbee 1mW, antena tipo fio, RSPMA ,UFL e chip. A distância de comunicação chega até 40m em ambientes fechados e 100m em ambientes abertos.
XbeePRO 50mW, antena tipo fio, RSPMA ,UFL e chip. A distância de comunicação chega até 300m em ambientes fechados e 1600m em ambientes abertos.
Xbee Shield para Arduino
O Xbee utiliza o protocolo ZigBee que este por sua vez utiliza como base o protocolo IEEE 802.15.4.
Utilizações:
Automação Residencial: Controle de Iluminação, Alarmes, Controle de Temperatura;
Automação Predial: Controle de Temperatura, Telemetria Elevadorista, Controle Elétrico;
Automação industrial: Telecontrole de Sensores, Terminais Inteligentes, Comunicação com Centrais.
Automação Comercial: Geradores de Senhas, Terminais Inteligentes, Software simultâneo;
Automação Residencial: Controle de Iluminação, Alarmes, Controle de Temperatura;
Automação Predial: Controle de Temperatura, Telemetria Elevadorista, Controle Elétrico;
Automação industrial: Telecontrole de Sensores, Terminais Inteligentes, Comunicação com Centrais.
Automação Comercial: Geradores de Senhas, Terminais Inteligentes, Software simultâneo;
Em nosso caso vamos criar uma conexão entre dois Xbee utilizando o Arduino e o PC.
Materiais Necessários: 2 Shield Xbee para Arduino;
2 Arduino (um deles sem o microcontrolador, cuidado ao retirar para não entortar os seus pinos);
2 Módulos Xbee;
1 Bateria 9V para alimentar o Arduino extra;
1 Caso USB (A-B) para conectar o Arduino ao PC;
2 Arduino (um deles sem o microcontrolador, cuidado ao retirar para não entortar os seus pinos);
2 Módulos Xbee;
1 Bateria 9V para alimentar o Arduino extra;
1 Caso USB (A-B) para conectar o Arduino ao PC;
Configuração Inicial
De fábrica cada módulo Xbee vem configurado com uma PANID (número que identifica a rede) de número 3332 e configurados com uma taxa de transmissão de 9600 baud, com dados de 8 bits sem paridade e 1 bit de parada.
De fábrica cada módulo Xbee vem configurado com uma PANID (número que identifica a rede) de número 3332 e configurados com uma taxa de transmissão de 9600 baud, com dados de 8 bits sem paridade e 1 bit de parada.
Cada Xbee Shield tem um par de jumpers para definir se a comunicação serial se realiza pela porta USB ou pelao próprio Xbee. Como primeira tentativa vamos configura-lo para interagir com a porta USB, isso significa colocar os jumpers na posição externa dos pinos, na figura abaixo pode-se ver como ficaria.
Podemos utilizar o programa HyperTerminal do Windows para começar a configurar o módulo Xbee. Outra alternativa seria usar o Serial Monitor que vem integrado com a IDE do Arduino ou o programa Bray++ Terminal.
O comando necessário para começar a programar o módulo é “+++”, ou seja três simbolos de soma consecutivos. Teclando-os devemos receber como resposta um “OK”
Uma vez estabelecida a conexão só temos 5 segundos para interagir com o módulo. Depois deste tempo, o módulo regressa a seu estado nativo e para voltar a conexão deve redigitar “+++”.
Cada comando que mandamos ao Xbee deve ser precedido pelas letras AT (de AT Command = Comando AT)
A tabela de comandos mais usuais pode ser encontrado na página dedicada no site do Arduino.
Usaremos para conexão ao PC a placa Arduino sem o microcontrolador ATMEGA. A razão para isto é que desta maneira podemos diretamente interagir pelo USB com o módulo Xbee.
Para este exemplo proponho a seguinte configuração: uma PANID de 3332, um módulo com endereço ‘0’ e o outro com ‘1’. O módulo com endereço ‘0’ será o que vai estar conectado ao PC e o módulo com endereço ‘1’ será o módulo remoto.
Para configurar o primeiro com a endereço ‘0’, 9600 baud, 8 bits, sem paridade, com 1 bit de parada e comunicação com o módulo de ID1 usamos os seguintes comandos:
ATID3332As letras AT indicam ao Xbee que vamos lhe enviar comandos.
DH0
DL1
MY0
BD3
WR
CN
ID3332: Define PANID de 3332;
DH0: Define direção ‘1’, com quem o Xbee estará se comunicando; DL1: Define direção ‘1’, com quem o Xbee estará se comunicando; MY0: Define endereço ‘0’, próprio endereço; BD3: Define velocidade em 9600 baud; WR: Faz a gravação do módulo; CN: Encerra conexão com o módulo;
Passo seguinte é conectar o segundo Xbee Shield ao Arduino sem microcontrolador. Configuramos da mesma maneira:
ID3332: Define PANID de 3332;
DH0: Define endereço ‘1’, com quem o Xbee estará se comunicando; DL1: Define endereço ‘1’, com quem o Xbee estará se comunicando; MY0: Define endereço ‘1’, próprio endereço; BD3: Define velocidade em 9600 baud; WR: Faz a gravação do módulo; CN: Encerra conexão com o módulo;
Depois de terminada a configuração dos módulos estamos aptos de estabelecer uma conexão cpm os módulos.
Programando o Arduino remoto
Vamos colocar o módulo Xbee com endereço ‘1’ no Arduino que tem o microcontrolador e vamos programar nele um código que envia via Serial um número. Também vamos incluir uma leitura da porta serial para saber se foi recebido um caracter em particular e se caso for afirmativos iremos trocar o estado de um LED conectado ao pino digital 13.
É importante remover o módulo Xbee dete Arduino enquanto programamos, para que possamos estabelecer a comunicação serial.
int numero = 0;
char recepcao;
int estado = 1;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print(numero);
Serial.println();
delay(1000);
numero++;
// ler da serial
recepcao = Serial.read();
if (recepcao == 'x')
{
estado = !estado;
digitalWrite(13,estado);
}
}
Depois de carregar este código podemos testa-lo abrindo uma conexão serial entre o Arduino. Devemos observar o numero ascendente e quando enviamos o caracter ‘x’ devemos observar uma troca do estado do LED conectado ao pino 13
Provando a comunicação sem fio
Uma vez programado o Arduino vamos desconectar o jumper USB e colocar no outro, aonde possamos alimenta-lo com uma bateira 9V. Também vamos conectar o Xbee para que possa começar a comunicação serial sem fio. Devemos nos assegurar que os jumpers do interior do Arduino estejam em ‘Xbee"’. No PC vamos conectar o Arduino sem microcontrolador com o Xbee shield de endereço ‘0’ e vamos abrir o Hyper Terminal, depois de alguns segundos devemos começar a observar o numero recebido do endereço ‘1’ em ascendencia e quando teclamos a tecla ‘x’ conferimos se o LED mudou de estado.
Espero que gostem do exemplo e o desenvolvam com sabedoria. Xbee é uma ferramenta implantada no Brasil em meados de 2007 e está em plena expansão.
Podemos precisar a qualquer momento nos comunicar com outros dispositivos, no caso outros Arduinos.
Este post traz uma simples solução para este problema, "Como se comunicar serialmente com outro ARDUINO!?"
comunicação serial via modulo XBEE
Comunicação serial por fio
Configurando os pinos RX/TX do Arduino por fio
No Arduino emissor teremos um potenciometro, do qual é lido o valor e mandado via serial.
No receptor teremos um LED que irá mudar o seu brilho conforme o valor do potencimetro.
Faça agora as seguintes conexões:
TX_ARDUINO#1 - - - - RX_ARDUINO#2
RX_ARDUINO#2 - - - - TX_ARDUINO#1
NOTA: QUANDO FOR PASSAR O CÓDIGO PARA O ARDUINO, DESCONECTAR OS FIOS DE TX E RX DE AMBOS OS LADOS!
Código Emissor:
int analogValue5, val5;
void setup() {
// Habilita porta Serial
Serial.begin(19200);
}
// Habilita porta Serial
Serial.begin(19200);
}
void loop() {
// Le pino analogico 5
analogValue5 = analogRead(5);
// Le pino analogico 5
analogValue5 = analogRead(5);
// Mapeia os valores para 0 - 255
val5 = map(analogValue5, 0, 1023, 0, 255);
val5 = map(analogValue5, 0, 1023, 0, 255);
// envia o valor via serial em modo binário
Serial.println(val5, BYTE);
Serial.println(val5, BYTE);
}
Código Receptor:
byte incomingByte;
void setup() {
// Habilita comunicação serial
Serial.begin(19200);
// Habilita comunicação serial
Serial.begin(19200);
// declara pin 11 como output, este é o LED
pinMode (11, OUTPUT);
}
pinMode (11, OUTPUT);
}
void loop() {
// Se há bytes livres vindo da porta serial
if (Serial.available()) {
if (Serial.available()) {
// Seta o valor para a variavel 'incomingByte'
incomingByte = Serial.read();
incomingByte = Serial.read();
// Escreve o valor no pino 11
analogWrite(11, int(incomingByte));
analogWrite(11, int(incomingByte));
}
}
}
Post Lindo cara! Vai me ajudar muito! estou correndo atrás de material, pesquisando e estudando para meu TCC. Planejar e desenvolver um projeto utilizando Arduino + Xbee + Android. Obrigado!!!
ResponderExcluirOpa! Agraço os elogios, quando eu tiver um tempinho vou fazer um site mais decente, com conteúdo mais organizado...
ResponderExcluirBoa sorte ai com Seu TCC e se puder mande pra nós fotos, e tutoriais...
Valeu!