Huomio! Jokainen, joka ryhtyy kokeilemaan kytkentöjä, vastaa itse omista tekemisistään. On noudatettava varovaisuutta, ettei aiheuta haitallisia oikosulkuja, jotka voivat rikkoa laitteistoa. En myöskään ota vastuuta mahdollisista virheistä, joita ohjeeni sisältää, vaan jokainen toimikoon omalla vastuullaan. Raspberry PIn kanssa tilanne onneksi on niin onnellinen, että raspberryn rikkoutuessa, se on onneksi helppoa, halpaa ja nopeaa korvata uudella.
Raspberry PIssä on valmiiksi kaksi eri jännitetasoa, molemmat standardeja 3.3V ja 5.0V. Käytetty jännitetaso on tärkeää tietää, jotta LED-valon vastus voidaan mitoittaa oikein. Väärä jännite tai väärin mitoiettu vastus (tai vastuksen puuttuminen) voi aiheuttaa LEDin tuhoutumisen tai, että LEDiin ei syty valoa.
Valitaan kokeeseen klassisesti punainen LED-valo, jolle valmistaja on ilmoittanut kynnysjännitteeksi 1.8V, mikä tarkoittaa, että LEDiin ei syty valoa alle 1.8V jännitteellä. On kuitenkin selvä riski, että Raspberry PIn 3.3V polttaisi ledin lyhyen käytön jälkeen. Tällöin on valittava vastus, joka laskee ledille tulevan jännitteen 1.8 volttiin. Tällöin vastuksen yli oleva jännite on 3.3-1.8V = 1.5V. Ledille on myöskin ilmoitettu maksimivirta I_max, joka valitsemalleni punaiselle ledille on 25mA. Tällöin vastusarvo on erotusjännite jaettuna maksimivirralla:
R = 1.5V / 25mA = 60 ohmia.
Jos täsmälleen 60 ohmin vastusta ei ole saatavilla, valitaan lähimmäksi oleva isompi vastus. Itse tätä tarkoitusta varten hankin 68 ohmin vastuksen. Minulta löytyisi myös 56 ohmin vastus, mutten halua aiheuttaa turhaan ledin tuhoutumista, vaikka se hetken aikaa saattaisikin toimia ja palaa kirkkaammin.
Nyt voidaan kytkeä johtimet ja komponentit toisiinsa. Ledin lyhyempi jalka on kansakielellä miinusnapa. Tässä tapauksessa se on tarkoitus siis kytkeä maahan, eli nollaan volttiin: GND = 0V. Käyttöjännite 3.3V tulee siis pidempään jalkaan eli plusnapaan.
Koska kyseessä on vain yksinkertainen koe, eikä mikään pysyvä elektroniikan rakennelma, voidaan vastus liittää lediin kiertämällä se ledin jalan ympäri. vastuksen toinen pää ja ledin toinen jalka voidaan tökätä johtimissani oleviin naarasliittimiin sellaisenaan. Tässä, kuten yleensä on tapana, sijoitetaan etuvastus plussan puolelle, eli ledin pidempään jalkaan. Käytännön syistä myös valitsin, että punainen jodin toimii plussana ja sininen miinuksena / maajohtimena.
Nyt onkin aika paneutua ohjelmakoodin kirjoittamiseen. Koska Python on itselleni käytännössä täysin vieras ohjelmointikieli, joudun tyytymään siihen, mitä Internet ja Google asiasta tarjoavat. Ennen aloitusta on kuitenkin hyvä varmistaa, että tarvittava kirjasto GPIO-pinnien käyttöä varten on asennettu. Yksinkertaisimmillaan se onnistuu muutamalla komennolla. Avaa Putty-ohjelma ja ota etäyhteys Raspberrysi IP-osoitteeseen ja kirjaudu sisään omilla tunnuksillasi.
Ensin täytyy paikantaa tarvittava python kirjasto Internetistä, mikä tapahtuu kirjoittamalla etäyhteydessä komentoriville:
$ wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.1.0.tar.gz
Koska kirjasto on pakattuna pakettina, tulee se purkaa komennolla:
$ tar zxf RPi.GPIO-0.1.0.tar.gz
Paketin purku luo kansion RPi.GPIO-0.1.0, jossa tiedostot nyt ovat. Seuraavalla komennolla päästään kansioon sisälle:
$ cd RPi.GPIO-0.1.0
Ja lopuksi ladataan ja asennetaan kirjasto Pythoniin komennolla:
$ sudo python setup.py install
Rivin alussa olevaa dollarin merkkiä ei tietenkään kuulu yrittääkään kirjoittaa komentoriville. Merkin tarkoitus on vain erottaa komennot leipätekstistä, tämä on yleinen tapa. Kannattaa myös huomata että kopio/liitä-menetelmä ei toimi täsmälleen samoin kuin windowsissa. Windowsin puolelle voit mainiosti kopioida tekstirivin tai komennon tavalliseen tapaan hiirellä tai näppäimistön komennolla "ctrl + c", mutta etäyhteydessä kumpikaan näistä ei toimi, vaan tekstin liittämiseksi tarvitaan näppäinyhdistelmä "shift + insert". Shift on siis näppäin, jota pohjassa pitämällä saat normaalisti isoja kirjaimia ja insert-näppäin löytyy samasta nipusta, jossa on myös 'del', 'home', 'end', 'page up' ja 'page down' -näppäimet. Kopionti etäyhteydessä puolestaan tapahtuu komennolla "ctrl + insert", mutta tätä tarvitaan huomattavasti harvemmin.
Nyt meillä on periaatteessa kaikki valmiudet kytkeä ledi kiinni raspberryyn ja sytyttää ja sammuttaa ledi pelkällä ohjelmakoodilla. Tässä vaiheessa on myös syytä huomata pieni epäloogisuus: Raspberry PIn GPIO:ssa on 26 pinniä, mutta niiden numerointi ei ole aivan yksiselitteinen, pinnien fyysinen sijainti ja niiden numerointi ohjelmakoodissa eivät mene aivan yksi yhteen, mutta emme paneudu asiaan vielä sen tarkemmin, vaan etenemme ohjeiden mukaan.
GPIO tulee sanoista General Purpose Input/Output eli pinnejä voidaan käyttää varsin yleisesti sisään ja ulos menevien signaalien ja jännitteiden ohjaukseen. Jokaisella pinnillä on kuitenkin määrätyt tehtävänsä ja väärin kytkeminen aiheuttaa ei-toivottua tomintaa ja mahdollisesti elektroniikan tai raspberryn tuhoutumisen.
Omassa kuvassani ylemmän pinnirivin oikeassa reunassa on on 3.3V pinni. Tässä vaiheessa voidaan jo liittää ledi-vastus-viritelmän positiivinen puoli tähän jännitteeseen. Ilman ohjelmakoodia on mahollista testata, että ledi-vastus toimii siten, että negatiivinen johdin liitetään suoraan maa-pinniin GND kuvan mukaisesti, jos ledi ei pala, on jokin mennyt varmasti pieleen eikä ole syytä jatkaa pidemmälle! GND-pinni löytyy nyt alemmalta riviltä, kolmas oikeasta reunasta lukien.
Nyt irroitetaan miinusjohto GND-pinnistä ja liitetään se GPIO:ään, joka löytyy ylemmältä riviltä neljäntenä oikeasta reunasta lukien. Enempää ei pinnien kanssa hääräillä, vaan palataan etäyhteyteen ja avataan Python kirjoittamalla komentoriville:
$ sudo python
Nyt ollaan Python ohjelman sisällä. Seuraavat komennot ovat siis pythonin komentoja, eivät raspberry käyttöjärjestelmän. Ensin meidän täytyy komennolla käskeä Python käyttämään ladattua GPIO-kirjastoa, ilman kirjastoa pinnien käyttö ei tule onnistumaan ilman, että kirjaston sisältämät komennot ohjelmoidaan itse! Eli kutsutaan ensin GPIO:n käyttöön vaadittu kirjasto:
>>> import RPi.GPIO as GPIO
Seuraa komento ottaa pinnin 7 käyttöön (huomaamme myös että ledi syttyy jo tässä vaiheessa palamaan!):
>>> GPIO.setup(7, GPIO.OUT)
Ledille voidaan käyttää kahta komentoa:
>>> GPIO.output(7, False)
>>> GPIO.output(7, True)
Parametreilla True ja False voidaan kontrolloida pinnin 7 jännitetasoa. Kun jännitetaso on False, on jännite arvossa LOW eli 0V kun taas jännitetason ollessa True, on jännite arvossa HIGH eli 3.3V.
Mitä eroa näillä sitten on? Muistetaan, että alussa kytkime ledin plusjohtimen suoraan vakiojännitteeseen 3.3V. Tällöin kun pinnin 7 jännite ohjataan LOW, saadaan led-vastuksen yli haluttu kolmen voltin jännite ja ledi palaa. Kun pinnin 7 jännite asetetaan HIGH, on sekä plussan että miinuksen puolella 3.3V, jolloin ledi-vastuksen yli ei ole jännite-eroa ja ledi ei pala. Itse asiassa komento >>> GPIO.setup(7, GPIO.OUT) oletusarvoisesti asettaa jännitteen arvoon LOW.
Voimme kokeilla asiaa myös toisin päin. Eli kytketään ledin miinusjohdin GND-pinniin, eli alarivillä, kolmas oikealta ja plusjohdin pinniin 11, joka on ylemmällä rivillä kuudes oikealta.
Käsketään pinni käyttöön komennolla (nyt valo ei sytykään):
>>> GPIO.setup(11, GPIO.OUT)
Ja sytytetään valo komennolla:
>>> GPIO.output(11, True)
Ja sammutetaan:
>>> GPIO.output(11, False)
Nyt tilanne jännitteiden suhteen oli siis päin vastainen. Oletusarvolla led-vastuksen molemmat johtimet olivat 0 voltissa, mutta parametrilla True saatiin jännitteen arvoksi 3.3V pinnissä 11, jossa plusjohdin on tässä tapauksessa kiinni, ledi-vastuksen yli muodostui 3.3V jännite ja ledi syttyi palamaan. Parametrilla False, saatiin jännite taas palaamaan arvoon 0V ja ledi sammumaan.
Ennen Pythonin sulkemista on suljettava kaikki käyttöön otetut pinnit:
>>> GPIO.setup(11, GPIO.IN)
>>> GPIO.setup(7, GPIO.IN)
Näin pinnit asettuvat normaaliin tilaansa. Muussa tapauksessa ledi voi esimerkiksi jäädä palamaan vaikka suljetkin Pythonin. Joskus se voi ollakin tarkoituksen mukaista, mutta ei tässä tapauksessa. Lopuksi Python suljetaan komennolla:
>>> exit()
Tässä kaikki tältä erää. Seuraavalla kerralla kirjoitetaan Python-ohjelma tiedostoon ja yritetään saada aikaan jotakin astetta vaikeampaa.