[sape_tizer]
Ср. Май 31st, 2023

Что и как строить на земельном участке или обо всем понемногу

Все о инструментах, строительстве, работах, АРДУИНО, электрика, электроника и многое другое

Автомат освещения на Ардуино ч.2

В первой части мы рассмотрели основные принципы работы, написали УЖЕ работающий скетч и даже немного отладили его. Т.е. уже получили готовое и работающее устройство! Пришло время его полностью собрать в корпус и установить данный автомат на нужное место. Итак, для того чтобы полностью дособирать автомат освещения сначала нужно набросать схему:

Автомат освещения, вторая версия

В данной схеме в отличии от первой есть некоторые существенные изменения которые уже несколько улучшают функционал автомата и позволяют более экономно использовать данное устройство. Начнем с питания. В данной схеме организован так называемый «байпасс» освещения. Т.е. при отключении питания самого устройства контакты переключателя S1 перемыкают контакты реле KY-019, таким образом питание подается на лампы напрямую, как будто автомата просто нет. Это в некоторых случаях может пригодится- прямое включение освещения. В другом положении переключателя S1 питание подается на блок питания (здесь можно поставить зарядное устройство от телефона на 5В) и, собственно, на коммутирующее реле. Это что касается питающей цепи. Теперь посмотрим на управляющие контакты. Как видно по схеме добавились детали, которые завазяны на порты А1 и А2. Кнопки так и остались на порту А0. По схеме видно что к порту А0 (кнопки управления) подключен параллельно конденсатор емкостью 100nF. Здесь еще лучше поставить штуки 2-3 конденсаторов с разной емкостью от 0,01 мкФ до 0,1 мкФ. Эти конденсаторы как бы «стравливают» паразитные сигналы (наводки) с сигнального провода на землю. На сигнальном проводе конечно стоит подтягивающее сопротивление R2, которое частично режет паразитные сигналы, но конденсаторы позволяют срезать всплески и импульсы гораздо эффективнее нежели сопротивление. Разная же емкость нужна для импульсов разной длительности, чем меньше импульс тем меньше емкость гасящего конденсатора. При длинных линиях управления, т.е. линиях идущих до кнопок управления SB2, SB3 (их можно ставить сколько угодно), количество наводок увеличивается чуть ли не в арифметической прогрессии. Вот именно для подавления наводок и нужны эти конденсаторы. При нажатии на кнопки конденсаторы заряжаются практически моментально из за их малой емкости и разряжаются так же через сопротивление R2. Т.е. на схему они имеют минимальное влияние но эффективно режут паразитные наводки.

На выходе устройства D13 (13 цифровой выход)стоит транзистор Т1 к которому подключены светодиоды LED1, LED 2 через токоограничивающие резисторы R2, R7. Светодиодов можно ставить сколько угодно, лишь бы выдержал транзистор. Т.е. при токе светодиода, например 20 мА, на транзистор с током коллектора 300 мА можно поставить 300/20= 15 светодиодов. Следует учитывать что при таком токе транзистор уже начнет греться. Поэтому, если хотите включить столько светодиодов, после транзистора Т1 поставьте еще один транзистор, более мощный, который выдержит необходимый ток… Кроме того, при использовании RG или RGB светодиодов лучше подключить их через транзисторы через ШИМ- выводы Ардуино и выводить в ШИМ порты случайные значения. Будет красиво все переливаться только… зачем все это надо? Тут уж вам решать что вам нужно- красивость или функционал хотя, в нашем случае, одно другому не мешает. Поэтому оставил один вывод- цифровой 13 для индикации состояния. Т.е. пока не нажата кнопка- горит светодиод, он же указывает где находится кнопка для включения. Если включили коротким нажатием- идет выдержка 180 секунд, включается свет (я поставил себе 120 секунд, мне этого за глаза хватает), после чего свет опять выключается и светодиод опять загорается. При длительном нажатии > 1 сек, светодиод продолжает гореть но и свет горит до тех пор пока повторно не будет нажата любая из кнопок. Логика понятна еще из предыдущего урока НО. Теперь я еще добавил фоторезистор из ЭТОГО УРОКА и переменный резистор. Для чего они нужны разберем подробнее логику.

Во первых пока светло на улице- включать автомат совершенно не требуется, освещения вполне хватает (это опять же зависит от степени освещенности требуемой площади, т.е. если освещения не хватает даже днем то просто используем скетч из ЭТОГО урока) то вполне логично сделать небольшое дополнение на 2 постоянных резисторах, переменном и фоторезиторе. Итак что мы получаем и что будем обрабатывать. Ну во первых вы заметили что переменный резистор R4 включен к шине +5В через резистор R5 100 Ом. Это сделано для того чтобы не сжечь порт при повышенном напряжении (блок питания может дать больше 5,3В и аналоговый вход просто сгорит). Фоторезистор просто подключаем как было описано ВЫШЕ. Теперь сравниваем данные с портов А1 и А2 и, если напряжение на порту А2 (датчик освещенности) ниже чем установлено резистором R4 на порту А1 то тогда выходит что уже сильно потемнело и можно включать датчик освещенности в работу. Но пока на порту А2 напряжение выше чем на А1 то автомат просто игнорирует нажатия кнопок, т.е. нажимай, не нажимай- автомат работать не будет пока на улице не потемнеет. Уровень срабатывания выставляется переменным резистором R4. Теперь давайте опишем это в программе. Для упрощения кода давайте обработку кнопок выведем в отдельную функцию, там мы больше ничего менять не будем но читаемость программы от этого только возрастет. Программа примет следующий вид. Для этого рядом с монитором порта

Сокращенный вид скетча Ардуино
Сокращенный вид скетча
Подключаемый код к программе Ардуино
Добавочный код Ардуино

Для этого ниже монитора порта нужно нажать треугольник с вершиной вниз, затем ввести название вкладки (я назвал press.h, что значит нажатие кнопок), затем просто включаем этот код командой include «press.h»; Теперь весь код с вкладки press.h просто вписывается вместо оператора include «press.h»; Количество строк программы сразу стало меньше аж на 22 строки! При больших проектах очень удобно инклюдить (именно так называется операция с оператором include (каламбур получился!)) куски кода. В главном теле остаются буквально одни условия и ссылки на страницы с кодами!

Теперь давайте облагородим еще автоперезапуск самой Ардуины. Если вы не знаете, то такой классный микроконтроллер как ATMega осень слабо защищен от переполнения. Особенно это касается с временными функциями и выглядит так что при отсчете времени оператором millis() примерно через 50 дней происходит переполнение данными этого оператора и программа просто подвисает. Хотя в документации и написано что оператор сбрасывается в ноль но в моих проектах такого еще не происходило. Поэтому в программах, во время бездействия устройства просто необходимо выполнять принудительный сброс и обнуление регистров Ардуины. Есть несколько вариантов сброса но самой простой с моей точки зрения такой. Перед секцией void setup() вводим строку void(* resetFunc) (void) = 0; // объявляем функцию reset для сброса

Можете просто скопировать её. Затем в конце программы пишем такое условие:

if (millis() >= 4294950000 && bSwitch == 0) { // цикл автосброса Ардуины resetFunc(); //вызываем reset }

Объясню подробнее. Оператор millis() имеет тип unsigned long и принимает значения от 0 до 4294967295. Если достигли значения 4294950000 и устройство не включило освещение (вдруг как раз в этот момент вы зашли домой а тут оп- свет погас) то принудительно перезагружаем Ардуино. Возможно с современными прошивками контроллера данного фокуса не произойдет но лучше все таки подстраховаться.

Теперь наш автомат стал более причесанным что ли и обзавелся полезной функцией перезагрузки. Начинаем добавлять условия на срабатывание фоторезистора и регулятора. Как и договорились нужно перед процедурой нажатия кнопок вставить условие на сравнение данных с портов А1 и А2. Просто вписываем следующее:

if (analogRead(A1) >= analogRead(A2) ) {…. и не забываем закрыть обратную скобочку.

Это значит что если значение с порта А1 (ползунок резистора) больше или равно значению с порта А2 (фоторезистор) то теперь есть разрешение на обработку нажатий кнопок. Я замечу- разрешение на обработку кнопок. На кнопки вы в любом случае можете нажимать но только пока не выполнится условие- работать они не будут и таким образом не будет зажигаться свет. Уровень освещенности, при котором начнется срабатывание автомата, выставляется вручную переменным резистором. Архив со скетчем можете скачать AutoLight_v2

В данном устройстве остался один недостаток- слишком дорогая цена для повторения. На следующей странице мы исправим этот недостаток и постараемся удешевить наше устройство + научимся разбирать схемотехнику контроллеров, выбирать нужный и программировать их.

Назад на первую версию

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