May 31 2012

Como utilizar o Módulo Bluetooth BTM5 em modo Slave com Arduino

Esse projeto consiste em enviar via bluetooth o resultado da leitura de um sensor de temperatura para o computador. Também será mostrado como controlar um led no Arduino via bluetooth. Esses exemplos são apenas didáticos, e servem como referência para quem quiser criar projetos mais complexos, de automação, domótica, telemetria, etc.

A configuração do módulo bluetooth BTM5 por comandos AT,  assim como detalhes de conexão e pareamento foram abordados em outro artigo aqui no Blog. Vale a pena conferir clicando em Como configurar o Módulo Bluetooth BTM5 com Arduino

Materiais Utilizados:

A comunicação bluetooth com esse módulo é bem simples pois nada mais é do que uma comunicação serial. Primeiramente será apresentada a montagem do harware para leitura de um sensor de temperatura LM35 via bluetooth.

Como no Fritzing (programa para fazer o desenho acima) não existe o módulo bluetooth, ele foi representado como apenas um conector onde suas ligações foram feitas respectivamente da esquerda para direita. Os pinos do conector da esquerda para a direita são: VCC, GND, RX, TX.

OBS IMPORTANTE: O Vcc do módulo e as entradas lógicas funcionam em 3.3 Volts, portanto ligue o Vcc do módulo na saida 3.3V do Arduino e o RX do módulo deverá ser ligado ao TX do Arduino por intemédio de um divisor de tensão que irá diminuir a tensão lógica (todos esses detalhes de ligação estão devidamente exemplificados no artigo Como configurar o Módulo Bluetooth BTM5 com Arduino )

O pino MODE não será utilizado nesse projeto pois como padrão ele esta baixo (nivel lógico LOW) então o módulo funcionará normal e não em modo de configuração AT.

A imagem abaixo mostra o circuito real montado em uma protoboard.

O firmware a ser inserido no microcontrolador não poderia ser mais simples, pois é apenas um comando para escrever na porta serial que nesse caso é o módulo bluetooth.

/*
Firmware para fazer a leitura de um sensor de temperatura
e a tranmissão desse dado via Bluetooth
utilizando o módulo BTM-5.
Desenvolvido por: Allan Romanato
Data: 31/05/2012
*/

int sensor = 0;
int leitura = 0;
float temp = 0;

void setup(){
Serial.begin(38400); //Inicia Comunicação Serial
}

void loop(){
leitura = analogRead(sensor);
temp = (leitura * 0.00488);
temp = temp *100;
Serial.print("Temperatura lida: "); //Envia via Bluetooth
Serial.println(temp);
delay(5000);
}

O resultado da execução é mostrado a seguir em uma tela do terminal serial Docklight (poderia ser também vistos em um hyperterminal do Windows).

Aproveitando a deixa, agora será explicado como acionar um LED através de um comando enviado ao Arduino via bluetooth. Usaremos o LED padrão do Arduino que é ligado ao pino 13.  Nesse exemplo será colocado um led extra só para melhor visualização.

O LED extra deverá ser ligado a porta digital 13 do arduino por intermédio de um resistor de 330 ou 470 Ohms.

O que mudará um pouco nessa parte é que a porta serial deverá ser lida pelo Arduino e a informação recebida terá que ser interpretada pelo microcontrolador para depois o sinal ser enviado. No código a seguir será abordado leitura e escrita na serial (bluetooth).

/*
Firmaware responsavel por acender e apagar um led
via Bluetooth.
Desenvolvido por Allan Romanato
Data: 31/05/2012
*/

char receive;
int pin = 13;
void setup(){
pinMode(pin, OUTPUT);
Serial.begin(38400); //Inicia Comunicação Serial
}

void loop(){
if (Serial.available() > 0){ //Checa de a porta serial tem info.
receive = Serial.read(); //Faz a leitura da Serial.
if(receive == 'l'){
digitalWrite(pin, HIGH);
Serial.println("Led Ligado");
}
else if(receive == 'd'){
digitalWrite(pin, LOW);
Serial.println("Led Desligado");
}
}
delay(500); //Necessario para sincronizar.
}

Os resultados da execução do código acima são mostradas nas figuras a seguir:

Após o comando de ligar o LED

Após o comando de desligar o LED

 

Com a leitura do artigo pode-se concluir que quando utilizamos o Módulo Bluetooth BTM5 a comunicação sem fio se torna simples, pois é só enviar comandos para a porta serial que eles são interpretados automaticamente.

Abraço

Allan Romanato

May 22 2012

Exemplo do Ethernet Shield ENC28J60 com Arduino

Nessa publicação irei mostrar como ligar o seu Arduino em Rede, mas antes vou abordar uma breve e simples introdução de como é uma Rede.

