Была просьба сделать автоматическое включение и выключение двух светильников и вот после выполнения работы решил залить тему, вдруг пригодится кому. Суть в чем: Есть небольшая комната формой "Г", проходят через нее часто, но не задерживаясь. Освещается она 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 | Поиск в магазине Отрон | ||
Скачать список элементов (PDF)
Комментарии (17) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
Или вы псих или я... Что то тут явно не так.
[Автор]
[Автор]
Да про подстроечный резистор не заметил. Но тогда тем более, зачем нужен МК, раз вы о нем знали? Время устанавливается в интервале 5-200 сек. Явно больше чем вы установили в прошивке.
То что устройство работает, это хорошо.Но пускай оно работало бы и никто об этом не знал. Но вы написали статью, её будут читать и повторять новички. Хотя повторять её не следует,я уже писал почему.
[Автор]
[Автор]
[Автор]