Junho 2013 - Arduino e Cia
Módulo Ethernet Shield Wiznet W5100
Parte 2 - Comunicação com o browser
Dando continuidade ao assunto módulo Arduino Ethernet Shield W5100 , hoje vamos montar um circuito composto por 2 botões e 2 leds, mais a placa ethernet, obviamente, e testar o envio de dados para o browser.
Recomendo a leitura da Parte 1 deste artigo, onde mostro os conceitos básicos para ligação do ethernet shield no Arduino e configuração do endereço IP.
Você vai precisar do seguinte material :
2 Leds (sugestão : 1 vermelho e 1 verde)
Com o ethernet shield devidamente encaixado no Arduino, monte o circuito abaixo :
// Programa : Webserver com aviso de acionamento de botoes
// Baseado no programa exemplo Webserver, de David Mellis e Tom Igoe
// A linha abaixo permite que voce defina o endereço fisico (MAC ADDRESS)
// da placa de rede
byte mac[] = { 0xAB, 0xCD, 0x12, 0x34, 0xFF, 0xCA };
// Os valores abaixo definem o endereço IP, gateway e máscara.
// Configure de acordo com a sua rede.
IPAddress ip(192,168,0,100);         //Define o endereço IP
IPAddress gateway(192,168,0,1);    //Define o gateway
// Inicializa a biblioteca da placa ethernet com as
// configurações de IP fornecidas
int botao1 = 6;   //Botao que aciona o led vermelho
int botao2 = 7;   //Botao que aciona o led verde
int pinoled=8;    //Pino ligado ao led vermelho
int pinoled2=9;   //Pino ligado ao led verde
int leitura = 0;  //Armazena o valor de leitura do botao1
int leitura2 = 0; //Armazena o valor de leitura do botao2
char mensagem[20];   //Mensagem a ser apresentada para o botao1
char mensagem2[20];  //Mensagem a ser apresentada para o botao2
pinMode(pinoled, OUTPUT); //Led
pinMode(pinoled2, OUTPUT); //Led
digitalWrite(botao1, HIGH);
digitalWrite(botao2, HIGH);
//Inicializa a conexao ethernet e o servidor web na porta 80
//Verifica o status do Botao1 e imprime mensagem no browser
leitura=digitalRead(botao1);
digitalWrite(pinoled,1);
char mensagem[] = "Botao 1 acionado !!!";
char mensagem2[] = "Aguardando...";
apresentadados(mensagem,mensagem2);
delay(5000);   //Mantem o led aceso por 5 segundos
//Imprime mensagem padrao, aguardando novo acionamento
apresentadados("Aguardando...", "Aguardando...");
digitalWrite(pinoled,0);
//Verifica o status do Botao2 e imprime mensagem no browser
leitura2=digitalRead(botao2);
if (leitura2 == 0)
digitalWrite(pinoled2,1);
char mensagem[] = "Aguardando...";
char mensagem2[] = "Botao 2 acionado !!!";
delay(5000);  //Mantem o led aceso por 5 segundos
digitalWrite(pinoled2,0);
// Rotina que recebe os valores de Mensagem e Mensagem2,
// imprimindo o resultado no browser
void apresentadados(char msg[], char msg2[])
// the connection will be closed after completion of
client.println("Refresh: 0");
client.print("Estado Botao 1 : ");
client.print("Estado Botao 2 : ");
client.print(msg2);
Para testar o programa, entre no browser (testei com o Firefox), e digite o endereço da placa de rede, que você configurou no programa, e pressione <ENTER>. Nesse momento o browser irá acessar o servidor Web interno da placa, e aguardará o pressionamento de um dos botões :
Pressione um dos botoes do circuito e o led correspondente será aceso, indicando que o botão foi acionado. Ao mesmo tempo, será exibida na tela a mensagem abaixo, de acordo com o botão pressionado :
O led permanecerá aceso por 5 segundos, e depois disso o browser exibirá a mensagem de "Aguardando..." para os 2 botões, sinalizando a espera de um novo sinal :
Utilizei como base o programa de exemplo do Webserver, que acompanha a IDE do Arduino, tentando deixar o código o mais simples possível.
Voltarei a esse assunto futuramente, pois a comunicação via rede com o Arduino oferece inúmeras possibilidades de configuração.
Postado por Arduino e Cia às 16:40 76 comentários:
Marcadores: ethernet, shield, w5100
Parte 1 - Montagem e configuração IP
Um módulo muito interessante que temos para o Arduíno é o módulo Arduino Ethernet W5100. Com ele podemos conectar o nosso Arduino à rede local e também à internet, possibilitando acesso remoto, transferência de dados, verificação remota de status de sensores, e muito mais.
Este assunto é complexo em alguns pontos e permite muitas possibilidades de programação, que serão temas de outros artigos. Vou dividir essa parte inicial em dois tópicos :
Parte 2 - Envio de dados do arduino para o browser, via ethernet
O módulo que eu vou usar é o ethernet shield com chipset Wiznet W5100, como esse da foto. Este módulo é compatível tanto com Arduino Uno como com o Arduino Mega, e possui também um leitor de cartões microSD :
Esse módulo é ligado ao Arduino Uno simplesmente encaixando o módulo na parte superior :
Se você tem o Arduino Mega, o encaixe será feito desta maneira :
A princípio o encaixe fica um pouco estranho, com o shield longe da placa do Arduino, isso ocorre porque os pinos do shield são longos, mas se você reparar na foto abaixo, verá que isso evita que o shield toque no conector USB :
Com o shield ethernet devidamente encaixado na placa do Arduino, basta ligar o cabo de rede. Na parte superior, temos os leds de status, que mostram o funcionamento do módulo e o status de conexão à rede :
Vamos testar o funcionamento da placa utilizando um programa que simplesmente configura o endereço IP, utilizando os valores abaixo. Os valores apresentados são alguns dos mais comuns usados na comunicação IP. Talvez a sua rede use endereços diferentes. Se tiver dúvidas, verifique suas configurações de rede ou deixe um comentário para que eu possa ajudá-lo :
// Programa : Ethernet Shield Wiznet W5100 - Define endereço IP
// A linha abaixo permite que voce defina o endereço
// fisico (MAC ADDRESS) da placa de rede
Ethernet.begin(mac, ip, gateway, subnet); //Inicializa o Ethernet Shield
Note que os endereços IP são separados por vírgula, ao invés de ponto, como é habitual. Para verificar o funcionamento da placa, abra um prompt de comando (janela DOS, para os mais antigos) no seu computador, e digite o seguinte comando, seguido de <ENTER> :
Se tudo estiver ok, uma tela parecida com essa será apresentada, indicando que o módulo ethernet foi corretamente configurado e consegue enviar e receber dados pela rede :
Isso encerra a parte básica de montagem e configuração IP do módulo ethernet. No próximo artigo, vamos ver como enviar dados do módulo para o browser.
Atualizado : Parte 2 nesse link : http://www.arduinoecia.com.br/2013/06/ethernet-shield-wiznet-w5100-parte-2.html
Postado por Arduino e Cia às 22:17 97 comentários:
Sensor de temperatura e pressão BMP085 - Módulo GY-65
Hoje vou apresentar um outro módulo facilmente encontrado no mercado, que é o módulo de temperatura e pressão BMP085, como esse abaixo :
O nome BMP085 vem do nome dado ao sensor propriamente dito, conforme podemos ver no datasheet. No caso do módulo da foto acima, o código do módulo é GY-65.
O módulo funciona com uma tensão de 1.8 a 3.6v. Sua faixa de leitura de pressão é de 300 a 1100 hPa (hectoPascal), o que permite determinar altitudes desde 9000 metros acima do nível do mar, até -500m. A conexão com o controlador é feita por apenas 2 pinos, usando a interface I2C.
Vou utilizar uma biblioteca da Adafruit (www.adafruit.com), que você pode baixar nesse endereço.
Um parênteses a respeito dessa biblioteca é que, ao descompactar, o nome da pasta será "Adafruit-BMP085-Library-master". Infelizmente a IDE não aceita nome de pasta de bibliotecas com números e caracteres especiais, então renomeie a pasta apenas para "BMP085". Uso a versão 1.0.5 da IDE do Arduino, não sei se isso acontece nas outras versões.
Biblioteca baixada e instalada, vamos ao circuito :
Tome cuidado para não inverter nenhuma conexão ao conectar os fios, pois geralmente a marcação dos pinos vem embaixo da placa, ficando escondida quando você a encaixa na protoboard.
O programa abaixo é baseado no programa de teste que vem junto com a biblioteca, com as devidas traduções para facilitar o entendimento :
//Programa : Teste módulo pressão BMP085
//Autor : Adafruit
//Traducoes e comentarios : Arduino e Cia
// Conectar pino Vcc do BMP085 ao pino 3.3v do Arduino(NAO UTILIZAR 5.0V !)
// Conectar pino GND do módulo ao GND do Arduino
// Conectar o pino SCL do módulo ao pino analógico 5 do Arduino
// Conectar o pino SDA do módulo ao pino analógico 4 do Arduino
// Pino EOC (End of conversion) não utilizado
// Pino XCLR é um pino de reset, também não é utilizado
Serial.println("Sensor BMP085 não encontrado, verifique as conexões !");
Serial.print("Pressao = ");
// Calcula a altitude utilizando a pressao barometrica padrao
// de 1013.25 milibar = 101325 Pascal
// É possivel extrair uma medição mais precisa se você souber
// a pressão ao nível do mar, que varia com o tempo/clima.
// Se ela for de 1015 milibars ,é igual a 101500 Pascals.
Serial.print("Altitude real = ");
Rode o programa e abra o serial monitor. De 5 em 5 segundos será apresentada a temperatura em Celsius, a pressão em Pascal e a altitude, em metros :
Postado por Arduino e Cia às 11:28 17 comentários:
Marcadores: BMP085, sensores, temperatura
Postado por Arduino e Cia às 23:38 83 comentários:
Você sabia que é possível gerar sons a partir do Arduino ?
Não só é possível, como é bem simples: basta usar a função "tone". Perfeito para quem, ao contrário deste que vos escreve, tem intimidade com a música.
A função tone tem o seguinte formato :
onde a frequencia do tom é setada em hertz, e a duração, em milisegundos.
Para efeito de testes, usei um pequeno buzzer, desses que se usam em placa-mãe de computador, como esse abaixo :
A ligação é feita com o pino 10 do Arduino ligado ao "+" do buzzer/falante, e o outro pino do buzzer ligado ao GND :
Para testar, carregue o programa abaixo e ouça uma linda melodia :
//Programa : Som no Arduino - Do Re Mi
pinMode(10,OUTPUT); //Pino do buzzer
tone(10,262,200); //DO
tone(10,294,300); //RE
tone(10,330,300); //MI
tone(10,349,300); //FA
tone(10,262,100); //DO
tone(10,392,200); //SOL
tone(10,349,200); //FA
Depois dessa aula de música, que tal uma sirene de policia ? Use este programa :
//Programa : Som no Arduino - Sirene
int frequencia = 0;
int Pinofalante = 10;
for (frequencia = 150; frequencia < 1800; frequencia += 1)
tone(Pinofalante, frequencia, tempo);
for (frequencia = 1800; frequencia > 150; frequencia -= 1)
Leia também o artigo NewTone - Alternativa à biblioteca Tone do Arduino, onde falo sobre problemas de conflito da biblioteca tone padrão do Arduino com outras bibliotecas, e como resolver esse problema.