Автоматичне освітлення 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 |