Управление светом ардуино


Всем привет! Я — Артем Лужецкий и я буду вести серию статей посвященных «Умному дому» и IoT (англ. — Internet of Things, интернет вещей). Мы познакомимся с удивительными способами создания домашней сети из разнообразных устройств, которые будут работать либо автономно, либо при помощи человека. Ну что? Приступим!

1. Что нам нужно

Первая статья ознакомительная, я хочу, чтобы вы поняли, что я буду работать с самыми распространенными платами и модулями, чтобы большинство людей могло попробовать себя в разработке IoT.

Итак, для начала нам потребуются два микроконтроллера, которые мы будем использовать: Arduino UNO и ESP8266.

Arduino UNO

Управление светом ардуино

Я думаю не надо знакомить вас с этой платой, она очень популярна среди начинающих и поклонников DIY.  Скажу только то, что способности этой платы ограничены и UNO не может работать с протоколом https, не хватает вычислительной мощности микроконтроллера ATmega328P, поэтому, когда нам придется работать с микроконтроллером и протоколом https, то мы будем программировать ESP8266.

ESP8266


Управление светом ардуино

Я буду работать с Troyka-модулем ESP8266 от компании «Амперка», но можно спокойно использовать и обычный модуль ESP 8266, они практически не имеют отличий, главное при подключении посмотреть значение пинов и запомнить, что ESP работает по 3,3 вольтовой логике, поэтому нужно либо подключать через 5 вольт, но подключить в схему стабилизатор напряжения, либо просто использовать пин со подачей напряжения в 3,3 вольта.

Данный микроконтроллер не самый мощный в серии компании Espressif на общем рынке, но он один из самых дешевых и распространенных. Он будет основой наших IoT разработок.

Дополнительные детали

Также нам потребуется для создания всех опытов:

  1. Светодиоды
  2. Фоторезистор
  3. Термистор
  4. Ультразвуковой дальномер
  5. Реле
  6. Пьезодинамик
  7. Мини Сервопривод
  8. ИК — датчик
  9. ИК — пульт

Не нужно иметь все эти модули, чтобы работать с IoT, но для того, чтобы сделать все будущие проекты, нам со временем придется приобрести их все.

Программы и библиотеки

Первое — скачайте библиотеку, которая поможет вам намного проще работать в Arduino IDE, если вы используйте ESP8266 — http://wiki.amperka.ru/_media/iot-m:iot-m-libs.zip

Второе — для лучшего ознакомления с IoT нам потребуется веб-сайты, которые предоставят нам возможность отправлять на них данные.

  1. www.dweet.io
  2. maker.ifttt.com
  3. narodmon.ru
  4. и т.д.

Третье — также нам пригодятся различные приложения на андройд, чтобы с помощью телефона мы могли управлять умным домом.

  1. OpenHab
  2. Blink
  3. и т.д.

Подробно со всеми способами, программами и сайтами мы познакомимся уже в ближайших проектах.

2. Делаем «умную лампу»

Я уже заставил вас скучать? Сделаем самую простую умную лампу, которая будет включатся, если в комнате темно.

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

Если вы не уверены в том, что готовы работать с электричеством в 220 вольт, то используйте вместо фонаря обычный светодиод. В начале я взял свою старую лампу TLI – 204, такие есть практически в любом магазине (отключил заранее от сети).

Управление светом ардуино

У лампы два вида работы (светит/не светит), что хочу сделать я, я хочу увеличить ее функциональность, оставить возможность полностью включить и полностью выключить лампу.

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


Управление светом ардуино

Общая электрическая схема должны будет выглядеть так:

Управление светом ардуино

Если все сделать правильно, то на третьей позиции переключателя вы сможете, подавая с микроконтроллера ток на реле, включать лампу.

Управление светом ардуино

Подключим к ардуино фоторезистор. Схема выглядит так:

Управление светом ардуино

3. Код для «умной лампы»

Управление светом ардуино

Теперь напишем код, по которому будем передавать ток на реле, если в комнате будет темно.

#define SHINE 5 //ПИН НА ФОТОРЕЗИСТОРЕ  #define REL 13 //ПИН НА РЕЛЕ    void setup(){  	pinMode(SHINE, INPUT);  	pinMode(REL, OUTPUT);  	Serial.begin(9600);  }    void loop(){  	if (analogRead(SHINE)<600) // Если света в комнате мало, то включаем лампу  	{  		digitalWrite(REL, HIGH)  	}  	else // если много, то выключаем  	{  		digitalWrite(REL, LOW);  	}  	Serial.printIn(analogRead(SHINE));  	selay(500);  }

Когда будете все подключать, не забудьте убрать фотодатчик от ламы, иначе вас будет ждать световое представление. Все должно заработать.

В следующий раз мы попробуем усложнить код и добавить еще пару функций. До скорой встречи!

Автор — Артем Лужецкий

Источник: ArduinoPlus.ru

Общие сведения

В статье пойдет речь о простом устройстве, которое я сконструировал для автоматического управления дополнительной светодиодной подсветкой на кухне. Поводом для разработки послужил ремонт помещения и полная замена кухонной мебели. До этого на старой кухне у меня была подсветка рабочей зоны (рабочий стол и мойка) на светодиодной ленте (светодиоды типоразмера 5050) с отдельным выключателем. После полного обновления интерьера кухни (и демонтажа светодиодной подсветки) стала резко ощущаться нехватка этого локального освещения. С креплением и размещением светодиодной ленты на новой кухне вопросов не возникло, а вот именно из-за отсутствия места для незаметной установки выключателя я и решил собрать устройство автоматического управления, не требующего каких-либо действий от пользователя (Рисунок 1).


Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 1. Подсветка рабочей зоны на кухне с автоматическим управлением.

Мы рассмотрим два варианта устройства, выполняющих автоматическое управление локальным освещением рабочего стола (рабочей зоны) на кухне, но отличающихся элементной базой и дополнительным функционалом. Автоматическое управление освещением подразумевает плавное поэтапное включение и выключение подсветки на основе данных о текущей освещенности в помещении (и ее изменении) и наличии движения человека. Первый вариант устройства выполнен на Arduino Nano и после простой настройки работает полностью в автоматическом режиме (Рисунок 2). Второй вариант выполнен на Wi-Fi модуле типа NodeMCU (СнК ESP8266, ESP-12E) и, помимо выполнения основной функции, имеет дополнительные возможности онлайн контроля и управления. В последнем случае пользователь может со смартфона или из браузера включить/выключить подсветку, а также получать данные о текущем уровне освещенности и режиме работы контроллера.


Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 2. Контроллер управления подсветкой рабочей зоны на кухне
(версия на Arduino Nano).

В текущих версиях программного обеспечения контроллеров реализованы два основных режима работы: ночной и дневной. Основные режимы состоят из нескольких фиксированных по времени этапов, последовательно выполняющихся в зависимости от активности, которую фиксирует датчик движения, и резкого увеличения уровня освещенности помещения. Более подробно режимы работы рассмотрим в разделе «Скетч Arduino».

В общем случае оба варианта устройства имеют одинаковую структурную схему: микроконтроллер, датчик освещенности (фоторезистор), датчик движения, схема питания, силовой транзистор для управления светодиодами или, как в моем случае, светодиодной лентой. Отличия в схемотехнике двух устройств обусловлены спецификацией СнК ESP8266 (напряжение питания 3.3 В), а также расширенным функционалом устройства на NodeMCU. Идея создания второго варианта контроллера пришла после того, как я узнал об облачном сервисе myDevices Cayenne и оценил его работу на платформе Arduino, принимая во внимание поддержку чипа ESP8266 в интегрированной среде разработки Arduino IDE.

Принципиальная схема контроллера на Arduino


Изображенная на Рисунке 3 принципиальная схема контроллера подсветки очень проста. Оригинал схемы (и проект в целом) доступен пользователям в онлайн сервисе для проектирования электроники EasyEDA, при этом вы можете перенести ее в свой проект, например с целью усовершенствования или модернизации, или экспортировать в графический формат. Интерфейс EasyEDA русифицирован, интуитивно понятен и обеспечивает все необходимые разработчику инструменты, поэтому рисование схемы не вызвало каких-либо затруднений (Рисунок 4). Замечу, что в схеме использованы элементы из основной базы EasyEDA, а также из доступных пользовательских библиотек.

Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 3. Принципиальная схема контроллера подсветки на Arduino.

В качестве датчика освещенности используется миниатюрный фоторезистор VT93N1 номиналом 12 кОм. Резистор R3 с фоторезистором образуют делитель напряжения, который подключается к аналоговому входу A7. Это самый простой способ подключения фоторезистора к Arduino.

Для обнаружения присутствия человека в помещении я использовал ИК датчик движения Фотон-9 от охранной сигнализации. (Важный момент, не путайте с датчиками движения для управления осветительными приборами). Без изменения схемы и прошивки возможно применение любого аналогичного датчика движения с нормально замкнутыми контактами реле и напряжением питания 12 В. Датчик подключается к контроллеру посредством совмещенного разъема TB1-TB2 (клеммники с винтовым зажимом). Сигнальная линия датчика движения (клемма С, см. описание датчика [1]) подключается к порту D2, который настроен как вход с внутренним подтягивающим резистором. К клемме NC датчика подключена «земля». В нормальном состоянии контакты реле датчика движения (NC и С) замкнуты, следовательно, на входе D2 присутствует низкий логический уровень. При обнаружении движения контакты реле датчика размыкаются и, благодаря подтягивающему резистору, на входе D2 появляется высокий логический уровень.

Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 4. Разработка принципиальной схемы в онлайн редакторе EasyEDA.

Отмечу, что ИК датчики движения различных производителей имеют разную чувствительность (которая в большинстве случаев регулируется) и разные диаграммы направленности, поэтому на выбор места установки датчика придется потратить определенное время. В моем случае датчик расположен в верхнем углу напротив входной двери кухни (Рисунок 5) и, благодаря хорошей чувствительности, срабатывает уже при приближении человека к входу в помещение, отчего подсветка включается заблаговременно.

Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 5. Расположение контроллера подсветки, ИК датчика движения и источников
основного освещения в помещении.

Контакт 2 разъема TB2 подключен к свободному порту D3 Arduino и может использоваться для расширения функционала контроллера. Это же относится и к разъемам P2-P4.

Светодиоды или светодиодная лента с напряжением питания 12 В подключаются в разъем DC2. Микроконтроллер реализует ШИМ управление яркостью свечения светодиодов с помощью силового MOSFET NTD3055L (или аналогичного с логическим уровнем управления), затвор которого подключен к цифровому выходу Arduino D5.

Плата Arduino Nano содержит регулятор напряжения 5 В для питания микроконтроллера, поэтому необходимости в использовании дополнительной схемы питания нет, и напряжение 12 В с разъема DC1 поступает непосредственно на вход Vin платы Arduino. Напряжение 5 В с регулятора Arduino поступает на фоторезистор и на контакт 2 разъема P4.

Список использованных библиотечных компонентов, сформированный в редакторе EasyEDA, приведен в Таблице 1.

Таблица 1. Список использованных компонентов.

п/п
Обозначение
в схеме
Количество Корпус в EasyEDA Примечание
1 DC1, DC2 2 DC-5020 Разъем питания DC
2 U1 1 ARDUINO NANO  
3 R1, R2, R3 3 1206 Резисторы SMD 1206
4 Q1 1 DPAK-3 MOSFET
5 C1 1 CAP-D5.0XF2.0  
6 P2,P4 2 HDR-8X1/2.54 Штыревые разъемы
7 P3 1 HDR-1X2/2.54 Штыревой разъем
8 TB1, TB2 2 DG126-02P Клеммник винтовой
9 J1 1 M1X2 Штыревой разъем или
отверстия для установки
фоторезистора

Скетч Arduino

Исходный код программы микроконтроллера (скетч) прост в понимании и снабжен комментариями. Скетч предоставляется «как есть»; не исключена возможность его дальнейшей оптимизации или внедрения дополнительных функций и режимов работы контроллера. Здесь все зависит от вашей фантазии и желания.

Данные о текущей освещенности и ее изменении микроконтроллер получает с фоторезистора. Интегрированный АЦП преобразует значение напряжения на входе A7 в цифровой код, который без каких-либо преобразований в неизменном виде используется в программе. В последующем описании цифровой код АЦП для простоты будем считать некими условными единицами.

