[060] Światła na skrzyżowaniu

[060] Światła na skrzyżowaniu

W poprzednim artykule przedstawiłem sposób przygotowania układu ATtiny25 do działania w środowisku Arduino, czas zatem na jakiś przykład praktyczny wykorzystania tej małej kostki. A ponieważ mamy wakacje i zwykle dzieci nie mają ich wypełnionych w stu procentach, tym razem odcinek łączący przyjemne i pożyteczne także dla najmłodszych czytelników. Zrobimy sobie symulator sygnalizatorów świetlnych, takich jakie znajdziemy przy przejściu dla pieszych. Może się on przydać na przykład w makiecie kolejowej czy podczas zabawy samochodami.


Najpierw jednak zlutujmy sobie pomoc naukową. Jak wygląda sygnalizator – każdy wie i sprawę budowy jego miniatury pozostawiam czytelnikom. Ja sobie pójdę po łatwiźnie i do pięciu diod dolutuję rezystory o wartości kilooma.

Całość wstawię do płytki podłączonej do dużego Arduino w sposób widoczny na zdjęciu, a więc anody diod przez rezystory do nóżek mikrokontrolera, a katody do masy. Jak widać, trochę schematycznie z prawej strony dostaliśmy sygnalizator dla kierowców, a z lewej – dla pieszych.

Rzućmy jeszcze okiem na opis mikrokontrolera tej serii z punktu widzenia idei Arduino. Numery portów występują tu w zdecydowanie innej kolejności i tak należy się do nich teraz odwoływać.

const byte czerwoneSamochod = 2;  // Światło czerwone dla samochodów.
const byte zolteSamochod = 1;     // Światło żółte dla samochodów.
const byte zieloneSamochod = 0;   // Światło zielone dla samochodów.
const byte czerwonePieszy = 3;    // Światło czerwone dla pieszych.
const byte zielonePieszy = 4;     // Światło zielone dla pieszych.

void setup() {
  pinMode(czerwoneSamochod, OUTPUT);  // Ustaw porty świateł jako wyjścia.
  pinMode(zolteSamochod, OUTPUT);
  pinMode(zieloneSamochod, OUTPUT);
  pinMode(czerwonePieszy, OUTPUT);
  pinMode(zielonePieszy, OUTPUT);
}

Toteż zadeklarujemy kolory świateł wedle tego schematu, jak to zwykle trzeba zrobić na początku. Program będzie bardzo prosty i upstrzony dużą ilością delay’ów. Może się to nie spodobać ortodoksom, uważającym tę instrukcję za samo zło, ale właśnie do takich rzeczy zwykło się używać takich maleńkich mikrokontrolerków, więc straty tu nie będzie żadnej, bo i tak nie ma już nóżek, by podłączyć cokolwiek więcej.

Program jest bardzo prosty i szeregowy. W pętli kolejno: zapalamy zielone światło dla samochodów, czerwone dla pieszych i czekamy siedem sekund.

digitalWrite(czerwoneSamochod, LOW);  // Zielone światło dla samochodów - stan domyślny.
digitalWrite(zolteSamochod, LOW);
digitalWrite(zieloneSamochod, HIGH);
digitalWrite(czerwonePieszy, HIGH);
digitalWrite(zielonePieszy, LOW);
delay(7000);  // Czas trwania zielonego światła dla samochodów.

Następnie włączamy światło żółte na trzy sekundy...

digitalWrite(zolteSamochod, HIGH);  // Żółte światło dla samochodów.
digitalWrite(zieloneSamochod, LOW);
delay(3000);  // Czas świecenia żółtego światła.

Po czym włączamy czerwone.

digitalWrite(czerwoneSamochod, HIGH);  // Czerwone światło dla samochodów.
digitalWrite(zolteSamochod, LOW);

Po dwóch sekundach włączamy zielone światło dla pieszych – po niezbędnym opóźnieniu biorącym pod uwagę piratów wjeżdżających na koniec żółtego.

delay(2000);                        // Opóźnienie pojawienia się zielonego światła dla pieszych.
digitalWrite(czerwonePieszy, LOW);  // Zielone światło dla pieszych.
digitalWrite(zielonePieszy, HIGH);
delay(7000);  // Czas trwania zielonego światła dla pieszych.

Po siedmiu sekundach zielone zacznie migać, poganiając pieszych. Miganie wystąpi pięć razy, w pętli.

for (byte x = 1; x < 6; x++) {  // Pętla migania zielonego światła na końcu cyklu zielonego światła dla pieszych.
  digitalWrite(zielonePieszy, LOW);
  delay(300);
  digitalWrite(zielonePieszy, HIGH);
  delay(300);
}

