sunnuntai 23. lokakuuta 2016

LEDimatriisi pähkinäpuukotelossa

Pahoitteluni, en ole tänä syksynä kerennyt puuhastelemaan juurikaan harrastusten parissa, joten blogikin on jäänyt orvoksi. Perustamani yritys, perhe-elämä, muutama työn alla oleva nettisivusto, järjestötoiminta ja opiskelu ovat vieneet kaiken aikani varsin tehokkaasti. Huomennakin olisi analogia- ja tehoelektroniikan tentti, mutta jotenkin kummasti löydän itseni kirjoittamasta tätä opiskelun sijaan :D

Matriisia pitäisi saada laskettua alemmas, että hiottu pleksi taittaisi valoa kivemmin. Vähän ahdasta rasiassa on, mutta kyllä se onnistunee jos taivuttaa pinnejä 90 asteen kulmaan.

torstai 11. elokuuta 2016

TankkiBotti - ensimmäisen version ohjelma ja kytkentäkaavio



Edellisessä artikkelissa kertoilin uudesta robottiprojektistani TankkiBotista (Nimi ehkä muutettava, alkaa ärsyttämään jo nyt :D). Kokeilin tänään minulle uutta ohjelmaa nimeltä Fritzing, jolla tein botin tämänhetkisestä tilasta kytkentäkaavion:

tiistai 9. elokuuta 2016

TankkiBotti

Oh yeah! Maadoitusmittaukset Inspectalla on nyt tämän kesän osalta tehty, joten minulla on muutama viikko kesälomaa ennen Tekuun palaamista. Mikäpä sen mukavampi tapa viettää kesälomaa, kuin rakennella elektroniikkaa neljän seinän sisällä! No käyn minä joskus ulkonakin.

Kuten minut tuntevat tietävät, minulla on päällekkäin ja limittäin monia projekteja, joista osa valmistuu ja osa valmistuu aika tavalla hitaammin, jos silloinkaan. Jälkimmäiseen kategoriaan taitaa kuulua sääasema, jolla aloitin tämän blogin. Mutta hyvästä syystä: Kesän aikana päässäni kytenyt ajatelma telaketjuilla varustetusta robotista on lähes huomaamatta edennyt jo tekemisen asteelle. Saanko esitellä, TankkiBotti:



TankkiBotti, versio alfa piste Jägermaister. Huomaa ultraäänisensorin professionaalinen ripustus. Yritin selittää Ninalle että ei, en leiki Legoilla vaan teen tuotekehitystä. Ei tainnut uskoa.

lauantai 23. heinäkuuta 2016

Commodoreongelmia


Suurena syntetisaattori- ja retrotietokoneintoilijana tilasin itselleni Ruotsista synttärilahjaksi MSSIAH - moduulin Commodore 64:lle. Kyseessä oleva palikka sisältää midiportin ja erilaisia musiikkisoftia Commodoren legendaarisen SID-äänipiirin ohjaukseen:


Minulla oli ennestään yksi C64, jonka toimivuudesta ei ollut tietoa, sillä siitä puuttui virtalähde ja videopiuha. Kuusnelosen virtalähde on sen verran erikoinen viritelmä 9V AC, 12V DC ja 5V DC -jännitesyötöillään, että en viitsinyt alkaa askartelemaan sellaista itse. Huuto.netissä ja Tori.fissä on silloin tällöin myytävänä 64:n osia ja varusteita, mutta hinnat ovat yleensä aivan käsittämättömiä. Minulla kävi kuitenkin tuuri, kun selasin Toria, sillä joku myi rikkinäistä Commodorea ja virtalähdettä hintaan 15€ ja vieläpä kotikunnassani.

sunnuntai 26. kesäkuuta 2016

Tee-se-itse-palvelin sensoridatalle Node.js:llä

Internetiin yhdistetyt sensorit tuottavat hirmuisen määrän dataa, ja koko hommassa ei ole mitään järkeä jos tietoa ei saa tallennettua tietokantaan ja haettua ja suodatettua tarvittaessa. Tätä varten on pilvipalveluja, mutta olen jo pitkään halunnut viritellä oman serverin kotiin. Lisäksi kiinnostuin vähän aikaa sitten node.js:stä, joten päätin tehdä koko homman itse.

Teinkö todella vuokaavion? Taisinpa tehdä. Verkkoon liitetty valoisuussensorini lähettää kerran minuutissa lukemansa wifin kautta node.js -serverille, joka tallentaa sen MongoDB-tietokantaan. Dataa voi katsella ja muokata webbikäyttöliittymän kautta.


Olen asentanut muutaman kerran perinteisen LAMP -stackin (Linux, Apache, MySQL, PHP), ja sellaisenkin päälle olisin toki voinut dataa keräävän serverini rakentaa. Olen kuitenkin taustaltani huomattavasti enemmän front- kuin backendkoodaaja, joten mahdollisuus käyttää tutumpaa JavaScriptiä serverin puolella sai minut valitsemaan node.js:n. Tyhjensin siis vanhan media-PC:n serveriksi ja asensin siihen Ubuntu 16.04 -käyttiksen. Tietokantana toimii MongoDB ja serverinä node.js:n ja express.js:n voimin ohjelmoitu tee-se-itse -palvelin.

En ole ikinä koodannut serveriä enkä ajatellut sitä nytkään tekeväni, mutta löysin vaativan mutta mainion tutoriaalin aiheesta. En ala tässä käymään sen tarkemmin läpi pitkähköä ja teknistä asennus- ja koodaussessiota, mutta asiasta kiinnostunut löytää paljon lisätietoa edellä olevasta linkistä. Lyhyesti kuvattuna Express.js loi valmiin luurangon, jonka päälle on nopea kehittää monenlaisia node.js -sovelluksia. Serveri oli valmis muutaman illan koodailun tuloksena (voi juhannuksen näinkin viettää :D). Se sisältää kirjautumisen, autentikoinnin, salasanojen hashauksen, käyttäjien hallinnan, datasettien luomisen ja yksilöllisten API-avaimien generoinnin.

Hyödyllisemmän sensorin puuttuessa liitin NodeMCU -mikrokontrolleriin valovastuksen sarjaan 12k vastuksen kanssa 3.3 voltin ja ainokaisen analogisen pinnin väliin, ja kirjoitin ohjelman joka lähettää kerran minuutissa luetun arvon tuliterälle palvelimelleni GET-metodilla. Jotta tietokantaan voi kirjoittaa arvoja, ko. datasetin täytyy olla ensin asetettu julkiseksi ja lähettävän ohjelman täytyy tietää oikea API-avain.

Vasemmalla MacGyveroidun sensorini lukemat muutaman tunnin ajalta, oikealla serverin loki. Datasta voimme päätellä että a) aurinko menee välillä pilveen ja b) valon määrä tuvan puolella taloa kasvaa iltaa kohti. Onpahan nyt faktatietoa asiasta.


sunnuntai 19. kesäkuuta 2016

verkko-ohjattu LED

Ekskursioni Lua-ohjelmointiin NodeMCU:lla edistyy. Kirjoitin lähiverkossa toimivan serverin, jonka kautta voi ohjata RGB-LEDiä puhelimella, tabletilla tai millä vain laitteella jossa on selain. Kytkentä ei voisi olla simppelimpi, sillä NodeMCU toimii 3.3 voltin jännitteellä, joka on tarpeeksi lähellä LEDin käyttöjännitettä. Kytkin yhteisen katodin maahan ja jokaisen värin anodin omaan ulostulopinniinsä. Pitempiaikaiseen installaatioon olisi ehkä silti syytä laittaa virtaa rajoittavat vastukset anodeihin, sillä valo on melko kirkas.


NodeMCU-firmwaren tehokkuus näkyy hyvin koodin pituudessa: koko ohjelma on vain noin sata riviä pitkä ja siitäkin suurimman osan muodostaa asiakaslaitteelle tarjoiltava HTML. Vastaavan serverin ohjelmointi pelkällä C:llä vaatisi jäätävän paljon enemmän koodia. Lua on kuitenkin rakennettu C:n päälle ja tukee tarvittaessa C-kielen funktioita kun halutaan suorituskykyä.

Ohjelma avaa lähiverkkoon yksinkertaisen serverin, joka kuuntelee TCP-yhteyksiä portissa 80 ja lähettää asiakkaalle nettisivun joka sisältää punaisen, sinisen ja vihreän neliön, joita klikkaamalla lähetetään palvelimelle get-metodilla avain/arvopari (esim ?vari=PUNAINEN). Ohjelma tulkkaa avaimen ja arvon URL:n perästä saadessaan get-komennon, ja sytyttää halutun LEDin.

Alla oleva listaus toimii, mutta se on yksinkertaisempi mitä aluksi koodasin. Jostain syystä merkkijonoksi tallennettu bufferi ei voi olla suurempi kuin 1460 tavua, ja jouduin poistamaan HTML-koodista noin puolet. Tutkimukset aiheesta jatkuvat, sillä mitään tämän monimutkaisempaa ei niin minimaaliseen tilaan mahdu. Tuli mieleen ainakin koodin pätkiminen alle 1460 tavun paketteihin ja niiden lähettäminen asiakkaalle yksi kerrallaan, mutta toivoisin jotain vähemmän monimutkaista ratkaisua.

lauantai 11. kesäkuuta 2016

NodeMCU WiFi-moduuli tulla tupsahti postilaatikkoon

Mitä kaikkea saakaan neljällä eurolla? Riippuu mistä ostaa. Sillä saa joko hampurilaisen ilman ranskiksia ja juomaa, tai sitten täysverisen 32-bittisen dev boardin 80 MHz suorittimella, WiFi-yhteydellä ja USB-liitännällä.

Nätti kuin mikrokontrolleri pienenä

Minulla oli jo yksi ESP8266 -moduuli sääasemaprojektia varten, mutta se siirtyi paikkaan X, joka on tunnetusti, varsinkin minun tapauksessani, melko yleinen tavaroiden säilytyspaikka. Se oli lisäksi vielä karvahattumalli, jonka ohjelmoimiseen olisi tarvinnut Arduinon tai USB - Serial konvertterin, joten päätin tilata NodeMCU v3:n (kuvassa) jonka voi kytkeä suoraan tietokoneeseen, ja jossa on paljon GPIO-pinnejä prototyyppausystävällisessä formaatissa.

Käyttöönotto

En ole aiemmin puuhastellut muiden kuin kasibittisten AVR-kontrollereiden kanssa Arduino-ympäristössä, joten ensimmäiseksi piti asentaa koneelle tarvittavat työkalut firmwaren päivitykseen ja koodin lataamiseen:
Ensimmäinen öö-hetki tuli heti vastaan. Esptool eli firmwaren päivitykseen käytettävä softa toimii pelkästään vanhemman Python 2.7.x, mutta ei uuden 3.x version kanssa. Downgreidattuani Pythonin aiempaan versioon sainkin esptoolin toimimaan ja komentokehotteen kautta pingattua laitetta. Se palautti kuuliaisesti chip id:n ja muutaman muun datanpätkän. Success, laite toimii!


sunnuntai 5. kesäkuuta 2016

Ötökkärobotti

Sääasemaprojektin osia odotellessa rakenneltiin Onnin kanssa yksinkertainen kävelevä robotti. Tosin vielä sitä ei voi sellaiseksi kutsua, sillä tällä hetkellä se on ohjelmoitu kävelemään koko ajan eteenpäin, eikä siinä ole yhtään sensoria. Ötökkäbotin vartalo koostuu kahdesta toisiinsa kuumaliimatusta SG90 - servosta, jotka liikuttelevat rautalangasta taivuteltuja jalkoja. Servorungon päälle sopii kuin nakutettuna Arduino Nano -klooni, joka ohjaa servoja ohjelman mukaan. Nanon päällä on vielä 9v paristokotelo, ja koko viritelmä on kiinnitetty runkoon professionaalisesti parilla kuminauhalla.
Kunhan saadaan ötökkä kävelemään suunnilleen suoraan, liitän systeemiin myös ultraäänisensorin, jolloin botti osaa väistää esteitä ja seiniä.

maanantai 16. toukokuuta 2016

Kesäprojekti: Wifi-sääasema

Tämän vuoden aikana minulle on rantautunut Kiinasta erinäisiä nyssäköitä, jotka sisältävät  elektronisia komponentteja. Vihdoinkin keksin niistä jonkun järkevän projektin, joka ei ole liian monimutkainen, mutta kuitenkin tarpeeksi haastava:

My Internet of Things - thing: Wifi-sääasema

Internet of Things (IoT) on yksi tämän päivän isoimpia ja ärsyttävimpiä muotisanoja. Sillä tarkoitetaan kaiken mahdollisen yhdistämistä internetiin; älytaloja, -jääkaappeja, -leivänpaahtimia, -termostaatteja, -leluja, -kissanruokakuppeja ja niin edelleen. Henkilökohtaisesti en näe mitään syytä miksi joku haluaisi leivänpaahtimensa nettiin, mutta ilmeisesti markkinatalous on päättänyt, että siihen ollaan menossa. Mutta mikäpäs siinä toisaalta, lisää töitä tulevaisuuden minulle.

Projektin tavoite

Tarkoituksena on tehdä esteettisesti ihastuttava laatikko, joka näyttää ajankohtaisen sääennusteen esim. animaationa tai kuvana sisäänrakennetulta näytöltä, jonka virkaa ajaa 8 x 8 pikselin RGB LED-matriisi. Laatikko on pähkinäpuuta ja näyttö tulee sumennetun pleksimuovin taakse.

Laatikko, LED-matriisi ja sinällään aika randomi FTDI USB to Serial konvertteri, jolla ohjelmoidaan ESP8266 -wifimoduulia, jota en tähän hätään löytänyt. Miksi niitten täytyy olla niin pieniä?

Projektin sydämenä toimii ESP8266 -wifimoduuli, joita saa ebaystä muutamalla dollarilla. Erillistä mikrokontrolleria ei näillä näkymin tarvita, sillä joku hieno henkilö on kirjoittanut Arduino-IDE:stä version, jolla voi ajaa koodia suoraan moduulin omalla prosessorilla. 

Ehkäpä isoin kysymysmerkki tällä hetkellä on varsinaisen säädatan hankkiminen. Ei sillä etteikö sitä olisi, vaan nimenomaan päinvastoin. Pikaisen googlettelun seurauksena eri palveluita ja protokollia on pilvin pimein. Päätin kuitenkin avainlippulogo silmissä lähteä tutkimaan ensimmäisenä ilmatieteen laitoksen tarjoamaa ohjelmointirajapintaa (FMI Open Data WFS services). Datan määrä ko. palvelussa on vallan päätähuimaava, mutta luultavasti homma toimisi siten, että teen palvelimelleni skriptin, joka kyselee sääpalvelusta ennustetiedot esim viiden minuutin välein, ja kirjoittaa valitut tiedot järkevämpään formaattiin toiseen tiedostoon. Sääasema kävisi sopivin väliajoin katsomassa tiedoston sisällön ja muuttaisi toimintaansa sen mukaan (esim. sateen ollessa todennäköistä, vaihtaa näytölle sadeanimaation).

Ajattelin lisätä vielä painonapin tai kaksi, joista saa esim. kellonajan, päivämäärän ja/tai lämpötilan ruudulle. Tietynlaisen haasteen asettaa myös huima 8x8 pikselin resoluutio, mutta hei, onneksi skrollaus on keksitty jo 80-luvulla. Tai varmaan aiemminkin.