Contrôle de l'éclairage de la salle de bain basé sur le compteur des visiteurs


Le réseau a de nombreux articles sur l'automatisation de l'éclairage dans la salle de bain, la plupart d'entre eux sont basés sur des capteurs de mouvement ou de volume. Quelqu'un a même fait sur la base d'une caméra vidéo, l'option est intéressante, mais il y a une chance de devenir une "star" de YouTube. Après avoir étudié les différentes options pour leurs avantages et leurs inconvénients, je me suis demandé pourquoi presque personne ne faisait l'inclusion automatique de la lumière sur la base d'un compteur de visiteurs régulier. Après tout, en comptant les entrées et les sorties, vous pouvez clairement juger s'il y a quelqu'un dans la pièce ou non, et en conséquence allumer ou éteindre la lumière.


Pour fabriquer le compteur, deux capteurs de distance infrarouge E18-D80NK et Arduino Pro Mini ont été achetés. Le coût au moment de l'achat était de 250 roubles. et 60 roubles. en conséquence.
Capteur IR


Diagramme schématique (cliquable).
Schéma


Les capteurs sont intégrés dans le cadre de la porte.
Capteurs intégrés

Étant donné que l'automatisation de l'éclairage de la salle de bain fait partie du système de maison intelligente, l'appareil a été divisé en deux parties. La première partie est la logique même du capteur déterminant la direction du mouvement, et la deuxième partie, le contrôleur d'éclairage (KO), est déjà engagée dans le comptage du nombre de connexions / déconnexions et l'allumage de l'éclairage.
Arduino ProMini fixe la direction du mouvement et génère des impulsions à la sortie, qui arrivent au CO, qui à son tour est engagé dans le comptage et l'allumage / extinction de la lumière.
Code de compteur 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;
      }
    }
  }
}


KO contrôle l'éclairage à partir d'un interrupteur conventionnel installé devant la porte. Les fonctions KO incluent le contrôle de l'éclairage de tout l'appartement à partir de commutateurs, la transmission de données sur l'état de l'éclairage et la réception de commandes du serveur domestique intelligent à l'aide du protocole MQTT.
Partie du code du contrôleur d'éclairage
 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"); //    
    }
  }



De l'expérience d'exploitation, nous pouvons conclure que le système présenté est pleinement opérationnel. Il est vrai que parfois les faux dysfonctionnements sont principalement sur des vêtements noirs, mais rarement, et si le capteur ne fonctionnait pas à l'entrée / sortie, passez simplement votre main devant les capteurs ou cliquez simplement sur l'interrupteur.
Et enfin, le travail vidéo.


La première partie - Smart home, le début.

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


All Articles