domingo, 20 de março de 2011

Automação residencial com celular usando Arduino Mega

Já pensou em controlar sua casa por celular ou telefone fixo com um sistema criado por você mesmo? Sim é possível! Nesse post vamos fazer um sistema de automação residencial com celular usando o Arduino Mega e alguns componentes. Nesse exemplo iremos controlar a lâmpada de um quarto.

Por se tratar de um projeto educacional não utilizarei recursos de prototipagem, embora esse projeto possa ser remodelado para fins comerciais :-)

Com o projeto apresentado você terá base para construir um sistema multifuncional, ou seja, você pode controlar as luzes dos cômodos, portão automático, alarme, bomba d'água e, até simular sua presença caso não haja ninguém em casa, afastando os "malas" que procuram casas vazias para praticarem furtos.

O projeto se divide em três partes:

Decodificador DTMF (MT8870DE): Reponsável por decodficar as teclas do telefone remoto e convertê-las em saída digital para o Arduino;

Sistema de controle (Arduino Mega): Responsável por receber as saídas digitais do decodificador DTMF, tratá-las e acionar o relé correspondente ao dispositivo que queremos ligar/ desligar;

Os atuadores (Relés): Ficarão conectados ao Arduino, onde serão ativados conforme tecla de ativação remota (celular);

Materiais utilizados

Como dito anteriormente, por se tratar de um projeto educacional, iremos fazer de uma forma mais didática utilizando um protobord e alguns componentes eletrônicos, encontrado facilmente em lojas de eletrônica. O Protoboard é uma placa padrão com matrizes de contatos utilizado para quem é iniciante na área de circuitos, são bastante utilizados nas escolas técnicas e faculdades de tecnologia. Abaixo a lista de materiais utilizados:

Figura1: Lista de componentes

1 x Protoboard
1 x MT8870DE (Decodificador de DTMF)
1 x Cristal de 3.58MHZ
2 x Capacitores cerâmicos de 100nF
2 x Resistores de 100K
1 x Resistor de 300K
1 x Plug (mono) de 3,5mm
1 x Adaptador de 3,5mm - 2,5mm - caso seu celular já tenha entrada 3,5mm, não precisa comprar!


