Sommario:

State Machine su Arduino - Un Semaforo Pedonale: 6 Passaggi (con Immagini)
State Machine su Arduino - Un Semaforo Pedonale: 6 Passaggi (con Immagini)

Video: State Machine su Arduino - Un Semaforo Pedonale: 6 Passaggi (con Immagini)

Video: State Machine su Arduino - Un Semaforo Pedonale: 6 Passaggi (con Immagini)
Video: Sistema semaforico con Arduino - parte 2 - video 282 2024, Dicembre
Anonim
State Machine su Arduino: un semaforo pedonale
State Machine su Arduino: un semaforo pedonale

Ehilà! Ti mostrerò come programmare un semaforo pedonale per Arduino in C++ con una macchina a stati finiti utilizzando YAKINDU Statechart Tools. Ciò dimostrerà la potenza delle macchine statali e può essere utilizzato come progetto per ulteriori progetti.

Forniture

Hai solo bisogno di un Arduino, alcuni pulsanti, LED, Jumper e resistori.

Hardware

  • 2x pulsante
  • 2x semafori o puoi usare LED con resistori da 220 Ohm
  • 2x resistori da 10k Ohm
  • tagliere
  • Maglione
  • Arduino Uno/Mega (o qualsiasi altro, che abbia almeno 8 GPIO)

Software

  • Strumenti per diagrammi di stato YAKINDU
  • Eclipse C++ IDE per Arduino

Passaggio 1: definire come funziona: semaforo pedonale

Per prima cosa, dobbiamo specificare come dovrebbe funzionare il semaforo pedonale. Ho provato a riassumere i punti elenco:

  • Vengono utilizzati due semafori: uno per le auto, l'altro per i pedoni
  • Il semaforo può essere acceso utilizzando un pulsante
  • Il pedone può richiedere di attraversare la strada premendo un pulsante
  • Il semaforo spento è segnalato dal lampeggio di entrambi i led gialli
  • Dopo l'accensione, il semaforo attende 10 secondi in modalità provvisoria
  • Dopo la modalità provvisoria, le auto hanno sempre una fase verde fino a quando un pedone non avvia una richiesta
  • La richiesta di attraversamento pedonale è segnalata dall'accensione del LED giallo

Inoltre, ci sono alcuni eventi temporali che dipendono dal modo in cui funziona un semaforo.

Passaggio 2: costruisci il circuito

Costruisci il circuito
Costruisci il circuito

Iniziamo a configurare il circuito. Nel mio esempio, come puoi vedere nell'immagine di anteprima, ho usato un Arduino Mega 2560, ma ogni altro Arduino con almeno otto GPIO dovrebbe andare bene. Inoltre, ho acquistato alcuni semafori 5V su Amazon. Basta cercare semaforo Arduino. Altrimenti, puoi semplicemente utilizzare sei LED diversi. Inoltre, sono necessari due pulsanti e due resistori da 10k Ohm.

I tre led di sinistra sono utilizzati per il traffico automobilistico ei tre led di destra per i pedoni, dove quello giallo può indicare una richiesta.

Passaggio 3: creazione della macchina a stati

Creare la macchina a stati
Creare la macchina a stati

Quindi, come puoi vedere, ci sono due stati principali con membri compositi: stato attivo e stato spento. È possibile passare da uno stato all'altro utilizzando l'evento onOff, che è collegato al pulsante ON/OFF. Nello stato iniziale, lo stato spento, entrambi i LED gialli iniziano a lampeggiare ogni secondo. Una volta che il semaforo è stato acceso, inizia nel Safestate. Dopo 10 secondi verrà gestito il comportamento tipico dei semafori. Nello stato StreetPrepare si accendono i LED rosso e giallo e il semaforo diventa verde dopo altri 2 secondi. D'ora in poi, la macchina a stati attende l'evento pedonalRequest, che è cablato al secondo pulsante. Dopo l'invio dell'evento la richiesta verrà segnalata commutando ogni secondo il LED giallo nello stato PedWating. 7 secondi dopo il semaforo passerà prima al giallo e poi al rosso finché i pedoni non riceveranno il segnale per passare allo stato PedestrianGreen. Successivamente, viene attivato il Rosso Pedone e il ciclo si ripete. Questo può essere interrotto solo spegnendo nuovamente il semaforo.

Passaggio 4: eseguire l'esempio

Passaggio 5: codice C++ generato

Il codice C++ generato è un classico switch-case per gestire la logica della macchina a stati. Questo è solo un frammento di codice di come appare:

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); rottura; } case main_region_on_r1_PedWaiting_r1_waitOn: { main_region_on_r1_PedWaiting_r1_waitOn_react(true); rottura; } predefinito: interruzione; } clearInEvents(); }

Passaggio 6: ottenere l'esempio

L'intero esempio è pronto per essere compilato ed eseguito. Viene fornito con YAKINDU Statechart Tools, che è gratuito per uso non commerciale. Dopo il download, puoi importare l'esempio direttamente nello strumento:

File -> Nuovo -> Esempio -> Esempi di diagrammi di stato YAKINDU -> Avanti -> Semaforo (C++) per Arduino

> QUI puoi scaricare gli strumenti YAKINDU Statechart <<

Puoi iniziare con una prova di 30 giorni. Successivamente, devi ottenere una licenza, che è gratuita per uso non commerciale!

Consigliato: