23.9.2014

Myöhästynyt joululahja

Lopputulos.
Heitin viime joulun alla ajatuksen vaimolleni. Ehdotin hänelle ostavani pari mikrokontrolleria, rgb-ledirengasta ja lipo-akkua. Tämän jälkeen kerroin, kuinka viettäisin muutaman illan yhteistä vapaa-aikaamme kolvatessa ja toisen muutaman illan koodatessa. Lopputuloksen sanoin kiinnittäväni hänen korviinsa.

Vaimokulta vastasi, jotta sopiihan se.

Suunnitelmat ja alkuperäinen idea

Kytkentäkaavio.
Kuten arvata saattaa, jostakin se idea sitten lähti. Korvakorujen alkuperäinen ajatus ja toteutus löytyy Adafruitin tutoriaalista. Toteutin korut pääpiirteittäin ohjeiden mukaan välttyäkseni yllätyksiltä, sillä en ole aiemmin tehnyt mikrokontrollereilla mitään. Korujen käyttöliittymään sävelsin kuitenkin pienen muutoksen, sillä tutoriaalin mukaan tehtynä korut esiohjelmoidaan nk. demo-moodiin ja siten ne vaihtavat valokuviota tietyn aikajakson välein.

Projektin tavoitelista ei ollut kovin pitkä, mutta muutamia tärkeitä pointteja toki löytyi:
  • erilaisia valokuvioita
  • valokuviot vaihdettavissa helposti
  • paino max. 15g per koru (=painavimmat korulaatikosta löytämäni korvakorut)
  • allergikolle sopiva korvakorukoukku
Tutoriaalin perusteella ja sopivat korukoukut valitsemalla tavoitteet täyttyvät oikeastaan itsestään. Valokuvioiden vaihtaminen tapahtuu ohjeisiin lisäämälläni käyttökytkimellä. Toinen alkuperäiseen reseptiin tekemäni lisäys oli päävirtakytkin, jolla koko paketin saa näppärästi sammumaan ilman, että akun pienenpieni JST-liitin täytyisi irrottaa korusta.

Tarvikkeet

Projekti.

Adafruit Gemma hoop earrings -tutoriaalin ja omien muutosteni jälkeinen osalista per yksi koru muodostui seuraavaksi:
Tarvikehankinta suoraan Adafruitin verkkokaupasta tilaamalla oli yksi vaihtoehto, mutta mahdolliset tullimaksut ja niiden määrä jäi minulle kysymysmerkiksi. Tullin sivuilta toki löytyisi tuotekohtaiset tulliprosentit ja koska tuotteen arvo ja lähetyskustannukset ovat tiedossa, olisi tullauskustannukset voinut laskea. Helpompi vaihtoehto oli siten tilata tuotteet EU-alueen sisältä.

Kulutuselektroniikkaa Ikea-tyyliin - kokoa itse!

Pienellä hakemisella löysin Phenoptix -verkkokaupan, jonka valtavan hyvä ja nopea asiakaspalvelu vakuuttivat. Samoin se, että kaikki tarvitsemani tuotteet olivat saatavilla yhden luukun kautta ja yksillä postimaksuilla. Tekemäni tilaus putosikin postiluukusta ensimmäisenä joululomaa seuranneena arkipäivänä.

Ensitesti

Yömyöhä, onneksi on valoa!



Heti tilaisuuden tullen asensin kehitysympäristön, sovittelin osat yhteen ja latasin testiohjelman kontrolleriin. Hetken aikaa kaikki näytti hyvältä ja valot välkkyivät kuten piti. Kokeiltuani paljonko ledirengas antaa valotehoa ulos (setBrightness(255) ) , näkö meinasi lähteä.

Ledin datalehti kertoo yksittäisen värin valontuoton olevan suurimmillaan n. 1400mcd, joka vastaa varovaisen arvion mukaan n. 4,5 lumenia (=120 asteen aukeamiskulma). Kun tähän lisätään hieman matematiikkaa, voidaan todeta, että koko ledirenkaan valontuotto on täydellä teholla 16x4,5=72 lumenia. Valoa ei toki ole paljon verrattuna esim. tavalliseen 40W hehkulamppuun, mutta nämä ovat selvästi kirkkaammat kuin mitkään aiemmin näkemäni korvakorut.

Fail no1

Nii-ih, tekevälle sattuu. Ilmeisesti ledirenkaaseen päätyi testaillessa jonkinlainen virtapiikki, sillä törmäsin samaan ongelmaan kuin moni muukin adafruitin foorumeilla: ensimmäinen ledi data-in -pinnin jälkeen ei päästä ohjaussignaalia lävitseen ja lopputuloksena koko rengas mykistyy/pimenee. Kolikon kääntöpuolesta kerrottiin tällä tavalla:
The NeoPixels use a rather neat buffering trick for passing data: each chip consumes the first 24 bits that it sees on the DATA-IN line, then copies all the remaining bits to the DATA-OUT line. In the process, it buffers and 'regenerates' the signal, meaning you don't see line losses no matter how many chips are in the string.

The flip side of that is that killing one chip will cut off the signal to everything beyond it. Running a jumper to the next NeoPixel re-establishes the signal.

Kokeilin vinkkiä ja kytkemällä datalinjan suoraan renkaan kakkosledin data-in -pinniin, rengas alkoi kuin alkoikin taas toimia.
Kytkentä toisen ledin data-in -pinniin.

Foorumivihjeiden perusteella asiaa eteenpäin tutkiessani löysin internetin syövereistä erään artikkelin, jossa kirjoittaja oli tutkinut oskilloskoopin kanssa ledirenkaan datalinjaa ja huomannut sen signaalin todellakin sisältävän melko suuria piikkejä. Artikkeli antaa asiasta tarkemman selvityksen, mutta lyhyesti sanottuna datalinjan signaali ampuu noustessaan yli 1-tason ja menee laskiessaan negatiiviseksi, jolloin linjalle muodostuva piikki saattaa tehdä ledille hallaa. Kirjoittaja puhdisti datalinjan sopivalla vastuksella. Vastusarvo, joka artikkelissa tuotti parhaan lopputuloksen oli 230ohm, johon päästään kytkemällä 2kpl 470ohm 0,25W vastuksia rinnan.

Fail no2

Tuumasta toimeen. Oma koekytkentäni vastaavilla vastusarvoilla tuotti ilmeisesti todella puhtaan datalinjan, sillä kytkennän myötä myös ehjän ledirenkaan valot pysyivät mykkänä. Ilman vastuksia ehjää ledirengasta pystyi ohjaamaan hienosti.
Painetta ledille.
Jatkaessani rikkoutuneen renkaan debuggausta ilmeni, että ensimmäinen ledi otti vastaan datasignaalia ja syttyi normaalisti, mutta jostakin syystä ohjaussignaali ei saavuttanut toista lediä. Hieman vaihtelevin tuloksin ensimmäistä ja toista lediä painaessani koko rengas heräsi toisinaan eloon. Tämä viittasi mahdolliseen huonoon juotokseen joko ykkösledin data-out tai kakkosledin data-in -pinnissä.

Kontaktoin asiasta Phenoptixin asiakaspalvelua ja parin valokuvan lähettämisen jälkeen he laittoivat minulle uuden renkaan postissa. Phenomenal service, sanoo engelsmanni: sain pitää vanhan ledirenkaan ja bonuksena Phenoptix lähetti ylimääräisen ws2812 -ledin (=varaosa) rikkinäisen renkaan korjaamisyrityksiä varten!

Kokoonpano

Kytkimien tuunausta
Akku ja pääkytkin kasattuna.
Akkupaketti kiinnitettynä kaksipuoleisella teipillä.
Valmis koru edestä.
Vastoinkäymisistä välittämättä sain Fritzingillä piirtämääni kaaviokuvaa noudatellen kasattua yhden yhtä lediä vajaan korun. Toista rengasta en alkuvuodesta saanut koskaan rakennettua loppuun saakka, koska 

Fail no3 ja puolen vuoden paussi

Toista korua kasatessa tapahtui suunnilleen samoin kuin ensimmäisen kanssa ja ledirenkaan ensimmäinen ledi pimeni. Uusi ledirengas saapui kyllä helmikuussa, mutta siihen mennessä projekti oli jo jäänyt hyllylle yhdessä siihen kohdistuneen mielenkiinnon kanssa.

Viime kuussa vaimoni alkoi sitten kysellä, josko korut olisi mahdollista saada nyt ensi viikonloppuna järjestettävään Hope-tapahtumaan mennessä valmiiksi ja korviin.

Pieni tauko tekee terää

Eteenpäin, tuumi mummo lumessa. Otin kolvin kauniiseen käteen ja poistin rikkinäisen ledin myös toisesta renkaasta ja siirsin datalinjan suoraan kakkosledin sisääntulopinniin. Tammikuun vaikeuksien aikaan toisen korun akku-virtakytkinpaketti oli jäänyt myös kasaamatta, joten seuraavaksi tein tämän.

Näiden isompien toimenpiteiden jälkeen jäljellä olikin enää sellaisia pikkuviilauksia, kuten korukoukkujen kiinnitykset ja aiemmin toteutetun ohjelmakoodin säätöjä. Aikaa tähän kaikkeen kului noin kolme tuntia.
Valmis.
Nyt molemmat korut ovat siis viimeinkin viimeisteltynä ja toimintakunnossa. Minkä tammikuussa aloittaa, sen syyskuussa lopettaa?

Kasvoton kaunotar ja loistavat korut.
Kuten kaikkia hyviä asioita, näitäkin koruja kannatti silti odottaa.

Jälkipuintia ja akkutesti - valot päällä

Kauanko näitä valoja sitten polttelee? Gemman mainitaan olevan "Ultra low power, draws only 9 mA while running". Toisin sanoen, pelkkää mikrokontrolleria polttelisi jopa 16 tuntia korvakoruihin tulevan 150mA akun kanssa. Aivan tällaiseen aikaan ei korvakorujen kanssa tietenkään pääse, sillä myös ledirengas vaatii ampeereita. Käytännön testissä valot ovat pysyneet käyttökelpoisella valotehon säätöarvolla (setBrightness(10) ) päällä noin 4-5 tuntia.

Projektille asettamani tavoitelista tuli myös täytettyä:
  • erilaisia valokuvioita (yht. 15kpl)
  • valokuviot vaihdettavissa helposti (painike)
  • paino max. 15g per koru ( 15,2g )
  • allergikolle sopiva korvakorukoukku (jep)

Jatkokehitysidea 1: kiinnitys

Korua kasattaessa sorminäppäryys oli koetuksella, sillä koru kasataan pääasiassa langalla. Tämä ei ole kaikkein näppärin ja käytetystä langasta riippuen edes se kestävin vaihtoehto. Kevään aikana palasin tähän projektiin sen verran, että kehittelin ajatusta 3D-tulostetusta kiinnikkeestä.

Kokonaispainoa tällaisille kiinnikkeille muodostuisi tulostusmateriaalista riippuen noin 2-3 grammaa. Blenderillä tekemääni 3D-mallia voisi myös vielä hienosäätää tai yksinkertaistaa, mutta osan rakenteellinen kestävyys alkaa tällöin olla koetuksella.

Korvakorujen runko. Ledirengas kiinnittyy kehälle.

Toinen kehittelemäni toteutusvaihtoehto olisi tehdä kiinnike kahdesta erillisestä osasta, jotka asetettaisiin akun ja mikrokontrollerin ympärille. Tämä kokonaispaketti asetettaisiin sitten snap-fit -periaatteella ledirenkaan sisäkehälle puristuksiin.

Tulostuskustannukset olivat muutamasta paikasta kysellessä kuitenkin vielä hieman liian kovat, eikä Turussa ole toistaiseksi tarjolla esim. Helsingin kirjastoita vastaavaa ilmaista tulostusmahdollisuutta.

Jatkokehitysidea 2: kaukosäätö

Oikeastaan tämä kehitysidea oli osa alkuperäistä ajatusta. Miettiessäni vaihtoehtoja korvakorujen valojen ohjelman vaihtoon, pöydällä lojunut tv:n kaukosäädin antoi idean infrapuna-ohjaukseen.

Verrattuna nykyiseen painikekäyttöiseen käyttöliittymään, infrapuna-ohjauksessa olisi sekä hyviä että huonoja puolia. Painikkeen ehdottomasti paras puoli on käyttöliittymän yksinkertaisuus. IR-ohjauksen hyviä puolia ovat paitsi tekniset henkselinpaukuttelu-oikeudet, mutta myös korujen helppo synkronointi ja välttyminen mekaaniselta rasitukselta. Koska mitään uutta ei auringon alta kovinkaan usein löydy, löysin toki myös Adafruit-tutoriaalin, jossa Gemma-mikrokontrolleriin liitetään IR-vastaanotin.

Huonoja puolia painikkeella toimivissa koruissa on muutama: painiketta käytettäessä jokainen muutos täytyy tehdä molempiin koruihin erikseen. Tästä seuraa paljon kliksuttelua ja ohjelman valitseminen on melko hidasta. Toinen huoleni liittyy edellä mainittuun korujen mekaaniseen kestävyyteen, mikäli painiketta painetaan useasti esim. ystäville koruja demotessa.

Kaukosäädin-käyttöisten korujen suurin epäkäytännöllisyys syntyy siitä, että ohjelman vaihtamiseksi mukana täytyisi aina olla joku tietynlainen kaukosäädin. Mikäli telkkarin kaukosäädin olisi aina hukassa tai vaimon käsilaukussa, hermohan siinä menisi. Lähinnä tästä syystä päädyin toteuttamaan korut painikkeella ohjattavina.

Haasteet ja kiertotiet