Para o atuador (relé que controlará o dispositivo), decidi utilizar o módulo Electronic brick -5V Relay module da Seeed, por dispensar o uso de prototipação e soldagem da placa. Uma observação: cada módulo controlará um dispositivo, no nosso exemplo iremos controlar uma lâmpada, se você quiser controlar mais dispositivos deverá adquirir mais módulos!
Electronic brick -5V Relay module(http://www.seeedstudio.com)

O módulo acima possui um conector de 3 vias com encaixe, se você tem familiaridade com o ferro de solda poderá soldar os fios diretamente na placa, caso contrário, é interessante adquirir o conector abaixo, também vendido na Seeed.

Electronic brick- fully buckled 3 wire cable(http://www.seeedstudio.com) 


Outros: Fios para conexões, Alicate para corte, ferro de solda (para soldar o plug 3,5mm-opcional)
O custo dos materiais acima fica em torno de R$50,00, fora o Arduino Mega e um celular simples.

Funcionamento

O DTMF (Tons Duplos de Múltiplas Frequências) é um sistema criado no laborátório da Bell (Bell Labs) que passou a ser utilizados nos telefones de teclado, seu funcionamento baseia-se no envio de duas freqências, uma baixa e outra alta, utilizando o sistema de sinalização MFSK - Multi-Frequency Shift Keying. O intuito da criação do protocolo DTMF era de permitir a discagem DDD, que usa enlaces sem fio como os de micro-ondas e satélite. O CI utilizado no nosso projeto é o CM8870DE (figura2), encontrado facilmente em lojas de eletrônica. Similares também podem ser utilizados! Vide Datasheet http://www.datasheetcatalog.org/datasheets2/22/220193_1.pdf

Figura2: Decodificados de tons DTMF MT8870DE


O CI mais alguns componentes ficarão montados no protoboard e conectado a um celular na entrada de fones, ele ficará responsável por fazer a ponte entre o usuário e a casa a ser controlada, o decodificador tem a função de "ouvir" o que foi digitado e repassar (decodificar) o número em formato digital para o Arduino Mega, que trata a informação binária e aciona o atuador (Relé) correspondente fazendo com que uma luz seja ligada, por exemplo.

Veja atentamente o vídeo abaixo, em tela cheia, e repare na decodificação binária das teclas do celular na saída do CI (MT8870DE).

Video1: Decodificação DTMF em fomato binário

Note que a cada tecla digitada é sinalizada sua recepção no pino STD. Este pino é extremamente importante, pois informará ao Arduino o momento de fazer a leitura dos bits correspondentes das teclas.

Na tabela abaixo estão as equivalências das teclas, bem como as saídas dos pinos Q3, Q2, Q1 e Q0 do Decodificador DTMF.

Tecla do telefone
Saída
digital do Decodificador DTMF
Valor equivalente
Decimal
Q3
Q2
Q1
Q0
1
0
0
0
1
1
2
0
0
1
0
2
3
0
0
1
1
3
4
0
1
0
0
4
5
0
1
0
1
5
6
0
1
1
0
6
7
0
1
1
1
7
8
1
0
0
0
8
9
1
0
0
1
9
0
1
0
1
0
10
*
1
0
1
1
11
#
1
1
0
0
12
Tabela1 - Saídas binárias do decodificador DTMF.


Mais detalhes sobre o DTMF: http://pt.wikipedia.org/wiki/DTMF

Por quê o Arduino Mega?

Muitos devem estar se perguntando: se o exemplo só serve para acender uma lâmpada, por quê utilizar o Arduino Mega?
Para esse projeto, especificamente, o Arduino Mega tem uma vantagem em relação aos outros: NÚMERO DE PORTAS! São 54 portas que podemos utilizar no projeto, dos quais 4 portas são utilizados para o circuito decodificador DTMF, sobrando, portanto, 50! Ou seja, podemos controlar 50 dispositivos em uma casa!


Figura3: Arduino Mega


Características do Arduino Mega:


» Microcontrolador: ATmega1280
» Voltagem de operação: 5V
» Voltagem de entrada(recomendada): 7-12V
» Limites de voltagem de entrada: 6-20V
» Pinos de I/O digitais: 54 (dos quais 14 podem ser de saída PWM)
» Pinos de entrada analógica: 16
» Corrente DC por pino de I/O: 40 mA
» Memória Flash: 128KB dos quais 4 KB são utilizados no bootloader
» Memória SRAM: 8KB
» Memória EEPROM: 4KB
» Velocidade de Clock: 16 MHz


http://arduino.cc/en/Main/ArduinoBoardMega

Ligações e esquemático do circuito de decodificação


O Esquemático abaixo serve tanto para guiar na montagem do circuito no protoboard, como para quem pretende montar numa placa de fibra de vidro ou fenolite. 

Figura4 - Ligações ao Arduino Mega


Montando o decodificador no protoboard


De acordo com o esquemático acima, montamos o circuito de decodificação DTMF no ptotoboard, monte com atenção e confira todas as ligaçoes! Observe que o pino 1 do CI é marcado por um chanfro e uma bola em baixo relevo, contamos os pinos a partir da esquerda (1) para a direita (9)e, no fim, continuando por cima com o pino 10 da direita para a esquerda (16) conforme Figura2.



Figura2 - Montagem do circuito de decodificação.

Os fios devem ser conectados no Arduino Mega conforme segue abaixo:

5V .............................. Ao pino 5V do Arduino Mega   
GND............................ Ao pino GND do Arduino Mega   
STD ........................... Ao pino 3 do Arduino Mega            
Q3 .............................. Ao pino 4 do Arduino Mega    
Q2 .............................. Ao pino 5 do Arduino Mega   
Q1 .............................. Ao pino 6 do Arduino Mega   
Q0 .............................. Ao pino 7 do Arduino Mega   

Para a conexão com o plug (que será conectado ao celular) recomendo a soldagem no terminal, caso não seja possível, descasque o fio e enrrole nos terminais tendo cuidado para não dar curto nos fios (Figura3). Na maioria dos celulares a conexão dos fones são com plugues de 2,5mm, nesse caso adquira um adaptador para a conversão (Figura4).

Figura3: Ligação no plug 3,5mm


Figura4: Adaptador 3,5mm-2,5mm



Firmware


/* ---------------------------------------------
 * DTMF HOME CONTROL V1.0 Rev0.0
 * Controle de dispositivos através de telefone
 * Arduino-ce
 * Comunidade Cearense de Hardware Livre
 * http://groups.google.com/group/arduino-ce?hl=pt-br
 * http://arduino-ce.blogspot.com
 * março de 2011
 ---------------------------------------------*/

#define RELE1 2 // Conectado ao fio branco do módulo Relé(Figura4)

#define pinBit01  7 // Q0
#define pinBit02  6 // Q1
#define pinBit03  5 // Q2
#define pinBit04  4 // Q3
#define pinBitStd 3 // STD

int tecla = 0;

int bit01 = 0;   
int bit02 = 0; 
int bit03 = 0; 
int bit04 = 0; 
int bitStd= 0; 

int RELE1_STATE = LOW; // Estado do Relé LOW (Desligado)

void setup() { 
  Serial.begin(9600); // Iniciamos a Serial com Baudrate 9600
  pinMode(RELE1, OUTPUT); // Definimos o pino do Relé como Saída
  Serial.println("Aguardando tecla de comando..."); // Exibimos a mensagem no terminal...
}

void loop(){ 

  bitStd = digitalRead(pinBitStd); //Lê o estado do pino STD e armazena em 'bitStd' 

  if (bitStd == HIGH) {//Se estiver em nível alto fará as leituras 
                       //dos bits dos pinos Q3, Q2, Q1 e Q0

    bit01 = digitalRead(pinBit01);   
    bit02 = digitalRead(pinBit02); 
    bit03 = digitalRead(pinBit03); 
    bit04 = digitalRead(pinBit04); 

    tecla = (bit04 * 8) + (bit03 * 4) + (bit02 * 2) + (bit01 * 1);//Conversão binária para 
                                                                  //decimal (ver Vídeo1)

    Serial.print("Recebido: "); // Exibe a mensagem

    switch (tecla){ // Seleciona a tecla pressionada

    case 1: // Tecla 1
      Serial.println("1");     
      /* COMANDO PARA RELE1 */
      RELE1_STATE = !RELE1_STATE; // Guarda o estado INVERTIDO do Relé.     
      break;

    case 2: // Tecla 2
      Serial.println("2");               
      break;

    case 3: // Tecla 3
      Serial.println("3");
      break;

    case 4: // Tecla 4
      Serial.println("4");
      break;

    case 5: // Tecla 5
      Serial.println("5");
      break;

    case 6: // Tecla 6
      Serial.println("6");
      break;

    case 7: // Tecla 7
      Serial.println("7");
      break;

    case 8: // Tecla 8
      Serial.println("8");
      break;

    case 9: // Tecla 9
      Serial.println("9");
      break;

    case 10: // Tecla 0
      Serial.println("0");
      break;

    case 11: // Tecla *
      Serial.println("*");
      break;

    case 12: // Tecla #
      Serial.println("#");
      break; 
    }

    digitalWrite(RELE1, RELE1_STATE);//Liga ou desliga o Relé1 conforme o estado (HIGH/ LOW)

    // Zeram-se todas as variáveis 
    tecla = 0;
    bit01 = 0;   
    bit02 = 0; 
    bit03 = 0; 
    bit04 = 0; 
    bitStd= 0; 
    delay (500); // Aguarda 500 milissegundos
  } // Sai do switch// Volta pro loop...


Testando o protótipo


Utilizei uma lâmpada fluorescente comum ligado em 220V na bancada. O computador com a IDE do Arduino foi utilizado para monitorar o recebimento das teclas do telefone numa ligação local.





Vídeo2: Acendendo uma lâmpada via telefone





Prova e uso

Vídeo3: Acendendo a luz do quarto. OBS: Não reparar na bagunça! :P





Links relacionados

Bento XVI pode controlar iluminação LED do Cristo Redentor pelo celularhttp://super.abril.com.br/blogs/planeta/bento-xvi-pode-controlar-iluminacao-led-do-cristo-redentor-pelo-celular/

Celulares e tablets se transformam em controle universal em casa “high-tech” -  http://www.mobilepedia.com.br/noticias/celulares-e-tablets-se-transformam-em-controle-universal-em-casa-%E2%80%9Chigh-tech%E2%80%9D

Algumas considerações:

- Com alterações no firmware o projeto pode ser alterado para até 50 módulos de controle, devendo-se levar em conta a alimentação do conjunto, ou seja, para mais de 3 módulos de relés uma fonte deverá ser utilizada, escolha de preferência 12V x 5A.

- Caso já tenha experiência com eletrônica, poderá montar tanto o circuito do módulo DTMF quanto os módulos de controles de relés em placas de fibra de vidro e montar o conjunto em uma caixa hermética!

- Por ter uma gande potência ao controlar um arcondicionado, utilize um contactor em conjunto com o relé, ou seja, o relé liga o contactor, que liga o arcondicionado!


NUNCA MEXA NA REDE ELÉTRICA SEM O DEVIDO CONHECIMENTO, FAÇA COM O AUXÍLIO DE UM PROFISSIONAL DA ÁREA DE ELETRICIDADE!


Por enquanto é só, até o próximo tutorial!


Licença Creative Commons
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Brasil License.