Съдържание:

NexArdu: Интелигентно управление на осветлението: 5 стъпки
NexArdu: Интелигентно управление на осветлението: 5 стъпки

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

Видео: NexArdu: Интелигентно управление на осветлението: 5 стъпки
Видео: Управление умным светом - Yeelight bluetooth mesh Gateway, работа с Apple Homekit и Home Assistant 2024, Ноември
Anonim
NexArdu: Интелигентен контрол на осветлението
NexArdu: Интелигентен контрол на осветлението

Актуализиране

Ако сте разработили същата функционалност с помощта на Home Assistant. Home Assistant предлага огромен набор от възможности. Можете да намерите развитието тук.

Скица за управление на домашното осветление по интелигентен начин чрез 433.92MHz (известен още като 433MHz) безжични устройства, подобни на X10, напр. Некса.

Заден план

Що се отнася до декоративното осветление, някак ми беше уморително, че всяка втора или трета седмица трябваше да настройвам таймерите, които включват светлините поради изместването на слънчевия час по отношение на CET. някои нощи си лягаме по -рано от други. Поради това понякога светлините се изключват или „твърде късно“, или „твърде рано“. Горното ме предизвика да мисля: искам декоративното осветление да се включва винаги при същото ниво на околната светлина и след това да се изключва в определено време в зависимост от това дали сме будни или не.

Обективен

Тази инструкция използва възможностите на устройства с безжично управление, като System Nexa, работещи на честота 433.92MHz. Тук трябва да представим:

  1. Автоматизиран контрол на осветлението
  2. Уеб контрол

Уеб контрол. Вътрешен срещу външен уеб сървър

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

Сметка на материалите

За да се възползвате напълно от възможностите, които тази скица дава, имате нужда от:

  1. Arduino Uno (тествано на R3)
  2. Arduino Ethernet щит
  3. Комплект Nexa или подобен, работещ на 433.92MHz
  4. PIR (пасивен инфрачервен) сензор, работещ на 433.92MHz
  5. Резистор 10Kohms
  6. LDR
  7. RTC DS3231 (само версия на външен сървър)
  8. Предавател 433.92MHz: XY-FST
  9. Приемник 433.92MHz: MX-JS-05V

Минималният препоръчителен е:

  1. Arduino Uno (тествано на R3)
  2. Комплект Nexa или подобен, работещ на 433.92MHz
  3. Резистор 10Kohms
  4. LDR
  5. Предавател 433.92MHz: XY-FST

(Пропускането на Ethernet щита изисква модификации на скицата, които не са предоставени в тази инструкция)

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

Приемникът Nexa научава идентификатора на дистанционното управление и идентификатора на бутона. С други думи, всяко дистанционно има своя номер на подател и всяка двойка бутони за включване/изключване има своя идентификатор на бутон. Получателят трябва да научи тези кодове. Някои документи на Nexa посочват, че приемникът може да бъде сдвоен с до шест дистанционни управления. Параметрите на Nexa:

  • SenderID: ИД на дистанционното управление
  • ButtonID: номер на двойка бутони (включване/изключване). Започва с номер 0
  • Група: да/не (известни още като бутоните "Всички изключени/включени")
  • Команда: включване/изключване

Инструктивни стъпки. Забележка

Различните стъпки, описани тук, са да предложат два различни вкуса за това как да се постигне целта. Чувствайте се свободни да изберете този, който ви е удобен. Ето индекса:

Стъпка #1: Веригата

Стъпка #2: Nexardu с вътрешен уеб сървър (с участието на NTP)

Стъпка #3: Nexardu с външен сървър

Стъпка #4: Ценна информация

Стъпка 1: Веригата…

Веригата…
Веригата…

Свържете различните компоненти, както е показано на снимката.

Arduino щифт#8 към пин за данни на RX (приемник) модул Arduino щифт#2 към пин за данни на RX (приемник) модул Arduino щифт#7 към пин за данни на TX (подател) модул Arduino щифт A0 към LDR

RTC конфигурация. Необходим е само за конфигурация на външен сървър. Pin на Arduino A4 към SDA на RTC модул Arduino щифт A5 към SCL пин на RTC модул

Стъпка 2: Nexardu с вътрешен уеб сървър (с участието на NTP)

Библиотеките

Този код използва много библиотеки. Повечето от тях могат да бъдат намерени чрез „Библиотечен мениджър“на Arduino IDE. Ако не намерите библиотека в списъка, моля, потърсете в google.

Wire.hSPI.h - Изисква се от Ethernet shieldNexaCtrl.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, вижте по -долу
  • LAN IP адрес: задайте IP на вашата LAN към вашия Ethernet Arduino щит. Стойност по подразбиране: 192.168.1.99
  • NTP сървър: Не е строго необходимо, но може да е добре да потърсите в Google за 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 и отворете „Сериен монитор“.
  3. Натиснете бутона за дистанционно управление, който управлява приемника Nexa.
  4. Обърнете внимание на „RemoteID“и „ButtonID“.
  5. Задайте тези числа под SenderID и ButtonID в декларацията на променливата на предишната скица.

За да прочетете идентификационния номер на PIR, просто използвайте същата скица (Nexa_OK_3_RX.ino) и прочетете стойността на "Сериен монитор", когато PIR открие движение.

Стъпка 3: Nexardu с външен сървър

Библиотеките

Този код използва много библиотеки. Повечето от тях могат да бъдат намерени чрез "Библиотечен мениджър" на Arduino IDE. Ако не намерите изброена библиотека, моля, потърсете в google.

Wire.hRTClib.h - това е библиотеката от https://github.com/MrAlvin/RTClibSPI.h - Изисква се от Ethernet shieldNexaCtrl.h - Контролер на Nexa устройство Ethernet.h - За да активирате и използвате Ethernet щита RCSwitch.h - Изисква се за PIRTime.

Скицата

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

Преди да качите кода в Arduino, може да се наложи да конфигурирате следното:

  • SenderId: първо трябва да подушите SenderId, вижте Надушване на кодовете на Nexa в предишната стъпка
  • PIR_id: първо трябва да подушите SenderId, вижте Надушване на кодовете на Nexa на предишната стъпка
  • LAN IP адрес: задайте IP на вашата LAN към вашия Ethernet Arduino щит. Стойност по подразбиране: 192.168.1.99

За процедурата за намиране на код на Nexa, моля, вижте Стъпка #1.

Допълнителен файл

Качете прикачения файл nexardu4.txt на вашия външен PHP сървър и го преименувайте на nexardu4.php

Зададено време за RTC

За да задам час/дата на RTC използвам скица SetTime, която обединява библиотека DS1307RTC.

Стъпка 4: Ценна информация

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

Добре е да знаете поведение

  1. Когато Arduino е под „Лек автоматичен контрол“, той може да премине през четири различни състояния по отношение на околната осветеност и часа на деня:

    1. Будно: Ардуино чака нощта да дойде.
    2. Активен: Нощта дойде и Arduino включи осветлението.
    3. Somnolent: Светлините са включени, но идва времето да ги изключите. Той започва в "time_to_turn_off - PIR_time", тоест ако time_to_turn_off е зададен на 22:30 и PIR_time на 20 минути, тогава Arduino ще влезе в сънливо състояние в 22:10.
    4. Неактивен: Нощта отминава, Arduino изключи осветлението и Arduino изчаква зората да стане будна.
  2. Arduino винаги слуша сигналите, изпращани от дистанционното управление. Това включва възможността за показване на състоянието на светлините (включване/изключване) в мрежата, когато се използва дистанционно управление.
  3. Докато Arduino е в будно състояние, той се опитва да изключва светлините през цялото време, следователно сигналите за включване, изпратени от контрола за повторно включване, за да включат светлините, може да бъдат уловени от Arduino. Ако това се случи, Arduino ще се опита отново да изключи светлините.
  4. Докато Arduino е активен, той се опитва да включи светлините през цялото време, следователно сигналите за OFF, изпратени от дистанционно управление за изключване на светлините, може да бъдат уловени от Arduino. Ако това се случи, Arduino ще се опита отново да включи светлините.
  5. В спящо състояние светлините могат да се включват/изключват с дистанционно управление. Arduino няма да противодейства.
  6. В сънливо състояние PIR отброяването ще започне да се нулира от „time_to_turn_off - PIR_time“и така time_to_turn_off ще се удължава с 20 минути всеки път, когато PIR открие движение. "Открит PIR сигнал!" съобщението ще се покаже в уеб браузъра, когато това се случи.
  7. Докато Arduino е в латентно състояние, светлините могат да се включват и изключват чрез дистанционното управление. Arduino няма да противодейства.
  8. Повторно задаване или цикъл на захранване на Arduino ще го доведе до активен режим. Това означава, че ако Arduino е бил нулиран след time_turn_off, тогава Arduino ще включи светлините. За да избегнете това, Arduino трябва да бъде въведен в ръчен режим (маркирайте „Light Automatic Control“) и изчакайте до сутринта, за да го върнете към „Light Automatic Control“.
  9. Както бе споменато по -горе, Arduino изчаква зората да се активира отново. Поради това системата може да се заблуди, като насочи достатъчно силна светлина към сензора за светлина, който трябва да надхвърли прага за "минимална яркост". Ако това се случи, Arduino трябва да премине в активно състояние.
  10. Стойността на толеранса е от голямо значение, за да се избегне включването и изключването на системата около праговата стойност Минимална осветеност. Светодиодните светлини, поради тяхното трептене и високата им отзивчивост, могат да бъдат източник на махащо поведение. Увеличете стойността на толеранса, ако срещнете този проблем. Използвам стойност 7.

