Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-23 14:39
Γεια σας! Θα σας δείξω πώς να προγραμματίσετε ένα φανάρι πεζών για το Arduino σε C ++ με ένα μηχάνημα πεπερασμένης κατάστασης χρησιμοποιώντας το YAKINDU Statechart Tools. Αυτό θα καταδείξει τη δύναμη των κρατικών μηχανών και μπορεί να χρησιμοποιηθεί ως σχέδιο για περαιτέρω έργα.
Προμήθειες
Χρειάζεστε μόνο ένα Arduino, μερικά κουμπιά, LED, Jumper και αντιστάσεις.
Σκεύη, εξαρτήματα
- 2x κουμπί
- 2x φανάρια ή μπορείτε να χρησιμοποιήσετε LED με αντιστάσεις 220 Ohm
- 2x αντιστάσεις 10k Ohm
- Breadboard
- Αλτης
- Arduino Uno/Mega (ή οποιοδήποτε άλλο, που έχει τουλάχιστον 8 GPIO)
Λογισμικό
- Εργαλεία YAKINDU Statechart
- Eclipse C ++ IDE για Arduino
Βήμα 1: Ορίστε πώς λειτουργεί: Φανάρι πεζών
Αρχικά, πρέπει να καθορίσουμε πώς πρέπει να λειτουργεί το φανάρι πεζών. Προσπάθησα να συνοψίσω τα σημεία:
- Χρησιμοποιούνται δύο φανάρια - το ένα για τα αυτοκίνητα και το άλλο για τους πεζούς
- Ο φωτεινός σηματοδότης μπορεί να ανάψει χρησιμοποιώντας ένα κουμπί
- Ο πεζός μπορεί να ζητήσει τη διέλευση του δρόμου πατώντας ένα κουμπί
- Το σβηστό φανάρι υποδεικνύεται αναβοσβήνοντας και τα δύο κίτρινα LED
- Αφού ανάψει, το φανάρι περιμένει για 10 δευτερόλεπτα σε ασφαλή λειτουργία
- Μετά την ασφαλή λειτουργία, τα αυτοκίνητα έχουν πάντα πράσινη φάση έως ότου ένας πεζός ξεκινήσει ένα αίτημα
- Το αίτημα πεζών για διέλευση υποδεικνύεται με εναλλαγή κίτρινου LED
Επιπλέον, υπάρχουν ορισμένες χρονικές εκδηλώσεις ανάλογα με τον τρόπο λειτουργίας του φανάρι.
Βήμα 2: Δημιουργήστε το κύκλωμα
Ας ξεκινήσουμε τη ρύθμιση του κυκλώματος. Στο παράδειγμά μου, όπως μπορείτε να δείτε στην εικόνα προεπισκόπησης, έχω χρησιμοποιήσει ένα Arduino Mega 2560, αλλά κάθε άλλο Arduino με τουλάχιστον οκτώ GPIO θα πρέπει να είναι εντάξει. Επιπλέον, έχω αγοράσει μερικά φανάρια 5V στο Amazon. Απλώς αναζητήστε το Φανάρι Arduino. Διαφορετικά, μπορείτε απλά να χρησιμοποιήσετε έξι διαφορετικά LED. Επιπλέον, χρειάζεστε δύο κουμπιά και δύο αντιστάσεις 10k Ohm.
Τα τρία αριστερά LED χρησιμοποιούνται για την κυκλοφορία του αυτοκινήτου και τα τρία δεξιά LED για τους πεζούς, όπου το κίτρινο μπορεί να υποδείξει ένα αίτημα.
Βήμα 3: Δημιουργία της κρατικής μηχανής
Έτσι, όπως μπορείτε να δείτε, υπάρχουν δύο κύριες καταστάσεις με σύνθετα μέλη - κατάσταση ενεργοποίησης και απενεργοποίησης. Μπορείτε να κάνετε εναλλαγή μεταξύ των δύο καταστάσεων χρησιμοποιώντας το συμβάν onOff, το οποίο είναι ενσύρματο στο κουμπί ON/OFF. Στην αρχική κατάσταση, την κατάσταση απενεργοποίησης, και οι δύο κίτρινες λυχνίες LED αρχίζουν να αναβοσβήνουν κάθε δευτερόλεπτο. Μόλις ανάψει το φανάρι, ξεκινά στο Safestate. Μετά από 10 δευτερόλεπτα θα αντιμετωπιστεί η τυπική συμπεριφορά των φανών. Η κόκκινη και κίτρινη λυχνία LED θα ανάψει στην κατάσταση StreetPrepare και το φανάρι θα γίνει πράσινο μετά από 2 δευτερόλεπτα ακόμη. Από εδώ και στο εξής, το κρατικό μηχάνημα περιμένει την εκδήλωση pedestrianRequest, η οποία είναι συνδεδεμένη στο δεύτερο κουμπί. Μετά την αποστολή του συμβάντος, το αίτημα θα υποδεικνύεται με εναλλαγή του κίτρινου LED κάθε δευτερόλεπτο στην κατάσταση PedWating. 7 δευτερόλεπτα αργότερα, το φανάρι θα αλλάξει πρώτα σε κίτρινο και έπειτα σε κόκκινο έως ότου οι πεζοί λάβουν το σήμα να μεταβούν στην κατάσταση PedestrianGreen. Μετά από αυτό, το PedestrianRed ενεργοποιείται και ο κύκλος επαναλαμβάνεται. Αυτό μπορεί να διακοπεί μόνο αν σβήσετε ξανά το φανάρι.
Βήμα 4: Εκτέλεση του Παραδείγματος
Βήμα 5: Δημιουργήθηκε κώδικας C ++
Ο κωδικός C ++ που δημιουργείται είναι μια κλασική θήκη μεταγωγής για τη διαχείριση της λογικής του μηχανήματος κατάστασης. Αυτό είναι μόνο ένα απόσπασμα κώδικα για το πώς φαίνεται:
void TrafficLightCtrl:: runCycle () {clearOutEvents (); για (stateConfVectorPosition = 0; stateConfVectorPosition <maxOrthogonalStates; stateConfVectorPosition ++) {switch (stateConfVector [stateConfVectorPosition])) {case main_region_on_r1_StreetGreen: {main_region_on_r1_rere_rere_rere_rere_rere_re1_StreetGreen_re1_StreetGreen_re1_StreetGreen: Διακοπή; } case main_region_on_r1_PedWaiting_r1_waitOn: {main_region_on_r1_PedWaiting_r1_waitOn_react (true); Διακοπή; } προεπιλογή: break; } clearInEvents (); }
Βήμα 6: Λάβετε το Παράδειγμα
Ολόκληρο το παράδειγμα είναι έτοιμο για μεταγλώττιση και εκτέλεση. Έρχεται με YAKINDU Statechart Tools, το οποίο είναι δωρεάν για μη εμπορική χρήση. Μετά τη λήψη, μπορείτε να εισαγάγετε το παράδειγμα απευθείας στο εργαλείο:
Αρχείο -> Νέο -> Παράδειγμα -> Παραδείγματα YACINDU Statechart -> Επόμενο -> Φανάρι (C ++) για Arduino
> ΕΔΩ μπορείτε να κατεβάσετε το YAKINDU Statechart Tools <<
Μπορείτε να ξεκινήσετε με δοκιμή 30 ημερών. Στη συνέχεια, πρέπει να λάβετε μια άδεια, η οποία είναι δωρεάν για μη εμπορική χρήση!
Συνιστάται:
Noise Traffic Light - DIY 3D Printed: 8 Steps (with Pictures)
Noise Traffic Light - DIY 3D Printed: Όλοι οι άνθρωποι θέλουν να εργάζονται σιωπηλά και είναι σημαντικό να υπάρχει ένα καλό εργασιακό περιβάλλον. Η σιωπή οδηγεί σε μια αποτελεσματική εργασία. Κάναμε αυτό το έργο για να φτάσουμε σε αυτήν την πρόταση. Ο φωτεινός σηματοδότης αποτελείται από ένα «φανάρι» που ελέγχει το dB
State Machine και Multitasking στο Arduino με SPI Expanders: 3 βήματα
State Machine and Multitasking στο Arduino With SPI Expanders: Την περασμένη εβδομάδα, ζητούσα να δημιουργήσω ένα σύστημα για να πιλοτάρεις πυροτεχνήματα με ένα arduino. Χρειάστηκαν περίπου 64 έξοδοι για τον έλεγχο των πυρκαγιών. Ένας τρόπος για να το κάνετε είναι να χρησιμοποιήσετε επεκτάσεις IC. Υπάρχουν λοιπόν 2 λύσεις:- ένας διαστολέας I2C αλλά χρειάζεται μετατροπέα όταν
Tabletop Pinball Machine Using Evive- Arduino based Embedded Plaform: 18 Steps (with Pictures)
Tabletop Pinball Machine Using Evive- Arduino Based Embedded Plaform: Ένα ακόμη Σαββατοκύριακο, ένα άλλο συναρπαστικό παιχνίδι! Και αυτή τη φορά, δεν είναι άλλο από το αγαπημένο παιχνίδι arcade όλων - Pinball! Αυτό το έργο θα σας δείξει πώς να φτιάξετε τη δική σας μηχανή Pinball εύκολα στο σπίτι. Το μόνο που θα χρειαστείτε είναι στοιχεία από το evive
Super Easy PC Control of 110 Vac Using a Crydom Solid-State Relay: 3 Steps (with Pictures)
Super Easy PC Control of 110 Vac Using a Crydom Solid-State Relay: Είμαι έτοιμος να δοκιμάσω το χέρι μου για να κάνω κάποια συγκόλληση θερμής πλάκας. Ως εκ τούτου, χρειαζόμουν έναν τρόπο ελέγχου του 110Vac από τον υπολογιστή μου. Αυτό το εκπαιδευτικό δείχνει πώς μπορείτε να ελέγχετε εύκολα 110Vac από μια σειριακή θύρα εξόδου σε έναν υπολογιστή. Η σειριακή θύρα που χρησιμοποίησα ήταν τύπου USB
Arduino Traffic Light Control W/Remote Control: 10 Steps
Ελεγκτής φωτεινού σηματοδότη Arduino W/τηλεχειριστήριο: Είχα ένα φανάρι που τελείωνα. Το μόνο που απομένει ήταν να φτιάξουμε τον ελεγκτή για τα πρότυπα σήματος του φωτός. Για να του δώσω μια ανατροπή, ενσωμάτωσα ένα τηλεχειριστήριο. Αυτή ήταν επίσης η τέλεια ευκαιρία για μένα