Inhoudsopgave:

State Machine op Arduino - een voetgangersverkeerslicht - Ajarnpa
State Machine op Arduino - een voetgangersverkeerslicht - Ajarnpa

Video: State Machine op Arduino - een voetgangersverkeerslicht - Ajarnpa

Video: State Machine op Arduino - een voetgangersverkeerslicht - Ajarnpa
Video: Arduino: Verkeerslicht 2024, November
Anonim
State Machine op Arduino - een voetgangersverkeerslicht
State Machine op Arduino - een voetgangersverkeerslicht

Hallo daar! Ik ga je laten zien hoe je een voetgangersverkeerslicht voor Arduino in C ++ programmeert met een eindige-toestandsmachine met behulp van YAKINDU Statechart Tools. Dit zal de kracht van staatsmachines demonstreren en kan worden gebruikt als blauwdruk voor verdere projecten.

Benodigdheden

Je hebt alleen een Arduino, enkele drukknoppen, LED's, Jumper en weerstanden nodig.

Hardware

  • 2x Drukknop
  • 2x Verkeerslichten of u kunt LED's gebruiken met 220 Ohm weerstanden
  • 2x 10k Ohm weerstanden
  • Breadboard
  • Trui
  • Arduino Uno/Mega (of een andere, die minstens 8 GPIO's heeft)

Software

  • YAKINDU Statechart-tools
  • Eclipse C++ IDE voor Arduino

Stap 1: Definieer hoe het werkt: voetgangersverkeerslicht

Eerst moeten we specificeren hoe het voetgangersverkeerslicht moet werken. Ik heb geprobeerd de punten samen te vatten:

  • Er worden twee verkeerslichten gebruikt - een voor de auto's, de andere voor de voetgangers
  • Verkeerslicht kan worden ingeschakeld met behulp van een knop
  • Voetganger kan vragen om de straat over te steken door op een knop te drukken
  • Uitgeschakeld verkeerslicht wordt aangegeven door het knipperen van beide gele LED's
  • Na het inschakelen wacht het verkeerslicht 10 seconden in de veilige modus
  • Na de veilige modus hebben auto's altijd een groene fase totdat een voetganger een verzoek start
  • Voetgangersverzoek om over te steken wordt aangegeven door het omschakelen van gele LED

Bovendien zijn er enkele tijdgebeurtenissen, afhankelijk van de manier waarop een verkeerslicht werkt.

Stap 2: Bouw het circuit

Bouw het circuit
Bouw het circuit

Laten we beginnen met het opzetten van het circuit. In mijn voorbeeld, zoals je kunt zien op de voorbeeldafbeelding, heb ik een Arduino Mega 2560 gebruikt, maar elke andere Arduino met ten minste acht GPIO's zou in orde moeten zijn. Daarnaast heb ik een aantal 5V verkeerslichten gekocht bij Amazon. Zoek gewoon naar Traffic Light Arduino. Anders kunt u gewoon zes verschillende LED's gebruiken. Verder heb je twee drukknoppen en twee 10k Ohm weerstanden nodig.

De drie linker leds worden gebruikt voor het autoverkeer en de drie rechter leds voor de voetgangers, waarbij de gele een verzoek kan aangeven.

Stap 3: De staatsmachine maken

De staatsmachine maken
De staatsmachine maken

Dus, zoals je kunt zien, zijn er twee hoofdstaten met samengestelde leden - staat aan en staat uit. U kunt tussen beide statussen schakelen door de gebeurtenis aanUit te gebruiken, die is aangesloten op de AAN/UIT-knop. In de begintoestand, de uit-toestand, beginnen beide gele LED's elke seconde te knipperen. Zodra het verkeerslicht is ingeschakeld, begint het in de Safestate. Na 10 seconden wordt het typische gedrag van de verkeerslichten afgehandeld. De rode en gele LED gaan branden in de StreetPrepare-status en het stoplicht wordt na nog 2 seconden groen. Vanaf nu wacht de statusmachine op de gebeurtenis voetgangersRequest, die is aangesloten op de tweede knop. Na het verzenden van de gebeurtenis wordt het verzoek aangegeven door elke seconde de gele LED in de PedWating-status te schakelen. 7 seconden later wordt het verkeerslicht eerst op geel en vervolgens op rood geschakeld totdat de voetgangers het signaal krijgen om in de voetgangersgroene staat te gaan. Hierna wordt PedestrianRed geactiveerd en herhaalt de cyclus zich. Dit kan alleen worden onderbroken door het verkeerslicht weer uit te schakelen.

Stap 4: Het voorbeeld uitvoeren

Stap 5: Gegenereerde C++-code

De gegenereerde C++-code is een klassieke schakelkast om de logica van de toestandsmachine aan te kunnen. Dit is slechts een codefragment van hoe het eruit ziet:

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); pauze; } case main_region_on_r1_PedWaiting_r1_waitOn: { main_region_on_r1_PedWaiting_r1_waitOn_react (true); pauze; } standaard: breken; } clearInEvents(); }

Stap 6: Krijg het voorbeeld

Het hele voorbeeld is klaar om te compileren en uit te voeren. Het wordt geleverd met YAKINDU Statechart Tools, dat gratis is voor niet-commercieel gebruik. Na het downloaden kunt u het voorbeeld direct in de tool importeren:

Bestand -> Nieuw -> Voorbeeld -> YAKINDU Statechart-voorbeelden -> Volgende -> Verkeerslicht (C++) voor Arduino

> HIER kunt u YAKINDU Statechart Tools downloaden <<

U kunt beginnen met een proefperiode van 30 dagen. Daarna moet u een licentie krijgen, die gratis is voor niet-commercieel gebruik!

Aanbevolen: