Автоматичне освітлення AtMega328 (PIR)

Було прохання зробити автоматичне вмикання та вимикання двох світильників, і ось після виконання роботи вирішив залити тему, раптом знадобиться комусь. Суть в чому: є невелика кімната формою "Г", проходять через неї часто, але не затримуючись. Освітлюється вона 2 настільними світильниками, увімкненими в розетки. Необхідно зробити так, щоб при вході світло вмикалося і горіло, поки людина знаходиться всередині, а після того, як вона вийшла, світло вимикається. За кутом знаходиться другий світильник, і не завжди потрібно його вмикати. Думати буде AtMega328, стаття для тих, хто вже працював з нею, і розглядати її підключення (необхідна обв'язка) і сам процес прошивки не буде. Код написаний на мові processing з прошивкою через Arduino IDE.

Було вирішено не робити розрив у проводах ламп, а зробити окрему розетку. Реле усувають розрив у проводі живлення, і лампи вмикаються. Піни arduino бояться досить великої взаємоіндукції реле, і для того щоб зберегти їм життя, ставимо обратні діоди. Реле підключаються не безпосередньо, а через маленького посередника, транзистор (NPN), який підключається через резистор. 

Збираємо на макетці, використовуючи Arduino Uno. PIR датчики руху мають 3 ноги: живлення (+5, GND) та цифрову. При руху на цифрову ногу подається HIGH (довжину сигналу можна регулювати підстроювальним резистором). 2 ноги підключаємо до Arduino від датчиків. 

Переходимо до схеми. Вся схема поділена на 2 вузли: вузол ключів і вузол реле. 

Сам вузол ключів виглядає так.

З AtMeg'и беремо живлення і 2 цифрові виходи. При подачі на 2 цифрових виходи HIGH транзистори проводять GND на вузол реле..

Вузол реле.

При спрацьовуванні реле, розрив у мережевому проводі нейтралізується, і світильник вмикається.

ПП і її чучело. 

Ну і результат.

Вузол реле був захований у розетку для більшої компактності. 

/*Black, Alehin, 2016.*/

const uint64_t time1_1;
const uint64_t time2_1;
const uint64_t time3_1;
const uint64_t time1_2;
const uint64_t time2_2;
const uint64_t time3_2;

void setup() {
  Serial.begin(9600);
  pinMode(4, INPUT);   //PIR 1
  pinMode(5, INPUT);   //PIR 2
  pinMode(2, OUTPUT);  //relay 1
  pinMode(3, OUTPUT);  //relay 2
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
}
void loop()
{
  if (digitalRead(4) == HIGH) //засікаємо час з початку спрацьовування PIR 1
    {digitalWrite(2, HIGH);
  time1_1 = millis();}  
  if (digitalRead(5) == HIGH) //засікаємо час з початку спрацьовування PIR 2
    {digitalWrite(3, HIGH);
  time1_2 = millis();}  
  

  if (digitalRead(4) == LOW) //включаємо relay 1 на 30 секунд
  { time2_1 = millis();
    time3_1 = time2_1 - time1_1;
    if (time3_1 >= 30000)
    { digitalWrite(2, LOW);}
  }
  if (digitalRead(5) == LOW) //включаємо relay 2 на 30 секунд
  { time2_2 = millis();
    time3_2 = time2_2 - time1_2;
    if (time3_2 >= 30000)
    { digitalWrite(3, LOW);}
  } 
}

 

Список радіоелементів

Обозначення Тип Номінал Кількість Примітка
МК AVR 8-біт
ATmega328
1
Q Біполярний транзистор
2N2222
2
D Випрямляючий діод
1N4004
2
R Резистор
10 кОм
2
K Реле 5 вольтове 2

Top