Оглавление:

NexArdu: Интеллектуальное управление освещением: 5 шагов
NexArdu: Интеллектуальное управление освещением: 5 шагов

Видео: NexArdu: Интеллектуальное управление освещением: 5 шагов

Видео: NexArdu: Интеллектуальное управление освещением: 5 шагов
Видео: Séance ordinaire - 5 juillet 2021 2024, Июль
Anonim
NexArdu: интеллектуальное управление освещением
NexArdu: интеллектуальное управление освещением

Обновлять

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

Эскиз для интеллектуального управления домашним освещением с помощью беспроводных устройств типа X10 с частотой 433,92 МГц (также называемых 433 МГц), например Nexa.

Фон

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

Задача

В этом руководстве используются возможности устройств с беспроводным управлением, таких как System Nexa, работающих на частоте 433,92 МГц. Здесь мы должны указать:

  1. Автоматизированное управление освещением
  2. Веб-контроль

Веб-контроль. Внутренний и внешний веб-сервер

Внутренний сервер использует возможности экрана Arduino Ethernet для создания веб-сервера. Веб-сервер будет посещать вызовы веб-клиента для проверки и взаимодействия с Arduino. Это простое решение с ограниченной функциональностью; возможности улучшения кода веб-сервера ограничены памятью Arduino. Внешний сервер требует настройки внешнего веб-сервера PHP. Эта настройка более сложна и не поддерживается в этом руководстве, однако код / страница PHP для проверки и управления Arduino предоставляется с базовыми функциями. Возможности улучшения веб-сервера в этом случае ограничиваются внешним веб-сервером.

Ведомость материалов

Чтобы в полной мере использовать возможности этого скетча, вам необходимо:

  1. Arduino Uno (проверено на R3)
  2. Щит Arduino Ethernet
  3. Комплект Nexa или аналогичный, работающий на частоте 433,92 МГц
  4. Датчик PIR (пассивный инфракрасный), работающий на частоте 433,92 МГц
  5. Резистор 10 кОм
  6. LDR
  7. RTC DS3231 (только версия для внешнего сервера)
  8. Передатчик 433,92 МГц: XY-FST
  9. Приемник 433,92 МГц: MX-JS-05V

Рекомендуемый минимум:

  1. Arduino Uno (проверено на R3)
  2. Комплект Nexa или аналогичный, работающий на частоте 433,92 МГц
  3. Резистор 10 кОм
  4. LDR
  5. Передатчик 433,92 МГц: XY-FST

(Отсутствие экрана Ethernet требует внесения изменений в эскиз, не представленных в данной инструкции)

Логика Nexa. Короткое описание

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

  • SenderID: ID пульта дистанционного управления
  • ButtonID: номер пары кнопок (вкл / выкл). Начинается с числа 0
  • Группа: да / нет (они же кнопки "Все выключено / включено")
  • Команда: вкл / выкл

Инструктируемые шаги. Примечание

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

Шаг # 1: Схема

Шаг # 2: Nexardu с внутренним веб-сервером (с NTP)

Шаг # 3: Nexardu с внешним сервером

Шаг № 4: Ценная информация

Шаг 1. Схема…

Схема…
Схема…

Подключите различные компоненты, как показано на рисунке.

Вывод No8 Arduino на вывод данных на модуле RX (приемник) Вывод No2 Arduino на вывод данных на модуле RX (приемник) Вывод No7 Arduino на вывод данных на модуле TX (отправителя) Вывод Arduino A0 на LDR

Конфигурация RTC. Требуется только в конфигурации внешнего сервера. Вывод Arduino A4 на вывод SDA на модуле RTC Вывод Arduino A5 на вывод SCL на модуле RTC.

Шаг 2: Nexardu с внутренним веб-сервером (с NTP)

Библиотеки

Этот код использует множество библиотек. Большинство из них можно найти с помощью «Менеджера библиотек» IDE Arduino. Если вы не найдете перечисленную библиотеку, пожалуйста, погуглите.

Wire.hSPI.h - Требуется для экрана Ethernet NexaCtrl.h - Контроллер устройства Nexa Ethernet.h - Для включения и использования экрана Ethernet RCSwitch.h - Требуется для PIRTime.h - Требуется для RTCTimeAlarms.h - Управление сигналами времени EthernetUdp.h - Требуется для NTP-клиент

Эскиз

В приведенном ниже коде используется возможность использования платы Arduino UNO не только как средство управления устройствами Nexa, но и с внутренним веб-сервером. Следует добавить, что модуль RTC (часы реального времени) автоматически настраивается через NTP (протокол сетевого времени).

Перед загрузкой кода в Arduino вам может потребоваться настроить следующее:

  • SenderId: сначала вам нужно обнюхать SenderId, см. Ниже
  • PIR_id: сначала вам нужно обнюхать SenderId, см. Ниже
  • IP-адрес LAN: установите IP-адрес вашей локальной сети для вашего Ethernet Arduino Shield. Значение по умолчанию: 192.168.1.99
  • NTP-сервер: не обязательно, но было бы хорошо погуглить для NTP-серверов поблизости. Значение по умолчанию: 79.136.86.176.
  • Код настроен на часовой пояс CET. При необходимости измените это значение на свой часовой пояс, чтобы отображалось правильное время (NTP).

Обнюхивание кодов Nexa

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

Найдите ниже скетч Nexa_OK_3_RX.ino, который на момент написания совместим с устройствами Nexa NEYCT-705 и PET-910.

Следующие шаги:

  1. Подключите ресивер Nexa к пульту дистанционного управления.
  2. Загрузите Nexa_OK_3_RX.ino в Arduino и откройте «Serial Monitor».
  3. Нажмите кнопку пульта дистанционного управления, которая управляет приемником Nexa.
  4. Обратите внимание на «RemoteID» и «ButtonID».
  5. Установите эти числа под SenderID и ButtonID в объявлении переменной в предыдущем скетче.

Чтобы прочитать Id PIR, просто используйте тот же скетч (Nexa_OK_3_RX.ino) и прочтите значение на «Serial Monitor», когда PIR обнаруживает движение.

Шаг 3: Nexardu с внешним сервером

Библиотеки

Этот код использует множество библиотек. Большинство из них можно найти с помощью «Менеджера библиотек» IDE Arduino. Если вы не найдете библиотеку в списке, пожалуйста, погуглите.

Wire.hRTClib.h - это библиотека с https://github.com/MrAlvin/RTClibSPI.h - Требуется для экрана Ethernet ShieldNexaCtrl.h - Контроллер устройства NexaEthernet.h - Для включения и использования интерфейса Ethernet shieldRCSwitch.h - Требуется для PIRTime.h - Требуется для RTCTimeAlarms.h - Управление сигналами времени aREST.h - для служб RESTful API, используемых внешним серверомir / wdt.h - Обработка сторожевого таймера

Эскиз

В приведенном ниже эскизе представлен другой вариант того же самого, на этот раз расширяющий возможности, которые может предоставить внешний веб-сервер. Как уже упоминалось во введении, Внешний сервер требует настройки внешнего веб-сервера PHP. Эта настройка более сложна и не поддерживается в этом руководстве, однако код / страница PHP для проверки и управления Arduino предоставляется с базовыми функциями.

Перед загрузкой кода в Arduino вам может потребоваться настроить следующее:

  • SenderId: сначала вам нужно обнюхать SenderId, см. Обнаружение кодов Nexa на предыдущем шаге.
  • PIR_id: сначала вам нужно обнюхать SenderId, см. Обнюхивание кодов Nexa на предыдущем шаге
  • IP-адрес LAN: установите IP-адрес вашей локальной сети на свой Ethernet Arduino Shield. Значение по умолчанию: 192.168.1.99

Для процедуры сниффинга кода Nexa, пожалуйста, обратитесь к Шагу №1.

Дополнительный файл

Загрузите прикрепленный файл nexardu4.txt на внешний сервер PHP и переименуйте его в nexardu4.php

Время RTC установлено

Чтобы установить время / дату на RTC, я использую скетч SetTime, который поставляется вместе с библиотекой DS1307RTC.

Шаг 4: ценная информация

Ценная информация
Ценная информация
Ценная информация
Ценная информация

Полезно знать поведение

  1. Когда Arduino находится в режиме «Автоматическое управление освещением», он может проходить через четыре различных состояния в зависимости от окружающего освещения и времени суток:

    1. Без сна: Ардуино ждет наступления ночи.
    2. Активно: наступила ночь, и Ардуино включил свет.
    3. Сонный: свет включен, но время его выключить. Он начинается в «time_to_turn_off - PIR_time», то есть, если time_to_turn_off установлен на 22:30, а PIR_time установлен на 20 минут, то Arduino войдет в состояние сна в 22:10.
    4. Бездействующий: ночь проходит, Ардуино выключил свет, и Ардуино ждет, когда рассвет проснется.
  2. Arduino всегда слушает сигналы от пультов дистанционного управления. Это дает возможность отображать состояние освещения (включено / выключено) в Интернете при использовании дистанционного управления.
  3. Пока Arduino находится в бодрствующем состоянии, он все время пытается выключить свет, поэтому сигналы включения, отправляемые устройством remonte для включения света, могут быть захвачены Arduino. Если это произойдет, Arduino снова попытается выключить свет.
  4. Пока Arduino активен, он все время пытается включить свет, поэтому сигналы OFF, отправляемые пультом дистанционного управления для выключения света, могут быть захвачены Arduino. Если это произойдет, Arduino снова попытается включить свет.
  5. В сонном состоянии свет можно включать / выключать с помощью пульта дистанционного управления. Ардуино не будет противодействовать.
  6. В спящем состоянии обратный отсчет PIR начнет сбрасываться с «time_to_turn_off - PIR_time», и поэтому time_to_turn_off увеличивается на 20 минут каждый раз, когда PIR обнаруживает движение. "Обнаружен ИК-сигнал!" сообщение будет отображаться в веб-браузере, когда это произойдет.
  7. Пока Arduino не работает, свет можно включать и выключать с помощью пульта дистанционного управления. Ардуино не будет противодействовать.
  8. Сброс или цикл питания Arduino переведет его в активный режим. Это означает, что если Arduino был сброшен после time_turn_off, то Arduino включит свет. Чтобы избежать этого, Arduino необходимо перевести в ручной режим (отметьте «Автоматическое управление освещением») и подождать до утра, чтобы вернуть его в «Автоматическое управление освещением».
  9. Как упоминалось выше, Arduino ждет, пока рассвет снова станет активным. Из-за этого систему можно обмануть, направив достаточно сильный свет на датчик освещенности, который должен превысить порог «минимальной яркости». Если это произойдет, Arduino перейдет в активное состояние.
  10. Значение Tolerance имеет большое значение, чтобы избежать колебания системы вокруг порогового значения Minimum Luminosity. Светодиодные фонари из-за их мерцания и высокой чувствительности могут быть причиной взмахов. При возникновении этой проблемы увеличьте значение допуска. Я использую значение 7.

Полезно знать о коде

  1. Как видите, код очень большой и использует значительное количество библиотек. Это снижает объем свободной памяти, необходимой для кучи. Я замечал нестабильное поведение в прошлом, когда система останавливалась, особенно после веб-вызовов. Поэтому самая большая проблема, с которой я столкнулся, заключалась в том, чтобы ограничить его размер и использование различных переменных, чтобы сделать систему стабильной.
  2. Код, который использует внутренний сервер, который я использовал дома, работает без проблем с февраля 2016 года.
  3. Я приложил немало усилий, чтобы обогатить код пояснениями. Воспользуйтесь этим, чтобы поиграть с различными параметрами, такими как количество отправок кода Nexa за пакет, время синхронизации NTP и т. Д.
  4. Код не поддерживает летнее время. Когда это применимо, это необходимо отрегулировать через веб-браузер.

Некоторые моменты для рассмотрения

  1. Добавьте антенны к радиочастотным (RF) модулям TX и RX. Это сэкономит вам время, жалуясь на два основных момента: устойчивость и диапазон радиочастотного сигнала. Я использую провод 50 Ом длиной 17,28 см (6,80 дюйма).
  2. Это устройство может работать с другими системами домашней автоматизации, например, с Proove. Одно из многих условий, которые необходимо выполнить, - заставить их работать на частоте 433,92 МГц.
  3. Большая головная боль Arduino - это иметь дело с библиотеками, которые могут со временем обновляться и внезапно перестать быть совместимыми с вашим «старым» скетчем; та же проблема может возникнуть при обновлении вашей Arduino IDE. Помните, что это может быть наш случай здесь - да, моя проблема тоже.
  4. Несколько одновременно работающих веб-клиентов с разными световыми режимами создают «мигающее» состояние.

Скриншот

В карусели изображений выше вы найдете снимок экрана веб-страницы, отображаемой при вызове Arduino через веб-браузер. Учитывая IP-конфигурацию кода по умолчанию, URL-адрес будет

Одним из аспектов, который может быть улучшен, является расположение кнопки «Отправить», поскольку она влияет на все поля ввода, а не только на «Легкое автоматическое управление», как можно было бы подумать. Другими словами, если вы хотите изменить любое из возможных значений, вам всегда нужно нажимать кнопку «отправить».

Подробная / расширенная документация

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

Arduino_NexaControl_IS.pdf предоставляет документацию по решению внутреннего сервера.

Arduino_NexaControl_ES.pdf предоставляет документацию по решению внешнего сервера.

Внешние ссылки

Nexa System (шведский)

Шаг 5: Готово

Законченный!
Законченный!

Вот и все, готово и действует!

Корпус Arduino Uno можно найти в Thingiverse как «Arduino Uno Rev3 с корпусом Ethernet Shield XL».

Рекомендуемые: