基于访客计数器的浴室照明控制


该网络上有许多关于浴室照明自动化的文章,其中大多数是基于运动或体积传感器的。甚至有人用摄像机作为有趣的选择,但是有机会成为YouTube的“明星”。在研究了各种选择的优缺点之后,我想知道为什么几乎没有人会根据常规的访客计数器自动包含灯光。毕竟,对传入和传出进行计数,您可以清楚地判断房间里是否有人,然后相应地打开或关闭电灯。


为了制造仪表,购买了两个红外距离传感器E18-D80NK和Arduino Pro Mini。购买时的费用为250卢布。和60卢布。相应地。
红外传感器


示意图(可单击)。
方案


传感器嵌入门框中。
嵌入式传感器

由于浴室照明的自动化是智能家居系统的一部分,因此该设备分为两部分。第一部分实际上是用于确定运动方向的传感器的逻辑,而第二部分,即照明控制器(KO),已经开始对进入/离开和打开照明的人数进行计数。
Arduino ProMini固定运动方向并在输出处生成脉冲,该脉冲到达CO,CO依次参与计数和打开/关闭灯。
红外计数器代码
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;
      }
    }
  }
}


KO通过安装在门前的传统开关控制照明。KO功能包括通过开关控制整个公寓的照明,使用MQTT协议传输有关照明状态的数据以及从智能家居服务器接收命令。
灯光控制器代码部分
 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"); //    
    }
  }



根据操作经验,我们可以得出结论,所提出的系统是完全可操作的。确实,有时错误的故障主要发生在黑色衣服上,但很少发生,并且如果传感器在输入/输出端不起作用,那就足以使您的手经过传感器或只需单击开关。
最后,视频工作。


第一部分-智能家居,开始。

Source: https://habr.com/ru/post/zh-CN389885/


All Articles