Kelola skenario pencahayaan dengan Arduino

Alasan munculnya proyek ini pada dasarnya ada dua. Salah satunya adalah lampu berkelap-kelip secara sistematis di lorong. Yang kedua adalah pengalaman yang ada dengan sistem otomatisasi berdasarkan pada pengontrol yang dapat diprogram industri (merancang AOV, AHS, sistem ASDU, dll.) Dan keinginan untuk menerapkan pengetahuan ini untuk kepentingan rumah tangga mereka.

Seperti yang mungkin sudah Anda tebak, kita akan berbicara tentang kontrol pencahayaan otomatis, tetapi karena hanya menyalakan lampu dari sensor gerak itu membosankan dan tidak modern, gagasan teknik mengarahkan saya ke opsi berikut: kontrol otomatis skenario pencahayaan (siang dan malam) dengan kemungkinan manual dan remote beralih mode.

Saya pikir ini layak dimulai dengan skema, dan kemudian membuat penjelasan di dalamnya.

Diagram pengkabelan


Juga, denah lantai akan visual.

Rencana lorong
image

Jadi di lorong 2 skenario pencahayaan dibuat, siang hari dengan strip LED di langit-langit dan malam, dengan strip LED di lantai. Kedua mode dikontrol oleh dua sensor gerak yang terletak di atas pintu dan di samping cermin, seperti yang dapat dilihat dari rencana. Awalnya, hanya satu sensor gerak dipasang di atas pintu, tetapi saya terkejut, lampu dimatikan secara berkala ketika ada orang di ruangan itu. Ternyata sensor tidak dapat mendeteksi manipulasi kecil yang dilakukan pada cermin, terutama jika objek tersebut membelakanginya dan menciptakan zona buta di depannya. Penemuan kedua bagi saya adalah bahwa beberapa orang dapat menghabiskan lebih dari 1-2 menit di cermin (saya biasanya memiliki sekitar 15 detik). Solusi pertama yang terlintas dalam pikiran adalah menempatkan sensor hunian yang lebih maju seperti Esylux + relay,tetapi biaya peralatan tersebut akan melebihi biaya sisa proyek, sehingga pilihan yang lebih sederhana dipilih, untuk memasang sensor gerak kedua untuk "titik-titik buta".

Sensor gerak dirakit dari modul + kotak persimpangan HC-SR501.
Sensor gerak
image
image

Algoritma sensor akan disajikan dalam kode, tetapi secara singkat, untuk menyalakan lampu, cukup untuk memicu salah satu sensor, untuk mematikan sinyal dari keduanya diperlukan.

Untuk langit-langit, dipilih SMD 5050 tape, 300 LED per 5 meter (12V 72W). Polos dengan warna kuning hangat. Kaset dinyalakan melalui modul relai.

Untuk penerangan malam hari, sebuah pita SMD 5050 RGB dipilih, 150 LED per 5 meter. Hanya warna biru yang terlibat (kabel lebih sedikit) Kontrol melalui modul transistor L298N (perhatikan inversi sinyal output dalam modul ini, nilai 255 dalam program ini akan mematikan LED). Kecerahan rekaman diatur ke minimum agar tidak membutakan mata Anda.

Rekaman led
image
image

Pilihan mode pencahayaan siang / malam dilakukan dengan saklar tombol di dinding, atau dengan remote control dengan prioritas yang sama. Perangkat lunak ini diterapkan sesuai dengan prinsip operasi saklar bagian.

Saya memutuskan untuk membuat sendiri modul controller, relay dan transistor dari kotak persimpangan, memperbaiki semua peralatan pada papan sirkuit tercetak, ternyata cukup andal. Kotak itu sendiri dipasang di rel DIN. Untuk mengurangi jumlah kabel, ada koneksi yang disolder di bagian belakang papan, dan blok terminal untuk daya input 12V juga disolder ke papan, yang memberi makan kedua controller itu sendiri dan kaset.

Pengendali
image
image

Di bawah ini, kode program untuk Arduino.

