Tehtävä: Ohjelmoi LED toimimaan napilla ja kehitä oma kytkin
Aluksi kytketään Arduinoon nappi ja LED, sekä ohjelmoidaan nämä
toimintaan. LED syttyy nappia painamalla!
Kun kytkentä on valmis ja ohjelma toimii, painonapin voi korvata ihan
millaisella kytkimellä vain. Kytkimiä on myös helppo askarrella itse:
lopuksi tehdään oma kytkin. Voit myös vaihtoehtoisesti käyttää valmista
kytkintä, jos sinulla on varastossa kiinnostava sellainen - keksi
mielenkiintoinen mekanismi, jolla voi kytkeä LEDin päälle ja pois!
Tarvikkeet
Arduino UNOn (tai Mehackit Boardin tms), USB-johdon, koekytkentälevyn ja kytkentäjohtojen lisäksi tarvitset:
Vastus vastustaa sähkövirran kulkua. Vastuksen arvo mitataan ohmeissa (Ω) ja ilmoitetaan komponentissa eri värisinä raitoina (tässä kuvassa oranssi, oranssi, ruskea ja kulta = 330 ohmia).
Painonappi
Painonappeja on monennäköisiä. Kun nappi painetaan pohjaan, vasemmalla olevat metallijalat ovat yhteydessä oikealla oleviin jalkoihin.
(Oma kytkin, jos sattuu löytymään!)
Monissa elektroniikkakiteissä on mukana tilt-kytkin, mahdollisesti myös reed-kytkin. Elektronisia leluja purkamalla voi löytää kiinnostavia nappeja, ravistuskytkimiä sun muuta.
Lisäksi tehtävässä voi hyödyntää mm. askartelutarvikkeita, kierrätysmateriaaleja, jatkojohtoja, alumiinifoliota ja alumiiniteippiä.
Kytkentä
Vaihe 1
Kytke ledin pitkä jalka porttiin 5
kytkentäjohdon välityksellä. Huom: LED johtaa sähköä vain yhteen
suuntaan!
Ledin toinen jalka kytketään vastuksen ja yläriville
kiinnitettävän johdon kautta GND-porttiin. Vastus rajoittaa
virtaa, jottei Arduinon portti mene rikki.
Kytke nappi: paina se kunnolla kytkentäalustaan kiinni, yhdistä
toinen puoli porttiin 2 ja toinen puoli yläriviin. Ylärivin kautta
nappikin on nyt yhteydessä GND-porttiin eli maahan - saman rivin
avulla voi maadoittaa vaikka kuinka monta komponenttia.
Ohjelmointi
Vaihe 2
Ohjelmointi 1/2
Kirjoita seuraava koodi Arduino IDE:en. Loop-osassa
merkkien “//” jälkeen on kommentti eli
muistiinpano, jonka Arduino jättää huomiotta. Sen voi jättää
kopioimatta.
Setup-osassa kerrotaan Arduinolle pinMode-komennon avulla, että:
porttia 2 käytetään sisääntulevan tiedon vastaanottamiseen.
porttia 5 käytetään jonkin laitteen ohjailuun jännitteellä
HUOM: Tarkempi selitys siitä, mitä INPUT_PULLUP tarkoittaa
on kohdassa Lisätietoa.
Vaihe 3
Ohjelmointi 2/2
Muokkaa ohjelmaa, jotta LED palaa aina, kun
nappi on pohjassa. Tähän tarvitaan uutta
komentoa digitalRead sekä if-lausetta.
If-lause on ohjelmoinnin peruspalikoita. Sillä määritellään, mitä
tapahtuu jos jokin ehto täyttyy. Else -komennolla kerrotaan taas
se, mitä tapahtuu, jos ensimmäinen ehto ei täyty. Ehto voi olla
esimerkiksi se, että nappi on pohjassa. Alla oleva koodi on esimerkki
if-lauseesta. Sitä ei tarvitse kirjoittaa IDEen!
if(ehto){
//Mitä tapahtuu, jos ehto täyttyy?
} else {
//Mitä tapahtuu, jos ehto ei täyty?
}
}
Täydennä koodiasi: kirjoita allaolevan ohjelman uudet rivit Arduino
IDEen
Ole tarkkana kirjoitustavan kanssa: kaarisulkeet, tavalliset
sulkeet, puolipisteet, isot ja pienet kirjaimet ovat tärkeitä.
Lähetä ohjelma Arduinolle ja testaa!
Mitä loop-osassa nyt tapahtuu?
if-lauseessa tarkistetaan digitalRead-komennolla, mikä tila on
portissa 2. Jos tila on LOW, tiedetään että nappi on painettuna
pohjaan.
Jos nappi on pohjassa, porttiin 5 laitetaan jännite päälle
komennolla digitalWrite(5, HIGH);
Muussa tilanteessa portin 5 jännite asetetaan pois päältä komennolla
digitalWrite(5, LOW);
Loop-osaa suoritetaan yhä uudelleen ja uudelleen niin aina kun
Arduino on kytkettynä virtalähteeseen.
Testailuvinkkejä:
Laitoit edellisessä harjoituksessa LEDin vilkkumaan. Kokeile
vilkuttaa LEDiä kun nappi on painettuna: tässä tarvitaan
delay-komentoa (esim. delay(1000); ). Ehkä valo voisi vilkkua
yhdellä tavalla kun nappi on pohjassa ja toisella - vaikka
hitaasti - kun nappi on ylhäällä?
Kokeile vaihtaa HIGH sanan LOW paikalla ehtolauseessa digitalRead(2) == LOW
Suunnittele ja rakenna oma kytkin ja vaihda se napin paikalle. Voit
myös tutkia, mitä kytkimiä löydät omasta elektroniikkakitistäsi ja
kehitellä jonkin kiinnostavan tavan käyttää kytkintä.
Jos irrotat napin ja kytket sen paikalle kaksi kytkentäjohtoa, olet
tehnyt yksinkertaisimman mahdollisen kytkimen: kun johdolla koskettaa
toista, virtapiiri sulkeutuu.
Huvittele hetki tällä ajatuksella ja mieti, millainen liike tai
tapahtuma voisi yhdistää johdot - ja mitä lisäosia voisit askarrella
johtoihin, jotta kytkimestä tulee toimivampi. Allaolevista videoista
saatat saada lisää ideoita!
Vinkkejä:
Aloita yksinkertaisesta, älä käytä kytkimeen tai mekanismiin
hurjan pitkää aikaa! Voit kehitellä kurssin lopputyötä varten
seuraavan version omasta kytkimestä.
Aloita kahdesta johdosta ja mieti, mitä niihin voisi kiinnittää,
jotta syntyy kivasti toimiva, oma kytkin. Mikä kaikki johtaa sähköä?
Paperiliitin ja haaraniitti? Haarukka ja veitsi? Sirppi ja vasara?
Alumiiniteippi on loistava keksintö! Myös tavallisella foliolla ja
paperiliimalla pääsee alkuun.
Voit ottaa valmiin kytkimen myös purkamastasi sähkölaitteesta tai
lelusta ja yhdistää sen Arduino-virtapiiriin.
Tätä harjoitusta voit myöhemmin soveltaa esim. Micro:bit- tai
e-tekstiilityöskentelyyn. Voiko neppari olla kytkin? Entä vetoketju?
Sijoitetaanko kytkin kainaloon tai kengän varteen?
Vinkkejä ideoinnin tueksi
Kalvokytkin on helppo askarrella moneen muotoon. Kalvokytkimen
avulla voi tehdä vaikka tarkkuusheittopelin, digitaalisen pierutyynyn,
varashälyttimen, tai... keksi itse!
Ideoita paitsi oman kytkimen rakentamiseen, myös muutamien valmiiden
kytkinten luovaan hyödyntämiseen:
Saatoit huomata, että nappia käytettäessä portin tilaksi asetettiin
INPUT_PULLUP käskyllä pinMode(5, INPUT_PULLUP). Tämä merkintä
tarkoittaa kyseisen portin liittämistä Arduinon sisäiseen
ylösvetovastukseen. Ylösvetovastukseen kytkettäessä portti on kiinni
jännitteessä napin ollessa ylhäällä, ja tila on tällöin varmasti HIGH.
Sanan HIGH voi Arduino-ohjelmoinnissa korvata myös numerolla 1. Jos
nappia ei kytketä ylösvetovastukseen, arvo kelluu napin ollessa ylhäällä
eli arvo on sattumanvaraisesti joko HIGH tai LOW (1 tai 0). Napin kanssa
täytyy aina käyttää jotain vastusta, jotta siitä saa luotettavat lukemat
toinen vaihtoehto olisi lisätä kytkentään 10 kilo-ohmin vastus.
Teit koodiin if-else
-rakenteen,
jota tarvitaan ohjelmoinnissa usein. Kaksi yhtäsuuruusmerkkiä (==)
ehtolauseessa
on vertailuoperaattori,
mikä tarkoittaa "on yhtä suuri kuin". Koodissa käytetty
ehto digitalRead(2)`` == LOW tarkistaa
portin 2 tilan. Muita vertailuoperaattoreita ovat:
Voit tutustua Mehackitin kurssimateriaalin Arduino-projekteja Maker kitillä haastavampiin
tehtäviin. Mm. seuraavat tehtävät luvuissa 2 ja 3 laajentavat
viikkotehtävän aihepiiriä:
Arduinon ja elektroniikan alkeet
Haaste: Peli
Päälle ja pois
Syventävä: R2D2
Haaste: Leluhakkerointi
Jos et koe olevasi valmis hyppäämään suoraan syventäviin tehtäviin, voit
käydä pohjustukseksi läpi lukujen 2 ja 3 materiaalit.
Ongelmanratkaisu
Eikö Arduino toimi niin kuin halusit? Ei hätää - tämä on ihan tavallista myös kokeneille Arduino-värkkääjille. Käy läpi seuraava tarkistuslista, yleensä vika on jokin näistä!
Onhan if-lauseen sisällä kaksi yhtä kuin -merkkiä ( == ) ?
Onko Tools- eli Työkalut-valikossa, kohdassa Port (Portti) valittuna se Arduinoon viittaava portti?
Onko Tools- eli Työkalut-valikossa, kohdassa Board valittuna Arduino/Genuino UNO?
Onko koodissa ja kytkennöissä varmasti käytetty samaa Arduino-porttia?
Ovatko puolipisteet oikeilla paikoillaan?
Onko jokaisella kaarisulkeella ja tavallisella sulkeella pari?
Onko LED oikein päin? Lyhyempi jalka kytketään aina maahan eli GND-porttiin päin.
Jos kopioit koodia IDEen: onko koodiin tullut vahingossa 2 setup- tai loop-osaa? Niitä saa olla vain yksi kumpaakin.
Koodissa saa olla vain oikeinkirjoitettuja komentoja sekä kommentteja ( //mitä vain tekstiä kahden kauttaviivan jälkeen). Oletko vahingossa poistanut kauttaviivoja kommenttien edestä?
Oletko kirjoittanut isot ja pienet kirjaimet kuten esimerkissä?
Oletko käynyt läpi kytkemäsi johdot - että johdot on kytketty samalle kytkentäalustan riville kuin komponentit?
Oletko kokeillut irrottaa USB-johdon ja kiinnittää sen uudelleen? Oletko kokeillut kytkeä Arduinon eri USB-porttiin? Huom: tämän jälkeen tarkista portti Tools-valikosta.
Oletko resetoinut Arduinon pienestä napista laitteen päällä? Tämä käynnistää laitteelle ladatun ohjelman alusta.
Eihän sinulla ole komponentteja kytkettynä portteihin 0 tai 1? Nämä portit tarvitaan joskus Arduinon ja tietokoneen väliseen tietoliikenteeseen, mikä voi välillä sotkea asioita.
Kokeilitko etsiä Arduino IDE:n tuottamalla virheilmoituksella ohjeita netistä?