Как отмечалось в начале статьи, контроллер работает в ночном и дневном режимах. Это основные режимы работы, которые выполняются поэтапно:

  • Дневной режим работы активен при недостаточной освещенности помещения (15 – 110 единиц):
    • Этап 1:
      При обнаружении движения на 3 минуты плавно включается подсветка с яркостью 20%. Если по завершении этого этапа фиксируется движение, то происходит переход на этап 2. Если движение отсутствует, подсветка плавно выключается;
       
    • Этап 2:
      Яркость подсветки плавно увеличивается до 100%, начинается отсчет 7-минутного интервала. При каждой фиксации движения отсчет сбрасывается и вновь начинается с нуля;
       
    • Этап 3:
      По истечении 7-минутного интервала яркость плавно снижается до 20% и происходит переход на этап 1;
       
  • Ночной режим работы активен при низкой освещенности (менее 15 единиц):
    • Этап 1:
      При обнаружении движения на 3 минуты плавно включается подсветка с яркостью 10%. Если по завершении этого этапа фиксируется движение, то происходит переход на этап 2. Если движение отсутствует, подсветка плавно выключается;
       
    • Этап 2:
      Яркость подсветки плавно увеличивается до 50%, начинается отсчет 7-минутного интервала. При каждой фиксации движения отсчет сбрасывается и вновь начинается с нуля;
       
    • Этап 3:
      По истечении 7-минутного интервала яркость плавно снижается до нуля.

Описание и выбор соответствующих режимов работы в программе микроконтроллера я пояснил комментариями.

Резкое изменение уровня освещенности (включили основной свет) контроллер определяет по разности двух последовательных измерений освещенности, выполняемых каждую секунду. Для этого используется функция LightingChange_Det(). Если выявлено резкое увеличение освещенности (разность более 40 в коде АЦП), то контроллер, в соответствии с текущим основным режимом работы, перейдет на следующий этап, включив подсветку или увеличив ее яркость (Листинг 1).

Этой же функцией контролируется уровень освещения в помещении, и, если он стал достаточным (более 110 единиц), подсветка не включается, или уровень яркости плавно снижается до нуля. Обратите внимание, что в моем случае контроллер расположен на верхних шкафах кухонной мебели, а основное освещение выполнено точечными светодиодными светильниками. Поэтому фоторезистор не засвечивается ни искусственным освещением, ни естественным из окна, ни самой подсветкой рабочей зоны. Замечу, что при таком размещении фоторезистор более выражено реагирует на естественное освещение, нежели на искусственное (светодиодные лампы).

В программе микроконтроллера все временные задержки формируются без использования функции delay(). Используется конструкция на основе функции millis() (Листинг 2).

Проверка всех условий и установка необходимого режима работы выполняется с помощью операторов «if…else», непосредственное управление ШИМ выходом с учетом установленного режима работы выполняется в отдельной функции Mode_Set(), в которой используется конструкция «switch… case».

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

Исходный код (скетч) доступен для скачивания в разделе загрузок.

Печатная плата

Печатная плата контроллера также проектировалась в онлайн редакторе EasyEDA по принципиальной схеме. Размещение корпусов элементов, указанных в схеме, и их группировка в пределах контура будущей платы осуществляются автоматически по нажатию одной кнопки в редакторе. Корпуса элементов размещаются последовательно и компактно, но не накладываются друг на друга. Также как и создание принципиальных схем, проектирование печатной платы в EasyEDA не вызвало затруднений (Рисунок 6).

Проектирование печатной платы в EasyEDA.
Рисунок 6. Проектирование печатной платы в EasyEDA.

После ручного размещения элементов на плате можно выполнить автоматическую трассировку, либо рисовать печатные проводники в ручном режиме. Автотрассировщик очень прост в настройке, работает достаточно быстро и эффективно. Все инструменты, необходимые для ручного рисования и редактирования элементов печатной платы, переключения режимов отображения слоев, доступны в панели управления.

Печатная плата двухсторонняя, без межслойных переходов, с заливкой на верхнем и нижнем слое (GND, земля) и шелкографией на верхнем слое (Рисунок 7). Заказ на производство плат оформил непосредственно из редактора, при этом автоматически были сгенерированы Gerber-файлы моего проекта (архив доступен для скачивания в секции загрузок). Кроме того, в EasyEDA встроен очень полезный инструмент для просмотра Gerber-файлов – GerberViewer. Минимальный заказ (5 штук) был выполнен в течение трех рабочих дней и отправлен почтой.

Фото-вид печатной платы в редакторе EasyEDA.
Рисунок 7. Фото-вид печатной платы в редакторе EasyEDA.

Качество изготовления плат очень порадовало (Рисунок 8). Возможно, это не тот случай, чтобы судить о возможностях оборудования и производства ввиду достаточно широких печатных проводников и больших зазоров, но выглядят платы достойно. К качеству печатных проводников, шелкографии и металлизации отверстий претензий нет. Все размеры, в том числе диаметры отверстий, соответствуют проекту, выводы всех элементов устанавливались в отверстия без усилия.

Комплект печатных плат, изготовленных в EasyEDA
Комплект печатных плат, изготовленных в EasyEDA
Рисунок 8. Комплект печатных плат, изготовленных в EasyEDA.

Вид платы с установленными компонентами показан на Рисунке 9.

Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 9. Плата контроллера подсветки с установленными компонентами.

Источник: www.rlocman.ru

В этой статье я расскажу, как можно управлять освещением в комнате с помощью пульта дистанционного управления.

Необходимые компоненты

  • Arduino
  • Реле на 5 вольт
  • IR-приёмник TSOP1xxx
  • Любой подходящий пульт ДУ

Сборка
Собираем следующую схему:
Схема соединения для управления светом

Внимание! Если код кнопки будет считываться с ошибками, либо не считываться совсем, необходимо собрать схему с фильтром:
Управление светом ардуино

Распиновка IR-приёмника TSOP1xxx:

Распиновка TSOP1xxx

С реле возможны варианты. Обычное реле без обвязки подключать напрямую к Arduino нельзя! Обязательно необходимо использовать либо транзисторы, либо оптопару. Можно взять и готовую сборку, например такую:
Сдвоенное реле с обвязкой
Здесь два реле с обвязкой, можно подключать напрямую к микроконтроллеру (контакты IN1 и IN2). На контакты GND и VCC подаётся питание 5 вольт. Только необходимо иметь ввиду, что у некоторых таких сборок «логика наоборот». То есть при подаче сигнала реле отключается, при снятии — включается.
Также можно использовать и твердотельное реле, что я и сделал. Они хоть и дороже, но обладают рядом преимуществ: абсолютно бесшумная работа, очень малое энергопотребление, можно подключать напрямую к микроконтроллеру, широкий диапазон управляющего напряжения. Вот пример твердотельного реле для нагрузки переменного тока 24-380 В и управляющим напряжением от 3 до 32 вольт:
Твёрдотельное реле FOTEK SSR-25 DA
Пульт можно использовать практически любой. У меня был такой:
IR ПДУ

Для начала, нам необходимо узнать коды кнопок пульта, на которые мы хотим назначить управление освещением. Для этого заливаем в память Arduino следующий скетч:

  /*************************************************************  project: IR to Serial  author: Gladyshev Dmitriy  description: Выводит в консоль код нажатой кнопки пульта  IDE: Arduino 1.0.1  *************************************************************/    #include <IRremote.h>    int RECV_PIN = 3; //пин подключения IR приёмника    IRrecv irrecv(RECV_PIN);  decode_results results;    void setup()  {   Serial.begin(9600);   pinMode(7,OUTPUT);   irrecv.enableIRIn(); // Start the receiver  }    void loop()  {   if (irrecv.decode(&results))    {   Serial.println(results.value);   irrecv.resume(); // Receive the next value   }  }  

Теперь при нажатии кнопок на пульте, в консоли должны появляться числа. Это и будет код кнопки. Запишите необходимый код.
Теперь заливаем в Arduino другой скетч:

  /*************************************************************  project: IR Light v1.0  author: Gladyshev Dmitriy  description: Управление освещением с IR ПДУ  IDE: 1.0.1  2 марта 2013  *************************************************************/    #include <IRremote.h>    int RECV_PIN = 3; //пин подключения IR приёмника  int RELAY_PIN = 7; //пин подключения реле    IRrecv irrecv(RECV_PIN);  decode_results results;  bool LampState = false;    void setup()  {   pinMode(RELAY_PIN,OUTPUT);   digitalWrite(RELAY_PIN,LOW);   irrecv.enableIRIn(); // Включаем ресивер  }    void loop()  {   if (irrecv.decode(&results))    {  	 if (results.value == 16713975) //Код кнопки  	 {  		 LampState = !LampState;  		 if (LampState)  		 {  			 digitalWrite(RELAY_PIN,HIGH);  		 }  		 else  		 {  			 digitalWrite(RELAY_PIN,LOW);  		 }  	 }   irrecv.resume(); // Получаем следующее значение   }  }  

При необходимости изменяем номера пинов, к которым подключены IR-приёмник и реле:

  int RECV_PIN = 3; //пин подключения IR приёмника  int RELAY_PIN = 7; //пин подключения реле  

Также заменяем в следующей строчке код кнопки (на тот, который вы записали ранее):

  if (results.value == 16713975) //Код кнопки  

При включении питания лампа изначально не горит. При каждом нажатии кнопки на пульте будет включаться/выключаться.

Источник: 19dx.ru


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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.