Turinys:

„NexArdu“: išmanusis apšvietimo valdymas: 5 žingsniai
„NexArdu“: išmanusis apšvietimo valdymas: 5 žingsniai

Video: „NexArdu“: išmanusis apšvietimo valdymas: 5 žingsniai

Video: „NexArdu“: išmanusis apšvietimo valdymas: 5 žingsniai
Video: 3 ВИДА МЯСА НА ГРИЛЕ / КУРИЦА/ БАРАНЬЯ НОГА / Часть 2. SUB ENG, ESP 2024, Lapkritis
Anonim
„NexArdu“: išmanusis apšvietimo valdymas
„NexArdu“: išmanusis apšvietimo valdymas

Atnaujinti

Jei sukūrėte tas pačias funkcijas naudodami „Home Assistant“. „Home Assistant“siūlo daugybę galimybių. Vystymą galite rasti čia.

Eskizas, kaip protingai valdyti namų apšvietimą per 433,92 MHz (dar žinomas kaip 433 MHz) belaidžius į X10 panašius įrenginius, pvz. Nexa.

Fonas

Kalbant apie dekoratyvinį apšvietimą, mane kažkaip vargino tai, kad kas antrą ar trečią savaitę turėdavau pakoreguoti laikmačius, kurie įjungia šviesas dėl saulės valandos pasikeitimo CET atžvilgiu. Tuo pačiu metu kai kurios naktys einame miegoti anksčiau nei kitos. Dėl šios priežasties kartais lemputės išsijungia arba „per vėlai“, arba „per anksti“. Tai, kas išdėstyta aukščiau, privertė mane susimąstyti: noriu, kad dekoratyvinis apšvietimas visada įsijungtų tuo pačiu aplinkos apšvietimo lygiu, o tada išsijungtų tam tikru laiku, priklausomai nuo to, ar esame budrūs, ar ne.

Objektyvus

Ši instrukcija išnaudoja belaidžiu būdu valdomų įrenginių, tokių kaip „System Nexa“, veikiančias 433,92 MHz dažniu, galimybes. Čia mes turime parodyti:

  1. Automatinis apšvietimo valdymas
  2. Interneto valdymas

Interneto valdymas. Vidinis ir išorinis žiniatinklio serveris

Vidinis serveris išnaudoja „Arduino Ethernet“skydo galimybę pateikti žiniatinklio serverį. Žiniatinklio serveris dalyvaus žiniatinklio kliento skambučiuose, norėdamas patikrinti ir bendrauti su „Arduino“. Tai paprastas sprendimas, turintis ribotą funkcionalumą; galimybes tobulinti žiniatinklio serverio kodą riboja „Arduino“atmintis. Išoriniam serveriui reikia nustatyti išorinį PHP žiniatinklio serverį. Ši sąranka yra sudėtingesnė ir nepalaikoma šioje pamokoje, tačiau PHP kodas/puslapis, skirtas patikrinti ir valdyti „Arduino“, turi pagrindines funkcijas. Žiniatinklio serverio tobulinimo galimybes šiuo atveju riboja išorinis žiniatinklio serveris.

Sąmata

Norėdami visiškai pasinaudoti šio eskizo teikiamomis galimybėmis, jums reikia:

  1. „Arduino Uno“(išbandytas naudojant R3)
  2. „Arduino Ethernet“skydas
  3. „Nexa“rinkinys ar panašus, veikiantis 433,92 MHz dažniu
  4. PIR (pasyvus infraraudonųjų spindulių) jutiklis, veikiantis 433,92 MHz dažniu
  5. 10KOhm rezistorius
  6. LDR
  7. RTC DS3231 (tik išorinio serverio versija)
  8. 433,92 MHz siųstuvas: XY-FST
  9. 433,92 MHz imtuvas: MX-JS-05V

Minimalus rekomenduojamas yra:

  1. „Arduino Uno“(išbandytas naudojant R3)
  2. „Nexa“rinkinys ar panašus, veikiantis 433,92 MHz dažniu
  3. 10KOhm rezistorius
  4. LDR
  5. 433,92 MHz siųstuvas: XY-FST

(Norint praleisti „Ethernet“skydą, reikia keisti eskizą, kuris nėra pateiktas šioje instrukcijoje)

„Nexa“logika. Trumpas aprašymas

