Taula de continguts:

State Machine a Arduino: un semàfor per a vianants: 6 passos (amb imatges)
State Machine a Arduino: un semàfor per a vianants: 6 passos (amb imatges)

Vídeo: State Machine a Arduino: un semàfor per a vianants: 6 passos (amb imatges)

Vídeo: State Machine a Arduino: un semàfor per a vianants: 6 passos (amb imatges)
Vídeo: Arduino Real Time OS: Getting Started (ChibiOS) 2024, Juliol
Anonim
State Machine a Arduino: un semàfor per a vianants
State Machine a Arduino: un semàfor per a vianants

Hey allà! Vaig a mostrar-vos com programar un semàfor per a vianants per a Arduino en C ++ amb una màquina d'estats finits mitjançant les eines YAKINDU Statechart Tools. Això demostrarà la potència de les màquines estatals i es pot utilitzar com a pla per a futurs projectes.

Subministraments

Només necessiteu un Arduino, alguns polsadors, LEDs, jumper i resistències.

Maquinari

  • 2 polsadors
  • 2 semàfors o podeu utilitzar LEDs amb resistències de 220 Ohm
  • 2x 10k ohm resistències
  • Taula de pa
  • Saltador
  • Arduino Uno / Mega (o qualsevol altre, que tingui almenys 8 GPIO)

Programari

  • Eines de gràfics d'estat de YAKINDU
  • IDE Eclipse C ++ per a Arduino

Pas 1: definiu com funciona: semàfor per a vianants

Al principi, hem d’especificar com ha de funcionar el semàfor per als vianants. He intentat resumir els punts bàsics:

  • S’utilitzen dos semàfors: un per als cotxes i l’altre per als vianants
  • El semàfor es pot encendre mitjançant un botó
  • Els vianants poden sol·licitar creuar el carrer prement un botó
  • El semàfor apagat s’indica fent parpellejar els dos LED grocs
  • Després d’encendre’s, el semàfor espera 10 segons en mode segur
  • Després del mode segur, els cotxes sempre tenen una fase verda fins que un vianant comença una sol·licitud
  • La petició de vianants per creuar s’indica mitjançant un LED groc alternant

A més, hi ha alguns esdeveniments temporals en funció del funcionament d'un semàfor.

Pas 2: Construeix el circuit

Construeix el circuit
Construeix el circuit

Comencem a configurar el circuit. En el meu exemple, com podeu veure a la imatge de vista prèvia, he utilitzat un Arduino Mega 2560, però tots els altres Arduino amb almenys vuit GPIO haurien d’estar bé. A més, he comprat alguns semàfors de 5V a Amazon. Només cal que busqueu el semàfor Arduino. En cas contrari, només podeu utilitzar sis LED diferents. A més, necessiteu dos polsadors i dues resistències de 10 k Ohm.

Els tres LEDs esquerres s’utilitzen per al trànsit de vehicles i els tres LEDs drets per als vianants, on el groc pot indicar una sol·licitud.

Pas 3: creació de la màquina d'estats

Creació de la màquina d’estats
Creació de la màquina d’estats

Per tant, com podeu veure, hi ha dos estats principals amb membres compostos: estat activat i estat desactivat. Podeu canviar entre ambdós estats mitjançant l’esdeveniment OnOff, que es connecta al botó ON / OFF. En l'estat inicial, l'estat apagat, els dos LED grocs comencen a parpellejar cada segon. Un cop encès el semàfor, comença al Safestate. Al cap de 10 segons es controlarà el comportament típic dels semàfors. El LED vermell i groc s’encendrà a l’estat StreetPrepare i el semàfor es posarà de color verd al cap de 2 segons més. A partir d’ara, la màquina d’estat espera l’esdeveniment pedestrianRequest, que es connecta al segon botó. Després d’enviar l’esdeveniment, la petició s’indicarà alternant el LED groc cada segon a l’estat de PedWating. 7 segons més tard, el semàfor es canviarà primer al groc i després al vermell fins que els vianants obtinguin el senyal d’anar a l’estat PedestrianGreen. Després d'això, s'activa el PedestrianRed i el cicle es repeteix. Això només es pot interrompre apagant de nou el semàfor.

Pas 4: Execució de l'exemple

Pas 5: Codi generat C ++

El codi C ++ generat és un cas clàssic de commutació per gestionar la lògica de la màquina d’estats. Aquest és només un fragment de codi de la seva aparença:

void TrafficLightCtrl:: runCycle () {clearOutEvents (); for (stateConfVectorPosition = 0; stateConfVectorPosition <maxOrthogonalStates; stateConfVectorPosition ++) {switch (stateConfVector [stateConfVectorPosition]) {case main_region_on_r1_StreetGreen: {main_region_on_r1_StreetGreen_rea; trencar; } case main_region_on_r1_PedWaiting_r1_waitOn: {main_region_on_r1_PedWaiting_r1_waitOn_react (true); trencar; } per defecte: trencar; } clearInEvents (); }

Pas 6: obteniu l'exemple

Tot l'exemple està preparat per compilar-se i executar-se. Ve amb les eines YAKINDU Statechart Tools, que són gratuïtes per a usos no comercials. Després de descarregar-lo, podeu importar l'exemple directament a l'eina:

Fitxer -> Nou -> Exemple -> Exemples de gràfics d'estat de YAKINDU -> Següent -> Semàfor (C ++) per a Arduino

> AQUÍ podeu descarregar YAKINDU Statechart Tools <<

Podeu començar amb una prova de 30 dies. Després, heu d'obtenir una llicència, que és gratuïta per a usos no comercials.

Recomanat: