Prototyypin rakentaminen: Yksinkertaiset liikennevalot Arduinolla
Categories:
[school]
Tags:
[arduino],
[prototyping-course]
Päätin tehdä pienenä lediprojektina liikennevalot, jotka vaihtuvat tietyin väliajoin samalla tavalla kuin oikeatkin liikennevalot.
Tekninen toteutus
Teknisesti toteutus ei ole kovin vaikea, tarvitaan vain kolme eriväristä ledia(punainen, keltainen ja vihreä), koekytkentälevy ja muutamia kytkentäjohtoja. Kytkin jokaisen ledin katodijalan(miinus/maajalan) samaan riviin koekytkentärivillä, josta vedin johdon Arduinon maaliittimeen(GND). Kytkin ledien anodijalat(positiiviset johtimet) omiin riveihinsä, joista vedin jokaiselle oman värikoodatun johdon Arduinon digitaalisen puolen pinneihin 3,4 ja 5.
Ohjelmalogiikan luominen
Aloitin ohjelmalogiikan luomisen luonnostelemalla miten oikeat liikennevalot toimivat. Liikennevalothan kiertävät jatkuvasti samaa rataa: vihreästä keltaiseksi, keltaisesta punaiseksi ja yhtäaikaisesta punaisesta ja keltaisesta vihreäksi. Selkeämmin ilmaistuna: “vihreä -> keltainen -> punainen -> punainen+keltainen -> vihreä“.
Logiikan toteutus koodiksi
Kun sain logiikan hiottua kuntoon, toteutin ohjelman koodiksi joka näyttää seuraavanlaiselta:
/*
Liikennevalosovellus
Tekijä: Joni Junni
Pvm: 2.4.2013
*/
int PUN_led = 3;
int KELT_led = 4;
int VIHR_led = 5;
void setup() {
pinMode(PUN_led, OUTPUT);
pinMode(KELT_led, OUTPUT);
pinMode(VIHR_led, OUTPUT);
}
void loop() {
// Vihreä valo palaa 10 sek
digitalWrite(PUN_led, LOW);
digitalWrite(KELT_led, LOW);
digitalWrite(VIHR_led, HIGH);
delay(10000);
// Keltainen palaa 3 sek
digitalWrite(PUN_led, LOW);
digitalWrite(KELT_led, HIGH);
digitalWrite(VIHR_led, LOW);
delay(3000);
// Punainen palaa 10 sek
digitalWrite(PUN_led, HIGH);
digitalWrite(KELT_led, LOW);
digitalWrite(VIHR_led, LOW);
delay(10000);
// Punainen ja keltainen palaa 1,5 sek
digitalWrite(PUN_led, HIGH);
digitalWrite(KELT_led, HIGH);
digitalWrite(VIHR_led, LOW);
delay(1500);
}
Lopputulos
Lopputuloksena on toimivat liikennevalot ledeistä jotka vaihtuvat omaa tahtia: