Главная » Arduino
Призовой фонд
на июль 2019 г.
1. 1000 руб
Паяльник
2. Регулируемый паяльник 60 Вт
Паяльник
3. 100 руб.
От пользователей

Автоматическое освещение 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 Поиск в Utsource В блокнот
Q Биполярный транзистор
2N2222
2 Поиск в Utsource В блокнот
D Выпрямительный диод
1N4004
2 Поиск в Utsource В блокнот
R Резистор
10 кОм
2 Поиск в Utsource В блокнот
K Реле5 вольтовое2 Поиск в Utsource В блокнот
Добавить все

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

Теги:

Опубликована: Изменена: 04.06.2016 0 1
Я собрал 0 2
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 3 Проголосовало: 2 чел.

Комментарии (17) | Я собрал (0) | Подписаться

0
Роман #
А только PIR-датчиками обойтись нельзя было? Или критические те несколько сеунд паузы между соседними срабатываниями.
Ответить
0

[Автор]
inhotep96 #
Вы имеете в виду без AtMega, используя только одни датчики? При обнаружении движения да, релюхи включались бы, но получилось бы так, что пропало движение, свет потух, приходится двинуться, что бы включить его. А если ты сидишь и паяешь, или стоишь боком и чай пьешь, частые мерцания включения/отключения. С логикой можно об этом не париться, если в течении 30 секунд движения не было, тогда точно в комнате пусто.
Ответить
0
Шамиль #
Так в ПИР датчике есть два подстроечных резистора и джампер. Один подстроечный отвечает за время удержания логической единицы на выходе после обнаружения движения, там чуть ли не до 10 минут можно выставить. А так же настроить джампером чтобы отсчет времени начинался после отсутствия движения. Можно обойтись и без МК.
Ответить
+3
si4karuk #
Два датчика, два транзистора, два реле и БП, Это понятно. А НАФИГ тут та самая ардуина?
Или вы псих или я... Что то тут явно не так.
Ответить
-2
ProSpekT #
А задержки в под минуты между срабатываетесь он как организовал бы? После последнего движения пол минуты до следующего, если его не было тогда выключается, а если ты сидишь за столом и тебе приходится руку вверх подымать что бы он не потух, а еще это частое включение и отключение (если без логики МК), давить на мозг будет.
Ответить
+1
Vitemk #
Я написал ниже как. А если так уж хочется контроллер, то хватило бы мелкого МК, какой-нибудь attiny. Ставить Atmega, да ещё в виде ардуины, слишком расточительно.
Ответить
0

[Автор]
inhotep96 #
При чем тут Arduino. Используется чистая AtMega. На макетке при сборе и отладке использовалась Arduino, но сам проект конечный на одной AtMega, и само собой что ее можно заменить аналогом поменьше. У меня этого аналога нет, зато есть пак AtMeg, их и использовал, или мне стоило не статью под проект делать а наоборот, какие претензии то)
Ответить
+2
Vitemk #
По вашей статье не понятно, что используется только Atmega. А вот статью с не рациональным использованием ресурсов, лучше вообще не стоило делать.
Ответить
0

[Автор]
inhotep96 #
В статье не раз упоминается про AtMeg'у, и описано что собираем для теста на Arduino, название статьи не с Arduino, в списке материалов не Arduino, в введении не Arduino, везде AtMega. Читать нужно не через строчку. На счет подстроечного резистора на датчике могли бы не упоминать, поскольку это тоже описано в статье, осталось лишь читать внимательнее. А о нерациональном использовании ресурсов не вы мне будете говорить) Устройство работает и выполняет свой функционал полностью, если вы бы сделали это на транзисторах, то делайте на здоровье, зачем статью своими комментариями засыпать. Я вижу вас так не устраивает это, что вы не упустите шанса выделить это.
Отредактирован 04.06.2016 14:42
Ответить
0
Vitemk #
Atmega входит в ардуину. И по статье сложно понять, что использовалась отдельная atmega.
Да про подстроечный резистор не заметил. Но тогда тем более, зачем нужен МК, раз вы о нем знали? Время устанавливается в интервале 5-200 сек. Явно больше чем вы установили в прошивке.
То что устройство работает, это хорошо.Но пускай оно работало бы и никто об этом не знал. Но вы написали статью, её будут читать и повторять новички. Хотя повторять её не следует,я уже писал почему.
Отредактирован 04.06.2016 14:45
Ответить
0

[Автор]
inhotep96 #
Благодарю за ваш отзыв, в следующий раз я обязательно учту конкретно ваши пожелания. Предлагаю на этом нашу дискуссию окончить) претензий нет, вопрос исчерпан
Ответить
0
Vitemk #
Да пора закончить. Но это не только мои пожелания, тут многие так считают.
Ответить
0

[Автор]
inhotep96 #
Как скажете.
Ответить
0

[Автор]
inhotep96 #
Использовалась AtMega328 для того, что бы следить за пройденным временем, между последним обнаруженным движением и последующим. Да и используя AtMeg'у можно легко программно менять интервал времени ожидания до последующего движения.
Ответить
0
BARS_ #
Да чего уж мелочиться, надо было уже одноплатный ПК ставить, а то один МК как-то несолидно для такого проекта. Я делал ровно тоже самое, НО у меня была плата PIR датчика, к ее выходу подключены пара транзисторов (биполяр + MOSFET) и кондер. Движение произошло, кондер зарядился и пока он заряжен свет горит. В итоге каждое движение его подзаряжало и время до выключения сбрасывалось. Сам датчик был настроен на минимальное время удержания импульса на выходе. Надо изменить время - меняй кондер. Куда быстрее и проще, чем лезть с программатором. Плюс там был фоторезистор и LM358 во включении компаратора. Когда было светло, с платы датчика снималось напряжение и он не работал. При этом настройка производилась прямо на месте установки обычными подстроечниками. Подключить в моем варианте второй датчик для гашения вообще не проблема. Если ходят только в одну сторону - это один транзистор, если в обе - одна микруха логики. А если уж так хотелось использовать МК, то для этого есть tiny на 8 ног, а не mega328, которая стоит дороже всей остальной комплектухи вместе взятой и используется на 0,0001% своих возможностей.
Ответить
0
1йНеизвестный #
Автору осталось прифигачить монитор
Ответить
0
Владимир #
Собрал без ардуино, все работает как надо.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Модуль измерения тока на ACS712 (30А)
Модуль измерения тока на ACS712 (30А)
Набор 4WD Kit Bluetooth Ветрогенератор
вверх