„Nexa“imtuvas sužino nuotolinio valdymo pulto ID ir mygtuko ID. Kitaip tariant, kiekvienas nuotolinio valdymo pultas turi savo siuntėjo numerį, o kiekviena įjungimo/išjungimo mygtukų pora turi savo mygtuko ID. Imtuvas turi išmokti tuos kodus. Kai kuriuose „Nexa“dokumentuose teigiama, kad imtuvą galima suporuoti su iki šešių nuotolinio valdymo pultų. „Nexa“parametrai:

  • Siuntėjo ID: nuotolinio valdymo pulto ID
  • ButtonID: mygtukų poros numeris (įjungta/išjungta). Jis prasideda skaičiumi 0
  • Grupė: taip/ne (dar žinomi kaip „Visi išjungti/įjungti“mygtukai)
  • Komanda: įjungta/išjungta

Instrukciniai žingsniai. Pastaba

Čia aprašyti skirtingi žingsniai yra du skirtingi skoniai, kaip pasiekti tikslą. Nesivaržykite pasirinkti tą, kuris jums patogus. Štai indeksas:

1 žingsnis: grandinė

2 žingsnis: „Nexardu“su vidiniu žiniatinklio serveriu (su NTP)

3 žingsnis: „Nexardu“su išoriniu serveriu

4 žingsnis: Vertinga informacija

1 žingsnis: grandinė…

Circuit…
Circuit…

Prijunkite įvairius komponentus, kaip parodyta paveikslėlyje.

„Arduino“kaištis Nr. 8 į duomenų kaištį RX (imtuvo) modulyje „Arduino“kaištis#2 į duomenų kaištį RX (imtuvo) modulyje „Arduino“kaištis#7 į duomenų kaištį TX (siuntėjo) modulyje Arduino kaištis A0 į LDR

RTC konfigūracija. Reikalingas tik išorinio serverio konfigūracijai. Arduino kaištis nuo A4 iki SDA kaiščio RTC modulyje Arduino kaištis A5 į SCL kaištį RTC modulyje

2 veiksmas: „Nexardu“su vidiniu žiniatinklio serveriu (su NTP)

Bibliotekos

Šis kodas naudoja daugybę bibliotekų. Daugumą jų galima rasti per „Arduino IDE“bibliotekos valdytoją. Jei nerastumėte sąraše esančios bibliotekos, google.

Wire.hSPI.h - Reikalingas Ethernet skydasNexaCtrl.h - Nexa įrenginio valdiklis Ethernet.h - Norėdami įjungti ir rodyti Ethernet skydąRCSwitch.h - Būtinas PIRTime.h - Reikalingas RTCTimeAlarms.h - Laiko aliarmo valdymas NTP klientas

Eskizas

Žemiau pateiktas kodas išnaudoja galimybę naudoti „Arduino UNO“plokštę ne tik kaip „Nexa“įrenginių valdymo priemonę, bet taip pat turi vidinį žiniatinklio serverį. Reikėtų pridurti, kad RTC (realaus laiko laikrodis) modulis automatiškai sureguliuojamas naudojant NTP (tinklo laiko protokolą).

Prieš įkeliant kodą į „Arduino“, gali reikėti sukonfigūruoti šiuos dalykus:

  • SenderId: pirmiausia turite užuosti SenderId, žr
  • PIR_id: pirmiausia turite užuosti SenderId, žr
  • LAN IP adresas: nustatykite savo LAN IP adresą į „Ethernet Arduino“skydą. Numatytoji vertė: 192.168.1.99
  • NTP serveris: Nebūtinai būtina, tačiau gali būti naudinga ieškoti „Google“netoliese esančių NTP serverių. Numatytoji vertė: 79.136.86.176
  • Kodas pritaikytas pagal CET laiko juostą. Jei reikia, koreguokite šią vertę pagal savo laiko juostą, kad būtų rodomas teisingas laikas (NTP)

„Nexa“kodų uostymas

Tam reikia prijungti bent jau RX komponentą prie „Arduino“, kaip parodyta grandinėje.

Žemiau rasite „Nexa_OK_3_RX.ino“eskizą, kuris jo rašymo metu yra suderinamas su „Nexa“įrenginiais NEYCT-705 ir PET-910.

Toliau nurodyti veiksmai:

  1. Suporuokite „Nexa“imtuvą su nuotolinio valdymo pultu.
  2. Įkelkite „Nexa_OK_3_RX.ino“į „Arduino“ir atidarykite „Serial Monitor“.
  3. Paspauskite nuotolinio valdymo mygtuką, valdantį „Nexa“imtuvą.
  4. Atkreipkite dėmesį į „RemoteID“ir „ButtonID“.
  5. Nustatykite šiuos skaičius ankstesnio eskizo kintamosios deklaracijos skiltyje „SenderID“ir „ButtonID“.

Norėdami perskaityti PIR ID, tiesiog naudokite tą patį eskizą (Nexa_OK_3_RX.ino) ir perskaitykite vertę „Serial Monitor“, kai PIR aptinka judesį.

3 žingsnis: „Nexardu“su išoriniu serveriu