Kode
#include "IRremote.h"
int calibrationTime = 10; 
byte CellingLed = 9; /*   */ 
byte ledB = 6;  //  
byte pirDoor = 5; //  
byte pirMirror = 4; //   
IRrecv irrecv(2); //  IR  
byte dayNight = 7; //  ,  - / 
decode_results results;
byte irSignal = 0;
byte buttonstate; 
long unsigned int moveTime; //       
long unsigned int pause = 30000; // ,     
boolean movementDetected = true; // true -  
boolean moveFlag; //        
void setup ()
{
  irrecv.enableIRIn();
  Serial.begin(9600);
  pinMode(CellingLed,OUTPUT);
  pinMode(ledB,OUTPUT);
  digitalWrite(dayNight, HIGH); //      7
  pinMode(pirDoor,INPUT);
  pinMode(pirMirror,INPUT);
  digitalWrite(pirDoor, LOW);
  digitalWrite(pirMirror, LOW);
//   
  Serial.print("Calibrating");
  for(int i = 0; i < calibrationTime; i++)
    {
    Serial.print(".");
    delay(1000);
  }
  Serial.println(" done");
  Serial.println("SENSOR ACTIVE");
  delay(50);
}

void loop()
{
if ( irrecv.decode( &results)){
  delay(300);
  if (results.value == 0xFF3AC5) {irSignal = 0;}  /*       */
  if (results.value == 0xFFBA45) {irSignal = 1;}

  irrecv.resume();  
}
//    (/, IR /)
  byte DayNightSwitch = !digitalRead(dayNight);
  byte a;
  byte b;
    if (DayNightSwitch == LOW) {a=1;} else {a=0;}
    if (irSignal == 1)         {b=1;} else {b=0;}
    if (a==b) {buttonstate = 1;} 
    else      {buttonstate = 0;}
  byte pirstate;
    if (digitalRead(pirDoor) == HIGH || digitalRead(pirMirror) == HIGH)
        { pirstate = HIGH;}
    if (digitalRead(pirDoor) == LOW && digitalRead(pirMirror) == LOW)
        { pirstate = LOW;}


//  
if(pirstate == HIGH && buttonstate == 0 )
{
 if(movementDetected)
 {
  movementDetected = false;
  Serial.println("Motion detected");
  delay(50); 
  }
  moveFlag = true;
  analogWrite(ledB,240);//   
  digitalWrite(CellingLed, LOW);
}
if(pirstate == LOW & buttonstate == 0 )
{
  if(moveFlag)
  {
    moveTime = millis();
    moveFlag = false;
    }
  if(!movementDetected && millis() - moveTime > pause )
  {
    movementDetected = true;
    Serial.println("Motion finished");
    delay(50);    
    analogWrite(ledB,255);
    }  
}
//   
if (pirstate == HIGH && buttonstate == 1 )
{
 
 if(movementDetected)
 {
   movementDetected = false;
   Serial.println("Motion detected");
   delay(50); 
  }
  moveFlag = true;
  digitalWrite(CellingLed,HIGH);
  analogWrite(ledB,255);
}
if (pirstate == LOW && buttonstate == 1 )
{
  if(moveFlag)
  {
    moveTime = millis();
    moveFlag = false;
    }
  if(!movementDetected && millis() - moveTime > pause )
  {
    movementDetected = true;
    Serial.println("Motion finished");
    delay(50);    
    digitalWrite(CellingLed,LOW);
    } 
}

}


Skema pencahayaan ini telah bekerja untuk saya selama enam bulan sekarang, secara umum, ini cocok untuk saya dengan fungsinya. Tentu saja, ada ide untuk modernisasi, khususnya, saya ingin mengganti remote control dari inframerah ke radio. Tambahkan beberapa outlet yang dikendalikan radio. Juga tambahkan antarmuka web untuk mengelola dari perangkat seluler. Layanan pihak ketiga tampaknya tidak cukup andal bagi saya. Saat ini, menyalakan, mematikan dan menunjukkan keberadaan gerakan sudah berhasil, tetapi ini adalah cerita lain.

Antarmuka web
image

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


All Articles