Blog em desenvolvimento

Blog em desenvolvimento

Dimmer Shield - controle pelo bluetooth e botão - 1 canal

Tutorial para controlar o novo Dimmer Shield via bluetooth, utilizando um módulo bluetooth, um arduíno UNO e um smartphone.


ATENÇÃO: Neste projeto utiliza conexão direta à rede elétrica, se for feito ligação de forma inadequada pode causar CHOQUE ELÉTRICO e INCÊNDIO. Só execute este projeto caso você tenha conhecimento com instalações elétricas!

Neste tutorial vamos utilizar um novo Dimmer Shield, um arduino UNO, um módulo bluetooth e um smartphone android.

*Antes de prosseguir com esse tutorial, olhe este link, da primeira atualização do blog, para ver como é a ligação elétrica e para configurar os jumpers de seleção dos pinos dos botões e de disparo do TRIAC.

Descrição:
O novo Dimmer Shield é um shield para arduíno. É utilizado para controlar a potência de aparelho elétricos doméstico, por exemplo, lâmpada incandescente, lâmpadas fluorescente ou LED dimerizáveis, ventilador de mesa e de teto, liquidificador, entre outros.

Está a venda neste link:
http://produto.mercadolivre.com.br/MLB-775276602-dimmer-shield-arduino-110vac-e-220vac-ate-trs-canais-_JM

Figura 1 - Novo Dimmer Shield para arduíno


Módulo bluetooth:
O módulo bluetooth é utilizado para fazer a interface do smartphone android com o orduíno. Neste tutorial será utilizado um aplicativo gratuito disponível no play store, chamado de "Dimmer Shield Bluetooth - 1 ch", no próximo tópico será mostrado o passo a passo de baixar o aplicativo. A figura 2 mostra o módulo bluetooth utilizado.
Figura 2 - Módulo Bluetooth utilizado neste tutorial - frente e verso


A comunicação do módulo bluetooth com o arduíno é feito pela porta serial. Os pinos digitais de comunicação no arduíno são o pino 0 (RX) e o pino 1 (RX). A ligação do módulo com o arduíno é feito da seguinte maneira:

Módulo bluetooth                 Arduíno
          VCC              <=>     3.3V ou 5V
          GND             <=>           GND
           RX               <=>       TX - pino 1
           TX               <=>       RX - pino 0


Esquema de ligação do módulo com o arduino:
A figura 3 mostra como é a ligação do módulo bluetooth com o arduino (Dimmer Shield encaixado no arduino). Os pinos de conexão foi comentado no tópico anterior (Módulo bluetooth).

Figura 3 -  Ligação do módulo com o arduino



Aplicativo android:
O aplicativo utilizado está disponível gratuitamente no play store, se chama: "Dimmer Shield Bluetooth - 1 ch". O aplicativo possui seis botões na interface de usuário, são eles "Conectar", "Desconectar", "- intensidade", "+ intensidade", "Desligar" e "Ligar". Os dois primeiros botões são responsáveis para configurar e conectar com o módulo bluetooth. O nome padrão do módulo utilizado neste tutorial é "linvor", podendo existir outros nomes. 

Os outros botões quando pressionado manda um determinado caractere para o módulo bluetooth e este manda para a comunicação serial do arduino. Com os caracteres recebidos pela serial, o arduino identifica e toma uma determinada decisão, ou seja,  aumenta, diminui, liga ou desliga a carga conectado no Dimmer Shield. A tabela abaixo mostra os caracteres utilizados:

     Aplicativo                    envia caractere
 "- intensidade"       <=>            "A"
 "+ intensidade"      <=>            "B"
     "Desligar"          <=>            "C"
       "Ligar"             <=>            "D"


A figura 4 mostra o passo a passo de pesquisar o aplicativo e instalar no smartphone. No play store do android, coloque o nome "Dimmer Shield Bluetooth" na caixa de texto 'Pesquisar no Google Play'.
Na janela de descrição do aplicativo pressione INSTALAR, e depois de instalado clique em ABRIR.

Figura 4 - Passo a passo de pesquisar e instalar o aplicativo no android

A figura 5 mostra a interface do programa e o processo de configuração da comunicação bluetooth. Antes de iniciar o aplicativo é necessário primeiro ativar o Bluetooth do smartphone. Após a ativação do bluetooth, pressionar o botão de "Conectar", depois vai aparecer a lista de dispositivos pareados com o seu celular. Selecione o dispositivo do módulo bluetooth utilizado, neste tutorial se chama "linvor". Após a seleção, volta para a página inicial do aplicativo. Quando sai do aplicativo, a conexão bluetooth é desconectado, e quando entra novamente, o aplicativo se conecta automaticamente.

Obs. Para o módulo bluetooth ficar disponível na lista de dispositivos pareados, é necessário configurar a conexão utilizando a ferramenta de Configuração do smartphone!



Figura 5 - Interface do aplicativo "Dimmer Shield Bluetooth - 1 ch"

Código de programação:
Segue o código de programação utilizado neste tutorial. Observar os comentários, para fazer as alterações de acordo com os jumpers na placa. Copiar e colar na IDE do arduino e depois fazer o upload do código.
Obs.: Para fazer o upload do código, o módulo bluetooth não pode está conectado no RX e TX do arduino! Pois a gravação do microcontrolador usa essa porta digital.

//----------------------------inicio do programa-------------------------------------------
//André Kuhn - Automation
//Email - andrekuhn.automacao@gmail.com
//Código para o Dimmer ser controlado pelos botões e pelo módulo Bluetooth

//Pino digital responsável pelo chaveamento do TRIAC, o novo Dimmer Shield
//pode utilizar os pinos digitais 3, 5 e 6, é necessário alterar o jumper na
//placa. Para utilizar no antigo Dimmer Shield, o pino é o 3.
int load = 3;

//Porcentagem inicial em 40%, variável com valor da 0 a 100.
volatile int power = 40;

//Variável para armazenar os caracteres recebidos pela serial, pode receber
//pelo bluetooth ou pelo serial monitor da IDE do arduino
char leitura;

//Declarando os pinos de leitura dos botões B0 e B1 do novo Dimmer Shield, o
//botão B0 podem ser A0,A1 e A2, e o botão B1 as entradas A3, A4 e A5. Lembrar
//da alteração dos jumpers na placa. No antigo Dimmer Shield os pinos dos botões
//são fixos, pino 4 e 5.
int botao_0 = A0, botao_1 = A3;

//Inicializando a função de configuração das portas digitais e analógicas
void setup()
{
    //Declarando o pino digital load (digital 3) como saída
     pinMode(load, OUTPUT);
   
     //Inicializa interrupção. O número zero indica a porta 2 do Arduino,
     //zero_cross_int é a função que será chamada toda vez que pino 2 do Arduino,
     //"subir" (RISING) de valor de 0 para 1.
     attachInterrupt(0, zero_cross_int, RISING);

     //Declarando o pino do botão 0 como entrada
     pinMode(botao_0, INPUT);
     //Declarando o pino do botão 1 como entrada
     pinMode(botao_1, INPUT);

     //Colocando o pino do botão 0 em nível baixo (0 volt)
     digitalWrite(botao_0, LOW);
     //Colocando o pino do botão 1 em nível baixo (0 volt)
     digitalWrite(botao_1, LOW);

     //Definindo a valocidade da comunicação serial (baud-rate)
     Serial.begin(9600);
}

//Função responsável por executar a lógica de programação
void loop()
{
     //Verificando se há comunicação serial
     if(Serial.available())
     {
          //Fazendo a leitura da comunicação serial e armazenando na variável
          //leitura do tipo char
          leitura = Serial.read();
     }
   
     //Verificando se o botão 0 foi pressionado ou se a variável leitura
     //é igual a "A"
     if((digitalRead(botao_0) == HIGH) || (leitura == 'A'))
     {
          //Se power (porcentagem) for maior que 0, executa
          if(power > 0)
          {
               //Faz a subtração do power anterior com 10 (decremento de 10)
               power = power - 10;
          }
       
       
          delay(200); //Espera de 200 milisegundos
       
          Serial.print(power); //Impressão na serial o valor de power
          Serial.println(" %"); //Impressão na serial o texto " %"
     }

     //Verificando se o botão 1 foi pressionado ou se a variável leitura
     //é igual a "B"
     if((digitalRead(botao_1) == HIGH) || (leitura == 'B'))
     {
          //Se power (porcentagem) for menor que 100, executa
          if(power < 100)
          {
               //Faz a soma do power anterior com 10 (incremento de 10)
               power = power + 10;
          }
       
          delay(200); //Espera de 200 milisegundos
     
          Serial.print(power); //Impressão na serial o valor de power
          Serial.println(" %"); //Impressão na serial o texto " %"
    }

     //Verificando se a variável leitura é igual a "C"
     if(leitura == 'C')
     {
          //power recebe valor 0, desliga a carga (0%)
          power = 0;    
       
          Serial.print(power); //Impressão na serial o valor de power
          Serial.println(" %"); //Impressão na serial o texto " %"
     }

   
     //Verificando se a variável leitura é igual a "D"
     if(leitura == 'D')
     {    
           //power recebe valor 100, liga a carga (100%)
           power = 100;    
         
           Serial.print(power); //Impressão na serial o valor de power
           Serial.println(" %"); //Impressão na serial o texto " %"
     }

     leitura = ' '; //Atribuindo o " " (espaço), na variável leitura
}

//Função executada quando o Dimmer Shield detecta a passagem por zero da
//tensão alternada (senóide)
void zero_cross_int()
{
     //Cálculo do ângulo de disparo: 60Hz -> 8,33ms (1/2 ciclo)
     //(8333us - 8,33us) / 100 = 83 (aproximadamente)

     //O powertime é o tempo que o TRIAC permanescerá desligado quando é
     //detectado o ponto 0 da senóide e varia de 0 a 8300 microsegundos  
     int powertime = (83*(100-power));
   
     //Se o powertime for menor ou igual a 300 microsegundos, dar o comando
     //de ligar a lâmpada (carga) - potência total fornecida
     if(powertime <= 830)
     {
          //Liga o pulso do sinal ao TRIAC para que ele passe a conduzir,
          //coloca o pino digital "load" em nível alto
          digitalWrite(load, HIGH);
     }
   
     //Se o powertime for menor ou igual a 8000 microsegundos, dar o comando
     //de desligar a lâmpada (carga) - potência zero fornecida
     else if(powertime >= 8000)
     {
          //Desliga o pulso do sinal ao TRIAC para que ele não conduza,
          //coloca o pino digital "load" em nível baixo
          digitalWrite(load, LOW);
     }
   
     //Se o powertime estiver entre 300 microsegundos a 8000 microsegundos
     else if((powertime > 830) && (powertime < 8000))
     {
          //Mantém o circuito desligado por powertime microssegundos (espera
          //powertime microssegundos)
          delayMicroseconds(powertime);
       
          //Envia sinal ao TRIAC para que ele passe a conduzir, coloca o pino
          //digital "load" em nível alto
          digitalWrite(load, HIGH);
       
          //Espera 8,33 microssegundos para que o TRIAC perceba o pulso
          delayMicroseconds(8.33);
 
          //Desliga o pulso do TRIAC, coloca o pino digital "load" em nível baixo
          digitalWrite(load, LOW);
     }
}
//----------------------------fim do programa-----------------------------------------------

Testando a aplicação utilizando o Monitor serial da IDE do arduino
Para fazer o teste utilizando o Monitor serial, o módulo bluetooth tem que está desconectado dos pinos RX e TX do arduino.
O teste é feito enviando letras 'A', 'B', 'C' e 'D'. Cada letra enviada, o arduino interpreta e toma uma determinada decisão. A figura 6 mostra o teste feito pelo Monitor serial.

Figura 6 - Teste utilizando o Monitor serial da IDE arduino

Testando a aplicação pelo aplicativo Dimmer Shield Bluetooth
A figura 7 mostra as ligações elétricas e o teste do controle do brilho de uma lâmpada led dimerizável pelo aplicativo.

Figura 7 - Controlando o brilho de uma lâmpada led pelo aplicativo Dimmer Shield Bluetooth


Nenhum comentário:

Seguidores