Table des matières:

State Machine sur Arduino - un feu de circulation pour piétons : 6 étapes (avec photos)
State Machine sur Arduino - un feu de circulation pour piétons : 6 étapes (avec photos)

Vidéo: State Machine sur Arduino - un feu de circulation pour piétons : 6 étapes (avec photos)

Vidéo: State Machine sur Arduino - un feu de circulation pour piétons : 6 étapes (avec photos)
Vidéo: IOT TUNISIA (Part 3) 2024, Novembre
Anonim
State Machine sur Arduino - un feu de circulation pour piétons
State Machine sur Arduino - un feu de circulation pour piétons

Salut ! Je vais vous montrer comment programmer un feu de circulation pour piétons pour Arduino en C++ avec une machine à états finis en utilisant YAKINDU Statechart Tools. Cela démontrera la puissance des machines d'état et peut être utilisé comme modèle pour d'autres projets.

Fournitures

Vous n'avez besoin que d'un Arduino, de boutons-poussoirs, de LED, de cavaliers et de résistances.

Matériel

  • 2x bouton poussoir
  • 2x feux de circulation ou vous pouvez utiliser des LED avec des résistances de 220 Ohm
  • 2x résistances 10k Ohm
  • Planche à pain
  • Sauteur
  • Arduino Uno/Mega (ou tout autre, qui a au moins 8 GPIO)

Logiciel

  • Outils de diagramme d'états YAKINDU
  • Eclipse C++ IDE pour Arduino

Étape 1: Définir comment cela fonctionne: Feu de circulation pour piétons

Dans un premier temps, nous devons spécifier comment le feu de circulation piéton doit fonctionner. J'ai essayé de résumer les puces:

  • Deux feux de circulation sont utilisés - un pour les voitures, l'autre pour les piétons
  • Le feu de circulation peut être allumé à l'aide d'un bouton
  • Le piéton peut demander de traverser la rue en appuyant sur un bouton
  • Le feu de circulation éteint est indiqué par le clignotement des deux LED jaunes
  • Après l'allumage, le feu de circulation attend 10 secondes en mode sans échec
  • Après le mode sans échec, les voitures ont toujours une phase verte jusqu'à ce qu'un piéton lance une demande
  • La demande de passage des piétons est indiquée par le basculement de la LED jaune

De plus, certains événements temporels dépendent du fonctionnement d'un feu de circulation.

Étape 2: Construire le circuit

Construire le circuit
Construire le circuit

Commençons à mettre en place le circuit. Dans mon exemple, comme vous pouvez le voir sur l'image d'aperçu, j'ai utilisé un Arduino Mega 2560, mais tous les autres Arduino avec au moins huit GPIO devraient convenir. De plus, j'ai acheté des feux de circulation 5V sur Amazon. Recherchez simplement Traffic Light Arduino. Sinon, vous pouvez simplement utiliser six LED différentes. De plus, vous avez besoin de deux boutons poussoirs et de deux résistances de 10k Ohm.

Les trois LED de gauche sont utilisées pour la circulation automobile et les trois LED de droite pour les piétons, la jaune pouvant indiquer une demande.

Étape 3: Création de la machine d'état

Création de la machine d'état
Création de la machine d'état

Ainsi, comme vous pouvez le voir, il existe deux états principaux avec des membres composites - état activé et état désactivé. Vous pouvez basculer entre les deux états en utilisant l'événement onOff, qui est câblé au bouton ON/OFF. Dans l'état initial, l'état éteint, les deux LED jaunes commencent à clignoter toutes les secondes. Une fois le feu allumé, il démarre en Safestate. Après 10 secondes, le comportement typique des feux de circulation sera géré. La LED rouge et jaune s'allumera dans l'état StreetPrepare et le feu de circulation passera au vert après 2 secondes supplémentaires. Désormais, la machine d'état attend l'événement piétonRequest, qui est câblé au deuxième bouton. Après l'envoi de l'événement, la demande sera indiquée en basculant la LED jaune toutes les secondes dans l'état PedWating. 7 secondes plus tard, le feu de circulation passera d'abord au jaune, puis au rouge jusqu'à ce que les piétons reçoivent le signal pour passer à l'état PedestrianGreen. Après cela, le PedestrianRed est activé et le cycle se répète. Cela ne peut être interrompu qu'en éteignant à nouveau le feu.

Étape 4: Exécuter l'exemple

Étape 5: Code C++ généré

Le code C++ généré est un cas de commutation classique pour gérer la logique de la machine d'état. Ceci est juste un extrait de code de ce à quoi cela ressemble:

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 Pause; } cas main_region_on_r1_PedWaiting_r1_waitOn: { main_region_on_r1_PedWaiting_r1_waitOn_react(true); Pause; } par défaut: pause; } clearInEvents(); }

Étape 6: Obtenez l'exemple

L'ensemble de l'exemple est prêt à être compilé et exécuté. Il est livré avec YAKINDU Statechart Tools, qui est gratuit pour une utilisation non commerciale. Après téléchargement, vous pouvez importer l'exemple directement dans l'outil:

Fichier -> Nouveau -> Exemple -> Exemples de diagrammes d'états YAKINDU -> Suivant -> Feu de circulation (C++) pour Arduino

> ICI vous pouvez télécharger YAKINDU Statechart Tools <<

Vous pouvez commencer par un essai de 30 jours. Ensuite, vous devez obtenir une licence, qui est gratuite pour une utilisation non commerciale !

Conseillé: