Teste do shield Ethernet do Arduino

Testando o shield Ethernet pro Arduino. O próprio Arduino funciona como um servidor, A página web que eu acesso no vídeo pelo iPad e pelo telefone é construída pelo próprio Arduino, e através dessa interface é possível controlar outros componentes conectados ao Arduino (no exemplo, um LED). É possível acessar o Arduino via Web por qualquer dispositivo que esteja na mesma rede.

Pra que outros dispositivos, fora de rede wi-fi caseira, possam acessá-lo seria necessário conseguir um endereço IP fixo pro Arduino.

UPDATE:
Em resposta a mensagem da Lucilene (abaixo, nos comentários), resolvi colocar o código que usamos na programação desse teste com o shield Ethernet. Tentei colocar direto aqui, mas ele ignorou o comando ‘code’ e ao invés de exibir os comandos HTML, interpretou os comandos de fato e ficou confuso.

Segue o link para o código:
http://ubicomp.feiramoderna.net/wp-content/uploads/2012/09/teste_ethernet.txt

LilyPad Arduino

LilyPad Arduino é um projeto da pesquisadora Leah Buechley, diretora do grupo de pesquisa High-Low Tech do MIT Media Lab.

Trata-se de uma versão do Arduino adaptada para projetos de roupas e tecidos interativos. Os componentes (LEDs, botões, sensores, atuadores, fontes de alimentação etc.) são feitos de tal forma que podem ser costurados em tecidos, utilizando para isso linhas especiais, que conduzem energia elétrica.

LilyPad Arduino, plataforma ideal para projetos de vestimentas interativas, com componentes eletrônicos

No vídeo abaixo a própria Leah Buechley apresenta um projetinho bem simples, mas interessante, utilizando o LilyPad. Turn signal biking jacket (detalhes do projeto)

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

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.

Getting Started with Arduino

Getting Started with Arduino é um livreto escrito pelo Massimo Banzi (um dos criadores do Arduino).

Tem vários exemplos bem fáceis pra começar a se familiarizar com o ambiente de programação (o livro não entra em detalhes sobre a montagem dos componentes eletrônicos, mas sempre mostra como montar o circuito).

Existe uma versão com conteúdo reduzido disponível para download em formato PDF.

Outras fontes de consulta:

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: