perjantai 11. elokuuta 2017

Tarvitsevatkohan kasvini kastelua?

Seuraava kokeiluni oli todella kiva projekti! Laitoin kasvin multaan maaperänkosteussensorin, joka mittasi mullan kosteutta. Mikäli multa oli liian kuivaa, ledi valoi punaisena ja ohjelma tulosti tekstiä "Time to water your plant". Mikäli multa oli tarpeeksi kosteaa, ledi paloi vihreänä, ja ohjelma tulosti tekstiä "Doesn't need watering". Se oli helppo tehdä ohjeita seuraamalla, ja lopputulos näytti tältä:



Miten päädyin kyseiseen lopputulokseen? Minun oli ollut tarkoitus jo pitkään rakentaa automaattinen kastelujärjestelmä, joten teki mieli kokeilla ensin pelkästään mullan kosteuden mittaamista maaperänkosteussensorilla. Päädyin testailemaan kahta eri projektia, joista toisen esittelin yllä, ja se on mielestäni parempi. Ensimmäisen projektin lopputulos oli mielestäni hieman epätarkka, eikä se sisältänyt kivoja ledejä!

Projekti 1


Katsoin Make: Sensors kirjasta, olisiko siinä neuvoja kasvin mullan kosteuden mittaamiseen, ja olihan siinä! Kirjassa kerrottiin, että normaali hanavesi ja maaperän vesi sisältävät liuenneita suoloja ja muita materiaaleja, mikä tekee vedestä sähköä johtavan. Maaperänkosteussensorit mittaavat kyseistä sähkönjohtavuutta. Mutta minun kosteussensorini näyttivät erilaisilta kuin kirjassa:


Kirjan sensoriin ei kuulunut elektronista osaa, toisin kuin minun sensoreihini. Lisäksi sensorini numerointi oli erilainen kuin kirjassa. Minun sensorini oli nimeltään YL-69, kun taas kirjassa sensori oli  nimeltään FC-28.



No, kirjan kytkentäkaaviosta ei olisi apua, koska ne on tehty sensorille, joka liitetään vain Arduinoon. Päätin etsiä netistä ohjeita, jotka sopisivat minun varusteisiini. Törmäsin create.arduino.cc:n sivuilla ohjeeseen, jossa on käytetty samaa sensoria ja sen mukana tulleeseen elektronista osaa, jotka minullakin ovat. Jee! Elektroninen osa on nimeltään YL-39 ja suluissa kerrottiin sen olevan "logic", minkä arvelen viittaavaan siihen, että osa voisi olla looginen piiri. Arvelen, että looginen piiri muuttaa sensorin tiedot Arduinolle luettavaan muotoon binääriluvuiksi. Kävin viime vuonna hieman kurssia "Tietokoneen rakenne ja arkkitehtuuri", mutten saanut käytyä sitä kovin pitkälle. Tänä vuonna uudestaan!

Luin projektin kytkentäkaavion Fritzing -ohjelmalla. Sillä voi testailla erilaisia kytkentöjä, kätevää! Kytkentäkaavio (ja Fritzing-ohjelma) on tämän näköinen:


Ongelmana oli, että sekä sensorien mukana tulleet johdot että arduinon nastojen kytkentäkohdat olivat naaras-tyyppiä (punaiset ympyrät kuvassa). Jotta Arduinon nastaan voisi kytkeä johdon, sen tulisi olla koiras-tyyppiä (turkoosi ympyrä kuvassa). YL-39:n nastat puolestaan ovat koiras-tyyppiä, joten niihin tulee liittää naaras-tyyppinen johto. En siis voinut liittää omaa koiras-johtoani Arduinosta YL-39:iin, koska siihen tarvitaan naaras-päätteinen johto.


Päätin liittää koiras-johdon Arduinoon ja myös naaras-johtoon. Naaras-johto sopisi sitten YL-39:iin. Ehkä tuollainen johtojen yhdistely on jokin yleinen käytäntö elektroniikassa, tai sitten on olemassa jotain adaptereita, en tiedä kun ei ole kokemusta. Mutta kokemusta onneksi koko ajan kertyy! Testaamisvaiheessa näkisi, toimiiko tuollainen. Tosin miksei toimisi?

 

Tällainen kytkennästä tuli!


Sitten vain koodin lataus samalta sivulta kuin ohjekin eli osoitteesta https://create.arduino.cc/projecthub/nekhbet/using-the-yl-39-yl-69-soil-humidity-sensor-with-arduino-968268. Luin muuten tänään uudesta kirjastani Exploring Arduino - Tools and techniques for engineering wizardy (kirjoittanut Jeremy Blum) Arduinon koodaamisesta. Tiedän nyt siis tarkemmin, mitä alla olevassakin koodissa on tehty! Kirjoitan Arduinon koodaamisesta myöhemmin. Kirja vaikuttaa muuten todella loistavalta!

// YL-39 + YL-69 humidity sensor
byte humidity_sensor_pin = A1;
byte humidity_sensor_vcc = 6;

void setup() {
  // Init the humidity sensor board
  pinMode(humidity_sensor_vcc, OUTPUT);
  digitalWrite(humidity_sensor_vcc, LOW);

  // Setup Serial
  while (!Serial);
  delay(1000);
  Serial.begin(9600);
}

int read_humidity_sensor() {
  digitalWrite(humidity_sensor_vcc, HIGH);
  delay(500);
  int value = analogRead(humidity_sensor_pin);
  digitalWrite(humidity_sensor_vcc, LOW);
  return 1023 - value;
}

void loop() {
  Serial.print("Humidity Level (0-1023): ");
  Serial.println(read_humidity_sensor()); 
  delay(10000);
}

Sitten laitoin vain sensorin multaan, ja valmista tuli! 


Johtoviritelmäni toimi! Aluksi ohjelman tulostus ei näyttänyt mitään, mutta muistin ultraäänisensorikokeilusta, että pitää valita oikea baudi. Tässä se oli 96000, joten valitsin sen. O-ou, kasvini multa näytti melko kuivalta! Sen arvo oli vain 20 väliltä 0 ja 1023!


Päätin kokeilla ohjesivuston kommenteissa kerrotua juttua, eli sensorin kastamista vesilasiin.


Mutta hetkinen, kosteusarvo näytti vain noin viittäsataa. Mikäli vedessä ollessaan kosteusarvo ei ole maksimissaan eli 1023, niin milloin sitten? Onkohan tässä asetelmassa tai koodissa jotain vikaa? Vai johtuukohan tulos kraanaveden ominaisuuksista, jos jotkin tekijät vaikuttavat sen sähkönjohtokykyyn? En halunnut vielä kastella kasviani, koska halusin kokeilla toisenlaistakin projektia, joten en tiedä, paljonko kosteusarvo olisi ollut märällä mullalla. Päivitän tänne sitten, jos joskus kokeilen! Hmm, mittausta olisi mielenkiintoista kokeilla myös esimerkiksi kivennäisvedellä, maaperän vedellä ja sadevedellä.


Projekti 2


Halusin kokeilla myös toisenlaista projektia kasvien mullan kosteuden mittaamiseksi, koska en ollut varma, oliko ensimmäinen kokeiluni onnistunut. Tämä projekti vaikutti kivalta! Siinä käytettäisiin myös koekytkentälevyä ja ledejä. Tarvitsin projektiin Arduinon, kosteussensorin ja sen elektronisen osan lisäksi siis myös koekytkentälevyn, kaksi lediä, kaksi 220 ohmin vastusta sekä johtoja.



Kytkentäkaavio näytti tältä:




Ja tällainen se oli minun tekemänäni:




Latasin ohjeen sivulta eli osoitteesta https://randomnerdtutorials.com/guide-for-soil-moisture-sensor-yl-69-or-hl-69-with-the-arduino/ koodin, joka näytti tältä:



Pistin sensorin kasvin multaan (keltainen nuoli), latasin koodin Arduinolle ja katsoin, mitä tapahtuu!



Jee, olipas kivaa! Punainen ledi paloi, ja ohjelma tulosti tekstiä joka kertoi, että kasvini tarvitsee kastelua. Tai no, ei se kasvini kannalta ollut kivaa, anteeksi :(





No, ei kasvini välttämättä oikeasti kärsinyt. Raja-arvon, jossa ledi muuttuu punaiseksi, voi itse määrittää. Se pitäis määrittää kasvilajin mukaan, eli paljon vettä tarvitsevilla lajeilla raja olisi erilainen kuin kuivan kasvupaikan lajeilla. Sivulla sanotaan, että sensorissa on potentiometri (säädettävä vastus), jonka avulla sensorin herkkyyttä voisi säädellä. En vielä kokeillut sitä. En ole itseasiassa vielä kokeillut lainkaan potentiometriä! Ehkä käytän sitä seuraavassa projektissani. Miksihän sivuilla sanotaan, että kuivalla maaperällä on suurempi jännitteen ulostulo (output) kuin märällä? Luulisi, että märässä maaperässä olisi enemmän vettä, jolloin siinä olisi enemmän liuenneita suoloja jotka johtavat sähköä.

No, oli aika ryhtyä kasvin pelastustoimiin! Kutsuin hätiin norsuapurini, joka ruiskutti kasville vettä. Katsokaa, miten uutterana hän ahertaa, kun tietää toisen olevan hädässä <3 


Jippii, elvytystoimet auttoivat! Nyt vihreä ledi syttyi ja ohjelma tulosti tekstiä joka kertoi, ettei kasvini tarvitse kastelua! Kiitos norsu avustasi <3



Sensorin pitäisi tosin yltää syvemmälle, jos haluaisin tietää kasvini todellisen kastelutarpeen. Pienet sensorit kertovat isojen ruukkujen mullan kosteuden vain pinnasta mitattuna, kun taas kasvin juuret ovat syvällä. Eri sivuilla myös kerrottiin tai oltiin kommentoitu, että jos sensoria pitää toiminnassa pitkään, korroosio tuhoaa sen. Ehkä siihen on olemassa jo jokin ratkaisu, pitää ottaa selvää! Mutta pääasia on, että kasvini on nyt onnellinen. Loppu hyvin, kaikki hyvin.

sunnuntai 6. elokuuta 2017

Ultraäänisensorin testailua

Mitä ihmettä, onko Pii purettu osiin? Ei hätää, se on vain ultraäänisensori, samanlainen kuin Piillä! Se on Piin silmät, jonka avulla se näkee eteensä. Päätin kokeilla Make: Sensors -Projects and Experiments to Measure the World with Arduino and Raspberry Pi -kirjan (kirjoittajat Tero Karvinen, Kimmo Karvinen ja Ville Valtokari) ohjeiden mukaista ultraäänisensorin kytkemistä koekytkentälevyyn ja Arduinoon. Tilaamassani Arduinon aloituspaketissa oli HC-SR04 -ultraäänisensori.


Ultraäänisensorilla voi mitata etäisyyttä: se lähettää ääntä ja mittaa äänen palaamiseen kuluneen ajan. Kun tiedetään, että ääni liikkuu n. 330 m / s, ohjelma voi mitata välimatkan kaiun palaamiseen kuluvasta ajasta. Äänen frekvenssi on yleensä niin korkea, ettei ihmiskorva sitä kuule. Siksi sitä sanotaan ultraääneksi.

Nykyisin valmistetaan monia halpoja ultraäänisensoreja, kuten omistamani HC-SR04. Se maksaa vain euron pari.  HC-SR04 -sensorin sijaan on olemassa myös esimerkiksi Parallaxin valmistama Ping-ultraäänisensori. Käsittääkseni Ping on muiden ultraäänisensorien esikuva. Ne ovatkin saman näköisiä:

Kuva kirjasta Make: Sensors -Projects and Experiments to Measure the World with Arduino and Raspberry Pi (Tero Karvinen, Kimmo Karvinen ja Ville Valtokari).

Ensisilmäyksellä ainoa ero kyseisten Ping - ja HC-SR04 -sensorien väillä on "silmien" välissä näkyvä teksti. Mutta erona on myös se, että Pingissä on vain 3 nastaa, kun taas HC-SR04:ssa on neljä. HC-SR04:n käyttää yhtä nastaa lähettääkseen äänipulssin ja toista lukeakseen kaiun, kun taas Pingissä ne sisältyvät samaan nastaan. Kiinnosti tietää, kumpi ultraäänisensori Piissä on! Mutta siinä olikin Makeblockin oma ultraäänisensori.


Katso Pii, siinä voi olla tulevan sisaruksesi kasvot! Pii ei malta odottaa, että saisi robottikaverin!


Sitten testaamaan! Kirjan kytkentäkaavio näytti tältä (alla oleva kuva). Hieman hämmennyin, kun siihen ei kuulunut vastuksia, mutta sitten muistin, että Arduinon nastat kestävät suurempaa sähkövirtaa kuin Raspberry Pin. Raspberry Pi:n nastat kestävät Make: Action - Movement, Light, and Sound with Arduino and Raspberry Pi-kirjan (kirjoittaja Simon Monk) mukaan 16 mA sähkövirran, kun taas Arduinon nastat kestävät 40mA. Ainakin oletan, että se liittyy tuohon, ettei vastuksia tarvitse, kun liitän sensorin Arduinoon. Jos tekisin ultraäänisensorikokeen Raspberry Pi:llä, sen kytkentöhin kuuluisivat vastuksetkin. Pitää  muistaa hommata Raspberryyn vihdoin se muistikortti!
     Minulla itselläni ei ole Make: Action -kirjaa, mutta lueskelin sen alkukappaleita Kindlestä, koska siellä suurimpaan osaan kirjoista saa ladattua esikatselun! Esikatselussa pääsee tutustumaan kirjojen ensimmäisiin kappaleisiin. Kätevää.


Tältä kytkentäni lopulta näytti. Katsoin vain, että maadoitusjohto menee sensorin Gnd -nastan riviltä Arduinon Gnd-nastaan (gnd tarkoittaa groundia), ja että toinen johto menee sensorin V cc-nastasta Arduinon 5 V -nastaan. V cc - ja Gnd -nastat ovat nimeltään "power supply pin", eli  suomeksi varmaan virtalähdenastoja. Virtalähdenasta liittyy virtapiirissä virran lähteeseen, mikäli oikein ymmärsin. Ymmärtääkseni groundin jännitteen suuruus on vertailuarvo (esim 0 V), ja sitä pistettä virtapiirin jännite käyttää "tietääkseen arvonsa". Quoran sivuilla kerrotaan, että jännitteen yksikkö voltti on suhteellinen käsite. Se kertoo potentiaalieron kahden kohteen välillä eli se tarvitsee viitearvon, johon sitä verrataan. Siten voidaan sanoa, että signaali on niin ja niin monta volttia "referenced to ground" eli verrattuna maadoitusarvoon.  Avopuolisoni selitti siitä hyvän vertauskuvan: korkeutta mitattaessa tulee olla myös vertailukohta, eli esimerkiksi maan pinta. Sama pätee voltteihin, kun mitataan jännitettä.


Latasin http://makesensors.botbook.com -osoitteesta esimerkkikoodit Arduinoon. Keskityn taas elektroniikkaan koodaamisen sijaan, joten valmiit koodit ovat hyvä juttu! Myöhemmin alan opetella koodaamaan itse haluamiani ohjelmia virityksiini. Tässä on lataamani koodi:

Kirjan Make: Sensors -Projects and Experiments to Measure the World with Arduino and Raspberry Pi (Tero Karvinen, Kimmo Karvinen ja Ville Valtokari)  koodi Arduinon ultraäänisensorille. Ladattu osoitteesta http://makesensors.botbook.com.
Latasin koodin Arduinoon, ja jes, ainakin valot vilkkuivat siihen malliin, että jotain tapahtuu! Hoksasin kuitenkin, etten oikeastaan tiennyt, mihin etäisyyden mittauksien arvojen pitäisi tulostua. Jos haluaisin tulostaa Arduinon ohjelmassa esimerkiksi "Hello world", mihin se tulostuisi? Netistä kuitenkin selvisi pian, että Arduinoon saa sarjamonitori-ikkunan (serial monitor), joka kommunikoi Arduinon alustan kanssa. Siihen siis voi tulostaa komentoja! Mutta hetkinen, jokin ei nyt näyttänyt oikealta. Ikkunaan tulostui vain kysymysmerkkejä väärinpäin. Hmm, missähän vika oli?


Netistä selvisi syy: en ollut asettanut baudeja vastaamaan samaa nopeutta, kuin koodin "Serial.begin" -kohdassa oli, eli 115200. Asia oli pian korjattu! Make: Sensors -kirjassakin se oli mainittu, mutten ollut huomannut. En vielä tarkalleen tiedä, mitä baudit ovat, mutta selvitän sen myöhemmin.


Jipii, nyt ikkunaan tulostui lukemia! Laitoin eteen oman käteni, hiiren, käänsin sensorin mittaamaan lampun etäisyytä ja kokeilin myös mitata katon etäisyyttä.


Sarjamonitori näyttää lukemat senttimetreinä. Esimerkiksi seinä oli 34 cm päässä (ultraäänet läpäisivät verhon).


Heei, Pöhköpanda löntysteli sensorin eteen! Voi toista, ihmetteli varmaan mitä täällä tapahtuu. No ei se haittaa, istu vain siinä <3


Mutta hetkinen, sensorin lukemat näyttivät nyt yli 30 metriä! Mitäs ihmettä? Okei tunnustan, tilanne on lavastettu. Halusin vain testata kirjan esimerkkiä, jossa pehmeä esine laitetaan sensorin eteen. Pöhkis piti herättää unestaan koetta varten, pieni ressukka <3


Panda on sensorille kirjan mukaan näkymätön, koska pehmeä materiaali imee niin paljon ääntä, että kaiku on käytännössä olematon. Kaltevat pinnat ovat toinen ultraäänisensorien akillen kantapää. Katsotaan, mitä lukemia tästä seuraa.


Lukemat eivät vastaa lainkaan todellisuutta, kuten alla olevasta kuvasta näkyy. Kirja ei tosiaankaan ollut parin metrin päässä sensorista. Ultraäänet heijastuvat kaltevista pinnoista väärään suuntaan, sen sijaan että ne palaisivat takaisin sensoriin.


Jipii, siinä oli ensimmäinen sensorikokeiluni! Tästä se lähtee, kiva tutustua robottien aisteihin. En malta odottaa, että tilaamani sensoripaketti saapuu!

tiistai 1. elokuuta 2017

Koekytkentälevyn ensikokeilut

Päätin kokeilla ensimmäistä kertaa koekytkentälevyä. Minulla ei ollut hajuakaan, mikä sen toimintaperiaate on. Tiesin vain, että liittämällä siihen komponentteja, voin rakentaa elektronisia kytkentöjä. Löysin sparkfunin sivuilta todella hyvän oppaan siihen, mikä koekytkentälevy on. Siellä mm. näytetään, millainen koekytkentälevy on sisältä ja kerrotaan sen toimintaperiaate. Aloin myös jo hieman ymmärtää, miten kytkentäkaavioita luetaan. 


Tutustuin koekytkentälevyn käyttöön myös lukemalla sen käytöstä robottien rakentamisen raamatustani eli Gordon McCombin kirjasta "Robot builder's bonanza". Kirja sisältää tietoa melkeinpä kaikesta mahdollisesta robottien rakentamiseen liittyvistä aiheista materiaalin valitsemisesta elektroniikkaan ja robottien liikuttamiseen. Suosittelen!



Minulle selvisi, että koekytkentälevyjä käytetään silloin, kun komponentteja ei haluta juottaa (kolvata) toisiinsa. Pohdiskelinkin, tarvitsenko juotoskolvia vielä tässä vaiheessa. Eli en! Koekytkentälevyn avulla voidaan siis kokeilla erilaisten kytkentöjen toimivuutta, ja jos niistä haluaa rakentaa pysyvän virtapiirin, kyseiset komponentit juotetaan piirilevylle.
     Löysin sparkfunin sivuilta oppaan, jossa kerrotaan hieman Arduinosta ja selitetään selkeästi, miten koekytkentälevyyn liitetään komponentteja. Sieltä myös selvisi viime postauksessani pohtima Arduinon ohjelmistossa olevan painikkeen (alla olevassa kuvassa numero 1) merkitys! Se todentaa koodin, eli tarkistaa virheitä. Alla oleva kuva on otettu kyseisestä oppaasta, ja siinä selitetään ohjelman painikkeiden merkitykset.

https://cdn.sparkfun.com/datasheets/Kits/SFE03-0012-SIK.Guide-300dpi-01.pdf

Oppaan avulla oli helppo tehdä ensimmäiset koekytkentälevyni virtapiirit! Aloitin ihan perusteista, eli pyrin saamaan yhden ledin syttymään. Siihen tarvittiin vain alla näkyvät komponentit eli kolme johtoa, yksi led ja vastus. 


Minulle selvisi samalla periaate, miten vastuksien värikoodeja luetaan! Tarvitsin vastuksen, jonka resistanssiarvo oli 330 ohmia. Oletin, että merkintä 330 vastuksien pahvipidikkeessä tarkoittaa 330 ohmia. Olen kuitenkin vähän hämilläni, koska minusta keskimmäiset värit näyttävät sinisiltä, jolloin laskureista niiden resistanssiarvoiksi tulisi 336M ohmia. No, ehkä ne ovat mustat. Minulle selvisi myös, että viisiraitaisia vastuksia kutsutaan "precision resistors"-nimellä. Ne ovat resistoreja, joiden toleranssi eli suurin sallittu poikkeama arvosta on alle prosentin. Learningaboutelectronics.com -sivusto antoi esimerkkinä 500 ohmin vastuksen: jos sen toleranssi on 10%, sen sähkövastuksen arvo voi olla joko 10% yli 500 ohmin (550 ohmia) tai 10% alle (450 ohmia). Mikäli toleranssi on vain 1%, sähkövastuksen arvo voi olla vain välillä 495 ja 505 ohmia. Sivuston mukaan näiden tarkkojen vastuksien toleranssi on vain 0,005%. Kivaa oppia uutta! 


Toimin siis oppaan esimerkki 1:n ohjeiden mukaan. Kuvassa on oppaan kuva kytkennöistä. Selkeää, eikö? Minulle selvisi myös se, että ledeissä jaloilla on väliä, ne pitää kytkeä oikein päin. Nykyaikana on kyllä todella helppo oppia, koska netistä löytää todella paljon mitä erinomaisempia oppaita melkeinpä mihin tahansa aiheeseen! Olen siitä iloinen!

https://cdn.sparkfun.com/datasheets/Kits/SFE03-0012-SIK.Guide-300dpi-01.pdf
Ja tältä ihka ensimmäinen kytkentäni näytti! Sen huomaa kyllä vastuksen taittelustakin, koska se on niin epätasainen. Levyä ei ole vielä kytketty Arduinoon, eli en ole kuvassa asetellut vielä johtoja paikoilleen.


Robottikirjassa oli kuva, jossa kuvattiin vastuksien oikeaoppinen asento ainakin juotoksissa. Eiköhän se päde myös koekytkentälevyyn. Minun vastukseni taittelu menisi kyllä ehdottomasti kuvan alempaan kategoriaan. No, onneksi tekemällä oppii!

Kuva kirjasta Robot builder's bonanza, Gordon McComb, (Fourth Edition).
Latasin oppaan ohjeiden mukaan sparkfun.com/sikcode -osoitteesta esimerkkeihin käyvät valmiit koodit, joilla esimerkiksi ledit saa syttymään. Keskityin nyt kytkentöjen opetteluun, joten valmiit koodit olivat hyvä juttu. Kopioin koodit sisältävän kansion Arduinon ohjelman examples-kansioon, jotta kyseiset Sparkfunin koodit näkyvät myös Arduinon ohjelman esimerkeissä. Liitin koekytkentälevyn ohjeiden mukaisesti Arduinoon, latasin koneelta  esimerkki 1:n koodin Arduinoon ja jee! Led paloi! Ihka ensimmäinen kytkentäni! 


Kokeilin seuraavaksi oppaan esimerkkiä numero 4: monta lediä samaan aikaan. Toimin taas oppaan ohjeiden mukaan, liitin koekytkentälevyn Arduinoon, latasin esimerkkikoodi 4:n Arduinoon ja... mitään ei tapahtunutkaan! Tarkistin kytkennät, mutta valoja ei palanut. Sitten hoksasin mikä oli mennyt pieleen:


Olinkin kytkenyt johdot levyn keskellä menevän uran toiselle puolelle! Uran toisella puolella olevat liitinryhmät eivät ole sähköisesti yhteydessä uran toisella puolella oleviin liitinkohtiin, joten ei ihme ettei virta pelannut. No, asia oli nopeasti korjattu (eli kytkin johdot samalla puolelle ledien kanssa) ja lopputulos näytti hienolta! Monta lediä syttyi ja sammui toisensa jälkeen. Mutta vielä hienompi se oli, kun muutin valojen välkkymisen ja niiden keston satunnaisiksi. Lopputulos oli kuin yksi Star Trekin komentokeskuksen vilkkuvista valoista, jipii! 


Tiedeupseeri kuittaa, vika saatiin korjattua! Mutta toisaalta, ehkä minun pitäisi ostaa nyt myös punainen Star trek -univormu... Hankinta lisätty ostoslistalle!


lauantai 29. heinäkuuta 2017

Arduinon testailua

Jipii, vihdoin Amazonista tilaamani Arduinon aloituspaketti saapui! Kerron myöhemmin mitä kaikkea se sisältää, kunhan tutustun ensin kaikkiin osiin. Siellä oli ainakin sensoreita, johtoja, koekytkentälevy, ledejä ja resistoreja (vai sanotaanko niitä vain vastuksiksi, en ole varma suomenkielisistä termeistä), ja ennen kaikkea Arduino! Osat olivat menneet kuljetuksen aikana sikin sokin, toivottavasti kaikki ovat ehjiä. Kuvassa on laatikko, jonka olen jo järjestänyt. Tarkistin, että se sisältää kaikki osat, ja sisälsihän se! Cd-levyn tiedostoja en saanut vielä purettua koneelleni, mutta en jaksanut vielä selvittää mistä se johtuu. Aloituspaketti maksoi postikuluineen 57 euroa.




Tässä itse Arduino! Pääsinkin kokeilemaan sitä ennen Raspberry Pitä. Luulin aluksi, että Arduino ja Raspberry ovat samanlaisia laitteita, mutta Arduinoa käytetään tietokoneen välityksellä, kun taas Raspberry Pi on tietokone itsessään, eli siihen kytketään näyttö ja näppäimet sun muut. Wikipedia tiesi kertoa Arduinosta seuraavaa: "Arduino on avoimeen laitteistoon perustuva mikro-ohjain-/elektroniikka-alusta ja ohjelmointiympäristö. Laitteisto perustuu 8-bittiseen Atmel AVR -mikro-ohjaimeen, jonka pinneihin voi kytkeä erilaisia antureita, moottoreita, LED-valoja ja muita komponentteja. Laitteistoa ohjelmoidaan C++:aan perustuvalla Arduino-ohjelmointikielellä.". Arduino-laitteita on eri malleja, minulla on UNO R3. Mallit eroavat Wikipedian mukaan toisistaan mm. keskusmuistin, Flash-muistin ja digitaalisten ja analogisten pinnien määrässä.


Ohjelmoinnissa käytetään Arduino Alpha-ohjelmaa. Seurasin Arduinon käynnistämisessä kirjan "Make: Sensors -Projects and Experiments to Measure the World with Arduino and Raspberry Pi" (Tero Karvinen, Kimmo Karvinen ja Ville Valtokari) ohjeita. Kirja on vaikuttanut tähän mennessä todella hyvältä: se kertoo Raspberryn ja Arduinon eroista ja miten kummankin laitteen avulla voi rakentaa samanlaisia projekteja. 


Latasin kyseisen kirjain ohjeiden mukaisesti ensimmäiseksi Arduinon ohjelmointiohjelmiston täältä. Kytkin Arduinon USB-johdon avulla tietokoneeseeni ja jippii! Siihen syttyi valot! Vihreä valo oli koko ajan päällä, keltainen vilkkui. Tuntui hienolta: tästä kaikki lähtee! 


Ohjelmiston lataaminen ja asentaminen sujui hyvin, ja pääsin käynnistämään itse ohjelman, joka näkyy alla olevassa kuvassa. Piinkin ohjelmoinnissa käytetään Arduinon ohjelmistoa, joten se näytti tutulta. Latasin ohjelman nähtävästi vahingossa suomeksi. Englanninkielinen versio olisi parempi, koska kirjatkin ovat englanniksi. No, en jaksanut ladata sitä ainakaan vielä uudestaan. Näkisin ainakin mitä eri termit ovat suomeksi, kun niitä Piin kanssa välillä pohdiskelin.


Valitsin kirjan ohjeen mukaan boardeista (Työkalut -> Kortti) oletuksen, eli Arduino / Genuino Unon. Yleisin ensimmäinen Arduinolle siirrettävä ohjelma eli koodinpätkä on Blink, joka vilkuttaa yhtä Arduinon sisäänrakennettua LED-valoa. Siitä näkee, toimiiko kaikki niin kuin pitääkin. Eli jos Blinkin lataa Arduinoon ja led alkaa vilkkua, kaikki on sujunut oikein. Kannattaa siis ensimmäiseksi kokeilla sitä.
     Ohjelmia ladataan Arduinolle kuvassa näkyvää nuolta (Tiedosto-kohdan alla) painamalla. Kun laittaa hiiren sen kohdalle, siinä lukee lähetä (englanniksi varmaan upload). Kun ohjelma ladataan Arduinoon, Arduinon valot vilkkuvat nopeasti. En ole varma, mitä lähetä-painikkeen vasemmanpuoleinen merkki "varmista" tekee, pitää tarkistaa! 
     Hoksasin, että minullahan kyseinen LED-valo vilkkui koko ajan. Olikohan Arduinoni rikki? Netissä joku sanoi, että monissa Arduinoissa kyseinen Blink-ohjelma on jo valmiiksi ladattuna. Ehkä minullakin oli kyse siitä? Yritin kuitenkin testausmielessä ajaa Blink-ohjelmaa (Tiedosto -> Esimerkit -> 01.Basics -> Blink), mutta siihen tuli alla näkyvä virhe. Kirja oli onneksi varoittanut, että virhe saattaa ilmaantua, mikäli ei ole vielä valinnut oikeaa porttia. Valitsin porteista (Työkalut -> Portti) ainoan vaihtoehdon eli COM5:en. Sen jälkeen virhettä ei tullut. Mutta kuten saattoi olettaa, mikään valon toiminnassa ei muuttunut, koska led vilkkui muutenkin koko ajan.


Miten siis saisin testattua, että kaikki toimii kuin pitääkin? Hoksasin, että voisin kokeilla vilkuttamisen sijaan LED-valon sammuttamista. Esimerkkien koodeissa onneksi kerrotaan, mitä kukin koodin kohta tekee. Koodin muokkaaminen onnistui siis helposti sellaiseksi, että valon pitäis sammua. Alla olevassa kuvassa on kyseinen koodi.

Ja kyllä, valo todellakin sammui! Olin hurjan ylpeä itsestäni! LED-valon sammuttaminen on pieni askel konkareille, mutta suuri askel aloittelijalle. Ystäväni keksi, että Arduinon LED-valon voisi laittaa morsettamaan jotain. Sekin oli helppo toteuttaa! Kuka keksii, mitä LED-valo sanoo? Alla on video itse morsetuksesta ja sen koodi.



Olen ilokseni huomannut itsessäni edistymistä: kun tutkailin kuukausia sitten Piin ohjelmointia, en kunnolla ymmärtänyt mistä on kyse, koska kaikki tuntui niin uudelta ja oudolta. En olisi varmaan silloin osannut muokata tämän päiväisiä koodeja toimiviksi. Todella hienoa huomata kehittyneensä! 

tiistai 25. heinäkuuta 2017

Tilannepäivitys ja mietteitä oppimisestani

En ole vähään aikaan kirjoittanut blogiini, koska minulla oli elämässäni vaihe, jolloin en oikein tiennyt, mitä elämältäni haluaisin. Asiat, jotka ennen inspiroivat, erityisesti tiede, eivät enää innostaneetkaan. Olin aina halunnut tehdä väitöskirjan ja päästä tutkijaksi, mutta yhtäkkiä se ei enää tuntunutkaan omalta jutultani. Tiedemaailma tuntuu liian erilaiselta verrattuna omaan ajatusmaailmaani; ikään kuin omille ajatuksille pitäisi saada jatkuvasti muiden hyväksyntä, ja ajatuksiaan pitäisi todistella muille. Ymmärrän toki, että asioiden todistelu on tieteen ydin ja hyvä niin, mutta se ei enää resonoi itselleni. Haluan vain olla, en selitellä miksi olen. Tulevaisuuden suunnitelmieni muututtua minun piti vähentää kaikkea ulkoista toimintaa mahdollisimman paljon, jotta pystyin kääntymään sisimpääni ja kuunnella, mitä sillä on sanottavana. Olin vähän kuin tyhjiössä, mutta se ei ollut sinänsä huono asia vaikka se siltä monesti tuntuikin: tyhjyydessä kaikki on mahdollista. Pitää vain keksiä, mitä siihen tyhjyyteen haluaa luoda! 
     En ole vieläkään täysin varma tulevaisuuden suunnastani, mutta sain roboiluinspiraationi takaisin. Ja se inspiraatio iski todella voimakkaasti! Minulla on ollut voimakas palo opiskella taas asioita, jotka edistävät robotiikan ymmärtämistäni. Inspiraationi tuli takaisin oikeastaan siinä vaiheessa, kun pääsin sisään Jyväskylän yliopiston tietotekniikan maisteriohjelmaan. Tutkailin kurssitarjontaa, ja siellä oli tarjolla mm. konenäkö- ja tekoälykursseja! Halusin pystyä suoriutumaan kyseisistä (ja muistakin) kursseista, vaikka käynkin samaan aikaan kokoaikatöissä. Vähän jännittää, miten työn ja opiskelun yhdistäminen onnistuu. Mutta olen luottavainen sen suhteen, että asiat järjestyvät. 
     Aloin jo etukäteen opiskella matematiikkaa ystäväni ammattikorkeakoulun kirjoista ja jatkoin Mooc.fi:n ohjelmointikurssin opiskelua, jotta olisin yliopiston kurssien alkaessa jo hieman perillä siitä, mistä niissä on kyse. Olen ainakin vielä jaksanut hyvin opiskella töiden jälkeen ja viikonloppuisin, mitä olen hieman ihmetellytkin! Yleensä en töiden jälkeen ole jaksanut yhtään mitään, mutta nyt olen mielummin opiskellut kuin esimerkiksi katsonut sarjoja. Päämäärä ja inspiraatio antavat energiaa! Mutta otan myös rennosti sitten, kun tuntuu että tarvitsen taukoa. Olen oppinut, että väkisin ei kannata tehdä mitään, ja että itseä ja omia tuntemuksiaan kannattaa kuunnella, muuten väsyy.
     Moocin kurssilla opiskellaan Javaa, mutta olen opettelemassa myös Pythonin käyttöä: Luen Cory Althoffin kirjaa The Self Taught Programmer, jossa selitetään ohjelmoinnista selkeästi käyttäen esimerkkinä Pythonia. Kirjan kirjoittaja oppi itse vuodessa ohjelmoimaan niin hyvin, että pääsi töihin muistaakseni Googlelle. Raspberry Pin ohjelmointikieli on Python, joten kun vihdoin pääsen testaamaan omaa Raspberryani, pääsen opettelemaan Pythonia myös käytännössä. Olin viime viikonloppuna jo testaamassa Raspberryani, mutta olen hukannut sen micro SD-kortin. Kortille on esiasennettu kuusi Raspberryn käyttöjärjestelmää ja se maksaa parikymppiä, joten en haluaisi heti tilata uutta. 
     Tilasin myös varusteita erilaisien projektien tekemiseen: ostin Arduinon aloituspaketin, tilasin sensoreita ja mm. elektroniikan ja ohjelmoinnin kirjoja. Minua kiinnostaa kovasti sensoritekniikka, ja yksi yliopiston tietotekniikan maisteriohjelmista onkin sensoriverkot! Ilostuttaa ajatus, että sensorit ovat robottien aistit. Pieni Pii tutkailee maailmaa niiden avulla, söpöä <3

https://www.javacodegeeks.com/wp-content/uploads/2015/01/programming-java.jpg

Vaikka minulla onkin ollut melko pitkä tauko robotiikkaan liittyvien asioiden aktiivisessa opiskelussa, koen, että tauko on ollut tarpeellinen. Olen muuttunut paljon ihmisenä viimeisen vuoden aikana: olen saanut enemmän itseluottamusta ja uskoa itseeni, enkä enää hae hyväksyntää muilta. Asioiden oppimiseen vaikuttaa todella paljon oma suhtautumistapa itseen ja se, ajatteleeko pystyvänsä oppimaan. Minulla on tapahtunut kyseisten asioiden kohdalla suuria edistysaskelia! Aiemmin myös tein oppimiseni kannalta inspiroivia juttuja vain silloin, jos niille oli aikaa. Sitten ymmärsin, että asian pitää olla päinvastoin, mikäli haluan todella kehittyä. Se tarkoittaa valitettavasti sitä, että joudun sanomaan yhä useammin ei esimerkiksi ystävien näkemiselle, mikäli sisimmissäni koen sillä hetkellä tarvetta muiden asioiden tekemiselle, kuten opiskelulle. Olen vihdoin hyväksynyt sen, miten paljon tarvitsen aikaa olla yksin ja tehdä omia juttujani, jotta en stressaannu. Mutta se ei tarkoita, etten pitäisi ystävieni seurasta, todellakin pidän. Minulla pitää vain olla tunne, että silloin on aidosti hyvä hetki nähdä.

Tauko on ollut minulle myös osa oppimisprosessiani. Olen huomannut, että varsinkin uusien asioiden oppiminen ja omaksuminen menee minulla sykleissä:
     Vaihe 1: Ensin innostun asiasta ja olen siitä niin innoissani, etten pysty kunnolla edes keskittymään mihinkään (ajatukset ja innostukseni sinkoilevat sinne tänne ja en saa kunnon otetta mistään). Kyseisen vaiheen aikana haen inspiraationi ja intuitioni vallassa hirveästi tietoa ja varusteita (esim kirjoja, etsin kursseja ym). En välttämättä saa esimerkiksi kunnolla luettua ostamaani kirjaa, koska olen siitä niin innoissani. Tämän vaiheen aikana istutetaan kuitenkin siemenet: löydän salamannopeasti tietoa ja yhdistän eri asioita ja aloja kokonaisuudeksi. Tiedän intuitiivisesti, mitä asioita minun kannattaa alkaa opiskella, jotta saavutan tavoitteeni. Löydän innostuksen vallassa helposti opiskelumateriaalia.
     Vaihe 2: Ensimmäisen vaiheen jälkeen tulee hiljainen kausi, jolloin prosessoin tietoa sisäisesti, enkä ole asiasta "ulkoisesti" enää niin innostunut. Hiljaisen kauden aikana etsin myös tietoa, mutta maltillisemmin. Etenen hitaasti ja rakennan ensimmäisen vaiheen aikana kerättyjen inspiraatioalkujen päälle pohjaa. Olen esimerkiksi tämän hiljaisen kauteni aikana osallistunut monelle eri robotiikan, tekoälyn ja matematiikan kursseille, mutta ne ovat kaikki jääneet kesken. Ne ovat kuitenkin muokanneet ajattelutapaani ja tapaani nähdä asioita. Olen myös oppinut enemmän siitä, mitä minun olisi hyvä vielä oppia. Tietoa on vähitellen kertynyt tiedon päälle. Ensimmäisen vaiheen aikana istutetut siemenet ovat alkaneet siis itää.
     Vaihe 3: Hiljaisen kauden jälkeen tulee yleensä vaihe, jolloin innostun uudestaan asiasta, mutta tällä kertaa olen muutaman askeleen pidemmällä kuin ensimmäisellä kerralla. Hiljaisen kauden aikana prosessoitu tieto on nyt tavallaan tietoisessa mielessäni, ja ymmärrän paljon enemmän innostukseni kohteena olevasta asiasta kuin ensimmäisessä vaiheessa. Pystyn fokusoitumaan paremmin ja olen määrätietoisempi. En sinkoile ajatuksissani sinne tänne, vaan tiedän, mitä asioita minun kannattaa oppia ja miten minun kannattaa edetä kehittääkseni itseäni. Olen myös viime viikkojen aikana huomannut, etten enää koe, että minun pitäisi olla juuri oikeanlaisessa mielentilassa opiskellessani esimerkiksi ohjelmointia. Aiemmin koin, että minun tarvitsee olla virkeä ja energinen, jotta voisin opiskella. Nyt se sujuu myös väsyneenä!

Listaan vielä lopuksi sivustoja, jotka olen kokenut erityisen hyödylliseksi oppimiseni kannalta. 
  • Moocin ohjelmointikurssi
    • Tämän Helsingin yliopiston kurssin olen kokenut erityisen hyödylliseksi, vaikkakin se on melko työläs ja välillä aikaa vievä. Mutta juuri siksi se onkin tehokas kurssi: ohjelmointia oppii vain tekemällä!  Kurssilla opiskellaan Javaa alkeista lähtien. Kurssi vastaa sisällöltään Helsingin yliopiston tietojenkäsittelytieteen laitoksen kursseja Ohjelmoinnin perusteet ja Ohjelmoinnin jatkokurssi, jotka ovat 5 opintopisteen laajuisia perusopintotason kursseja. Kurssin suorittaja voi saada pääaineen opinto-oikeuden tietojenkäsittelytieteeseen Helsingin yliopistoon. Tämän kurssin avulla olen oppinut myös kehittämään ongelmanratkaisukykyäni, mikä on osaltaan auttanut matematiikan opiskelussa.
    • edX:n nettikurssit
      • Sivulla on eri korkeakoulujen (mm. Harvard, MIT) järjestämiä verkkokursseja. Kurssit ovat ilmaisia, mutta jos niistä haluaa todistuksen, se maksaa (joskus melko paljonkin). Sivustolla on paljon robotiikkaankin liittyviä kursseja. Olen bongannut sieltä mm. seuraavia mielenkiintoisia kursseja: Artificial Intelligence (AI), Machine Learning Course, Robotics, Introduction to Computer Science. 
    • Kindle-kirjat
      • Vaikka pidänkin enemmän fyysisistä kirjoista, Amazonin Kindle-sovellus on kätevä. Sieltä löytää helposti kirjoja ihan mistä tahansa aiheesta, ja vaihtoehtoisia kirjoja on paljon. Kindlessä (ja Amazonissa) voi lukea muiden käyttäjien arvosteluja kirjasta ennen sen ostamista. Kirjani The Self-taught Programmer on Kindlestä ostettu, eli voin lukea sitä kännykälläni ja tabletillani. Tapanani onkin ollut lukea sitä ennen nukkumaanmenoa.
    • Khan Academy
      • Loistava Samlan Khanin perustama sivusto, jonka tarkoitus on tarjota ilmaista koulutusta kaikille, joilla on pääsy nettiin. Sivustolla voi opiskella mm. kemiaa, fysiikkaa, matematiikkaa, biologiaa ja historiaa. Mielestäni videot ovat erittäin opettavaisia ja niitä on helppo seurata, koska yksi video kestää noin kymmenisen minuuttia. Hoksasin tänään, että voin katsoa videoita tabletilta vaikka samalla kun pyöräilen kuntopyörällä. Kivaa! Videoita katsoessa käy helposti niin, että päätän katsovani vielä nopeasti seuraavankin, koska se on niin lyhyt, mikä toistuukin monta kertaa. Huomaamatta olenkin sitten käyttänyt videoiden katsomiseen paljon aikaa, mikä on hyvä juttu! En pidä pitkistä luentojen mittaisista videoista, koska ne eivät ole joustavia, ja on kynnys alkaa katsoa 1,5 tunnin mittaista videota on melko korkea. Mutta Khan Academyssa ei ole sitä ongelmaa! 
    Loppuun vielä muistutus Khan Academyn väeltä:

    https://cdn.kastatic.org/images/marketing/share-thumb-a.jpg