Liikennevalot

Johdanto

Liikennevalojen toimintaa on helppo matkia ohjelmoimalla. Tarvitset valojen ohjelmoimiseen muutamaa perustavanlaatuista komentoa, joilla valot laitetaan päälle ja pois päältä. Välillä tietokonetta täytyy myös käskeä odottamaan hetken aikaa ennen seuraavaa askelta: tietokone ei osaa edes olla tekemättä mitään ilman erillistä neuvoa.

Liikennevalot pyörivät niille syötettyjen ohjelmien mukaan kaikkialla maailman kaupungeissa. Liikennevalot voivat olla hauska lisä mihin tahansa projektiin. Voisivatko ne esimerkiksi olla osa suunnittelemaasi pienoiskaupunkia, jossa liikkuu erilaisia kulkuneuvoja?

Alla esitellään erästä Arduino-projektia, jossa etäisyyssensorit havaitsevat leikkiautoja ja sytyttävät liikennevaloja tämän mukaisesti. Etäisyyssensoria pääsetkin käyttämään myöhemmin tällä kurssilla.

Julie Purdie - Arduino Traffic lights project

Tarvikkeet

Tähän harjoitukseen tarvitset samoja tarvikkeita kuin edellisessä harjoituksessa - ne vain kytketään hieman eri lailla!

OsaKuvaKuvaus
Mehackit-board (tai Arduino UNO)
USB-johto (A/B)Tietokoneella kirjoitettu ohjelma lähetetään Arduinolle USB-johtoa pitkin. Johdon kautta Arduino saa myös virtaa.
KytkentäjohtojaOhuita, erivärisiä kytkentäjohtoja tarvitaan tällä kurssilla runsaasti!
Koekytkentälevy
Keltainen LEDPidempi jalka (kuvassa mutkallinen) eli anodi + -napaan eli Arduinon porttiin. Lyhyempi jalka eli katodi miinus-napaan eli maahan.
Punainen LEDPidempi jalka (kuvassa mutkallinen) eli anodi + -napaan eli Arduinon porttiin. Lyhyempi jalka eli katodi miinus-napaan eli maahan.
Vihreä LEDPidempi jalka (kuvassa mutkallinen) eli anodi + -napaan eli Arduinon porttiin. Lyhyempi jalka eli katodi miinus-napaan eli maahan.
3 x Vastus 330 ΩVastus vastustaa sähkövirran kulkua. Vastuksen arvo mitataan ohmeissa (Ω) ja ilmoitetaan komponentissa eri värisinä raitoina (tässä oranssi, oranssi, ruskea ja kulta).

Virtapiiri

  • Yhdistä ledien pidemmät jalat portteihin 8, 9 ja 10.
  • Yhdistä ledien lyhyemmät jalat 330 ohmin vastuksien kautta maahan.

Ohjelman tavoite

Valot toimivat liikennevalojen tapaan. Aluksi punainen ledi palaa. Sitten keltainenkin ledi syttyy. Tämän jälkeen punainen ja keltainen ledi sammuvat ja vihreä ledi syttyy.

Tarvittavat komennot

  • digitalWrite(portti, arvo) Syöttää jännitettä digitaaliseen porttiin. Tätä käytit jo aiemmin laittaessasi yhtä lediä päälle ja pois päältä
  • pinMode(portti, asetus) Tällä käskyllä asetetaan aina portti output- tai input-tilaan. Esimerkiksi ledien portit asetetaan aina outputeiksi ja vastaavasti esim. napin portti inputiksi.
  • delay(arvo) Tällä komennolla asetetaan viivettä ohjelmaan. Kun tietokone lukee ohjelmaa, se pysähtyy aina delay-komennon kohdalle määritellyksi ajaksi.

Ohjelmointi

Tehtävä
Syötä alla oleva koodi Arduinollesi. Mitä tapahtuu? Vastaa koodin alta löytyvään monivalintaan.
void setup() {
  pinMode(8, OUTPUT);
}

void loop() {
  digitalWrite(8, HIGH);
  delay(1000);
  digitalWrite(8, LOW);
  delay(1000);
}

Mitä komento "delay(1000)" tekee edellä olevassa esimerkissä?
Tehtävä
Jatka nyt ohjelmaasi siten, että sytytät järjestyksessä punaisen, keltaisen ja vihreän ledin alla olevassa koodissa olevien kommenttien mukaisesti. Sinun tulee nyt siis ohjelmoida itse ne rivit, jotka on merkitty koodiin kommentteina (merkintä “//").

Valmiiksi kirjoitetussa ohjelmassa on yksi pieni virhe, jonka vuoksi sitä ei saa syötettyä Arduinolle. Keksitkö mitä ohjelmasta puuttuu? Vastaa lopuksi sivun alalaidassa olevaan monivalintaan

void setup(){
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
}

void loop() {
  digitalWrite(10, HIGH)
  delay(1000);
  // Aseta keltainen valo päälle
  // Odota sekunti
  // Aseta punainen valo pois päältä.
  // Aseta keltainen valo pois päältä.
  // Aseta vihreä valo päälle.
  // Odota kolme sekuntia 
}

Mitä ohjelmasta puuttui?