Spisu treści:

State Machine na Arduino - sygnalizacja świetlna dla pieszych: 6 kroków (ze zdjęciami)
State Machine na Arduino - sygnalizacja świetlna dla pieszych: 6 kroków (ze zdjęciami)

Wideo: State Machine na Arduino - sygnalizacja świetlna dla pieszych: 6 kroków (ze zdjęciami)

Wideo: State Machine na Arduino - sygnalizacja świetlna dla pieszych: 6 kroków (ze zdjęciami)
Wideo: CPSC 1491: Assignment 2 - Part 2 - Traffic Light Intersection with Pedestrian Crosswalk 2024, Lipiec
Anonim
State Machine na Arduino - sygnalizacja świetlna dla pieszych
State Machine na Arduino - sygnalizacja świetlna dla pieszych

Hej! Pokażę ci, jak zaprogramować sygnalizację świetlną dla Arduino w C++ za pomocą maszyny skończonej za pomocą narzędzi YAKINDU Statechart Tools. To zademonstruje siłę maszyn państwowych i może posłużyć jako plan dla dalszych projektów.

Kieszonkowe dzieci

Potrzebujesz tylko Arduino, kilku przycisków, diod LED, zworki i rezystorów.

Sprzęt komputerowy

  • 2x przycisk
  • 2x sygnalizacja świetlna lub możesz użyć diod LED z rezystorami 220 Ohm
  • Rezystory 2x 10k Ohm
  • Deska do krojenia chleba
  • Skoczek
  • Arduino Uno/Mega (lub jakikolwiek inny, który ma co najmniej 8 GPIO)

Oprogramowanie

  • Narzędzia wykresów stanu YAKINDU
  • Eclipse C++ IDE dla Arduino

Krok 1: Zdefiniuj, jak to działa: Sygnalizacja świetlna dla pieszych

Najpierw musimy określić, jak powinna działać sygnalizacja świetlna dla pieszych. Spróbowałem podsumować punkty:

  • Stosowane są dwie sygnalizacje świetlne - jedno dla samochodów, drugie dla pieszych
  • Sygnalizację świetlną można włączyć za pomocą przycisku
  • Pieszy może poprosić o przejście przez ulicę, naciskając przycisk
  • Wyłączenie sygnalizacji świetlnej sygnalizowane jest miganiem obu żółtych diod LED
  • Po włączeniu sygnalizacja świetlna czeka 10 sekund w trybie awaryjnym
  • Po trybie awaryjnym samochody zawsze mają zieloną fazę, dopóki pieszy nie rozpocznie żądania
  • Prośba pieszego o przejście jest sygnalizowana przez przełączanie żółtej diody LED

Dodatkowo istnieją pewne zdarzenia czasowe w zależności od sposobu działania sygnalizacji świetlnej.

Krok 2: Zbuduj obwód

Zbuduj obwód
Zbuduj obwód

Zacznijmy konfigurować obwód. W moim przykładzie, jak widać na obrazie podglądu, użyłem Arduino Mega 2560, ale każde inne Arduino z co najmniej ośmioma GPIO powinno być w porządku. Dodatkowo kupiłem trochę sygnalizacji świetlnej 5V w Amazon. Po prostu wyszukaj Traffic Light Arduino. W przeciwnym razie możesz po prostu użyć sześciu różnych diod LED. Ponadto potrzebne są dwa przyciski i dwa rezystory 10k Ohm.

Trzy lewe diody LED są używane do ruchu samochodowego, a trzy prawe diody LED dla pieszych, gdzie żółta może sygnalizować żądanie.

Krok 3: Tworzenie maszyny stanowej

Tworzenie maszyny stanowej
Tworzenie maszyny stanowej

Jak widać, istnieją dwa główne stany z elementami złożonymi - stan włączony i stan wyłączony. Możesz przełączać się między obydwoma stanami za pomocą zdarzenia onOff, które jest połączone z przyciskiem ON/OFF. W stanie początkowym, wyłączonym, obie żółte diody LED zaczynają migać co sekundę. Po włączeniu sygnalizacji świetlnej rozpoczyna się w Safestate. Po 10 sekundach zostanie przeanalizowane typowe zachowanie sygnalizacji świetlnej. Czerwona i żółta dioda LED zaświecą się w stanie StreetPrepare, a sygnalizacja świetlna zmieni kolor na zielony po kolejnych 2 sekundach. Od tej chwili automat stanu czeka na zdarzenie pieszychRequest, które jest podłączone do drugiego przycisku. Po wysłaniu zdarzenia żądanie zostanie zasygnalizowane przełączaniem żółtej diody LED co sekundę w stanie PedWating. 7 sekund później sygnalizacja świetlna zostanie najpierw zmieniona na żółty, a następnie na czerwony, aż piesi otrzymają sygnał, aby przejść w stanie Pieszy Zielony. Następnie aktywowany zostaje PedestrianRed i cykl się powtarza. Można to przerwać tylko przez ponowne wyłączenie świateł.

Krok 4: Uruchamianie przykładu

Krok 5: Wygenerowany kod C++

Wygenerowany kod C++ to klasyczny przypadek przełącznika do obsługi logiki maszyny stanów. To tylko fragment kodu, jak to wygląda:

void TrafficLightCtrl::runCycle(){ clearOutEvents(); for (stateConfVectorPosition = 0; stateConfVectorPosition < maxOrthogonalStates; stateConfVectorPosition++) { switch (stateConfVector[stateConfVectorPosition]) { case main_region_on_r1_StreetGreen: { main_region_on_r1_StreetGreen_react(true); przerwa; } case main_region_on_r1_PedWaiting_r1_waitOn: { main_region_on_r1_PedWaiting_r1_waitOn_react(true); przerwa; } domyślnie: przerwa; } clearInEvents(); }

Krok 6: Zdobądź przykład

Cały przykład jest gotowy do skompilowania i uruchomienia. Jest dostarczany z narzędziami YAKINDU Statechart Tools, które są bezpłatne do użytku niekomercyjnego. Po pobraniu możesz zaimportować przykład bezpośrednio do narzędzia:

Plik -> Nowy -> Przykład -> Przykłady schematów YAKINDU -> Dalej -> Sygnalizacja świetlna (C++) dla Arduino

> TUTAJ możesz pobrać narzędzia wykresów stanów YAKINDU <<

Możesz zacząć od 30-dniowego okresu próbnego. Następnie musisz uzyskać licencję, która jest bezpłatna do użytku niekomercyjnego!

Zalecana: