Joni Junni

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.

liikennevalot-schem-pieni

liikennevalot-bb-pieni

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ä“.

valologiikka

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:

lopputulos

valot