maanantai 7. syyskuuta 2015

Valoautomaatio - valmistelut ja rautapuoli

Muutamassa edellisessä blogipostauksessa olinkin jo maininnut, että jossain vaiheessa ryhdyn valoautomaationkin kimppuun. Ja lomaviikoilla ehdin pikkuisen taas projektiin antaa vapaa-aikaani. Talvella jo koitin yleismittarilla ihmetellä, että miten teknisessä tilassa oleva matalasähköimpulsseilla toimiva valojen kytkentätaulu toimii. Mutta tulokset olivat laihoja kun en saanut kunnollisia arvoja mitattua. Mutta sitten tajusin, että hetkinen kokoajan olen yrittänyt tasavirtaa mitata, mutta noi valokatkaisijat voivat myös toimia vaihtovirralla. Joten yleismittarin vipu vaihtovirralle ja uusi mittaus, ja johan alkoi lyyti kirjoittamaan. Muutama ärräpää pääsi, kun AC:n ohjaus on pikkuisen kinkkisempää kuin DC:n (mutta enpä speksausvaiheessa tajunnut sähkärille sanoa, että tasavirtaa haluaisin ohjausimpulssien olevan).

40 kaksikärkistä relettä siis hoitaa teknisessä tilassa valojen ohjausta. Huoneissa on Schneiderin Exxact-sarjan impulssikytkimet, joilla voi valoja ohjata normaalisti. Sen lisäksi nyt on siis tarkoitus lisätä automaatio, että pystyn katsomaan ja ohjaamaan valojen tiloja tietokoneelta. Vaihtovirran seuraamiseen tilasin sitten kymmenen 16-pinnistä (4-kanavaa) octocoupleria. Neljä euroa ei ole paha hinta näille (ebay URL). Näillä siis olisi tarkoitus lukea noita kaikkien releiden mahdollista 24V AC virtaa ja generoida siitä 3.3V DC signaali BeagleBone Blackin GPIO:lle. Nämä osat ovat vielä tilauksessa, joten siitä erillinen blogipostaus myöhemmin.

Signaalin ohjauspuolella minulla oli osat hankittuna jo ennestään, ja olinkin maininnut niistä edellisissä blogipostauksissa (http://omakotikotitalomme.blogspot.fi/2015/01/internet-shoppailua-tekniikkaharpakkeita.html#mcp23017 ja kolme http://omakotikotitalomme.blogspot.fi/2013/12/tekniikkaa.html#relelevy).


Nyt kun tässä on jonkin aikaa ollut mietintämyssy päässä, että miten automaation toteuttaisin. Joten eikun pistetään kolvi tulille ja katsotaan mitä saadaan aikaiseksi. I2C:n yli olisi tarkoitus 3.3V signaaleilla ohjata noita relelevyjä MCP23017:aa apuna käyttäen. Olin jo aikaisemmin testaillut tuota yhdistelmää, joten periaatteessa systeemin pitäisi toimia. Joten koputetaan puuta ja toivotaan parasta.

Aika siistin näköisen tuloksen sain kolvaillulla aikaan. 5x7cm levylle mahtui nätisti kolme MCP23017 mikrokontrolleria, jossa on yhteensä 48 GPIO:ta. Talossamme kun on tällähetkellä vain 40 kaksikärkistä relettä, niin toi riittää vallan hyvin ja on laajennusvaraakin. Nurkkaan pistin kaksi pinniä, johon voi raspberrystä pistää 3.3V ja GND. Ja I2C pinnit pistin kahteen paikkaan, jolloin voi tarvittaessa I2C läpiviennin jatkaa muihinkin laitteisiin. Levyn takapuoli ei olekaan niin valokuvauksellinen (ja mulla ei ollut SMD vastuksia hyllyssä) kun kolvikäsi vapisee ja kuumaliimalla varmistettiin kolvausvetojen toimivuus. Mutta siis pistin jokaisen GPIO pinnin perään pistin 2.2kΩ vastuksen, niin ei ole vaaraa, että Raspberrystä otettaisiin liikaa virtaa, ja relelevyt toimivat silläkin virralla. Tämän levyn osien hinnaksi tuli alle 5 euroa, ei ole kovin paha jos vertaa kaupallisiin KNX automaatiojärjestelmien tuhansien eurojen hintalappuun.

Tietenkään omalle työlle ei laske hintaa, ja vaikka laskisikin, niin paljon halvemmaksi tulee tehdä itse. Jos koko talon olisi tehnyt KNX-tekniikalla, niin sähkötöiden kokonaiskustannukset olisi olleet 10000-20000e kalliimpi kuin perinteisellä tekniikalla toteutettuna (kuten minun kaksikärkisillä releillä). Ja itse tehtynä kaikkien ohjauslaitteiden (kuten Raspberryt, Beaglebonet, äänen vahvistimet, Android tabletit yms.) yhteishinta on edelleen alle 1000e. Eli tavoitteena on saada yli 10-20ke säästöt tekemällä koko valoautomaatio itse.

Nopeasti testailin tuota ekana työhuoneen Raspberryllä ja hyvin tuntui toimivan. Seuraavaksi pitäisi sitten testata itse teknisessä tilassa oikeaa systeemiä. Jotenkin kiehtoo, että automaatio olisi myös näkyvillä, joten ajattelin, että laitteet voisi kiinnittää sähkökaappia suojaavaan muovikanteen (ja mahdollisesti suojata se sitten läpinäkyvällä muoviplexillä). Jolloin sitä voi ihailla ulkoapäin ja sitä on helppo laajentaa. Sitten olisi hyvä että sen kannen saisi myös irti, joten ajattelin että sähkökaapin liittimien läpiviennit toteutettaisiin vaikka vanhoilla kovalevykaapeleilla, kun lättäkaapeleissa on 40 pinniä ja semmoisten liittimien läpivienti kannen läpi ei ole vaikeaa ja semmoisen kaapelin kiinnitys/irroitus on helppoa.

Yllä on tilannekuva kun kolvailin 20-pinnistä rimaa signaalikaapeleille, kahdella tuommoisella saa 2x20 pinnirivin johon voi kovalevykaapelin pistää kiinni. Ja seuraavassa kuvassa sitten itse kaapeli on kiinnitetty teknisessä tilassa olevaan matalajänniteohjaustauluun. Nyt kun se on kiinnitetty, niin pitäisi olla talon jokaisen kaksikärkisen releen ohjaus mahdollista.

Ohjauksen lisäksi olisi kiva tietokoneen aina tietää, että on valo päällä tai ei. Sitä varten on kaksikärkiset releet, eli toisessa kärjessä menee 220V ja toisessa 24V AC vaihtovirta (jolla normaalisti ohjataan seinäkatkaisijan lediä). Tämän ledisignaalinen väliin olisi tarkoitus päästä ilman että ledit lakkaisivat toimimasta. Tämän ongelman ajattelin ratkaista octocouplereilla, jolloin 24V AC vaain triggeröi Raspberryn 3.3V signaalin, eikä tuhoa koko tietokonetta :-)

Eli hankin ebaysta kasan TLP521-4GB octocoupleita (ebay link). Neljällä eurolla pystyy lukemaan ja generoimaan 40 signaalia, eli aika edullinen ratkaisu. Kolvailin kasaan tommosia pikku emolevyjä, jotka voivat lukea 8 kaapelia kerralla. Viidellä tuommoisella lukee kaikki 40. Noiden viiden levyn GPIO pinnit on tarkoitus kiinnittää 40-pinniseen lattakaapeliin, jolla tehdään läpivienti sähkökaapista Raspberryn puolelle.

Kaikki ei mennyt kuin Strömsössä, kun oli postissa joku astunut optocoupler lähetyksen päälle, ja kaikki pinnit olivat vääntyneet. Vääntelin niitä suoriksi, mutta lopulta kuitenkin suurimmassa osassa oli joku pinni sisäisesti katkennut. Joten kolvailuja pitänee vielä korjailla jälkeenpäin. Kun nyt taitaa vain 30 signaalia toimia. Joten sitä joutuu odottelemaan hetken, että varaosat saapuu... Ja lopulta osat saapuivatkin, niin pääsi jatkamaan tämän postauksen kanssa näpertelyä.

Sitten itse sähkökaapin kanteen, jonne kasasin automaation, niin että koko komeutta voi ihailla ulkoapäin. Yläosaan kuumaliimasin kuusipaikkaisen jatkojohdon. Alanurkkaan liimasin 40-pinnisen kovalevykaapelin liittimen, josta menee sitten piuhoitus kolmeen 16-releen levyyn. Näillä levyillä voi lähettää valoille 24V AC ohjaussignaaleja. Relelevyjen yläpuolelle sitten MCP23017 GPIO levy, jonka vieressä on kaiken ohjauksen sydän eli Raspberry Pi 2-minitietokone. Samoin väkersin toisen MCP23017 GPIO levyn (ja 40-pinnisen liittimen), jolla voi sitten lukea kaksikärkisten releiden tilaa. Kannen sisäpuolelle pistin viisi tuommoista 8-kanavan optocoupler levyä, joilla 24V AC vaihtovirtasignaali tunnistetaan, ja josta generoidaan 3.3V DC tasavirtasignaali edellä mainitulle GPIO levylle. Tällä tavalla Raspberryllä voi ohjata 96:tta GPIO:ta, joka riitää talon jokaisen valon ohjaus- ja tilasignaalille.

Edellisillä optocoupler levyillä saa heittää vesilintua, kun Internetin ihmeellisestä maailmasta luin kolvailua seuraavana päivänä, että optocouplerit saattaa kärvähtää yli 5V signaalista (joten taittuneiten pinnien lisäksi saatoin itse kärventää muutaman piirin). Muutaman illan kolvaukset meni hukkaan, mutta aina oppii jotain uutta. Siispä avasin virtapiiri simulaattorin ja piirsin itselleni 24V AC -> 3.3V DC muuntajan, jolla pitäisi optocouplereitten toimia ilman ilman savua. Tässä suunnitelma piirrettynä ja oscillaattorin laskelma, että voltit olisi raja-arvojen sisällä ja tilavaihtumat tunnistettaisiin 4ms:n viivellä kun käyttää 100uF:n capaa.

