Controle de Lâmpada com Sensor PIR e Sensor de Toque com Arduino

Controle de Lâmpada com Sensor PIR e Sensor de Toque com Arduino

Neste projeto vamos simular um sistema de iluminação inteligente, controlando o acendimento de uma lâmpada comum (automação residencial) com um sensor de movimento infravermelho (PIR), o qual irá detectar o movimento de uma pessoa no ambiente, e seu apagamento de duas formas: automático, após um tempo determinado, ou imediato após o toque em um sensor capacitivo, que fará o papel de um Smart Switch.

Lista de materiais

Diagrama Esquemático

A figura a seguir mostra o diagrama esquemático do circuito que será criado:

Diagrama Esquemático da smart lamp com arduino

Visão Matriz de Contatos

A ilustração a seguir mostra a conexão entre os componentes empregados no projeto:

Automação Residencial dom Arduino - Lâmpada com Sensor Infravermelho e Sensor de Toque

Código-Fonte do Projeto

A seguir temos o código-fonte do projeto a ser carregado no Arduino:

const int TOQUE = 2;
const int PIR = 8;
const int LAMP = 10;
int estToque;
int estPIR;
unsigned long tempoAtual = 0;

void setup() {
  pinMode(TOQUE, INPUT);
  pinMode(PIR, INPUT);
  pinMode(LAMP, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(TOQUE),apaga,RISING);
  Serial.begin(9600);
}

void loop() {
  tempoAtual = millis();
  estPIR = digitalRead(PIR);
  if (estPIR == HIGH) {
    digitalWrite(LAMP, HIGH);
    Serial.println("Lâmpada acesa");
    while (millis() < tempoAtual + 10000) {
      if (estPIR == false) {
        break;
      }
    }
    digitalWrite(LAMP, LOW);
    estPIR = false;
    Serial.println("Lâmpada apagada por tempo");
  }
}

void apaga() {
  estToque = digitalRead(TOQUE);
  if (estPIR == HIGH) {
    if (estToque == HIGH) {
      digitalWrite(LAMP, LOW);
      estPIR = false;
      Serial.println("Lâmpada apagada por toque");
    }
  }
  delay(1000);
}

Neste código usamos uma interrupção no Arduino para detectar quando o sensor de toque capacitivo é ativado, permitindo assim apagar a lâmpada em qualquer momento, por meio da chamada à função apaga(). Além disso, usamos a função millis() para temporizar o circuito, em vez de simplesmente usarmos a função delay() (que é limitada).

Usamos o Monitor Serial para visualizar mensagens relativas ao estado da lâmpada – a saber, se ela foi acesa, se foi apagada pela passagem do tempo limite, ou se foi apagada por intervenção do usuário (toque no sensor capacitivo). 

Testando o circuito

ATENÇÃO: Tome muito cuidado ao manipular o circuito após ter sido conectado na tomada da rede elétrica, , pois existe o risco de choque elétrico, que pode ser fatal. Certifique-se de ter isolado muito bem todas as conexões que envolvem o relé e a lâmpada.

Para testar o circuito basta alimentar o Arduino e conectar o plugue na tomada. Espere cerca de um minuto até o sensor se aclimatar com os níveis de infravermelho do ambiente, e então é só se movimentar na frente do PIR, o que deve fazer com que a lâmpada se acenda automaticamente.

A imagem abaixo mostra o circuito montado em uma matriz de contatos, já conectado e pronto para testes:

Automação Residencial com Arduino - Controle de Lâmpadas com sensores

Tocando no nosso smart switch – o sensor de toque capacitivo –  a lâmpada deve se apagar imediatamente, não sendo acesa novamente por algum tempo mesmo que você se movimente na frente do sensor de novo – para que haja tempo de sair do recinto sem que a lâmpada seja acesa novamente.

Se o sensor de toque não for ativado, a lâmpada se apagará automaticamente após decorrido o tempo configurado no código (10 segundos aqui – mude à vontade para realizar seus testes).

 

Sobre Fábio dos Reis (1194 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*