Yleistä

Tässä ohjeessa käymme läpi painokoytkimen käyttöä Arduinolla. Painokytkimellä voit ohjata esimerkiksi valoa, moottoria tai muuta Arduinoon liitettyä laitetta.

Laite voidaan ohjelmoida tunnistamaan erilaisia ärsykkeitä ympäröivästä maailmasta. Tällöin tarvitaan sensoreita. Sensorien avulla laitteen voi rakentaa aistimaan erilaisia asioita, kuten kosketusta tai tunnistamaan valoisuutta. Laite joka tunnistaa kosketuksen on yksinkertaisinta rakentaa painokytkimellä. 

Osat

Led

 

Vastukset

Valitse vastuksiksi 220 ohmin vastus (punainen, punainen, ruskea, kulta) vastukset.

Painokytkin

Painokytkin yhdistää virtapiirin, kun sitä painetaan. Sen voi ajatella olevan kuin laskusilta, joka painuu alas nappia painamalla ja päästää sähkön kulkemaan lävitseen.

Arduino

 

Hyppylankoja

Tarvitset jokaiselle kirjasinnäytön kirjaimen ledille oman hyppylangan. Koko näytön käyttämiseen tarvitset siis yhdeksän hyppylankaa.

USB A-B

Kytkennät

Tee alla oleva kytkentä ennen siirtymistä ohjelmointi osioon. Voit tehdä kytkennän joko edellä mainituista irto-osista tai kokeilla ensin valmiilla perma-proto kytkennällä. Tällöin riittää että kytket hyppylangat kuvan mukaisesti oikesiin kohtiin Arduinossa.

Ohjelmoiminen

 

Graafinen ohjelmoiminen

 

  1.     Avaa Arduino IDE
  2.     Kytke Arduino UNO koneeseen USB kaapelilla
  3.     Avaa Arduino IDE ja lataa Arduinoon Firmata-koodi. (Tiedosto -> Esimerkit -> Firmata -> StandartFirmata). 
  4.     Avaa Snap4Arduino-ohjelmointiympäristö ja aktivoi Arduino ohjelmointiympäristöön painamalla ”Connect Arduino”.

 

Koodin rakentaminen Snap4Arduino-ohjelmointiympäristössä

Rakenna koodi esimerkin mukaan. Alla kerrotaan koodin rakentaminen kohta kohdalta.

Tietääksesi onko nappi painettu, on napin tila tallennettava. Tälläisten tietojen tallentamiseen ohjelmoinnissa käytetään muuttujia. Muuttuja voi olla mikä vain sana ja se tulee määritellä itse.

  1. Määrittele muuttuja Muuttujat-välilehdestä. Valitse ”Uusi muuttuja” ja anna muuttujan nimeksi jokin kuvaava nimi. Esimerkiksi ”nappi”.
  2. Aloita koodi valitsemalla Ohjaus-völilehdestä komento ”kun klikataan (vihreä lippu)”.
  3. Valitse Ohjaus-välilehdestä ”ikuisesti”-komento ja raahaa se koodin jatkoksi.
  4. Seuraavaksi määritellään aiemmin luodun muuttujan pinni Arduinosta. Valitse Muuttujat-välilehdestä komento ”aseta muuttujan [ ] arvoksi [ ]” ja raahaa se ohjelman jatkoksi.
  5. Valitse koodissa muuttujan alasvetovalikoista muuttujaksi ”nappi” ja arvoksi määrittele pinni 9. Pinni määritellään oikeaksi valitsemalla Arduino-välilehdestä ”<digital reading ( )>” ja raahamalle se koodiin. Valitse alasvetovalikosta käyttöön pinni 9.

Tämän jälkeen rakennetaa ehtolauseet ledin toiminnalle painokytkimen perusteella.

  1. Valitse Ohjaus-välilehdestä ”jos”-ehtolause ja raahaa se koodin jatkoksi.
  2. Aseta ehtolauseen ehdoksi Laskenta-välilehdestä ”on yhtä kuin” el ”[ ] = [ ]”-komento. 13. Valitse Muuttujat-välilehdestä aiemmin itse luotu muuttuja ”nappi” ja raahaa se vielä edellisen komennon arvoksi. Seuraavaan vapaaseen laatikkoon valitaan Laskenta-välilehdestä ”<tosi>”-komento. Näin määrität muuttujan saamaan arvon sen perusteella, onko pinnissä 9 tunnistettu sähkövirta vai ei.
  3. Luo ehtolauseen sisään seuraavaksi tapahtuma, joka seuraa jos ehtolause toteutuu. Huomaa, että ehtolauseet menevät tässä tapauksessa väärinpäin. Tosi on epätosi ja epätosi on tosi. Tämä johtuu Arduinon tekniikasta. Klikkaa ehtolause siis epätodeksi.

 

Rakenna seuraavaksi koodi, joka vilkuttaa lediä päälle ja pois tämän ehtolauseen toteutuessa. Voit tarkistaa koodin rakenteen joko Led päälle ja pois -tehtävästä tai ylläolevasta koodikuvasta.

Viimeiseksi luo uusi jos-ehtolause, missä määrität mitä tapahtuu kun painokytkintä ei paineta. Tällöin led pitää saada sammumaan. Tarkista koodi esimerkkikuvan avulla.

 

 

 

 


 

Tekstipohjainen ohjelmoiminen

Kopioi ja liitä alla oleva koodi Arduinoon. Voit kirjoittaa koodin myös kokonaan käsin alla olevan vaiheittaisen ohjeen mukaan.

Koodi kokonaisuudessaan:

const int buttonPin = 9;
const int ledPin = 13;

int buttonState = 0;
void setup() { 
pinMode(ledPin, OUTPUT); 
pinMode(buttonPin, INPUT_PULLUP); 
}
void loop() {
 buttonState = digitalRead(buttonPin);
 if (buttonState == HIGH) {
 digitalWrite(ledPin, HIGH);
 delay(1000);
 digitalWrite(ledPin, LOW);
 delay(1000);
 }
else {
 digitalWrite(ledPin, LOW);
 }
 }

 

VAIHEET:

1. Määrittele ensin muuttujat niille pinneille, joita kytkennässä käytetään. Ledi tulee pinniin 13 ja painokytkin pinniin 9.

const int buttonPin = 9;
const int ledPin =  13;

2. Määrittele muuttuja, joka on arvo jonka kytkin saa aluksi oletuksena. Toisinsanoen kytkin ei ole päällä kun sitä ei paineta.

int buttonState = 0;

3. Määrittele ensimmäinen funktio, joka aktivoi pinnit joissa on kiinni ledi ja painokytkin. Huomaa, että painokytkin onkin ”vastaanottajana” ja nimetty muotoon INPUT_PULLUP.

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}

4. Määrittele koodi, joka lukee aluksi painokytkimen arvon ja mahdollisen muutoksen. Arduino tunnistaa onko painike painettu seuraavalla koodilla. Sama koodi viestii myös kohdassa 2. määritellyn muuttujan muutoksen joksikin muuksi kuin arvoksi 0.

 
void loop() { buttonState = digitalRead(buttonPin);

5. Määrittele seuraavaksi mitä tapahtuu kun painokytkin on painettu alas. Tällöin se ilmenee Arduinolle arvona HIGH. Kun pinniin 9 virtaa sähkövirta, alkaa led vilkkumaan. Muussa tapauksessa (else) pinni on pois päältä.

if (buttonState == HIGH) { 
digitalWrite(ledPin, HIGH); 
delay(1000); 
digitalWrite(ledPin, LOW); 
delay(1000); } 

else { 
digitalWrite(ledPin, LOW); 
 } 
}
 

Mitä seuraavaksi?

Kokeile seuraavaksi DC-moottorin pyörittämistä.