Automação Residencial com Arduino – Acendimento de lâmpada por bate palmas

Você já pensou em como deve ser se sentir um Tony Stark, tendo o controle de tudo em suas mãos?

Esse projeto não é novidade, porém não deixa de ser algo super interessante de se usar e aprender (para os preguiçosos principalmente). Por isso, nesse tutorial vamos desenvolver um simples sistema de acionamento de relé por bate palmas utilizando um Arduino Uno, um Módulo Relé 5v de 1 canal, Módulo Sensor de Som, Jumpers, uma Protoboard(opcional), uma Lâmpada e uma extensão modificada.

O Módulo Sensor de Som contém 2 pinos de alimentação, sendo 1 positivo (VCC +) e 1 negativo (GND -); 1 pino de saída de dados digital (OUT); e 1 microfone de eletreto. Os sensores de som, conforme a imagem, geralmente são semelhantes.

O funcionamento desse módulo se baseia nas informações que o microfone de eletreto capta conforme o nível de tensão que pode ser configurado a partir de um potenciômetro (componente azul) localizado nas placas. Existem módulos que captam essas informações em níveis analógicos e digitais. Qual a diferença? A leitura analógica funciona continuamente e a digital funciona a partir de níveis de tensão(alto e baixo, 1 e 0, 5v e 0v, etc). Nas imagens abaixo pode-se comparar os dois tipos:

Sobre a captação das palmas:

  • Explicitamos um tempo máximo que uma entrada em alta intensidade pode durar (100ms)

  • Explicitamos também um tempo máximo entre cada palma (500ms)

  • O sensor pode detectar todo tipo de som, não apenas de palmas.

O Módulo Relé 5v de 1 canal contém 2 pinos de alimentação, sendo 1 positivo (VCC +) e 1 negativo (GND -); 1 pino de entrada de dados digitais (IN); 3 saídas para o Relé, sendo 1 Normalmente Aberto (NO), 1 Comum (COM) e 1 Normalmente Fechado(NC).

O funcionamento do relé é dependente da entrada de dados digitais(IN) para que os pinos entrem em contato e fechem o circuito produzindo, assim, alguma saída de energia 110v ou 220v.

Vamos conectar o Módulo Sensor de Som no Arduino através da saída digital (OUT), o Módulo Relé 5v de 1 canal através da entrada digital(IN) e os pinos de alimentação na protoboard ou diretamente no Arduino Uno pelas entradas de 5v e GND do mesmo.

Um detalhe importante é que o Módulo Relé 5v de 1 canal, pode também ser alterado para um Módulo Rele 5v de 2 canais, um Módulo Relé 5v de 4 canai ou um Módulo Relé 5v de 8 canais. Você pode usá-los de acordo com a configuração que deseja de bate palmas para acionamento de mais instrumentos.

No tutorial em questão estamos utilizando os seguintes componentes:

* O Arduino Uno pode ser substituído por um Arduino Nano, um Arduino Mega ou um Arduino de qualquer outra versão compatível.

** O Módulo Relé 5v de 1 canal pode ser substituído conforme o uso desejado.

Montando o projeto

A montagem desse projeto é simples e rápida. A dificuldade que pode ser encontrada é sobre a conexão do relé à lâmpada. Uma das pontas do fio deve ser conectada ao pino Comum (CO) do Módulo Relé 5v de 1 canal e a outra deve ser conectada ao pino Normalmente Aberto (NO), porém, deve existir uma conexão da lâmpada ou instrumento que desejar entre a interligação em questão. Uma extensão foi usada para simular a rede elétrica cortando um dos fios e conectando as pontas nas entradas CO e NO do Relé. O esquemático eletrônica está abaixo para referência:

OBS: Muito cuidado ao manusear e ordenar os fios pois estamos lidando com 110v ou 220v da rede elétrica.

A montagem do projeto e execução do código podem ser vistos no vídeo abaixo:

Mergulhando no projeto

Software

Utilizamos a IDE do próprio Arduino para programar o sistema. Definimos as constantes de tempo máximo de palmas(100ms), tempo máximo entre as palmas(500ms), pino de saída do Módulo Sensor de Som (7), pino de entrada do Módulo Relé 5v de 1 canal (8). Determinamos variáveis de tempo de espera, tempo de espera entre palmas e sensor do microfone, além de criar um contador de palmas. Inicializamos a função de ação de bate palmas e as funções padrão da arquitetura do Arduino(void setup() e void loop()).

