#8 Эксперимент “Автоматическое освещение”
В наше время, трудно найти электронное устройство, которое бы работало по “чисто” аналоговому принципу. Цифровой сигнал, посылаемый микроконтроллерами управляет большей частью всех бытовых приборов, начиная от микроволновой печи и холодильника, заканчивая системой светофорного регулирования в городах. Обычно, микроконтроллеры применяются там, где не нужны большие вычислительные мощности и нет нужды подключать к управлению полноценный компьютер. Микроконтроллеры дёшевы, легки в программировании и настройке, а в случае выхода из строя его можно просто заменить. Тем не менее, большая часть электронных компонентов, с которыми мы работаем и будем работать в ходе наших экспериментов, существовала ещё до изобретения микроконтроллеров и управлялась с помощью аналоговых сигналов. Один из таких аналоговых датчиков – фоторезистор.
Фоторезистор, полупроводниковый элемент, который может изменять своё сопротивление в зависимости от интенсивности падающего на него света: чем больше света на него попадает, тем меньше становится его сопротивление. Уже очень давно эти фотоэлементы используют для автоматического включения уличного освещения. Когда наступает вечер, количество солнечного света, попадающего на фоторезистор, значительно уменьшается, а значит и возрастает его сопротивление. Это является сигналом для включения уличного освещения.
Сегодня, мы сделаем модель устройства, которое сможет включать и выключать освещение автоматически, т.е. повторим схему работы уличных фонарей. А управлять мы сможем не простым светодиодом, как в предыдущих занятиях, а любой другой нагрузкой, и даже вашей настольной лампой! Для этого нам понадобится ещё один электронный компонент – реле.
Перед выполнением эксперимента прочтите:
СБОРКА УСТРОЙСТВА НА МАКЕТНОЙ ПЛАТЕ
Нам понадобятся следующие компоненты:
- Arduino Uno;
- USB-кабель для подключения к компьютеру;
- Беспаечная макетная плата;
- 1 фоторезистор;
- 1 реле;
- 1 светодиод;
- 1 резистор, номиналом 220 Ом;
- 1 резистор, номиналом 10 кОм;
- 9 соединительных проводов разных цветов.
Соберите устройство по следующей схеме:
Схема устройства на макетной плате |
Принципиальная схема устройства |
Обратите внимание:
- Реле имеет по 3 контакта с одной и с другой стороны. Контакты снизу являются управляющими: крайний левый контакт – сигнальный, который мы будем использовать для управления переключением реле, средний контакт – питание (+5 В), а правый – земля (-). Верхние контакты реле служат для подключения внешней нагрузки (в нашем случае это светодиод). Средний контакт – общий, левый – нормально замкнутый (Normally Closed), а правый – нормально открытый (Normally Open). Таким образом, при выключенном реле, нагрузку подключённая к среднему и правому контактам, будет находится по умолчанию в обесточенном состоянии.
- В роли внешней нагрузки, мы будем использовать светодиод. Он подключен напрямую к контактам питания и земли через токоограничительный резистор, номиналом 220 Ом. При этом, провод идущий к питанию – разорван, а в разрыв подключено реле.
- Фоторезистор мы подключили по схеме делителя напряжения. Этот датчик не имеет полярности, поэтому можно не боятся ошибиться с ногами питания и земли. Контакт идущий на землю, подключён через резистор на 10 кОм, с этого-же контакта мы будем снимать аналоговый сигнал.
Наша задача – запрограммировать это устройство таким образом, чтобы при падения уровня освещённости до определённого значения, Arduino автоматически подавал сигнал на реле и замыкал нормально открытые контакты. При этом, светодиод, подключенный через данное реле, должен зажечься. Он будет выполнять роль “дежурного” освещения.
ПРОГРАММИРОВАНИЕ
Для того, чтобы правильно настроить наш фоторезистор, мы должны определить границу, выше которой значения датчика будут соответствовать достаточному освещению (будем называть этот состояние – “день”), а ниже которого будут соответствовать недостаточному освещению (“ночь”). Давайте примем количество света, падающее на датчик при включённом освещении в вашей комнате за “день”, а значения датчика, прикрытого рукой за “ночь”. Для того, чтобы увидеть значения “дневного” и ночного “сигналов”, будем посылать сигнал, полученный с датчика в последовательный порт вашего компьютера. Для этого будем использовать блок [в последовательный порт], который находится в разделе коммуникации. Помните, для того, чтобы прикрепить к данному блоку сигнал, полученный с аналогового порта, необходимо использовать [клей] нужной формы:
Давайте поместим полученную конструкцию в блок [Программа] и поставим задержку в 2000 мс, для того, чтобы значения сигнала, посылаемого в последовательный порт не “мелькали” перед глазами:
Загрузите данный алгоритм в Arduino, а затем запустите монитор последовательного порта. В ходе вывода значений с датчика, попробуйте прикрыть его рукой. Таким образом вы увидите разницу между “дневным” и “ночным” сигналами:
Итак, мы видим, что “дневной” сигнал принимает значение больше 800, а “ночной сигнал” опускается до значений ниже 300. Давайте определим границу в 300. Если сигнал полученный с фоторезистора опустится до значения 300 и ниже, то Arduino подаст сигнал на реле. Для того, чтобы включить реле (т.е. замкнуть его нормально открытые контакты), мы должны подать на пин, к которому подключено реле, высокий (HIGH) сигнал. В нашем случае:
Давайте воспользуемся блоком [если], чтобы задать условия для включения нашего реле. При этом, из программы можно убрать блоки, отвечающие за передачу данных с датчика в последовательный порт компьютера:
Загрузите полученный алгоритм в Arduino. Протестируйте его работу: попробуйте прикрыть фоторезистор рукой и вы услышите как реле “щёлкнет”, а светодиод зажжётся. При этом, на реле загорится индикатор, который показывает, что реле включено а его нормально открытые контакты – замкнуты. Теперь, когда светодиод включён, нужно составить алгоритм, который будет его отключать, после того, как наступит “день”. Дневные значения больше 800, как мы увидели из данных, выводимых в монитор последовательного порта, а значит и выключать наше “дежурное освещение” мы будем лишь тогда, когда данные с датчика станут равны или больше 800. Добавим в наш алгоритм ещё один блок если и зададим ему нужные параметры:
Обратите внимание: для того, чтобы выключить реле, необходимо подать на пин, к которому оно подключено, низкий сигнал. Загрузите программу в Arduino и протестируйте её работу. Теперь наш светодиод должен включатся и выключаться так, как это и было задумано.
Важное замечание: в вашей комнате освещение может быть несколько иным, а значит и значения “дня” и “ночи” будут различаться. Для того, чтобы устройство работало корректно, вы должны программировать его, используя данные, полученные именно с вашего фоторезистора. Т.е. определять значения “дня” и “ночи” самостоятельно.
Теперь, обратите внимание на получившуюся “разбежку” между дневным и “ночным” сигналами – [800] и [300]. разница между ними составляет целых 500 единиц. Почему не задали чёткий порог чувствительности, как это было с экспериментом “Пожарный извещатель”? Всё дело в том, что внешнее освещение никогда не меняется резко и даже “гуляет” разные стороны. Нередки случаи, когда значение, получаемые с фоторезистора будут “балансировать” на грани порога чувствительности и тогда, наше “дежурное освещение” начнёт то включаться, то выключаться. Такая разбежка между данными значениями, позволит избежать таких ситуаций, и освещение, включившееся по “ночному” сигналу, будет работать вплоть до того момента, пока в помещении не станет гораздо светлее, и лишь тогда “дежурное освещение” перестанет работать.
Тем не менее, как уже было сказано: для каждого помещения свои значения “дня” и “ночи” и поэтому, удобнее завести переменную, которая будет хранить некое усреднённое значение между значениями “дня” и “ночи” и привязать включение и выключение света к ней. Давайте заведём такую переменную и дадим ей имя “lightness” (освещённость). При этом за “дневные” значения примем число равное [lightness + 250], а за ночные – [lightness – 250]. В нашем алгоритме, это будет выглядеть так:
По факту, в работе нашего устройства ничего не поменялось, но зато теперь его можно быстро настроить для освещения любой комнаты просто изменяя переменную [lightness]. Среди программистов принято выносить в переменные все данные такого типа, а далее работать уже с переменными, а не с “чистыми” значениями.
Важно! Наше реле может работать не только с низковольтной нагрузкой вроде светодиода. Реле можно включать в разрыв и высоковольтных электрических приборов для того, чтобы управлять ими с помощью сигналов Arduino. Тем не менее, работать с высоковольтными нагрузками очень опасно, поэтому, если вы захотите сделать настоящее “аварийное” освещение своей комнаты, рекомендуется использовать низковольтные источники света, например карманный фонарик.
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ
Задание 1:
Добавьте в схему пьезодинамик и измените алгоритмтаким образом, чтобы он подавал короткий сигнал, длительностью 0,5 секунд на частоте 440 Гц каждый раз, когда наше “аварийное освещение” включается и выключается.
Задание 2*:
Добавьте в схему нашего устройства потенциометр и измените алгоритм таким образом, чтобы появилась возможность изменять значения переменной [lightness] с помощью него в пределах [250 … 750]. Таким образом, вы сможете использовать ваше устройство “дежурного” освещения в любой комнате не изменяя его алгоритма работы. Нужно будет просто настроить значение переменной [lightness] с помощью потенциометра для каждой конкретной комнаты.
Дополнительное задание:
Вернитесь к эксперименту “Умный светильник” и переделайте его таким образом, чтобы вы смогли включать и выключать нагрузку, подключенную к реле “по хлопку”.
Для того, чтобы получить сертификат, подтверждающий успешное прохождение курса – выполняйте тесты в конце занятий. | Пройти проверочный тест |