Turinys:

Ramadano žibintai - Namų automatizavimas IOT: 6 žingsniai
Ramadano žibintai - Namų automatizavimas IOT: 6 žingsniai

Video: Ramadano žibintai - Namų automatizavimas IOT: 6 žingsniai

Video: Ramadano žibintai - Namų automatizavimas IOT: 6 žingsniai
Video: Part 6 - Lord Jim Audiobook by Joseph Conrad (Chs 37-45) 2024, Lapkritis
Anonim
Ramadano žibintai | Namų automatizavimas IOT
Ramadano žibintai | Namų automatizavimas IOT

Ramadanui beldžiantis į duris, viso pasaulio miestai įsižiebia ir ruošiasi pasninko mėnesiui. Šviesos kabinamos viešosiose aikštėse ir miesto gatvėse, taip pat ant išorinių namų sienų, apšviestų naktį, kol saulė teka ryte.

Šiame projekte norėčiau pasidalinti savo indėliu, kuriame automatizuoju šių dekoracijų apšvietimą pagal Adhano laikus ir pridedu tai prie savo išmaniųjų namų sistemos.

1 žingsnis: teorija

Iš esmės lengviau ir labiau pritaikyti apšvietimą, pavyzdžiui, atsižvelgiant į saulės spindulių intensyvumą. Tačiau norėčiau, kad tai įgytų šventojo mėnesio dvasią, tai yra, šviesa degs tol, kol žmonėms bus leidžiama valgyti pasninko mėnesį. Visų pirma, žibintai dega nuo Maghrib Adhan iki Fajr Adhan kiekvieną dieną be jokio žmogaus bendravimo.

2 žingsnis: dizainas

Žemiau išvardinsiu šio projekto reikalavimus/galimybes:

  • Sistema turėtų sugebėti automatiškai apdoroti įkrovos metu.
  • Sistema turėtų turėti galimybę periodiškai vykdyti sprendimo (įjungimo/išjungimo) algoritmą.
  • Sistema turėtų turėti galimybę kasdien iškviesti API.
  • Sistema turėtų sugebėti atsigauti po neplanuoto paleidimo.
  • Sistema turėtų vykdyti sprendimo (įjungimo/išjungimo) algoritmą iškart gavusi duomenis.
  • Sistema turėtų numatyti jungiklį, skirtą įjungti autopiloto režimą (automatinis režimas).
  • Sistemoje turėtų būti jungiklis, leidžiantis rankiniu būdu įjungti/išjungti šviesas.
  • Įjungus rankinį jungiklį, rankinis režimas turi būti išjungtas.
  • Kai automatinis režimas įjungtas, sprendimo algoritmo rezultatas turėtų atsispindėti rankiniame jungiklyje ON/OFF.

3 žingsnis: Techninė informacija: API

Techninė informacija: API
Techninė informacija: API

Kad teorija būtų pritaikyta, būtina žinoti Adhano laiką kasdien nuo jo kintamojo ir veikti, kad įjungtumėte/išjungtumėte šviesas/dekoracijas.

Šiuo tikslu nusprendžiau naudoti vietovėmis pagrįstą API duomenims teikti (laikas Adhanui)

muslimsalat.com/api/#location

  • Šioje API pateikiamos įvairios parinktys ir konfigūracijos parametrai, aprašyti aukščiau esančioje dokumentacijos nuorodoje.
  • Rekomenduojama naudoti savo API_raktą, kuris registracijos metu yra nemokamas.
  • Kurdamas savo dizainą, mane domina dienos tvarkaraštis.
  • Grįžtamas laikas pateikiamas 12 valandų formatu (AM/PM).
  • Kalbant apie vietą, norėjau, kad ši API galėtų pateikti tikslesnes parinktis tokioms vietoms kaip koordinatės geografinių koordinačių sistema (platuma ir ilguma). Tokiu būdu šiai API gali būti suteiktas, pavyzdžiui, miesto pavadinimas, ir to daugeliu atvejų visiškai pakanka. Deja, mano konkretaus miesto rezultatai buvo gana šališki atliekant kelis testus ir lyginant Adhan laiką tarp API rezultatų ir tikrojo Adhano laiko mano mieste buvo poros minučių skirtumas. Kita vertus, rezultatai puikiai atitiko, kai pateikiau artimą miestą į šiaurę ir laikiausi jo!
  • Naudoju API URL: https://muslimsalat.com/.json? Key =

4 žingsnis: Techninė informacija: Aparatūra

Techninė informacija: Aparatūra
Techninė informacija: Aparatūra

Paprastumo dėlei aš palieku aparatūrą be sinchronizavimo su API ir laiko skaičiavimo proceso, deleguodamas šias operacijas į mano namų automatikos sistemą. Tai suteiks man daugiau kontrolės, jei noriu patobulinti API šaltinį ir skaičiavimo algoritmą.

Tai pasakius, aš naudoju ESP8266 (NodeMCU), norėdamas prisijungti prie vietinio tinklo per WIFI ir relės modulį kaip pavarą. „NodeMCU“naudos MQTT protokolą ir klausys konkrečios temos, kad gautų komandas įjungti/išjungti relę. Taip paprasta!

5 žingsnis: Techninė informacija: taškų sujungimas | Namų automatika

Techninė informacija: Taškų sujungimas | Namų automatika
Techninė informacija: Taškų sujungimas | Namų automatika
Techninė informacija: Taškų sujungimas | Namų automatika
Techninė informacija: Taškų sujungimas | Namų automatika
Techninė informacija: Taškų sujungimas | Namų automatika
Techninė informacija: Taškų sujungimas | Namų automatika

Mano „RaspberryPi“saugo egzempliorių, galintį tvarkyti viską, ko man reikia šiam projektui. Jame taip pat yra įdiegtas MQTT serveris, skirtas skelbti mūsų pranešimus.

Iš pradžių maniau, kad galiu gauti API duomenis kasdien 9 val. Ryte ir išgauti Fajr ir Mahgrib Adhan laikus ir toliau lyginti dabartinį laiką su šiais kintamaisiais:

kas 30 sekundžių:

jei: Mahgrib <DABAR <Fajr tiesa | įjungti šviesą | paskelbti ON pranešimą nurodytoje MQTT temoje, kitaip: išjunkite

Norėdami palyginti laiką, konvertuoju API pateiktas valandas iš hh: mm (AM/PM) į visos datos formatą, nustatydamas datos dalį į nereikšmingą datą istorijoje, pvz., 1970 m. Sausio 1 d. tik į dabartinį laiką (datos dalis taip pat konvertuojama).

Deja, tai veiks tik tais atvejais. Tarkime, atvejis, kai elektros energija sumažėja arba sistema iš naujo paleidžiama dėl neplanuotų priežasčių. Jei šis atvejis įvyksta prieš 12 val., Mes vis dar esame saugioje pusėje, tačiau po 12 val. Mūsų paprastas algoritmas nepavyks.

Pavyzdžiui, turėkime Magribą Adhaną 19.30 val., O Fajrą - 4.10 val. Kai sistema įsijungs, ji atsiųs naują užklausą gauti anksčiau minėtus duomenis. Jei laikas dabar yra 1:45 AM, mes tikimės, kad mūsų algoritmas grįš teisingas, bet iš tikrųjų tai nebus, nes 1:45 AM yra mažesnė nei Fajr (4:10 AM), bet nėra didesnė už Magrib (19:30). Taip yra todėl, kad mes sujungiame datą tarp visų kintamųjų. Žemiau yra galutinė algoritmo versija (iki šiol):

kas 30 sekundžių:

if ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate ()+1); // tvarkyti trukmės dienas endTime if (now.getHours () <= 12) {now.setDate (now.getDate ()+1); // tvarkyti aprėpties dienas currentTime}}} // žemiau yra ankstesnis kodo blokas, jei: Mahgrib <DABAR <Fajr true | įjungti šviesą | paskelbti ON pranešimą nurodytai MQTT temai else: false | Išjunk

Visa proceso eiga pažymėta aukščiau esančiame paveikslėlyje.

Kalbant apie vartotojo sąsają, prie vartotojo sąsajos/sąsajos pridėjau 2 jungiklius:

  1. Jungiklis, skirtas šiam procesui įjungti automatiniu arba rankiniu būdu.
  2. Jungiklis, skirtas įjungti/išjungti žibintus rankiniu būdu.

6 žingsnis: apvyniokite

Laikas bėga niekada, kad jo neprisimintų. Atlikdami tokius paprastus 1 dienos projektus, galite atsikvėpti šioje greitoje juostoje ir ilgainiui atgaivinti minkštus įgūdžius.

Šiame projekte aš stengiausi, kad jis būtų paprastas ir pakartotinai naudojamas visame pasaulyje.

Prašome balsuoti už šią pamoką, jei manote, kad šis projektas nusipelno.

Laimingo Ramadano!

Rekomenduojamas: