Elektroniikka ja ohjelmointi

Johdanto

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!

Kevään 2019 LMHI-kurssilla puututtiin työrauhaa uhkaaviin pulmiin

Kevään 2019 LMHI-kurssilla puututtiin työrauhaa uhkaaviin pulmiin


Tarvikkeet

Arduino UNOn (tai Mehackit Boardin tms), USB-johdon, koekytkentälevyn ja kytkentäjohtojen lisäksi tarvitset:

OsaKuvaSelitys
LED - minkä värinen vain Pidempi jalka (kuvassa mutkallinen) kytketään jännitettä syöttävään porttiin. Lyhyempi jalka kytketään GND-porttiin (eli maahan).
Vastus 220 tai 330 Ω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).
PainonappiPainonappeja 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.
napin ohjelmointi

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.
kytkimen koodi

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!
kytkimen koodi

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

Eikö koodi toimi? Käy läpi tarkistuslista.


Oma kytkin


Oma kytkin
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.

oma kytkin

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:


Lisätietoa

Mikä ihmeen INPUT_PULLUP?

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.

Lisätietoa ylösvetovastuksesta

Ehtolause

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:

  • a <= b a on pienempi tai yhtäsuuri kuin b
  • a < b a on pienempi kuin b
  • a > b a on suurempi kuin b
  • a >= b a on suurempi tai yhtäsuuri kuin b
  • a != b a ja b eivät ole yhtäsuuria.

Tehtävän uusi Arduino-komento

Vinkkejä syventävää materiaalia kaipaaville

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ä?