Controle de iluminação do banheiro com base no balcão de visitantes


A rede possui muitos artigos sobre automação de iluminação no banheiro, a maioria deles baseada em sensores de movimento ou volume. Alguém feito até com base em uma câmera de vídeo, a opção é interessante, mas há uma chance de se tornar uma "estrela" do youtube. Tendo estudado as várias opções por suas vantagens e desvantagens, me perguntei por que quase ninguém faz a inclusão automática de luz com base em um balcão de visitantes regular. Afinal, contando as entradas e as saídas, você pode avaliar claramente se há alguém na sala ou não e, assim, ligar ou desligar a luz.


Para fabricar o medidor, foram adquiridos dois sensores de distância infravermelho E18-D80NK e Arduino Pro Mini. O custo no momento da compra era de 250 rublos. e 60 rublos. em conformidade.
Sensor IR


Diagrama esquemático (clicável).
Esquema


Os sensores estão embutidos na moldura da porta.
Sensores incorporados

Como a automação da iluminação do banheiro faz parte do sistema doméstico inteligente, o dispositivo foi dividido em duas partes. A primeira parte é na verdade a lógica do sensor para determinar a direção do movimento, e a segunda parte, o controlador de iluminação (KO), já está empenhada em contar o número de pessoas que entram / saem e acendem a iluminação.
O Arduino ProMini fixa a direção do movimento e gera pulsos na saída, que chegam ao CO, que por sua vez se dedica a contar e ligar / desligar a luz.
Código do contador de IR
bool flag = 0;
bool flag2 = 0;
bool state = 0;
bool state2 = 0;
int DoorPin = 10; //
int pause = 500;
int StatusDoor = 0;
int status1 = 0;
int status2 = 0;

void setup() {
  pinMode(13, OUTPUT); //   
  pinMode(12, OUTPUT); //   
  pinMode(DoorPin, INPUT);
  digitalWrite(DoorPin, HIGH);  //   
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  digitalWrite( 12 , LOW );
  digitalWrite( 13 , LOW );
}
void loop() {
  StatusDoor = digitalRead(DoorPin);    //   
  if (StatusDoor == HIGH) {             //   ,   
    if (!digitalRead(2) && !flag) {
      delay(5);
      flag = 1;
      if (flag2 == 0) {
        state = 1;
      }
    }
    if (!digitalRead(3) && !flag2) {
      delay(5);
      flag2 = 1;
      if (flag == 0) {
        state2 = 1;
      }
    }
    if (digitalRead(3) && digitalRead(2)) {
      if (!flag || !flag2) {
        state = 0;
        state2 = 0;
        flag = 0;
        flag2 = 0;
      }
      if (flag && state2) { //
        digitalWrite( 13 , HIGH );
        delay(pause);
        digitalWrite( 13 , LOW );
        flag = 0;
        flag2 = 0;
        state2 = 0;
      }
      if (flag2 && state) { //
        digitalWrite( 12 , HIGH );
        delay(pause);
        digitalWrite( 12 , LOW );
        flag = 0;
        flag2 = 0;
        state = 0;
      }
    }
  }
}


O KO controla a iluminação de um interruptor convencional instalado em frente à porta. As funções KO incluem controlar a iluminação de todo o apartamento a partir de switches, transmitir dados sobre o estado da iluminação e receber comandos do servidor doméstico inteligente usando o protocolo MQTT.
Peça de código do controlador de luz
 if (digitalRead(22) != pre1) { //    
    delay(pause);
    digitalWrite(33, !digitalRead(33)); //   ..    
    pre1 = digitalRead(22); //   
    int out1 = digitalRead(33);
    String char_out1 = String(out1);
    char_out1.toCharArray(b, 2);
    client.publish("myhome/Lighting/BathRoom_Main", b); //   
    if (digitalRead(33) == HIGH) {
      posetitel = 1;
      bathswitch = 1;
    }
    else if (digitalRead(33) == LOW) {
      posetitel = 0;
      bathswitch = 0;
    }
  }
  if (digitalRead(2) == 1 && (millis() - previousMillis > 3000)) { //      
    previousMillis = millis();
    if (bathswitch == 1) {
      posetitel = 0;
      bathswitch = 0;
    }
    posetitel++; 
    if (posetitel > 0) {
      delay(50);
      digitalWrite(33, 1);// 
      if (posetitel > 5) {
        posetitel = 5;
      }
      delay(5);
      client.publish("myhome/Lighting/BathRoom_Main", "1"); //    
    }
  }
  if (digitalRead(3) == 1 && (millis() - previousMillis > 3000)) { //      
    previousMillis = millis();
    posetitel--;
    if (posetitel <= 0) {
      posetitel = 0;
      delay(50);
      digitalWrite(33, 0);// 
      delay(5);
      client.publish("myhome/Lighting/BathRoom_Main", "0"); //    
    }
  }



Pela experiência operacional, podemos concluir que o sistema apresentado está totalmente operacional. É verdade que, às vezes, as faltas avarias ocorrem principalmente em roupas pretas, mas raramente, e se o sensor não funcionou na entrada / saída, basta passar a mão pelos sensores ou simplesmente clicar no interruptor.
E, finalmente, o vídeo funciona.


A primeira parte - casa inteligente, o começo.

Source: https://habr.com/ru/post/pt389885/


All Articles