Selitän vielä ton suunnitelman aukikin, eli neljällä 1N4001 diodilla (diodi-silta) ekana muutetaan tuo +-24V sinikäyrä niin, että negatiiviset arvot katoaa. Jolloin AC muuttuu DC muotoon, mutta GPIO:n kannalta tämä olisi hieman huonoa kun silloin arvot muuttuisivat päälle (sininen huippu alla olevassa kuvassa) ja pois (sininen nollatasossa eli vastaa sitä punaisen negatiivista virtaa jonka diodi leikkasi pois) 60 kertaa sekunnissa. Sitten laskemme 100kOhm resistansilla ekana virran minimiiin kun GPIO ei tarvitse mA:ta enempää ja 10kOhm resistanssilla (hiilikalvovastus) laskemme voltit 3.3V-2.0V:n välille, jota Rasperryn GPIO syö sisäänsä. Ja sitten ekan resistanssin jälkeen pistämme vielä 100uF:n capan maahan, jolla sitten saamme yllä olevan kuvan mukaisen sahalaitakuvioinnin. Eli kondensaattori (capasitor) tasoittaa tuon siniaaltoisen DC virran siten, että varaus ei pääse laskemaan nollaan saakka. Tästä tietenkin seuraa muutaman millisekunnin viive tunnistukseen, mutta samalla se poistaa ton on/off hyppimisongelman tunnistuksessa. Teoriassa 15kOhm:lla päästään lähemmäksi 3.3V:tä, valitsin 12kOhm, että mennään lähemmäksi 2.5V:tä, jolloin AC piiristä saa tulla isompia peak arvojakin ilman savupilveä. Tämä siksi että 24VAC joten peak-arvo DC volteille on itseasiassa 24 *  2  = 34V, jolloin 100kOhm ja 12kOhm kombinaatiolla peak arvoksi tulee 3.6V. Lisätietoa tälläisen diodisillan (aka. rectifier) toiminnasta voi lukea esim täältä: http://electronicsclub.info/powersupplies.htm#rectifier

Aika monen yrityksen ja erehdyksen kautta sain testiympäristossäni AC tunnistuksen toimimaan yhdellä lampulla. Muutamassa prototyypissä tuli savut pihalle, ihan omien lukihäiriöiden takia, mutta lopulta tuli toimiva diodisilta design valmiiksi. Nyt pitää vaan odotella, että hong kongista tulee sopivasti osia joilla voi kolvata kaikkien 40 releen AC-tilatunnistuksen.

Tässä valmistelu postauksessa valojen tilan lukeminen ja ohjaus on vielä aika komentorivipohjaista, kun käyttöliittymän koodaus on vielä vaiheessa. Mutta kunhan koodaus etenee, niin lupaan tehdä jatkopostauksen, jossa esitellään automaation integrointi käyttöliittymään, jota voi ohjata tietokoneella, kännykällä ja tabletista.

Tässä sitten 'valmis' ohjauslogiikka kuumaliimattuna sähkökaapin kanteen (vasemmalla puolella 48 relettä ja oikealla puolella diodisiltalevyt valojen tilojen lukemiseen). Aikamoinen johtoviidakko siitä tuli, mutta toimii, joten riittää minulle. Diodisiltoina käytin KBP206:sia, jotka hankin ebaystä.

Tässä on pieni demovideo jossa Raspberryllä ohjataan 48 relettä päälle ja pois i2c:n yli. Tuommoinen pulssin pitäisi riittää ohjaamaan kaksikärkisiä releita (eli talon kaikkia valoja).
video

5 kommenttia:

  1. Komea on systeemi ja aika guru olet kyllä kun itse suunnittet ja toteutat tuon kaiken.
    Kiehtovaa luettavaa, odotan innolla lisäpostauksia.

    VastaaPoista
    Vastaukset
    1. Joo, kyllä lähiaikoina tulee postaus ja videota tuon projektin softapuolen etenemisestä.

      Poista
  2. On tainnut päivitys vähän venähtää, taitaa muu elämä häiritä..

    VastaaPoista
    Vastaukset
    1. joo, pientä viivettä on päivityksessä, kun tossa putkahti kaksoset maailmaan lokakuussa. Kyllä se päivitys on tulossa, mutta vapaa-ajan puutteen vuoksi venyy ensi vuoden puolelle :)

      Poista
    2. Onnittelut, hieno kuulla. Olen hieman utelias koska oma projekti on suunnitteluvaiheessa, mutta toisaalta ymmärrän täysin, oma esikoinen näki päivänvalon myös lokakuussa

      Poista