Добре е да знаете за кода

  1. Както можете да забележите, кодът е много голям и използва значително количество библиотеки. Това компрометира количеството свободна памет, необходимо за купчината. Забелязал съм нестабилно поведение в миналото, когато системата е била спряна, особено след уеб разговори. Следователно най -голямото предизвикателство, което имах, беше да огранича неговия размер и използването на различни променливи, за да направя системата стабилна.
  2. Кодът, който експлоатира вътрешния сървър, използван от мен у дома, работи безпроблемно от февруари 2016 г.
  3. Положих значителни усилия за обогатяване на кода с обяснения. Възползвайте се от това, за да играете с различни параметри, като например броя на изпращаните кодове на Nexa за пакет, време за синхронизиране на NTP и т.н.
  4. Кодът не включва лятно часово време. Това трябва да се коригира чрез уеб браузъра, когато се прилага.

Някои точки, които трябва да имате предвид

  1. Добавете антените към TX и RX радиочестотните (RF) модули. Това ще ви спести време да се оплаквате от две основни точки: устойчивост и обхват на радиочестотния сигнал. Използвам 50Ohms проводник с дължина 17,28 см (6,80 инча).
  2. Този натрапчив може да работи с други системи за домашна автоматизация, например Proove, например. Едно от многото условия, които трябва да се изпълнят, е те да работят на честота 433.92MHz.
  3. Голямо главоболие с Arduino е да се занимавате с библиотеки, които могат да се актуализират с течение на времето и изведнъж да не са съвместими с вашата "стара" скица; същият проблем може да възникне при надстройката на вашата Arduino IDE. Внимавайте, че това може да е нашият случай тук -да, и моят проблем.
  4. Множество едновременно работещи уеб клиенти с различни режими на осветление създават "мигащо" състояние.

Снимка на екрана

В въртелката на картината по -горе ще намерите екранна снимка на уеб страницата, показана, когато извикате Arduino през уеб браузъра си. Като се има предвид IP конфигурацията по подразбиране на кода, URL адресът ще бъде

Един аспект, който може да бъде обект на подобрение, е позиционирането на бутона „изпрати“, тъй като той влиза в сила във всички полета за въвеждане, а не само върху „Светлинното автоматично управление“, както може да се мисли. С други думи, ако искате да промените някоя от възможните стойности, винаги трябва да натиснете бутона „изпрати“.

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

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

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

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

Външни препратки

Система Nexa (шведски)

Стъпка 5: Готово

Готово!
Готово!

Ето всичко е готово и в действие!

Калъфът Arduino Uno може да бъде намерен в Thingiverse като „Arduino Uno Rev3 с Ethernet Shield XL-корпус“.

Препоръчано: