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

Circuit bending

Há alguns dias comprei dois potenciômetros, e tive uma primeira experiência fracassada com eles conectados ao Arduino. Cheguei a pensar que havia queimado um deles – de fato, chegou a sair fumaça, mas ele continua funcionando. Descobri mais tarde que havia conectado de maneira completamente equivocada os fios no circuito.

Quando descobri como ligar os potenciômetros, comecei a testar os valores que geravam no Arduino, e de que maneiras poderia utilizá-los para controlar outros dispositivos de saída no circuito. Fiz testes com um motor e com LEDs. Mas me faltava algum dispositivo sonoro.

Ai vem o acaso do destino. Recentemente meu fone de ouvido foi inutilizado em um acidente com minha bicicleta e um singelo ônibus. Como o bicho já não me servia mais como fone de ouvido, resolvi fazer um circuit bending e ver que diabos aconteceria.

Gravei em vídeo o resultado da experiência.

Aparelhos eletrônicos antigos e quebrados, brinquedos, qualquer objeto que tenha componentes eletrônicos pode ser uma fonte de experimentação. Se a gente não testar, não tem como saber o que vai funcionar. E algumas surpresas interessantes podem ocorrer no caminho.

Arduino for dummies #01

Na última aula falei de alguns princípios básicos de programação, para então apresentar o ambiente de desenvolvimento do Arduino.

Levei meu kit, comprado na SparkFun e fizemos algumas demonstrações. O Marquito também levou o kit Arduino dele, e rapidamente fez um programinha que permitia controlar o movimento de um motor servo usando um potenciômetro, e simultaneamente desenhar um gráfico na tela do computador, usando Processing. O Processing é uma linguagem de programação especialmente desenvolvida pra trabalhar com imagens, gráficos, animações etc. O ambiente de programação do Arduino, por sua vez, tem muita semelhança com o Processing, e ambos conversam facilmente.

Neste domingo eu estava tentando reproduzir uma função que o Marquito havia usado na aula, que faz o mapeamento de valores entre dois componentes do circuito. Usei um sensor de pressão, que tem valores máximos na faixa de 900, e fiz com que ele alterasse simultaneamente a velocidade do giro de um motor e a intensidade do brilho de um LED. Tanto o motor quanto o LED trabalham com valor máximo de 255. A função MAP faz exatamente a correspondência entre os valores mínimo e máximo desses componentes.

A primeira versão do programa que eu fiz não usava essa função MAP. Quando o valor de pressão ia acima de 255, eu dizia pra ele considerar o valor como sendo 255. Assim evitava problemas com o motor ou com o LED. Mas dessa forma, fazendo pouca pressão eu já atingia o limite de 255, uma vez que a escala do sensor de pressão ia de 0 a um valor próximo a 900. Na versão recente, usando a função MAP, consegui um resultado melhor.

Fiz um vídeo com o resultado:

Espelho “mágico” do NY Times

O The New York Times Co.’s R&D Lab apresenta um projeto interessante de um espelho que permite a exibição de informações na sua superfície. No vídeo há um exemplo de uso da tecnologia RFID. Um frasco de remédio é identificado e instruções sobre seu uso são exibidas no espelho.

Mas o espelho tem outras características interessantes, como reconhecimento de voz e de movimento. Leia mais sobre o projeto na matéria do Nieman Journalism Lab. Aliás, esse site publicou uma série de matérias sobre o laboratório de pesquisa e desenvolvimento do NY Times.

Controlando o computador com o leitor RFID

Na aula de hoje, apresentei alguns projetos feitos com a tecnologia de transmissão de dados RFID (Radio-Frequency IDentification)

Durante a aula, tentei mostrar algumas aplicações simples que desenvolvi com meu leitor Touchatag, mas a rede estava muito instável, e meu computador ficou tímido na hora H. Nessa confusão, a turma se dispersou e acho que poucos viram a coisa funcionando de fato.

De qualquer forma, há algum tempo fiz um vídeo mostrando os primeiros testes que desenvolvi, logo que adquiri o kit touchatag. Quem não pôde estar na aula vai pelo menos ter uma idéia do que dá pra fazer sem muita complicação, usando o touchatag e AppleScript (linguagem de programação bem simples, nativa dos computadores Apple, que permite controlar alguns dos seus programas).

.

No vídeo eu uso o touchatag pra controlar o iTunes e o Adium (um Instant Messenger pra Mac). Na aula eu ainda mostrei como usar o touchatag pra fazer com que a webcam do Mac tirasse uma foto (usando o programa PhotoBooth, nativo do macbook). Outra etiqueta RFID foi programada pra realizar uma ligação via Skype para o telefone da minha esposa.

Essa plataforma é bem limitada. Pra usar o leitor no meu macbook foi preciso instalar um programa, responsável pela comunicação do leitor com a base de dados hospedada no site do touchatag. No site é que eu associo cada etiqueta RFID a uma função qualquer – e as funções disponíveis no site são bem limitadas. Uma maneira de minimizar essa limitação é criar programas próprios, e fazer com que as etiquetas simplesmente chamem esses programas. O site touchatag tem uma aplicação que serve pra abrir um site na internet. A base de dados associa uma etiqueta a um endereço na Internet. Mas é possível usar essa mesma aplicação para rodar um programa no computador – basta, ao invés de fornecer o endereço de um site, fornecer a localização do arquivo no computador. A inteligência nesse caso está no programa rodando localmente, no meu próprio computador, e não na aplicação disparada pelo site touchatag.

Essa gambiarra, obviamente, é super limitada. Mas é possível hackear o leitor e programar além das funções oferecidas pelo site, e o que é melhor, sem depender da Internet pra isso. Durante a aula, o Marquito conseguiu descobrir uma biblioteca pronta, que possibilitava a comunicação direta com o leitor touchatag, usando a linguagem de programação Processing. Ele chegou a fazer um programa pra ler os cartões RFID que ele tinha por ali, que não eram as etiquetas que vinham no pacote do touchatag. Cada cartão colocado sobre o leitor fazia com que um nome diferente aparecesse na tela do computador. Funcionou, sem qualquer mediação feita pelo site, tudo rodando localmente.

Esse brinquedinho é bem limitado, mas a idéia era apresentar o conceito, e partir pra elaboração de propostas, projetos que usem essa tecnologia. Existem diversos modelos de leitores, existem ‘shields’ RFID que podem ser usados junto com Arduino. Independente da solução técnica, me interessa mais discutir propostas de uso dessa tecnologia.

Pra quem tem mente criativa, o céu é o limite.