Monimutkaisen ohjelmiston toteuttaminen ilman debuggausmahdollisuutta on hieman sama asia, kuin alakerran putkiremontin toteuttaminen yläkerran suihkusuuttimen kautta. Gemmassa ei ole konsoli-ulostuloa tai sarjaporttia, josta voisi näppärästi nähdä esim. debug-tulostuksia. Sarjaporttiin tulostaminen on tietyin reunaehdoin ja ylimääräisen ohjelmakirjaston kanssa mahdollista, mutta aivan ilman säätämistä ei tämänkään vaihtoehdon kanssa selviä.

Tästä johtuen kaukosäätimen lähettämien koodien lukeminen on melko vähintäänkin hankalaa. Adafruitin sivuilta löytyi kuitenkin osaratkaisu ongelmaan. IR-vastaanotin-tutoriaalissa Gemmaan kytketään FTDI-friend, jonka avulla saadaan tulostettua kaukosäätimen lähettämät heksadesimaalimuotoiset koodit käyttäjän luettavaksi. Minulla ei tällaista palikkaa ole, joten ajattelin hyödyntää käsillä olevia osia ja tehdä asiat toisella tavalla.

Suunnitelmani pohjautui seuraavaan nerokkaaseen havaintoon: kaukosäätimet lähettävät ohjauskoodinsa heksadesimaali-muodossa. Heksadesimaali -järjestelmässä käytetään 16 erilaista merkkiä (0-9 ja A-F) ja vastaavasti tilaamassani Neopixel-ledirenkaassa on 16 valoa. Ajatuksenani oli ensin lukea kaukosäätimen lähettämä koodi Gemmalla ja vilkutella sitten luettu koodi ulos ledirenkaan valojen kautta heksana. Antamalla jokaiselle valolle oman heksajärjestelmää vastaavan merkin ja tarkkailemalla valojen syttymisjärjestystä voisi kirjata tiettyä painiketta vastaavan koodin paperille muistiin. (Hieman samalla tavalla kuin esim. autojen vikakoodeja luettiin ennen OBD-lukijoiden yleistymistä, siis.

Sivujuoni: ekologinen osatilaus

Ennen käyttöliittymän lopullisen toteutustavan valintapäätöstä päätin varmuuden vuoksi tilata kaikkiin vaihtoehtoihin tarvittavat osat. Osalistalle päätyi tässä tapauksessa pari kappaletta IR-vastaanottimia (esim. Vishay TSOP38238)

Ympäristöystävällisiä IR-vastaanottimia.

IR-vastaanottimet tilasin näytteenä suoraan saksalaiselta elektroniikkatukkurilta. Tilaus hoitui melkoisen kivuttomasti, mutta UPS-lähetin kanssa aikataulujen yhteensovittaminen oli vaikeaa ja siten vasta viides toimitusyritys onnistui. Jotenkin luulen, että toimitusprosessin lopputuloksena pienenpienessä paketissa saapuneilla komponenteilla on taloutemme tuotteista se kaikkein suurin hiilijalanjälki, mikäli sitä mitataan suhteessa tuotteen painoon: Filippiineillä valmistetut, Saksan kautta Suomeen lennätetyt ja viiteen kertaan Helsingin ja Turun väliä kulkeneet vastaanottimet eivät ole ainakaan ihan ekoa tekoa. Ilmaisia asioita ei taida olla olemassakaan, sillä nyt näistä "ilmaisista" ja ei käyttöön päässeistä IR-vastaanottimista taisi seurata moraalinen velvoite istuttaa edes puu ilmaston lämpenemistä hidastamaan.

Olisi toki ollut hienoa, mikäli korut olisivatkin etäohjattavat. Joku vääräleuka ehti nimittäin ajatukseni kuultuaan ehdottaa, että ohjaisin sähkövirtaa valojen sijasta korvakorukoukkuun. Näin ollen minulla olisi kuulemma maailman ensimmäinen kaukosäätimellä ohjattava vaimo.

Henkilökohtaisesti epäilin todella vahvasti suunnitelman toimivuutta, mutta mene ja tiedä. Rohkeammat kokeilkoot...

Linkit

http://learn.adafruit.com/gemma-hoop-earrings
http://learn.adafruit.com/trinket-gemma-ir-remote-control
http://www.vishay.com/docs/82491/tsop382.pdf
http://www.adafruit.com/datasheets/WS2812.pdf
http://www.eetimes.com/author.asp?section_id=36&itc=eetimes_sitedefault&doc_id=1320518&page_number=2
http://www.oh3abn.net/index.php/t1moduuli/vastukset.html
http://fritzing.org/home/
https://github.com/adafruit/Fritzing-Library
https://github.com/mikko-n/Gemma-korvakorut/

p.s. Korujen ohjelmakoodi löytyy gitHubista (https://github.com/mikko-n/Gemma-korvakorut/blob/master/gemma_earrings_sketch/gemma_earrings_sketch.ino)

Ei kommentteja :

Lähetä kommentti