#9 Эксперимент “Умные жалюзи”
Как правило, человеку работающему в помещении, необходим свет. В утреннее у вечернее время суток, для освещения помещений, используют электрические лампы. В дневное время суток, хватает солнечного света, который поступает в помещение через окна. Тем не менее такой свет может мешать, например если окна выходят на восточную или западные стороны, солнце долгое время может светить напрямую в окна и работа людей, расположенных напротив этих окон становится не комфортной. Для того, чтобы избавиться от слепящего солнечного света используют жалюзи. Но солнце не стоит на месте и через какое-то время, в помещение с закрытыми жалюзи окнами становится темно, тогда приходится снова их открывать. А что, если сделать жалюзи чуть умнее и заставить их автоматически открываться и закрываться, в зависимости от интенсивности солнечного света, падающего на них?
В прошлом эксперименте мы разобрались – как работать с датчиком освещённости (фоторезистором) и реле, и даже собрали своё устройство “аварийного освещения”, которое включается автоматически, когда уровень внешней освещённости падает. Тем не менее, реле не сможет управлять нашими жалюзи, так даже если мы подключим к нему мотор, а сам мотор подсоединим к поворотной рукоятке жалюзи, то реле сможет лишь включать и выключать его, тем самым открывая и закрывая жалюзи полностью. И это не говоря о том, чтобы придумывать дополнительную систему, которая бы останавливала мотор в тот момент, когда жалюзи полностью открыты и полностью закрыты, иначе он просто сломает поворотную рукоятку. Вот бы раздобыть такой мотор, который мог бы поворачиваться на определённый угол и этот угол можно было бы задавать…
Такой мотор есть, он называется сервопривод!
Перед выполнением эксперимента прочтите:
СБОРКА УСТРОЙСТВА НА МАКЕТНОЙ ПЛАТЕ
Нам понадобятся следующие компоненты:
- Arduino Uno;
- USB-кабель для подключения к компьютеру;
- Беспаечная макетная плата;
- 1 сервопривод;
- 1 потенциометр;
- 1 фоторезистор;
- 1 резистор, номиналом 10 кОм;
- 9 соединительных проводов разных цветов.
Соберите устройство по следующей схеме:
Схема устройства на макетной плате |
Принципиальная схема устройства |
Обратите внимание:
- Сервопривод имеет 3 пина для подключения, вынесенные на длинных проводах. Самый тёмный провод (у нас – коричневый) обозначает пин, подключаемый к земле (-), красный провод – пин питания (+5 В), а жёлтый или оранжевый провод является сигнальным. Подключить сигнальный провод сервопривода можно к любому цифровому пину;
- Фоторезистор подключён по схеме, рассмотренной в прошлом занятии: с пина, идущего на землю через резистор номиналом 10 кОм, мы одновременно будем снимать сигнал, а вторую ногу фоторезистора подключаем к питанию (+5 В);
- Потенциометр также подключён по классической схеме;
- Сигнальные провода идущие от фоторезистора и потенциометра мы подключаем к цифровым пинам Arduino (в нашем случае это пины A0 и A1).
Потенциометр в схеме нужен, для того, чтобы мы научились преобразовывать аналоговый входящий сигнал в команды поворота для сервопривода. Позже, его можно будет исключить из схемы. Фоторезистор будет выполнять роль датчика света, который и будет давать сигнал о текущем уровне освещения и уже согласно этому сигналу, мы будем поворачивать сервопривод на определённый угол.
Сам сервопривод легко крепиться к поворотной рукоятке обычных жалюзи. Если же диаметры рукоятки и вала сервопривода не совпадают, можно воспользоваться переходником – куском резиновой или силиконовой трубки. Сервопривод, при этом, должен быть жёстко закреплён.
На этом занятии мы рассмотрим сам принцип работы системы, которая будет регулировать степень открытия жалюзи. Если же вы захотите собрать полностью действующую систему, то призовите на помощь родителей или продумайте способ крепления сервопривода самостоятельно.
ПРОГРАММИРОВАНИЕ
Для начала, попробуем повернуть сервопривод на какой-либо угол. Будем это делать с помощью блока [Серво], который находится в разделе [Общее оборудование]:
Давайте повернём наш сервопривод последовательно на угол: 0º, 90º и 180º, а затем снова вернём его в положение 0º:
Загрузите программу в Arduino и понаблюдайте за её работой. Далее, для того, чтобы сервопривод не отвлекал вас своим шумом, можно отключить USB-кабель Arduino от вашего компьютера.
Как видите, всё достаточно просто. Задержка после каждого из блоков поворота нужна для того, чтобы вал сервопривода успевал поворачиваться на нужный угол. Врему, которое необходимо сервоприводу для полного поворота зависит от типа и стоимости сервопривода. В нашем случае, время необходимое сервоприводу, для того, чтобы повернуть свой вал на 180º, составляет около 1 секунды. Т.е. если мы будем поворачивать сервопривод на 180º из положения 0º и поставим при этом недостаточное время задержки, то сервопривод просто не успеет сделать полный оборот.
Теперь давайте попробуем по управлять сервоприводом вручную. Делать мы это будем с помощью потенциометра. Составим алгоритм, который будет поворачивать вал сервопривода вслед за вращением ручки потенциометра в одну и другую сторону. Мы будем задавать угол сервопривода с помощью блока [Карта], которым мы уже пользовались ранее, т.к. нам необходимо преобразовать диапазон [0 … 1023] аналогового сигнала нашего потенциометра, в диапазон [0 … 180] угла поворота сервопривода:
Теперь настало время заняться настройкой рукоятки наших “умных” жалюзи. Как правило, разные производители делают немного разные жалюзи, которые могут различаться не только по внешнему виду, но и по техническим характеристикам, например углу поворота рукоятки открытия/закрытия жалюзи, т.е. тем углом, на который нужно повернуть ручку, чтобы жалюзи из полностью закрытого положения, перешли в полностью открытое. Этот угол может варьироваться от 90º до 180º. Мы же найдём его экспериментально. Для этого, нужно:
- выставить вал сервопривода в положение, соответствующее углу 90º;
- снять с сервопривода прикрученную к нему качалку;
- полностью открыть жалюзи и прикрепить к их ручке наш сервопривод;
- сам сервопривод следует жёстко закрепить на оконной раме, например с помощью двухстороннего скотча.
Теперь пришло время немного по программировать. В ходе того, как мы будем вращать сервопривод и наблюдать за закрытием жалюзи, мы должны ещё и знать – на какой угол повёрнут сервопривод на данный момент, для этого, угол поворота, который задаёт сервоприводу блок [Карта], мы продублируем в последовательный порт компьютера:
Вращая потенциометр, мы должны добиться полного закрытия наших жалюзи. Когда это произошло, можно открыть [Монитор последовательного порта] и посмотреть на значение угла, в котором на данный момент находится вал сервопривода. Например, вы можете увидеть следующие значения:
Теперь мы видим, что для того, чтобы полностью закрыть жалюзи, нам необходимо повернуть вал сервопривода на 173-174º, округлим до 170º. При этом, полностью открытые жалюзи соответствуют углу поворота сервопривода на 90º, а полностью закрытые углу 170º.
Наконец, нам осталось определить значения сигнала с нашего фоторезистора, при котором жалюзи будут полностью открыты, а при котором – полностью закрыты. Наша цель: закрывать жалюзи по мере роста значения сигнала на фоторезисторе, т.е. когда солнце начинает светить ярче, и наоборот: открывать их по мере того, как солнце будет уходить и яркость внешнего освещения будет падать. В прошлом эксперименте, мы уже определяли “дневные” и “ночные” значения фоторезистора, здесь можно поступить похожим образом. Для начала, немного изменим нашу программу, чтобы получать данные с фоторезистора в последовательный порт компьютера:
Загрузите программу в Arduino, запустите [Монитор последовательного порта] и направьте фоторезистор на солнце или яркую лампу. В мониторе порта вы увидите “светлые” значения сигнала с фоторезистора, которые соответствуют яркому солнцу:
Округлим полученные значения до [800]. Теперь нам нужно получить “тёмные” значения, для этого прикройте фоторезистор рукой и понаблюдайте за тем – как изменились значения в мониторе порта:
Эти значения можно округлить до [300]. Всё что нам осталось, автоматически поворачивать сервопривод от 90º до 170º, при изменении значений сигнала на фоторезисторе от [300] до [800]. Сделаем это:
Осталась одна небольшая, но очень важная деталь: в особо пасмурные дни, или ночью, значения сигнала с фоторезистора могут опускаться гораздо ниже [300], а в особо солнечные дни подниматься гораздо выше [800], при этом наш сервопривод будет пытаться поворачивать свой вал, получая команды углов меньших 90º и больших 170º. Это может вывести жалюзи из строя, поэтому нам просто необходимо жёстко задать крайние значения в 90º и 170º. Если мы это сделаем, то даже в случае сигнала с фоторезистора, ниже [300] и выше [800], сервопривод не будет поворачивать вал дальше, а остановится на значениях 90º и 170º. Для того, чтобы ограничить диапазон значений, используем блок [Constrain], который находится в разделе [математические операторы], и ограничим с его помощью диапазон значений углов поворота сервопривода:
Вот и всё. Наши “умные” жалюзи запрограммированы и готовы к использованию. Загрузите программу в Arduino и проверьте работоспособность устройства.
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ
Задание 1:
Несмотря на то, что наша система полностью автоматическая, ей не помешает оставить возможность ручной регулировки. Продумайте и составьте алгоритм, который позволит переключать управление жалюзи от автоматического (по сигналу с фоторезистора) к ручному (по сигналу с потенциометра) и обратно. Это можно реализовать как с помощью дополнительной кнопки, так и с помощью самого потенциометра. Например, если значения сигнала с потенциометра равны 0, то жалюзи переходят в автоматический режим, если значения больше 0, то угол поворота жалюзи регулируется потенциометром.
Задание 2*:
Объедините устройство “умных” жалюзи с устройством “автоматического” освещения и составьте алгоритм который, после полного открытия жалюзи автоматически зажигает “аварийное” освещение.
Задание 3*:
Добавьте к готовому устройству из задания 2 датчик звука и доработайте устройство таким образом, чтобы по 1-му хлопку жалюзи полностью закрывались, по 2-му хлопку полностью открывались, а по 3-му включалось “аварийное” освещение.
Для того, чтобы получить сертификат, подтверждающий успешное прохождение курса – выполняйте тесты в конце занятий. | Пройти проверочный тест |