Содержание
Ардуино: датчик света на фоторезисторе
— Для питания платы и LED ленты используется блок питания на 12 Вольт с выходным напряжением 1 Ампер. При этом общее потребление электроэнергии, если включить все освещение сразу, не превышает 15 Ватт, что сравнимо с одной энергосберегающей лампочкой. Но при этом освещение на Arduino работает в санузле (туалет совмещен с ванной), в прихожей, в коридоре на 2 этаже, в гостиной (зона отдыха и зона кухни).
Для управления освещением на Arduino используется пульт от телевизора. Кроме того, что автоматическое включение подсветки в ванной и коридоре — это очень удобно, можно еще и сэкономить на оплате за электроэнергию. Также в скетче прописан цикл для создания эффекта присутствия, когда вы уезжаете из дома на несколько дней. Освещение включается и выключается в разных комнатах по заданному алгоритму.
Проектирование умного дома Arduino
Умного дома «на все случаи жизни» не существует. Поэтому, его проектирование начинается с определения поставленных задач, выбора и размещения основного узла Arduino, а затем и остальных элементов. На конечном этапе связывается и дорабатывается функционал, с помощью программирования.
На базе Ардуино можно создать множество проектов, а затем скомпоновать их в единую систему. Среди таких:
- Контроль влажности в цоколе.
- Автоматическое включение конвекторов, при падении температуры в доме ниже допустимой в двух возможных вариантах – при наличии и отсутствии человека в комнате.
- Включение освещения на улице в сумерки.
- Отправка сообщений об изменениях каждого детектируемого состояния.
В качестве примера можно рассмотреть проектирование автоматики одноэтажного дома с двумя комнатами, подвальным помещением под хранение овощей. В комплекс входит семь зон: прихожая, душевая комната, кухня, крыльцо, спальня, столовая, подвал.
При составлении пошагового плана проектирования учитываем следующее:
- Крыльцо. При приближении владельца к дому ночью, включится освещение. Также следует учесть обратное – выходя из дома ночью, тоже надо включать освещение.
- Прихожая. При детектировании движения и в сумерки включать свет. В темное время необходимо, чтобы загорался приглушенный свет лампочки.
- Подвал на улице. При приближении хозяина, в темное время суток, должна загораться лампа возле дверцы подвала. Открывая дверь, загорается свет внутри, и выключается в том случае, когда человек покидает здание. При выходе, включается освещение на крыльце, а по мере отхождения от подвального помещения, выключается возле дверцы. В подвале установлен контроль влажности и при достижении критической температуры, включаются несколько вентиляторов для улучшения циркуляции воздуха.
- Душевая комната. В ней установлен бойлер. Если человек присутствует в доме, бойлер включает нагрев воды. Автоматика выключается, когда максимальная температура нагрева достигнута. При входе в туалет, включается вытяжка и свет.
- Кухня. Включение основного освещения ручное. При длительном отсутствии хозяина дома на кухне, свет выключается автоматически. Во время приготовления еды автоматически включается вытяжка.
- Столовая. Управление светом происходит по аналогии с кухней. Присутствуя на кухне, есть возможность дать голосовую команду ассистенту умной колонки, чтобы тот запустил музыку.
- Спальная комната. Включение освещение происходит вручную. Но есть автоматическое выключение, если в комнате долгое время отсутствует человек. Дополнительно, нужно выключать освещение по хлопку.
По всему дому расставлены конвекторы. Необходим автоматический контроль поддерживаемой температуры в доме в двух режимах: когда человек есть в доме и вовремя его отсутствия. В первом варианте, температура должна опускаться не ниже 20 градусов и подниматься не выше 22. Во втором, температура дома должна опускаться не ниже 12 градусов.
Проект готов, осталось заняться его реализацией.
Плюсы и минусы системы
Прежде чем подбирать компоненты и модули для создания автоматики в умном доме, следует уделить внимание как достоинствам, так и недостаткам системы.
Преимущества умного дома Arduino:
- Использование компонентов других производителей с контроллером Arduino.
- Создание собственных программ умного дома, так как исходных код проекта открыт.
- Язык программирования простой, мануалов в сети для него много, разобраться сможет даже начинающий.
- Простой проект делается за один час практики с помощью дефолтных библиотек, разработанных для: считывания сигналов кнопок, вывода информации на ЖК-дисплеи или семи сегментные индикаторы и так далее.
- Запитать, посылать команды и сообщения, программировать, или перенести готовые программные решения в Arduino, можно с помощью USB-кабеля.
- Среда разработки Arduino IDE – это построенная на Java ппрограма, в которую входит: редактор кода, компилятор, передача прошивки в плату. По сравнению с современными решениями на 2020 год – это худшая среда разработки (в том виде, в котором она подается). Даже когда вы перейдете в другую среду разработки, IDE вам придется оставить для прошивки.
- Малое количество флэш-памяти для создания программ.
- Загрузчик нужно прошивать для каждого шилда микроконтроллера, чтобы закончить проект. Его размер – 2 Кб.
- Пустой проект занимает 466 байт на Arduino UNO и 666 байт в постоянной памяти платы Mega.
- Низкая частота процессора.
Как сделать управление освещением на Ардуино
Для этого проекта нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- IR приемник Ардуино;
- пульт ДУ;
- источник питания DC 12В;
- светодиодная лента;
- транзисторы и резисторы;
- PIR датчики движения;
- паяльник, термопистолет, провода и изолента.
Схема. Освещение в комнате на Arduino Nano
Для включения LED ленты используются транзисторы 2N2222, заказанные за 60 рублей за штуку на Алиэкспресс. Характеристика 2N2222 транзисторов: макcимальное напряжение коллектор-база — 60 Вольт, макcимальное напряжение коллектор-эмиттер — 30 Вольт, макcимальное напряжение эмиттер-база — 5 В, макcимальный постоянный ток коллектора — 0.8 Ампер, максимальная рассеиваемая мощность — 0,5 Ватт.
В схеме два светильника, подключены через транзистор к Pin7 и Pin8, установлены в коридоре на 1 и 2 этаже, включаются автоматически только в темноте и при срабатывании датчиков движения. Светильник, подключенный к Pin6, установлен в ванной и включается автоматически от Pir датчика движения при любом освещении. Три светильника на Pin10, Pin11 и Pin12 управляются от пульта через ИК приемник.
Скетч. Управление освещением на Ардуино
Скачать скетч для управления освещением целиком можно скачать здесь. Также в программе есть цикл для работы в режиме «имитация присутствия», включаемый с пульта ДУ. Светильники в разных комнатах включаются в разное время, имитируя присутствие хозяев в квартире или в доме. Это пригодится тем, кто хочет дополнительно защитить свое жилье от нежданных гостей в свое отсутствие.
#include // подключаем библиотеку для IR приемника IRrecv irrecv(A5); // указываем пин, к которому подключен IR приемник decode_results results; // вводим переменные для циклов while byte n = 5; byte m = 5; // вводим переменные для счетчиков unsigned long counttime0; unsigned long counttime1; unsigned long counttime2; unsigned long counttime3; // назначаем имена для портов #define PIR_V 2 // ванная комната #define PIR_K1 3 // прихожая в доме #define PIR_K2 4 // коридор на 2 этаже #define LED_V 6 // ванная комната #define LED_K1 7 // прихожая в доме #define LED_K2 8 // коридор на 2 этаже #define LED_Z 10 // светильник в комнате #define LED_Z1 11 // светильник в комнате #define LED_Z2 12 // светильник в комнате #define FOTO A0 // датчик освещенности #define IR A5 // IR — приемник void setup() < // запускаем прием инфракрасного сигнала irrecv.enableIRIn(); // запускаем серийный монитор порта Serial.begin(9600); // назначаем режим работы портов pinMode(PIR_V, INPUT); pinMode(PIR_K1, INPUT); pinMode(PIR_K2, INPUT); pinMode(LED_V, OUTPUT); pinMode(LED_K1, OUTPUT); pinMode(LED_K2, OUTPUT); pinMode(LED_Z, OUTPUT); pinMode(LED_Z1, OUTPUT); pinMode(LED_Z2, OUTPUT); pinMode(FOTO, INPUT); pinMode(IR, INPUT); // выключаем светильники digitalWrite(LED_Z, LOW); digitalWrite(LED_V, LOW); digitalWrite(LED_K1, LOW); digitalWrite(LED_K2, LOW); digitalWrite(LED_Z1, LOW); digitalWrite(LED_Z2, LOW); >
При длительном включении 2-х метровой LED ленты, транзисторы греются, поэтому используйте радиаторы для их охлаждения или используйте для управления освещением полевой MOSFET транзистор IRF530. У транзистора максимальное напряжение коллектор-база — 100 В, макcимальный ток коллектора 3 Ампера (при напряжении на затворе 5 В), максимальная рассеиваемая мощность — 88 Ватт.
Подключение
Для того, чтобы подключить наш фоторезистор к Ардуино Уно, необходимо будет вспомнить урок, посвященный аналого-цифровому преобразованию (АЦП). Ведь на выходе цепи фоторезистора мы получим некое напряжение, в диапазоне от 0 до 5 Вольт, которое нам потребуется превратить во вполне себе конкретное число, с которым уже будет работать программа микроконтроллера. Держа в уме, что в Ардуино Уно есть 6 аналоговых входов на ногах A0-A5, подключаем фоторезистор по следующей схеме:
Управляем освещением при помощи датчика освещенности
В этом примере наш блок управления светом будет управлять светом автоматически. Поможет ему в этом датчик освещенности, который будет передавать информацию на микроконтроллер о состоянии текущего показателя освещения. Если освещенность очень низкая, то микроконтроллер будет автоматически включать лампочку, подключенную к сети 220 вольт. Такую систему освещения еще называют адаптивной. Для примера сборки схемы с адаптивным освещением потребуется такое оборудование и ПО:
- Arduino UNO — одна из разновидностей плат ардуино;
- Блок реле SRD-12VDC-SL-C;
- Резистор на 10 кОм;
- Фоторезистор (выступает в роли датчика освещенности);
- Arduino IDE — программное обеспечение для загрузки микрокода в микроконтроллер Arduino;
- Лампочка, подключаемая к сети 220 вольт.
Первым делом соберем схему с помощью этих компонентов изображенную ниже.
Теперь откроем Arduino IDE и внесем в нее такой код: int s1 = A0; // Выбираем пин для подключения датчика освещенности «Фоторезистора» int s2; // Переменная, которая будет хранить информацию, получаемую с датчика void setup() < Serial.begin(9600); // Устанавливаем последовательный порт для связи >void loop() < // Считываем информацию с датчика: s2 = analogRead(s1); // Присваиваем значение переменой s2 Serial.println(s2); // Выводим информацию на «Монитор порта» с датчика освещенности delay(100); // Устанавливаем короткую задержку >Этот код не предназначен для включения нашей лампочки. С помощью этого кода мы проверим наш датчик освещенности. Поэтому загрузим этот код в Arduino UNO и откроем «Монитор порта».
В «Мониторе порта» видно, что мы получаем значения с фоторезистора, а это значит, что он нормально функционирует. Теперь пришло время загрузить основной код для автоматического управления светом. Для этого вставьте этот код в Arduino IDE: int s1 = A0; // Выбираем пин для подключения датчика освещенности «Фоторезистора» int s2; // Переменная, которая будет хранить информацию, получаемую с датчика void setup() < pinMode(2, OUTPUT); // Подключаем второй пин к реле SRD-12VDC-SL-C Serial.begin(9600); // Устанавливаем последовательный порт для связи >void loop() < // Считываем информацию с датчика: s2 = analogRead(s1);// Присваиваем значение переменой s2 Serial.println(s2); // Выводим информацию на «Монитор порта» с датчика освещенности if(s2 < 700) //Устанавливаем пороговое значение, при котором лампочка будет включаться digitalWrite(2,HIGH); //Включаем блок реле SRD-12VDC-SL-C else digitalWrite(2,LOW); // Если показания датчика больше порогового значения, то лампочка не включится или отключится delay(100); // Устанавливаем короткую задержку >Принцип работы этого скетча основан на условном операторе, при котором выполняется условие «s2 < 700». Это условие означает, что при значении датчика меньше 700 лампочка будет включаться, а если значение больше 700, то лампочка отключится. Из примера видно, как легко можно создать адаптивную систему автоматического освещения.
Сборка «умного дома»: пошаговая инструкция
Вот в какой последовательности необходимо действовать.
Подключение исполнительных и сенсорных устройств
Подключаем все компоненты согласно схеме.
Сборка системы в основном сводится к подключению исполнительных устройств к соответствующим контактам процессорной платы
Разработка программного кода
Пользователь пишет всю программу целиком в оболочке Arduino IDE, для чего последняя оснащена текстовым редактором, менеджером проектов, компилятором, препроцессором и средствами для заливки программного кода в микропроцессор платы Arduino. Разработаны версии IDE для операционных систем Mac OS X, Windows и Linux. Язык программирования — С++ с некоторыми упрощениями. Пользовательские программы для Arduino принято называть скетчами (sketch) или набросками, программа IDE сохраняет их в файлы с расширением «.ino».
Функцию main(), которая в С++ является обязательной, оболочка IDE создаёт автоматически, прописывая в ней ряд стандартных действий. Пользователь должен написать функции setup() (выполняется единоразово во время старта) и loop() (выполняется в бесконечном цикле). Обе эти функции для Arduino являются обязательными.
Заголовочные файлы стандартных библиотек вставлять в программу не нужно — IDE делает это автоматически. К пользовательским библиотекам это не относится — они должны быть указаны.
Добавление библиотек в «Менеджер проекта» IDE осуществляется несколько необычным способом. В виде исходных текстов, написанных на С++, они добавляются в особую папку в рабочем каталоге оболочки IDE. После этого названия этих библиотек появятся в соответствующем меню IDE. Те, что отметит пользователь, будут внесены в список компиляции.
В IDE предусмотрен минимум настроек, а возможность настройки компилятора отсутствует вовсе. Таким образом, начинающий программист застрахован от ошибок.
Вот пример самой простой программы, заставляющей каждые 2 секунды мигать подключённый к 13-му выводу платы светодиод:
Однако в настоящий момент перед пользователем далеко не всегда встаёт необходимость лично писать программу: в сети выложено множество готовых библиотек и скетчей (загляните сюда: https://arduino.ru/Reference). Имеется готовая программа и для системы, рассматриваемой в этом примере. Её нужно загрузить, распаковать и импортировать в IDE. Текст программы снабжён комментариями, поясняющими принцип её работы.
Все программы на Arduino работают по одному принципу: пользователь посылает запрос процессору, а тот загружает необходимый код на экран компьютера или смартфона
Когда пользователь нажимает в браузере или установленном на смартфоне приложении кнопку «Refresh» (Обновление), микроконтроллер Arduino осуществляет отсылку данных этому клиенту. С каждой из страниц, обозначенных как «/tempin», «/tempout», «/rain», «/window», «/alarm», поступает программный код, который и отображается на экране.
Установка клиентского приложения на смартфон (для ОС Android)
Для получения данных от системы «умный дом» в сети можно скачать готовое приложение.
Вот что необходимо сделать владельцу гаджета:
- Скачайте файл SmartHome.apk.
- Отправьте его на телефон.
- Открыв «Менеджер файлов», разместите этот файл.
- Щёлкните на нём и выберите «Установить» (должна быть о, позволяющая осуществлять установку программ вне сервиса Google Play).
Необходимо включить разрешение на установку программ не из PlayMarket, которое находится в разделе «Безопасность» настроек смартфона
С помощью этого приложения можно не только получать информацию от системы «умный дом», но и управлять ею — включать и отключать сигнализацию. Если она включена, то при срабатывании датчика движения приложению будет отправлено уведомление. Опрос системы Arduino на предмет срабатывания датчика движения приложение выполняет с периодичностью раз в минуту.
Активировав иконку «Настройки», можно отредактировать свой IP-адрес.
Настройка браузера на работу с «умным домом»
В адресной строке браузера следует ввести XXX.XXX.XXX.XXX/all, где «XXX.XXX.XXX.XXX» — ваш IP-адрес. После этого появится возможность получать данные от системы и осуществлять управление ею.
Представленный здесь программный код позволяет через браузер включать и выключать свет, тогда как в приложении для Android-смартфона такая функция не реализована.
Работа с роутером
Далее на маршрутизаторе необходимо открыть порт:
- открываем настройки маршрутизатора;
- прописываем адрес Arduino IP;
- открываем порт 80.
Необходимо прописать маршрут перехода на процессор Arduino по порту 80
Настройка учётной записи на noip.com
Этот этап не является обязательным, но он необходим, если вы хотите присвоить адресу доменное имя. Для этого надо зарегистрироваться на сайте https://www.noip.com/, перейти в раздел «Add host» и ввести IP-адрес системы.
После регистрации на сайте noip.com доступ к системе можно получать не только по IP-адресу, но и по полному доменному имени
https://toolprokat43.ru/svoimi-rukami/upravlenie-svetom-na-arduino-2.html