Πίνακας περιεχομένων:
- Προμήθειες
- Βήμα 1: Το υλικό
- Βήμα 2: Καθορίστε πώς πρέπει να λειτουργεί
- Βήμα 3: Διασύνδεση της κρατικής μηχανής
- Βήμα 4: Έλεγχος HMI
- Βήμα 5: Χειριστείτε καταστάσεις
- Βήμα 6: Χρονόμετρο
- Βήμα 7: Μετρητής
- Βήμα 8: Προσομοίωση
- Βήμα 9: Λάβετε το Παράδειγμα
Βίντεο: Arduino HMI χρησιμοποιώντας μηχανήματα κατάστασης: 9 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:34
Σε αυτό το Instructable, θα σας δείξω πώς να χρησιμοποιήσετε τα Εργαλεία YAKINDU Statechart για να πραγματοποιήσετε ένα απλό και επεκτάσιμο HMI χρησιμοποιώντας ασπίδα πληκτρολογίου LCD 16x2 για Arduino.
Οι μηχανές πεπερασμένης κατάστασης (FSM) είναι ένα ισχυρό μοτίβο σχεδιασμού για την ανάπτυξη πολύπλοκων διεπαφών ανθρώπινων μηχανών (HMI). Καθώς η λειτουργικότητα ενός HMI μπορεί να αυξηθεί, είναι χρήσιμο να χρησιμοποιήσετε ένα μοτίβο σχεδίασης όπως μηχανές κατάστασης.
Το πλήρες παράδειγμα είναι ενσωματωμένο στο YAKINDU Statechart Tools. Επιπλέον, το Eclipse C ++ IDE για το Arduino Plugin έχει χρησιμοποιηθεί για τη μεταγλώττιση και αναβοσβήνει στο IDE.
Μια σύντομη σύνοψη των YAKINDU Statechart Tools
Με αυτό το εργαλείο, είναι δυνατή η δημιουργία μηχανών γραφικής κατάστασης. Επιτρέπει στο χρήστη να δημιουργήσει κώδικα C, C ++ ή Java από τον κρατικό υπολογιστή. Με αυτήν την προσέγγιση, το μοντέλο μπορεί να αλλάξει ή να επεκταθεί και ο χρήστης μπορεί απλά να δημιουργήσει ξανά τον κώδικα και δεν χρειάζεται να γράψει απλό πηγαίο κώδικα.
Προμήθειες
Μέρη:
- Arduino (Uno, Mega)
- Καλώδιο USB
- Ασπίδα πληκτρολογίου LCD 16x2
Εργαλεία:
- Εργαλεία YAKINDU Statechart
- Eclipse C ++ IDE για Arduino
Βήμα 1: Το υλικό
Η ασπίδα πληκτρολογίου LCD μπορεί απλά να συνδεθεί στο Arduino. Διαθέτει οθόνη LCD 16x2 και πρόσθετα έξι κουμπιά:
- Αριστερά
- σωστά
- Πάνω
- Κάτω
- Επιλέγω
- (Επαναφορά)
Προφανώς, πέντε από αυτά μπορούν να χρησιμοποιηθούν. Τα πλήκτρα είναι ενσύρματα σε ένα διαχωριστή τάσης και ανιχνεύονται χρησιμοποιώντας τον ακροδέκτη A0 ανάλογα με την τάση. Έχω χρησιμοποιήσει λογισμικό αποσύνδεσης για να τα εντοπίσω σωστά.
Βήμα 2: Καθορίστε πώς πρέπει να λειτουργεί
Η εφαρμογή θα πρέπει να μπορεί να κάνει τρία πράγματα.
- Εδώ θέλω να χρησιμοποιήσω τα κουμπιά για πλοήγηση μεταξύ πέντε καταστάσεων: επάνω, μεσαία, κάτω, αριστερά και δεξιά
- Χρονόμετρο Ένα απλό χρονόμετρο, το οποίο μπορεί να ξεκινήσει, να σταματήσει και να μηδενιστεί. Θα πρέπει να αυξάνεται κάθε 100 χιλιοστά του δευτερολέπτου
- CounterThe τρίτο μέρος περιέχει ένα απλό πάνω/κάτω μετρητή. Θα πρέπει να μπορεί να μετρά θετικούς αριθμούς και θα πρέπει να μπορεί να επαναρυθμιστεί
Το ενεργό μενού (ή η κατάσταση) θα εμφανιστεί στην οθόνη LCD 16x2 στην επάνω γραμμή. Η εφαρμογή (κατάσταση, χρονοδιακόπτης ή μετρητής) θα εμφανιστεί στην κάτω γραμμή. Για πλοήγηση, πρέπει να χρησιμοποιείτε το αριστερό και το δεξί κουμπί.
Βήμα 3: Διασύνδεση της κρατικής μηχανής
Τα κουμπιά θα καταργηθούν και θα συνδεθούν με το μηχάνημα κατάστασης. Μπορούν να χρησιμοποιηθούν όπως σε εκδηλώσεις στην κρατική μηχανή. Επιπλέον, οι λειτουργίες ορίζονται για την εμφάνιση του τρέχοντος μενού. Και ορίζονται τουλάχιστον δύο μεταβλητές, μία για το χρονόμετρο και μία για τον μετρητή.
διεπαφή:
// κουμπιά ως συμβάντα εισόδου σε συμβάν δεξιά σε περίπτωση αριστερά σε συμβάν κάτω στο συμβάν επιλέξτε // εμφάνιση HMI συγκεκριμένων τιμών λειτουργίας displayLCDString (τιμή: συμβολοσειρά, μήκος: ακέραιος, θέση: ακέραιος) οθόνη λειτουργίας LCDInteger (τιμή: ακέραιος, θέση: ακέραιος) λειτουργία clearLCDRow (θέση: ακέραιος) εσωτερικός: // μεταβλητές για αποθήκευση var cnt: ακέραιος var χρόνος Cnt: ακέραιος = 0
Μετά τη δημιουργία του κώδικα C ++, τα συμβάντα πρέπει να καταργηθούν και να συνδεθούν στη διεπαφή. Αυτό το απόσπασμα κώδικα δείχνει πώς να το κάνετε αυτό.
Αρχικά, θα καθοριστούν τα κουμπιά:
#define NONE 0 #define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5
Στη συνέχεια, υπάρχει μια λειτουργία που έχει οριστεί για ανάγνωση του κουμπιού. Οι τιμές ενδέχεται να διαφέρουν, ανάλογα με τον κατασκευαστή του LCD Shield.
static int readButton () {int αποτέλεσμα = 0; αποτέλεσμα = analogRead (0); εάν (αποτέλεσμα <50) {επιστροφή ΔΕΞΙΑ? } if (αποτέλεσμα <150) {return UP; } if (αποτέλεσμα <300) {return DOWN? } if (αποτέλεσμα <550) {return LEFT? } if (αποτέλεσμα <850) {return SELECT; } επιστροφή ΚΑΝΕΝΑ? }
Στο τέλος, τα κουμπιά θα καταργηθούν. Έκανα καλά αποτελέσματα με 80 ms. Μόλις απελευθερωθεί ένα κουμπί, θα ανεβάσει το αντίστοιχο σε περίπτωση.
int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); καθυστέρηση (80)? oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> raise_select (); Διακοπή; } περίπτωση ΑΡΙΣΤΕΡΑ: {stateMachine-> raise_left (); Διακοπή; } περίπτωση ΚΑΤΩ: {stateMachine-> raise_down (); Διακοπή; } case UP: {stateMachine-> raise_up (); Διακοπή; } case RIGHT: {stateMachine-> raise_right (); Διακοπή; } προεπιλογή: {break; }}}}
Βήμα 4: Έλεγχος HMI
Κάθε κατάσταση χρησιμοποιείται για ένα μέρος του μενού. Υπάρχουν υπο -κράτη, όπου η εφαρμογή - για παράδειγμα το χρονόμετρο - θα εκτελεστεί.
Με αυτόν τον σχεδιασμό, η διεπαφή μπορεί εύκολα να επεκταθεί. Πρόσθετα μενού μπορούν απλά να προστεθούν χρησιμοποιώντας το ίδιο μοτίβο σχεδίασης. Η ανάγνωση μιας αξίας ενός αισθητήρα και η εμφάνισή του σε ένα τέταρτο στοιχείο μενού δεν είναι μεγάλη υπόθεση.
Προς το παρόν, μόνο αριστερά και δεξιά χρησιμοποιούνται ως χειριστήριο. Αλλά πάνω και κάτω μπορεί επίσης να χρησιμοποιηθεί ως επέκταση πλοήγησης στο κύριο μενού. Μόνο το κουμπί επιλογής θα χρησιμοποιηθεί για την εισαγωγή ενός συγκεκριμένου στοιχείου μενού.
Βήμα 5: Χειριστείτε καταστάσεις
Το μενού καταστάσεων λαβής χρησιμοποιείται μόνο ως επιπλέον παράδειγμα πλοήγησης. Η χρήση πάνω, κάτω, δεξιά ή αριστερά επιτρέπει την εναλλαγή μεταξύ των καταστάσεων. Η τρέχουσα κατάσταση θα εκτυπώνεται πάντα στη δεύτερη γραμμή της οθόνης LCD.
Βήμα 6: Χρονόμετρο
Το χρονόμετρο είναι αρκετά απλό. Αρχικά, η τιμή του χρονοδιακόπτη θα επαναρυθμιστεί. Το χρονόμετρο μπορεί να ξεκινήσει χρησιμοποιώντας το αριστερό κουμπί και να αλλάξει χρησιμοποιώντας αριστερά και δεξιά. Η χρήση επάνω ή κάτω επαναφέρει το χρονόμετρο. Μπορείτε επίσης να ρυθμίσετε το χρονόμετρο στο μηδέν χρησιμοποιώντας το κουμπί επιλογής δύο φορές - αφήνοντας το μενού και εισάγοντάς το ξανά, καθώς ο χρονοδιακόπτης θα μηδενιστεί με την αρχική εισαγωγή του χρονόμετρου.
Βήμα 7: Μετρητής
Τουλάχιστον, υπάρχει ένας μετρητής που εφαρμόζεται. Η είσοδος στην κατάσταση μετρητή επαναφέρει τον μετρητή. Μπορεί να ξεκινήσει χρησιμοποιώντας οποιοδήποτε κουμπί, εκτός από το κουμπί επιλογής. Εφαρμόζεται ως απλός μετρητής πάνω/κάτω, η τιμή του οποίου δεν μπορεί να είναι μικρότερη από 0.
Βήμα 8: Προσομοίωση
Βήμα 9: Λάβετε το Παράδειγμα
Μπορείτε να κατεβάσετε το IDE εδώ: YAKINDU Statechart Tools
Αφού κατεβάσετε το IDE, θα βρείτε το παράδειγμα μέσω αρχείου -> N ew -> Παράδειγμα
Είναι δωρεάν για χομπίστες, αλλά μπορείτε επίσης να χρησιμοποιήσετε μια δοκιμή 30 ημερών.
Συνιστάται:
Οικογένεια / Ένδειξη κατάστασης συνεργάτη: 6 βήματα (με εικόνες)
Οικογένεια / Δείκτης κατάστασης συνεργάτη: Το πρώτο μου εκπαιδευτικό, πολλά έργα με βοήθησαν όλα αυτά τα χρόνια, ελπίζω ότι αυτό θα βοηθήσει κάποιον άλλο. Το διήγημα … Χρειαζόμασταν έναν τρόπο να δείξουμε ο ένας στον άλλον την κατάστασή μας και όχι να διακόψουμε τις κλήσεις ή να μείνουμε μακριά όταν υποθέτουμε ένα άλλο
Φτιάξτε το δικό σας ρελέ στερεάς κατάστασης: 4 βήματα (με εικόνες)
Φτιάξτε το δικό σας ρελέ στερεάς κατάστασης: Σε αυτό το έργο θα ρίξουμε μια ματιά στα ρελέ στερεάς κατάστασης, θα μάθουμε πώς λειτουργούν και πότε να τα χρησιμοποιούμε και στο τέλος θα δημιουργήσουμε το δικό μας DIY Solid State Relay. Ας αρχίσουμε
Δείκτης κατάστασης εργασίας από το σπίτι: 5 βήματα
Δείκτης κατάστασης εργασίας από το σπίτι: Με την τρέχουσα κατάσταση εργασίας από το σπίτι, αντιμετωπίζω κάποιες προκλήσεις επειδή τα παιδιά μου σπουδάζουν επίσης από το σπίτι. Μερικές φορές η επαγγελματική και οικογενειακή ζωή μπορεί να είναι λίγο θολή. Πρέπει λοιπόν να μπορώ να καθορίζω κάποιους βασικούς κανόνες με τα παιδιά μου για
Πώς να ελέγξετε τη λάμπα χρησιμοποιώντας το Arduino UNO και τη μονάδα ρελέ στερεάς κατάστασης 5V ενός καναλιού: 3 βήματα
Πώς να ελέγξετε τη λάμπα χρησιμοποιώντας το Arduino UNO και το Single Channel 5V Relay Solid Module: Περιγραφή: Σε σύγκριση με το παραδοσιακό μηχανικό ρελέ, το ρελέ στερεάς κατάστασης (SSR) έχει πολλά πλεονεκτήματα: έχει μεγαλύτερη διάρκεια ζωής, με πολύ μεγαλύτερη ενεργοποίηση/ χωρίς ταχύτητα και χωρίς θόρυβο. Επιπλέον, έχει επίσης καλύτερη αντοχή σε κραδασμούς και μηχανική
Digitalηφιακό ρολόι στο Arduino χρησιμοποιώντας μηχανή πεπερασμένης κατάστασης: 6 βήματα
Watchηφιακό ρολόι στο Arduino χρησιμοποιώντας μια μηχανή πεπερασμένης κατάστασης: Γεια σας, θα σας δείξω πώς μπορεί να δημιουργηθεί ένα ψηφιακό ρολόι με τα Εργαλεία YAKINDU Statechart και να λειτουργεί σε Arduino, το οποίο χρησιμοποιεί ασπίδα πληκτρολογίου LCD. Το αρχικό μοντέλο του ψηφιακού το ρολόι έχει ληφθεί από τον David Harel. Έχει δημοσιεύσει ένα άρθρο για