A função setup() é responsável pela inicialização dos componentes que farão parte do sistema, e, por isso estamos setando o pino do microfone como entrada(INPUT) e o pino do relé como saída(OUTPUT) através da função pinMode(). Também inicializamos o pino do relé desligado para que, ao ligar o Arduino, a lâmpada não ligue junto; isso é feito pela função digitalWrite();

A função loop() é responsável por rodar nossas tarefas programadas a todo momento(por isso “loop”). Nela estamos fazendo a leitura constante do pino do microfone através da função digitalRead(). A partir daí temos que fazer várias verificações de condição. A função millis() é uma alternativa à função delay() do arduino. Usamos a função millis() pois a função delay() interrompe completamente o código durante o tempo estabelecido como parâmetro da mesma.

Ex.: delay(1000) //Interrompe o código por 1 segundo

Portanto, usamos a função millis() para que o código seja contínuo mesmo que eu precise designar um retardo nos sinais do circuito eletrônico.

Como pode ser visto no código abaixo, dependendo da condição de tempo e contagem de palmas eu executo a função que denominei Action(), que verifica o contador de palmas e caso sejam duas palmas o pino do relé é escrito com o valor contrário ao que o que atualmente está escrito. As funções digitalWrite() e digitalRead() são as responsáveis por isso.

#define tmpMaxPalma 100
#define tmpMaxPalmas 500
#define pinMic 7
#define pinRelay 8

unsigned long tmpEspera = 0;
unsigned long tmpPalmas = 0;
int sensorMic;
int contPalmas = 0;

void Action();

void setup() {
  pinMode(pinMic, INPUT);
  pinMode(pinRelay, OUTPUT);
  digitalWrite(pinRelay, HIGH); //Ligar arduino com Relé desligado
}

void loop() {
  /*Normalmente o sensor mantém sua porta ligada até que uma palma seja detectada.
    A função digitalRead() faz a leitura contínua do microfone de eletreto.
  */
  sensorMic = digitalRead(pinMic);
  //Palma detectada
  if (sensorMic == LOW) {
    /* É necessário um tempo para que uma palma não seja detectada novamente.
      Incrementamos o contador a cada detecção.
    */
    if ((millis() - tmpEspera) >= tmpMaxPalma) {
      tmpEspera = 0;
    } else if (tmpEspera == 0) {
      tmpEspera = tmpPalmas = millis();
      contPalmas++;
    }
  }

  //Para o tempo excedido zeramos o contador de palmas.
  if (((millis() - tmpPalmas) > 500) && (contPalmas != 0)) {
    Action();
    tmpPalmas = millis();
    contPalmas = 0;
  }
}

void Action() {
  /*
    Pode ser utilizado o switch no lugar do if para mais casos de uso de 3 ou mais palmas.
  */
  if (contPalmas == 2) {
    digitalWrite(pinRelay, !digitalRead(pinRelay));
  }
}
}

Você pode também visualizar e clonar o código acima em nosso repositório no GitHub.

Hardware

Para esse projeto utilizamos um Arduino Uno que pode ser facilmente alterado por um Arduino Nano ou Arduino Mega, ou qualquer outro Arduino compatível. O Módulo Relé 5v de 1 canal, pode também ser modificado por um Módulo Rele 5v de 2 canais, um Módulo Relé 5v de 4 canais ou até mesmo um Módulo Relé 5v de 8 canais (se quiser bater bastante palmas :P).

Como dito anteriormente, o Módulo Sensor de Som é sensível a qualquer ruído, e, por isso deve ser configurado através do potenciômetro localizado na placa(componente azul). Girando o potenciômetro você poderá calibrar o sensor para mais ou menos sensibilidade.

Conclusão

Temos aqui um projeto simples e legal de ser aplicado em um projeto de automação. Já utilizei esse sistema diretamente na rede elétrica colocando os componentes em uma pequena caixa próxima ao interruptor. Considero que esse tutorial é de nível básico e estou à disposição para tirar qualquer dúvida sobre o mesmo nos comentários abaixo ou pelo meu e-mail. Em breve estaremos fazendo projetos maiores de automação para que você possa se sentir mais um Tony Stark da vida real 😀

 

Referências

Fórum Arduino

Blog Arduino

Sobre Lucas Soares Gomes 5 artigos
Bacharelando em Ciência da Computação | UFV Campus Florestal (31) 9 9820-1535 l.u.c.a.s.21 - Skype lucas.s.gomes@ufv.br

Seja o primeiro a comentar

Deixe uma resposta

O seu endereço de email não será publicado.


*