Автоматическое освещение AtMega328 (PIR)

Была просьба сделать автоматическое включение и выключение 2-х светильников и вот после выполнения работы решил залить тему, вдруг пригодится кому. Суть в чем: Есть небольшая комната формой «Г», проходят через нее часто, но не задерживаясь. Освещается она 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-битATmega3281
Q
Биполярный транзистор2N22222
D
Выпрямительный диод1N40042
R
Резистор10 кОм2
K
Реле5 вольтовое2
Добавить все

Скачать список элементов (PDF)

Добавить комментарий

Ваш адрес email не будет опубликован.