Uma rede pode ser divida em 5 camadas básicas (modelo OSI/ISO são 7 camadas) como mostrada na figura abaixo:

  • A camada de aplicação suporta todas as aplicações da rede, como por exemplo, os protocolos FTP, SMTP, HTTP e etc. O conteúdo dessa camada é desenvolvido pelo projetista do software.
  • A camada de transporte pela transferência dos dados hospedeio-hospedeiro, normalmente usa os protocolos TCP ou UDP. TCP garante que todos os dados cheguem corretamente, já o UDP não da essa garantia. Essa camada normalmente já esta implementada em alguma biblioteca.
  • A camada de rede é a responsável pelo roteamento do dos datagramas da origem ao destino. O protocolo utilizado é o protocolo IP
  • A camada de enlace é a responsável pela transferência de dados entre elementos vizinhos da rede. Utiliza-se o protocolo Ethernet.
  • A camada física é simplesmente o hardware, no nosso caso o Ethernet Shield.

 

Trabalhar em rede não é uma tarefa muito fácil como muitos pensam, e essa Shield facilita muito o trabalho para uma conexão de um Arduino na rede, pois não é necessário o computador  para fazer o papel de servidor. Me lembro que a primeira vez que fui conectar meu Arduino na rede para acionar um relé via browser, tive que escrever um programa complicadíssimo em C/Linux.

 

Nosso projeto consistira em fazer uma leitura da temperatura ambiente, essa leitura será processada e enviada para a rede (através da Shield) onde por um browser executado em um computador ou tablet ligados à rede poderá ser visualizada.

Obs. Para fazer a leitura do termômetro utilizarei o mesmo algoritimo feito no post Arduino + LM35 – Como montar um termometro

Materiais Utilizados:

Quem estiver interessado em ver o esquema elétrico do Ethernet Shield a WebTronico fornece o PDF clicando aqui

O segredo da Shield que estamos trabalhando é o Circuito Integrado ENC28J60 da Microchip que é o controlador Ethernet que nos permitirá fazer o acesso nossa rede. A figura abaixo esclarece um pouco seus níveis de abstração.

O propósito desse artigo não é abordar o circuito integrado e sim sua funcionalidade, então para mais informações sobre o controlador Ethernet ENC28J60 acesse seu DataSheet clicando aqui

Primeiramente iremos fazer as conexões do sensor de temperatura LM35 nos terminais da Shield, que por consequência estarão ligados aos do Arduino. Abaixo figura que representa as ligações no Arduino, mas lembre-se essas mesmas ligações devem ser feitas na SHIELD:

Como o LM35 é um sensor analógico, ele deve ser ligado em uma das 6 portas analógicas, seu VCC ligado em 5V e seu terra ligado no GND.

Dica: Não inverta o VCC com o GND, isso irá esquentar demais o sensor podendo causar a inutilização do equipamento.

Pronto primeira parte do projeto está OK, o sensor ja esta ligado na Shield, agora vem a parte que nos interessa. Como fazer essa captura e coloca-la na rede para podermos acessar via browser ou qualquer outro cliente HTTP?

Apos ligar o sensor, você deverá instalar a biblioteca que controla o ENC28J60 pois não é a mesma que vem como padrão no Arduino, você deverá fazer o download desse biblioteca clicando aqui, após feito o download a biblioteca devera ser descompactada na pasta libraries . OBS. É extremamente necessario o download dessa biblioteca ou o projeto não irá funcionar.

Após a conclusão da instalação da biblioteca, vamos ao que realmente interessa nesse momento, que é o código necessário para podermos executar nosso Ethernet Shield na rede.

//Ethernet Shield para medir temperatura exemplo criado para o site WebTronico.

#include "etherShield.h"
#include "ETHER_28J60.h"

static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};   //Endereço MAC - Camada de Enlace                                                        
static uint8_t ip[4] = {192, 168, 0,15}; //Endereço IP - Camada de Rede
static uint16_t port = 80; //Porta padrão protocolo HTTP

ETHER_28J60 e;

int analog;
float temperatura;

void setup()
{
  e.setup(mac, ip, port);
}

void loop()
{
  if (e.serviceRequest())
  {
    e.print("<html><head><title>WebServer Simples</title></head><body>");//Instruções HTML.
    e.print("<H1>Temperatura</H1><br/>");
    e.print("Temperatura em Celsius: ");
    analog = analogRead(0);
    temperatura = (analog * 0.00488);  // 5V / 1023 = 0.00488 (precisão do A/D)
    temperatura = temperatura * 100; //Converte milivolts para graus celcius, lembrando que a cada 10mV equi
    e.print(temperatura);
    e.print("<br><br><b>Desenvolvido por Allan Romanato</b></body></html>");
    e.respond();
  }
  delay(100);
}

A execução desse código nos mostrará o resultado exibido na figura abaixo.

 

Nesse post pode-se concluir que não existe dificuldade em colocar seu Arduino na rede, o código é relativamente simples, e os resultados são muito interessantes, pode-se fazer várias coisas com um Arduino em rede, como por exemplo controlar sua casa a longa distância.

Espero que tenham gostado.

Allan Romanato.