Ką gi, pagaliau atėjo laikas, kai nebebijau garsiai išreikšti savo nevisai neerotinių fantazijų apie būsimo savo namuko apšvietimą. Projektėliui jau maždaug metai laiko, bet dariau jį priešokomis, su daugybe pasiruošiamųjų bandymų bei gamintojų paieškų. Dabar jau pagaliau turiu visus esminius komponentus galutiniam projektui ir veikiantį prototipą. Patobulinti jį yra kur, be abejo, bet svarbiausia, kad pasiekiau pačią esmę.
Trumpai apie mano paties idėjas:
- Visas apšvietimas reguliuojamas su PWM
- Jokių potenciometrų, tik rotaciniai enkoderiai
- Lengvos galimybės sujungti ir konfigūruoti
- Galimybė išoriniam valdymui per naršyklę, appsą ar dar kažką
- Nepriklausomas (masterless) tinklas, kuriame visi mazgai lygiaverčiai
Mindaugas man kažkada rodė savo bandymą užkurti protingą namą. Ten buvo krūvos Arduino, vienas masteris (jei gerai pamenu) ir tinklas per nuosekliąją jungtį pakavotas po RS-485. Aš pas save irgi norėjau kažko tokio, bet kai pabandydavau pagalvoti apie RS-485 ir nuosekliosios jungties kodijimą, mane siaubas apimdavo. Nes tada gaunasi taip, kad jei vienas įrenginys pradeda „kalbėti“, kiti turi laukti. Tai reiškia, kad reikia tikrinti duomenų linijos būseną. Aišku, tą daryti kode. Šitas siaubas mane iš esmės ir atmušinėjo nuo minčių pačiam darytis šviesos (ar kitų įtaisų) valdymą.
Tada, kaip kai kurie žinote, pradėjau domėtis CAN magistrale. Užlipau ant jos netyčia, naršydamas apie tas pačias problemas su RS-485. Vienas žmogus kažkuriame Stack Exchange pasakė, kad, blė, yra tokia CAN magistralė, tik visokie atsilikėliai RS-485 patys bando naudoti. Ir jis teisus. CAN magistralė išsprendžia krūvą problemų, apie tai jau rašiau.
Po bandymų su DALI tinklu ir su žiniomis apie CAN magistralę aš pasijutau turįs raumeny ir ryžausi pats projektuoti ir kodyti šviesos valdymo sistemą. Pradėsiu nuo to, kokių man žinių prireikė ir kokius bandymus atlikau:
- ARM valdikliai. Senokai jau jais domiuosi ir labai žaviuosi. Po „ARM“ žyme pas mane jau nemažai prirašyta.
- Raspberry Pi. Irgi turiu jam dedikuotą žymę. Tai tiesiog mažas kompiuteris ir tiek, patogu jį padėti, patogu naudoti, turi daug kojyčių visokiems daiktams prijungti.
- Projektavimas su Eagle, kitos elektronikos žinios, gebėjimas nulaikyti lituoklį teisingoje rankoje ir už teisingo galo.
- CAN magistralė: įžanga, filtrai ir Raspberry Pi „kepuraitė“.
- Rotacinių enkoderių signalų apdorojimas.
- Visokių nustatymų, kurių gyvo velnio reikia, saugojimas vidinėje Flash atmintyje, bo EEPROM nėr.
- Galingi MOSFET’ai ir jų valdymas per optronus.
- FreeRTOS: kad būtų galima multitaskinti mikrovaldiklyje.
- Tinkamos lempos su 12-24 V maitinimu ir jų temdymas.
Žinote, kas buvo sunkiausia šiame mano projekte? Ogi rasti tinkamus jungtukus! Tokius, kurie būtų skirti reguliuojamam apšvietimui, bet viduje arba turėtų rotacinius enkoderius, arba lengvai išdraskomus ir keičiamus vidurius. Daug laiko buvo sugaišta, daug interneto perskaityta ir nemažai pinigų ybėjuje išleista. Pasisekė taip, kad radau labai gražius jungtukus, nusipirkau. Pamačiau, kad lengvai pasikeičia viduriai. Susisiekiau su dviem gamintojais: Varilight, kurie tikrai labai krūti, ir David Wright (Electrical) Ltd. Abi kompanijos yra grynai britiškos, be jokių „Made in China“ komponentų. Kainos irgi gerulės. Bet štai David Wright be jokių klausimų ir panašių nesąmonių sutiko pagaminti ir parduoti tik jungtukų „oblicovkes“ ir rankenėles. Be abejo, dar su potinkinėmis dėžutėmis ir visais kitais dizainą atitinkančiais priedais: Schuko, televizijos ir interneto rozetėmis. Smagu, aišku, kai britai turi Schuko rozetes 😀 Tiesa, su Jungu nepalyginsi, kai kurie gamybos sprendimai keistoki, bet velniai nematė… grožis ir dizainas reikalauja biškį aukų. Elektrikas mane patyliukais išvadino labai gražiais ir labai teisingais žodžiais, bet sakė, kad visgi padarys ką reikia 😀
Dabar jau apie projekto esmę. Kaip sakiau, norėjau masterless tinklo. Tame tinkle numatyti (kol kas) trijų tipų įrenginiai. Vienas (ir tik vienas) kompiuteris, kuris daugiausiai sėdi pasyviai ir nieko nedaro. Antras tipas yra šviesų valdikliai, kiekvienas aštuonių PWM kanalų. Trečias tipas yra rotacinių enkoderių skaitytuvas, galintis nuskaitinėti iki penkių enkoderių.
Šviesų valdiklis. Iš viso aštuoni kanalai ir tuo pačiu metu šešiolika išvesčių. Aštuonios išvestys yra skirtos relių junginėjimui, kurios turėtų užkurti 12V maitinimo šaltinius, o kitos aštuonios su PWM signalu turėtų reguliuoti apšvietimo stiprumą. Šitą dalyką pavyko įgyvendinti naudojant TIM2 ir TIM3 procesoriukų laikmačius, kurių kiekvienas turi keturis PWM kanalus ir tam priskirtus elektrodus. Smagu projektuojant, kad tie elektrodai gaunasi vieni šalia kitų.
Rotacinių enkoderių skaitytuvas (jungtukynas). Kodėl tik penki enkoderiai? Todėl, kad kiekvienam iš enkoderių reikia 3 elektrodų, o mano turimi procesoriukai gali apdoroti maks. 16 įvesties pertraukimų. Nuskaitinėt enkoderius kitaip, nei su pertraukimas, yra visiškas vargas. Be to, 9 pertraukimą teko atmesti, nes B9 elektrodas naudojamas CAN magistralei, o A9 — USART1 (kurio man reikia). Taigi lieka 15 elektrodų, ant kurių galima užkabinti pertraukimus, o tai gaunasi penki enkoderiai po tris jungtis. Ant to paties skaitytuvo dar pasidariau septynias kitas įvestis, kurių kiekviena gali būti analoginė. Taigi ant šito jungtukyno dar galima užkabinti pavyzdžiui termodaviklių skaitymus, PIR daviklių žybsėjimus, šviesos lygio nustatymus ir panašiai. Va ar aš visa tai sukodysiu — kitas klausimas, bet galimybė yra.
Visi įrenginiai, neskaitant kompiuterio, turi būti suadresuojami. Pradžiai atliekama tokia kaip ir discovery užklausa, visi įrenginiai atsiliepia su savo serijiniais numeriais. Tada kiekvienam serijiniam numeriui priskiriamas trumpas adresiukas (1–126 intervale) ir kiekvienas įrenginys jį pas save išsisaugo. Toliau komunikacija vyksta naudojant tuos trumpus adresus.
Tai va. Toliau. Šviesos valdiklio kanalai gali būti grupuojami. Taip pat PWM signalas gali būti invertuojamas. Beje, tai labai įprasta, nes mano lempos irgi temdomos tada, kai tam tikras elektrodas trumpinamas į „žemę“. Na, o MOSFET-as pas mane yra low side, taigi jis ir vykdo trumpinimą į žemę pagal signalą. Todėl, kad lempa maksimaliai šviestų, PWM signalo turi nebūti. Bet šitas dalykas gali būti konfigūruojamas.
Kiekvienas jungtuko enkoderis irgi gauna nurodymus, kokio įrenginio kuriam kanalui (arba kokiai grupei) siųsti žinutes. Na ir siunčia jas, kai yra nuspaudžiamas arba sukinėjamas. Aš dar turiu mintį padaryti šitą savo jungtukų valdiklį kiek gudresnį. Sakykim, leisti naudoti ant jo nebūtinai 5 rotacinius enkoderius, bet, pavyzdžiui, 15 paprastų jungtukų. Arba įvairiomis kombinacijomis. Juk ne visur man reikės reguliuojamo apšvietimo, pvz. garaže ar katilinėj. O kad nešvaistyt įvesčių, dalį jų būtų galima perkonfigūruoti į „mygtukus“. Dar galima būtų ir mygtukams veiksmus padaryti konfigūruojamus, pavyzdžiui, įjungimas/išjungimas, temdymas arba šviesinimas.
Kadangi geografiškai įrenginiai bus išdėlioti netoli vienas kito, CAN magistralė bus 1 Mb/s spartos (maksimalios). Mažiau kolizijų ir greitesnė reakcija.
Diagrama atrodo maždaug taip:
Na, kaip suprantate, tiek jungtukų, tiek šviesų valdiklių tinkle gali būti bet koks skaičius. Na, „bet koks“ mano architektūroj yra numatytas iki 127 įskaičiuojant Avietę (ar kitą kompą). Pakankamai net ir pramoniniam valdymui.
Po ilgų kodijimų ir bandymų su štai tokia „laboratorija“ įsitikinau, kad viskas gali veikti:
Tada sėdau projektuoti plokščių ir štai jos:
Viršuje — šviesos valdymo plokštė, šalia prikergtos rotacinių enkoderių su terminalais plokštikės. Apačioj atskira plokštelė enkoderiams ir dvi į vieną šmotą sugrūstos jungtukų valdymo plokštės. Pastarosios, beje, kažkaip tai gamintojui pasirodė graviruotinos ir gavau jas lengvai laužomas per įpjovas:
Sulūžo nepaprastai lengvai:
Prisimatavimas, ar tinka mano procesorių plokštikės:
Kažkada jau bandžiau šitiems procesoriukams plokštes maketuot. Gavosi ne kažkas, lituot juos nors ir nesudėtinga, bet vis tiek bjauroka. Todėl dabar maksimaliai stengiuosi projektuoti galutines plokštes su įstatomomis periferinėmis plokštėmis. Va procesoriukas gražiai įsistatys. Už jo — impulsinis 5 V stabilizatorius, irgi pagamintas pas kinus. Visų įrenginių maitinimas bus 12 V, bet kiekviena plokštė turės savo asmeninį 5 V stabilizatorių. Linijinių nenorėjau dėti, nes su jais kartais būna nenuspėjamų reikalų, o ir kaista gerokai smarkiau. Aišku, vietos galima sutaupyti. Bet va netgi Raspberry Pi atsirado impulsinis 3,3 V konverteris 😀
Na ir va kažkas jau panašaus į testlabą:
Aha. Na, štai jums ir filmukas. Čia vienas valdiklis su penkiais enkoderiais. Ant šviesos valdiklio keturios lempelės sukonfigūruotos į vieną grupę, o penktasis enkoderis valdo visą grupę. Pasižiūrėkite:
Laukia dar nemažai tąsymosi. Teko sugalvoti programinį rotacinių enkoderių dampingą, nes teisingam jų jungimui reikėtų 20 detalių. Sutaupiau 19. Vienas rezistorius reikalingas, bet jį paskutinę minutę pamiršau priprojektuoti. Tai teks biškį plokštes papjaustyti. Jungtukai irgi kažkiek kibirkščiuoja, reikės laikmatuką įdėt, kad labai dažnų „mygtelėjimų“ neregistruotų. Gal RC grandinės ir būtų buvę patogiau, bet visgi litavimo susitaupo smarkiai.
Dabar dar darysiu visokius papildomus, nelabai funkcinius patobulinimus ir kodysiu valdymo servisą ant Avietės, kad būtų galima patogiai pribindinti prie OpenHAB. Vienas mano skaitytojas OpenHABą tyrinėjasi ir turi rimtų pretenzijų šitą mano apšvietimą įdarbinti pas save. Kam tai atrodo įdomu — kreipkitės. Jei reikalai pasiteisins, galbūt kada nors užkursiu kokį Open Hardware projektuką, o kol kas dar pačiam reikės su visa šita sistema susigyvent.
Enkoderiams prijungti, beje, naudoju paprastą keturgyslį signalizacijos laidą. Tobulai tinka ir kaina nesikandžioja. Visas mano namas dabar tokiais laidais apraizgytas. Na ir FTP kabeliais kitiems reikalams, įskaitant ir CAN magistralę. CAN’ui reikia tik vienos gyslų poros, bet ką jau dabar. Per kitą bus galima maitinimą užšerti.
Klauskit, jei kas rūpi 🙂 Žiūrėsiu, apie ką kitus įrašus daryti. Beje, šitas projektas iš dalies kaltas ir kad mano įrašų apmažėjo. Taip pat No Man’s Sky ir nepavykę bandymai užsikurti grafinį stiprintuvą.
O kodėl ne pvz Z-Vawe? Juolab jie savo API atskleidė. Ne pilnai, bet vistiek užsimanius kažką atnaujinti namie, visada platus įrangos pasirinkimas. O jus pasmerktas iki amžiaus galo su ta abrakadabra vargti.
Z-Wave yra belaidis protokolas ir tuo viskas pasakyta. Jį įsidiegti galėsiu bet kada.
Žmonės iki amžiaus galo vargsta ir su blogesniais dalykais. Tai kaip ir geriau vargti su tuo, kas man pačiam labiau prie dūšios. Dauguma naujų namų vis dar įrengiami 100 metų senumo principais.
O kodėl PWM? Aš elektronikoje nelabai gaudausi, bet ar naudojant PWM signala apšvietimui nebus šviesos mirgėjimo šiek tiek pritemdžius? Ar ne toks pat principas naudojamas LCD monitoriuose? Kai kurie žmonės tam jautrūs; sako, kad tai jiems sukelia akių nuovargį ir galvos skausmus.
Labiausiai dėl to, kad LED’ams tai vienas iš efektyviausių būdų daryti temdymą. Daryti srovės reguliavimą yra gan sudėtinga ir reikėtų gamintis specifinius draiverius. Daryti tiesinius draiverius būtų iš viso pernelyg dideli nuostoliai.
Iš mano bandymų PWM įtaka akims veikia kažkur iki 100 Hz. Virš 200 Hz net ir su minimaliausiu 1/60000 pritemdymu mirguliavimo nematyti — o šviesos matyti dar truputukas 🙂 Mano paties atveju naudojami 300 Hz, nors galėčiau kelti iki 500 — bet tada būtų labai jau arti draiverio darbo ribos, tada gali pasireikšti mirguliavimas dėl netinkamo poveikio draiveriui, kai jis nespėja pilnai sureaguoti.
Pagyvensim, pamatysim. Jei prasidės keisti poveikiai galvai, pradžiai užkelsiu dažnį, o paskui galvosiu, ką dar nuveikti 😀 Jei kas nors, blė, paskolintų oscilografą, tai galėčiau tikslesnius duomenus pateikt, būtų gal galima, pavyzdžiui, low-pass filtrus draiveriams padaryti.
Norėjau pasiteirauti kaip darbuojasi išmanusis namas ant OpenHUB ir Raspberry Pi 3. Planuoju bandyti pas save todėl domina nuomonė.
Tai pasižiūrėkite tagą gudrabūda ir bus maždaug aišku. Nuo šito ankstyvo projekto daug kas pasikeitė. Valdymas ir statistikos tvarkomos su HomeAssistant. Viskas veikia, tik dar spinta nelabai gražiai atrodo, reikės laidų krūvas biškį refactorint 😁
Koks pas tamstą can magistralės ilgis gavosi? Kiek toli node’ai stovi nuo pagrindinės magistralės (stub length)?
Kadangi šito prototipo atsisakiau ir viską sudėjau į vieną spintą, tai kažkur pora metrų gavosi, be atšakų.
O tai kaip ateina signalas nuo jungiklių? Ar vienas jungiklis tam skirtas, kuris ir yra už 2m nuo spintos? 🙂 Galbūt kažką netaip supratau ir jungikliai nesiunčia can pranešimų į tą rėlių valdiklį.
Dabar yra kelios plokštės-valdikliai. Viena plokštė turi inputus ir outputus. Inputai yra jungikliai, outputai – relės ir PWM. Jungiklių laidų ilgiai iki 20 m, bet jie tiesiog signaliniai, patrumpina valdiklio kojytes. CAN aš naudoju tik valdiklių būsenų nuskaitymui ir valdymui per kompą.
O kodel atsisakėt pirmutinio plano su can žinutėmis iš jungiklių?Pats galvoju nusikopijuot tokį sprendimą,bet gal yra argumentų,kurie nuvis tokias mintis😀
Pora toj industrijoj dirbančių žmonių atkalbėjo nuo paskirstytų sistemų. O ir man pačiam mintis, kad reikės kiekvieną jungtuką sukonfigūruot, kad jis siųstų žinute į konkretų valdiklį ir jo konkretų kanalą biškį neramino. UI tikrai būčiau tingėjęs daryt. Kai vienas valdiklis atlieka visas funkcijas, jį galima tiesiog pajungti be jokio konfigūravimo, standalone.