Szukaj kodu

Lekcja 98-10: Sygnalizacja świetlna Arduino

Lekcja 98-10: Sygnalizacja świetlna Arduino

Światła drogowe to jeden z tych codziennych systemów, o których rzadko myślimy — dopóki sami takiego nie zbudujemy. W tym projekcie użyjesz Arduino do symulacji prawdziwej sekwencji świateł drogowych: zielone, potem żółte, potem czerwone, każde przez własny, konfigurowalny czas, powtarzając się w nieskończoność. To idealny projekt dla początkujących, ponieważ uczy logiki sekwencyjnego odmierzania czasu, sterowania wieloma wyjściami oraz związku między tym, co piszesz w kodzie, a tym, co widzisz w świecie fizycznym.

Światło drogowe w rzeczywistości z trzema kolorami

Poza demonstracją w klasie, logika odmierzania czasu, której się tu nauczysz, pojawia się wszędzie:

  • Budowanie realistycznego modelu świateł drogowych do kolejki modelarskiej lub dioramy
  • Tworzenie systemu wskaźników czasowych dla warsztatu lub garażu (np. sygnały „można wejść” / „czekaj”)
  • Poznanie podstaw sygnalizacji przejścia dla pieszych z fazami wyzwalanymi przyciskiem
  • Prototypowanie sekwencji przekaźników czasowych do zadań automatyki przemysłowej lub domowej
  • Uczenie dzieci sekwencji, odmierzania czasu i elektroniki za pomocą znajomego, rozpoznawalnego obiektu

Najlepsze jest to: całość działa samodzielnie po wgraniu. Programujesz Arduino raz ze swojego komputera, a następnie zasilasz je z baterii lub zasilacza i działa wiecznie — komputer nie jest potrzebny (w filmie o 12:27).

red, green and yellow leds on bread board for traffic light project
czerwona, zielona i żółta dioda LED na płytce stykowej do projektu świateł drogowych

Jak działa światło drogowe

Światło drogowe to tak naprawdę tylko sekwencja czasowa trzech wyjść. Arduino włącza jedną diodę LED naraz, czeka określoną liczbę sekund, wyłącza ją i przechodzi do następnej. Cykl się powtarza. W przykładowym czasie z filmu zielone świeci przez 3 sekundy, żółte przez 1 sekundę, a czerwone przez 3 sekundy — ale wszystkie te wartości można regulować w kodzie (w filmie o 49:44).

traffic light timing: red light
czas świateł drogowych: czerwone światło
traffic light timing: yellow light
czas świateł drogowych: żółte światło
traffic light timing: green light
czas świateł drogowych: zielone światło

Sekwencja wydaje się realistyczna, ponieważ czasy trwania odzwierciedlają rzeczywisty przepływ ruchu: zielone i czerwone są dłuższe, bo pojazdy potrzebują czasu na przejazd przez skrzyżowanie, a żółte jest krótkie, bo to tylko ostrzeżenie o zmianie. Możesz je dostroić do dowolnego scenariusza.

Sprzęt i komponenty

Lista części do tego projektu jest minimalna:

  • 1 × płytka Arduino (Uno, Nano lub Mega — cokolwiek z co najmniej 3 pinami cyfrowymi)
  • 3 × diody LED (czerwona, żółta/pomarańczowa i zielona — różne kolory sprawiają, że efekt jest oczywisty)
  • 3 × rezystory (300 Ω do 1 kΩ działa dobrze; w filmie użyto 1 kΩ)
  • 1 × płytka stykowa
  • Przewody połączeniowe
  • Opcjonalnie: bateria litowo-jonowa lub zasilacz 5 V do pracy samodzielnej

Film zaleca użycie trzech wyraźnie różniących się kolorem diod LED, aby efekt świateł drogowych był natychmiast widoczny — w przeciwnym razie trzeba by je oznaczyć (w filmie o 02:04).

Zrozumienie ograniczania prądu diody LED

Każda dioda LED potrzebuje rezystora ograniczającego prąd w szeregu. Oto dlaczego: dioda LED ma prawie stałe napięcie przewodzenia (typowo około 2 V dla standardowych diod 5 mm), a jeśli podłączysz ją bezpośrednio do 5 V, prąd gwałtownie wzrośnie i ją zniszczy. Rezystor pochłania nadmiar napięcia.

Korzystając z prawa Ohma, jeśli dioda LED odkłada 2 V, a zasilanie wynosi 5 V, to 3 V musi odłożyć się na rezystorze. Przy docelowym prądzie około 10 mA wartość rezystora wynosi około 300 Ω (w filmie o 04:41). W praktyce wszystko od 300 Ω do 1 kΩ będzie działać — wyższe wartości po prostu przygaszają diodę LED.

Przewodnik po połączeniach

Schematic of Arduino traffic light
Schemat świateł drogowych na Arduino
Arduino LED traffic lights wiring
Połączenia świateł drogowych LED na Arduino

Każda dioda LED jest podłączona identycznie: anoda (dłuższa nóżka) łączy się z pinem cyfrowym Arduino, a katoda (krótsza nóżka, płaska strona korpusu diody) łączy się przez rezystor do masy.

W połączeniach z filmu czerwona dioda LED łączy się z pinem 2, żółta/pomarańczowa z pinem 3, a zielona z pinem 4 (w filmie o 50:50). Wszystkie trzy rezystory współdzielą wspólną szynę masy na płytce stykowej. Kolejność kolorów na płytce stykowej nie ma znaczenia — liczy się to, że numery pinów w kodzie odpowiadają pinom, których faktycznie użyłeś.

Jedna przydatna wskazówka z filmu: rezystor może znajdować się po obu stronach diody LED. Możesz umieścić go między pinem Arduino a anodą diody LED lub między katodą diody LED a masą — elektrycznie jest to to samo (w filmie o 51:52).

Wyjaśnienie kodu

Pełny program jest dostępny poniżej artykułu. Tutaj skupimy się na częściach, które będziesz chciał dostosować.

Na początku szkicu trzy definicje pinów przypisują każdą diodę LED do pinu cyfrowego. Jeśli podłączyłeś diody LED do innych pinów, zmień te wartości:

const int greenLED = 4;
const int yellowLED = 3;
const int redLED = 2;

Następnie znajdują się stałe czasowe. Kontrolują one, jak długo każde światło pozostaje włączone, w milisekundach. W filmie domyślnie używane jest 5000 ms dla zielonego, 1000 ms dla żółtego i 5000 ms dla czerwonego — ale podczas demonstracji zostały one zmienione na 3 s / 1 s / 3 s, a później na 10 s / 3 s / 10 s (w filmie o 56:27):

const int greenOnTime = 5000;
const int yellowOnTime = 1000;
const int redOnTime = 5000;

Aby zmienić rytm swojej sygnalizacji świetlnej, wystarczy edytować te trzy wartości. Chcesz wolne, realistyczne skrzyżowanie? Wypróbuj 10000, 3000, 10000. Chcesz szybką demonstrację? Wypróbuj 1000, 300, 1000.

Wewnątrz loop() sekwencja jest prosta: włącz zielone, poczekaj, wyłącz zielone; włącz żółte, poczekaj, wyłącz żółte; włącz czerwone, poczekaj, wyłącz czerwone; następnie wróć do zielonego. Monitor szeregowy wyświetla każdą zmianę stanu, dzięki czemu możesz zweryfikować, czy taktowanie odpowiada oczekiwaniom.

Demonstracja na żywo

Po wgraniu kodu Arduino samodzielnie wykonuje cykl. W filmie najpierw zapala się zielona dioda LED, następnie po upływie jej czasu na krótko włącza się żółta, potem czerwona, a cykl natychmiast się rozpoczyna od nowa (w filmie o 55:20).

Monitor szeregowy odzwierciedla to w tekście — „green LED on”, „green off”, „yellow on” i tak dalej — co jest świetnym sposobem na potwierdzenie, że wartości taktowania działają zgodnie z zamierzeniem. Gdy będziesz gotowy uruchomić go bez przewodów, odłącz USB i podłącz baterię litowo-jonową lub adapter 5 V; Arduino będzie kontynuować cykl bez komputera (w filmie o 56:11).

Powiązane projekty z tego filmu

Rozdziały

  • [00:00] Przegląd 10 projektów LED z Arduino
  • [01:22] Wprowadzenie do kursu krok po kroku Arduino
  • [02:29] Czym jest dioda LED: symbol, anoda i katoda
  • [03:49] Obliczanie rezystora ograniczającego prąd diody LED
  • [49:25] Wprowadzenie do projektu sygnalizacji świetlnej
  • [49:44] Wyjaśnienie taktowania sygnalizacji świetlnej
  • [50:34] Schemat połączeń sygnalizacji świetlnej
  • [52:13] Wyjaśnienie kodu sygnalizacji świetlnej
  • [54:32] Demonstracja na żywo z monitorem szeregowym
  • [55:30] Zmiana wartości taktowania
  • [56:11] Uruchamianie sygnalizacji świetlnej na zasilaniu bateryjnym

Obrazy

traffic light timing: green light
traffic light timing: green light
synchronizacja sygnalizacji świetlnej: żółte światło
synchronizacja sygnalizacji świetlnej: żółte światło
synchronizacja sygnalizacji świetlnej: czerwone światło
synchronizacja sygnalizacji świetlnej: czerwone światło
Schemat sygnalizacji świetlnej Arduino
Schemat sygnalizacji świetlnej Arduino
traffic_lights
traffic_lights
Okablowanie świateł drogowych LED Arduino
Okablowanie świateł drogowych LED Arduino
czerwone, zielone i żółte diody LED na płytce stykowej do projektu sygnalizacji świetlnej
czerwone, zielone i żółte diody LED na płytce stykowej do projektu sygnalizacji świetlnej
942-Lessson 98-LED-10: Arduino code traffic light
Język: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Pliki📁

Biblioteki Arduino (zip)

Instrukcja obsługi