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 30 2012

Como configurar o Módulo Bluetooth BTM5 com Arduino

Nesse artigo será mostrado como configurar o módulo Bluetooth com comandos AT.

Introdução

O Bluetooh é uma tecnologia que permite uma comunicação simples e rápida entre equipamentos por ondas de rádio de baixo alcance. A idéia do Bluetooth começou a surgir no ano de 1994 onde a empresa Ericsson percebeu a necessidade de criar um equipamente de comunicação entre dispositivos em baixa distância que eliminasse cabos de conexão em tranferências simples de arquivos e de dados. Nos anos seguintes essa tecnologia foi se popularizando no mundo e hoje em dia podemos ver o Bluetooth em muitos equipamentos do nosso cotidiano.

Para computadores ou notebooks que não possuem essa tecnologia de fábrica, é possivel usar um adaptador bluetooth para USB (também conhecido como dongle bluetooth).

O bluetooth foi projetado para funcionar em todos os países e por isso foi necessaria a utilização de uma frequência de rádio aberta, que no caso é a de 2,45GHz

Adaptador Bluetooth para USB

Existem três classes de equipamentos, sendo que essas classes definem o alcance maximo de cada dispositivo.

Classe 1: Alcance de até 100 metros.
Classe 2: Alcance de até 10 metros.
Classe 3: Alcance de até 1 metro.

 

Redes Bluetooth

Quando dois ou mais dispositivos Bluetooth se comunicam através de uma conexão eles formam uma rede chamada de Piconet. Cada Piconet pode ter no maximo 8 elementos, sendo um MASTER e outros 7 SLAVES. O dispositivo master é o responsavel pelo sincronismo e pela procura dos dispositivos e também pelo controle das tranmissões de dados. Ja os dispositivos slaves são mais simples, pois eles são apenas procurados pelo master que esta fazendo a solicitação de pareamento.

É possivel ligar mais de 8 dispositivos em uma rede Bluetooth e essa técnica é dada pela sobreposição de dois ou mais Piconets. O nome dado a essa nova rede é Scatternet. Um dispositivo slave pode fazer parte de mais de um piconet simultaneamente, isso ja não é possivel para um dispositivo master, que é o controlador do piconet.

Projeto

Para execução desse projeto foi utilizado:

 

O módulo vem com configurações pré-estabelicidas de fábrica, como velocidade de comunicação, nome do dispositivo, senha de pareamento, e etc. que podem ser alteradas via comandos AT por meio de comunicação serial com o computador. Obs. Importante: Essa configuração NÃO é possivel via comunicação Bluetooth. Deve ser feita necessariamente por meio de cabos de conexão (fisicamente). Nesse projeto, para fazer a conexão serial entre o computador e o módulo bluetooth , será utilizado o próprio Arduino como conversor USB-TTL.

 

Os comandos AT de configuração, ao serem enviados devem ser seguidos obrigatoriamente por um <CR> (Carrige Return) e um <LF> (Line Feed). Todos esses comandos ao serem recebidos com sucesso pelo módulo, são respondidos com uma mensagem de confirmação “OK”. Segue abaixo uma tabela com os comandos e suas funções:

O módulo que esta sendo apresentado aqui, trabalha com nível de tensão de 3.3 Volts, e ai começa um impasse  pois as saidas lógicas do arduino operam com 5 volts, o que irá danificar o módulo se a saída do Arduino for ligada diretamente.

Para contornar esse problema, podemos montar um divisor de tensão para converter as saídas lógicas de 5 Volts para 3.3 Volts.

Um divisor de tensão nada mais é que um circuito simples que tem como função criar uma tensão proporcional a outra. O circuito a seguir mostra um divisor de tensão:

Os resistores são ligados em serie, e de acordo com os seus valores, podemos regular a tensão de saída. Abaixo a fórmula utilizada para se calcular a saída.

Para enviar os comandos AT, é necessario colocar o módulo em estado de configuração. Para isso basta alimentar o módulo com o botão onboard pressionado ou enviando um bit alto (3.3V) para o pino MODE. Usaremos o FTDI do próprio arduino duemilanove como conversor USB-TTL para fazer a comunicação serial com o módulo.

Para utilizar o FTDI do Arduino é necessario retirar o microntrolador da placa. Como o TX do Arduino é o RX do FTDI e o RX do Arduino é o TX do FTDI, consequentemente, deverá ser ligado: TX/TX e RX/RX. Segue abaixo uma imagem para deixar mais claro esse raciocinio (essa imagem ja contém o divisor de tensão).

Sera mostrado abaixo uma sequência de passos para conectar o módulo bluetooth com o computador. Aqui será utilizado um adaptador Bluetooth da Shark.

Os passos a seguir foram executados em um sistema operacional Windows 7.

Abra o painel Bluetooth que esta no TrayIcon após a instalação do driver pelo proprio Windows 7

Clique em Adicionar Dispositivos.

Selecione o módulo Bluetooth e clique em proximo.

Clique em Entrar código de pareamato do dispositivo.

Coloque o código de pareamento que foi configurado pelos comandos AT (o padrão de fábrica é 1234. Dependendo do seu módulo também pode ser 0000 ou 1111).

Se tudo estiver OK, aparecerá a seguinte tela:

Para enviar os comandos AT, pode-se usar qualquer programa de terminal serial (hyperterminal do Windows por exemplo). Abaixo tem o resultado da execução de alguns comando AT e suas respectivas respostas. A velocidade padrão de fábrica de comunicação é de 115200 ou 38400 dependendo do modelo. Caso seu módulo bluetooth não responda, tente outras velocidades.

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.