Bibliotekos

Šis kodas naudoja daugybę bibliotekų. Daugumą jų galima rasti per „Arduino IDE“bibliotekos valdytoją. Jei nerandate sąraše esančios bibliotekos, google.

Wire.hRTClib.h - tai biblioteka iš https://github.com/MrAlvin/RTClibSPI.h - Reikalingas „Ethernet shieldNexaCtrl.h“- „Nexa“įrenginio valdiklis PIRTime.h - Reikalingas RTCTimeAlarms.h - Laiko aliarmo valdymas

Eskizas

Žemiau eskizas pasižymi dar vienu to paties skonio skoniu, šį kartą suteikiančiu galimybių, kurias gali suteikti išorinis žiniatinklio serveris. Kaip jau minėta įvade, „Išoriniam serveriui“reikia nustatyti išorinį PHP žiniatinklio serverį. Ši sąranka yra sudėtingesnė ir nepalaikoma šioje pamokoje, tačiau PHP kodas/puslapis, skirtas patikrinti ir valdyti „Arduino“, turi pagrindines funkcijas.

Prieš įkeliant kodą į „Arduino“, gali reikėti sukonfigūruoti šiuos dalykus:

  • „SenderId“: pirmiausia turite užuosti „SenderId“, žr. „Nexa“kodų uostymas ankstesniame žingsnyje
  • PIR_id: pirmiausia turite užuosti SenderId, žr. „Nexa“kodų šnipinėjimas ankstesniame žingsnyje
  • LAN IP adresas: nustatykite savo LAN IP adresą į „Ethernet Arduino“skydą. Numatytoji vertė: 192.168.1.99

Norėdami sužinoti „Nexa“kodo uostymo procedūrą, žr. 1 veiksmą.

Papildomas failas

Įkelkite pridėtą failą nexardu4.txt į išorinį PHP serverį ir pervardykite jį į nexardu4.php

Nustatytas RTC laikas

Norėdami nustatyti laiką/datą RTC, naudoju eskizą „SetTime“, kuris yra DS1307RTC biblioteka.

4 žingsnis: Vertinga informacija

Vertinga informacija
Vertinga informacija
Vertinga informacija
Vertinga informacija

Gera žinoti elgesį

  1. Kai „Arduino“veikia „šviesos automatinis valdymas“, jis gali pereiti keturias skirtingas būsenas, atsižvelgiant į aplinkos apšvietimą ir paros laiką:

    1. Pabudęs: Arduino laukia nakties.
    2. Aktyvus: atėjo naktis ir Arduino įjungė šviesas.
    3. Mieguistas: šviesos dega, bet ateina laikas jas išjungti. Jis prasideda „time_to_turn_off - PIR_time“, tai yra, jei „time_to_turn_off“nustatytas 22:30, o „PIR_time“nustatytas 20 minučių, tada „Arduino“įjungs ramią būseną 22:10 val.
    4. Ramybės būsena: naktis praeina, Arduino išjungė šviesas ir Arduino laukia, kol aušra atsibus.
  2. „Arduino“visada klausosi nuotolinio valdymo pulto siunčiamų signalų. Tai suteikia galimybę rodyti žibintų (įjungtų/išjungtų) būseną žiniatinklyje, kai naudojamas nuotolinio valdymo pultas.
  3. Nors „Arduino“budi, jis visą laiką bando išjungti šviesas, todėl „Arduino“gali užfiksuoti įjungimo signalus, kuriuos siunčia remonto valdiklis, kad įjungtų šviesas. Jei taip atsitiks, „Arduino“vėl bandys išjungti šviesą.
  4. Kol „Arduino“yra aktyvus, jis visą laiką bando įjungti šviesas, todėl „Arduino“gali užfiksuoti išjungimo signalus, siunčiamus nuotolinio valdymo pultu, kad būtų išjungtos šviesos. Jei taip atsitiks, „Arduino“bandys vėl įjungti šviesą.
  5. Ramioje būsenoje šviesas galima įjungti/išjungti nuotolinio valdymo pultu. „Arduino“neprieštaraus.
  6. Ramioje būsenoje PIR atgalinės atskaitos laikas bus pradėtas atstatyti nuo „time_to_turn_off - PIR_time“, taigi laikas_pasisukimo laikas padidės 20 minučių kiekvieną kartą, kai PIR aptiks judesį. Aptiktas „PIR signalas!“žinutė bus rodoma žiniatinklio naršyklėje.
  7. Kol „Arduino“neveikia, lemputes galima įjungti ir išjungti nuotolinio valdymo pultu. „Arduino“neprieštaraus.
  8. Atkuriant arba įjungus „Arduino“ciklą, jis suaktyvės. Tai reiškia, kad jei „Arduino“buvo iš naujo nustatytas po „time_turn_off“, tada „Arduino“įjungs šviesas. Kad to išvengtumėte, „Arduino“reikia įjungti rankiniu režimu (pažymėkite „Šviesos automatinis valdymas“) ir palaukite ryto, kol jis bus grąžintas į „Automatinį šviesos valdymą“.
  9. Kaip jau minėta, Arduino laukia aušros, kad vėl suaktyvėtų. Dėl šios priežasties sistema gali suklysti nukreipdama pakankamai stiprią šviesą į šviesos jutiklį, kuris turi viršyti „minimalaus ryškumo“slenkstį. Jei taip atsitiks, „Arduino“turi pereiti į aktyvią būseną.
  10. Tolerancijos reikšmė yra labai svarbi, kad sistema neįsijungtų ir neišsijungtų aplink slenkstinę minimalią šviesumo reikšmę. LED lemputės dėl savo mirgėjimo ir didelio reagavimo gali būti triukšmingo elgesio šaltinis. Padidinkite tolerancijos vertę, jei susiduriate su šia problema. Aš naudoju 7 vertę.

Gera žinoti apie kodą

  1. Kaip pastebėjote, kodas yra labai didelis ir naudoja daug bibliotekų. Tai sumažina laisvos atminties kiekį, reikalingą krūvai. Pastebėjau nestabilų elgesį, kai sistema buvo sustabdyta, ypač po interneto skambučių. Todėl didžiausias mano iššūkis buvo apriboti jos dydį ir įvairių kintamųjų naudojimą, kad sistema būtų stabili.
  2. Kodas, kuris naudoja vidinį serverį, kurį naudojau namuose, dabar veikia be problemų nuo 2016 m. Vasario mėn.
  3. Aš daug pastangų praturtinau kodą paaiškinimais. Pasinaudokite tuo, kad galėtumėte žaisti su įvairiais parametrais, pvz., „Nexa“kodo siuntimų skaičiumi per seriją, NTP sinchronizavimo laiku ir kt.
  4. Kode nėra vasaros laiko. Tai reikia koreguoti per žiniatinklio naršyklę, kai ji taikoma.

Keletas punktų, į kuriuos reikia atsižvelgti

  1. Pridėkite antenas prie radijo dažnio (RF) modulių TX ir RX. Sutaupysite laiko skųstis dviem pagrindiniais klausimais: atsparumu ir RF signalo diapazonu. Aš naudoju 50 omų vielą, kurios ilgis yra 17,28 cm (6,80 colio).
  2. Šis nesuderinamas elementas gali veikti ir su kitomis namų automatikos sistemomis, pvz., „Proove“. Viena iš daugelio įvykdytų sąlygų yra jų veikimas 433,92 MHz dažniu.
  3. Didelis „Arduino“galvos skausmas yra susidoroti su bibliotekomis, kurios laikui bėgant gali būti atnaujintos ir staiga nebebus suderinamos su jūsų „senu“eskizu; ta pati problema gali kilti atnaujinant „Arduino IDE“. Saugokitės, kad tai gali būti mūsų atvejis -taip, ir mano problema.
  4. Keli vienu metu veikiantys žiniatinklio klientai su skirtingais šviesos režimais sukuria „mirksinčią“būseną.

Ekrano kopija

Aukščiau esančioje paveikslėlių karuselėje rasite tinklalapio ekrano kopiją, rodomą skambinant „Arduino“per žiniatinklio naršyklę. Atsižvelgiant į numatytąją kodo IP konfigūraciją, URL būtų

Vienas aspektas, kurį galima patobulinti, yra mygtuko „pateikti“išdėstymas, nes jis įsigalioja visose įvesties dėžutėse, o ne tik „šviesos automatiniame valdyme“, kaip galima pamanyti. Kitaip tariant, jei norite pakeisti bet kurią iš galimų reikšmių, visada turite paspausti mygtuką „Pateikti“.

Išsami/išplėstinė dokumentacija

Pridėjau šiuos failus, kad jie galėtų padėti jums suprasti visą sprendimą, ypač trikčių šalinimui ir tobulinimui.

Arduino_NexaControl_IS.pdf pateikia dokumentaciją apie vidinio serverio sprendimą.

Arduino_NexaControl_ES.pdf pateikia dokumentaciją apie išorinio serverio sprendimą.

Išorinės nuorodos

„Nexa“sistema (švedų)

5 žingsnis: baigta

Baigta!
Baigta!

Čia viskas baigta ir veikia!

„Arduino Uno“dėklą „Thingiverse“galima rasti kaip „Arduino Uno Rev3 with Ethernet Shield XL-case“.

Rekomenduojamas: