Control de iluminación del baño basado en el mostrador de visitas


La red tiene muchos artículos sobre la automatización de la iluminación en el baño, la mayoría de ellos basados ​​en sensores de movimiento o volumen. Alguien incluso hizo de una cámara de video una opción interesante, pero existe la posibilidad de convertirse en una "estrella" de YouTube. Después de estudiar las diversas opciones por sus ventajas y desventajas, me pregunté por qué casi nadie hace la inclusión automática de la luz en base a un contador de visitantes regular. Después de todo, contando los entrantes y salientes, puede juzgar claramente si hay alguien en la habitación o no, y en consecuencia encender o apagar la luz.


Para fabricar el medidor, se compraron dos sensores de distancia infrarrojos E18-D80NK y Arduino Pro Mini. El costo al momento de la compra fue de 250 rublos. y 60 rublos. en consecuencia
Sensor de infrarrojos


Diagrama esquemático (se puede hacer clic).
Esquema


Los sensores están incrustados en el marco de la puerta.
Sensores integrados

Dado que la automatización de la iluminación del baño es parte del sistema inteligente del hogar, el dispositivo se dividió en dos partes. La primera parte es en realidad la lógica del sensor para determinar la dirección del movimiento, y la segunda parte, el controlador de iluminación (KO), ya se dedica a contar la cantidad de personas que entran / salen y encienden la iluminación.
Arduino ProMini fija la dirección del movimiento y genera pulsos en la salida, que llegan al CO, que a su vez se dedica a contar y encender / apagar la luz.
Código de contador 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 controla la iluminación desde un interruptor convencional instalado en frente de la puerta. Las funciones KO incluyen el control de la iluminación de todo el departamento desde interruptores, la transmisión de datos sobre el estado de la iluminación y la recepción de comandos desde el servidor doméstico inteligente utilizando el protocolo MQTT.
Parte del código del 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"); //    
    }
  }



De la experiencia operativa, podemos concluir que el sistema presentado es completamente operativo. Es cierto que a veces los funcionamientos defectuosos falsos se deben principalmente a la ropa negra, pero rara vez, y si el sensor no funcionó en la entrada / salida, simplemente pase la mano por los sensores o simplemente haga clic en el interruptor.
Y finalmente, el video funciona.


La primera parte: hogar inteligente, el comienzo.

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


All Articles