W końcu pojawi się czerwone światło dla pieszych, niezbędne opóźnienie bezpieczeństwa, obok czerwonego zapali się żółte dla samochodów i cykl zacznie się od początku.

digitalWrite(czerwonePieszy, HIGH);  // Czerwone światło dla pieszych.
digitalWrite(zielonePieszy, LOW);
delay(2000);  // Opóźnienie pojawienia się czerwonego i żółtego światła dla samochodów.
digitalWrite(zolteSamochod, HIGH);  // Żółte światło dla samochodów.
delay(2000);                        // Opóźnienie pojawienia się zielonego światła dla samochodów.

Mając już napisany cały program, możemy go przesłać do małego kontrolera. Ale nie robi się tego jak zwykle, ikonką, a komendą Prześlij używając programatora. Znana nam ikona wszak programuje Uno, a my chcemy załadować szkic gdzie indziej.

Po chwili możemy cieszyć się zabawką. Oczywiście czasy, które tu dobrałem, nie mają wiele wspólnego z rzeczywistością, ale są przyjemne w zabawie. Prawdziwe czasy są znacznie dłuższe i jeśli chcielibyśmy zrobić symulator rzeczywistych świateł, musielibyśmy się uzbroić w cierpliwość. Wszystko działa fajnie, ale czegoś tu brakuje – pstryczka do wymuszania zielonego światła dla pieszego. Ale o tym, a także o kolejnym małym ATtiny napiszę w kolejnym artykule, a poniżej zamieszczam szkic raz jeszcze, w całości.

const byte czerwoneSamochod = 2;  // Światło czerwone dla samochodów.
const byte zolteSamochod = 1;     // Światło żółte dla samochodów.
const byte zieloneSamochod = 0;   // Światło zielone dla samochodów.
const byte czerwonePieszy = 3;    // Światło czerwone dla pieszych.
const byte zielonePieszy = 4;     // Światło zielone dla pieszych.

void setup() {
  pinMode(czerwoneSamochod, OUTPUT);  // Ustaw porty świateł jako wyjścia.
  pinMode(zolteSamochod, OUTPUT);
  pinMode(zieloneSamochod, OUTPUT);
  pinMode(czerwonePieszy, OUTPUT);
  pinMode(zielonePieszy, OUTPUT);
}
void loop() {
  digitalWrite(czerwoneSamochod, LOW);  // Zielone światło dla samochodów - stan domyślny.
  digitalWrite(zolteSamochod, LOW);
  digitalWrite(zieloneSamochod, HIGH);
  digitalWrite(czerwonePieszy, HIGH);
  digitalWrite(zielonePieszy, LOW);
  delay(7000);  // Czas trwania zielonego światła dla samochodów.

  digitalWrite(zolteSamochod, HIGH);  // Żółte światło dla samochodów.
  digitalWrite(zieloneSamochod, LOW);
  delay(3000);  // Czas świecenia żółtego światła.

  digitalWrite(czerwoneSamochod, HIGH);  // Czerwone światło dla samochodów.
  digitalWrite(zolteSamochod, LOW);
  delay(2000);  // Opóźnienie pojawienia się zielonego światła dla pieszych.

  digitalWrite(czerwonePieszy, LOW);  // Zielone światło dla pieszych.
  digitalWrite(zielonePieszy, HIGH);
  delay(7000);  // Czas trwania zielonego światła dla pieszych.

  for (byte x = 1; x < 6; x++) {  // Pętla migania zielonego światła na końcu cyklu zielonego światła dla pieszych.
    digitalWrite(zielonePieszy, LOW);
    delay(300);
    digitalWrite(zielonePieszy, HIGH);
    delay(300);
  }

  digitalWrite(czerwonePieszy, HIGH);  // Czerwone światło dla pieszych.
  digitalWrite(zielonePieszy, LOW);
  delay(2000);  // Opóźnienie pojawienia się czerwonego i żółtego światła dla samochodów.

  digitalWrite(zolteSamochod, HIGH);  // Żółte światło dla samochodów.
  delay(2000);                        // Opóźnienie pojawienia się zielonego światła dla samochodów.
}
Płytka edukacyjna TME-EDU-ARD-2Płytka edukacyjna TME-EDU-ARD-2Sprawdź tutaj

Przeczytaj również

Nasi partnerzy

TMETech Master EventTME EducationPoweredby
Copyright © 2024 arduino.pl