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
- Arduino (Uno, Nano, Mega, etc)
- Lâmpada (LED, CFL ou Incandescente)
- Soquete para lâmpada
- Sensor PIR (Passive Infrared) HC-SR501
- Sensor de Toque Capacitivo TTP223B
- Módulo de Relé 5V KY-019 ou similar
- Matriz de Contatos
- Cabo 1,5 mm2 ou mais grosso
- Fios diversos para breadboard
- Tomada (plugue padrão)
- Fita isolante
- Alicate de corte
- Decapador de fios (opcional)
Diagrama Esquemático
A figura a seguir mostra o diagrama esquemático do circuito que será criado:
Visão Matriz de Contatos
A ilustração a seguir mostra a conexão entre os componentes empregados no projeto:
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:
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).
