Πίνακας περιεχομένων:

UCL Embedded - B0B the Linefollower: 9 Βήματα
UCL Embedded - B0B the Linefollower: 9 Βήματα

Βίντεο: UCL Embedded - B0B the Linefollower: 9 Βήματα

Βίντεο: UCL Embedded - B0B the Linefollower: 9 Βήματα
Βίντεο: Human vs Robot | Artificial Intelligence 2024, Ιούλιος
Anonim
UCL Embedded - B0B the Linefollower
UCL Embedded - B0B the Linefollower

Αυτό είναι B0B.*

Το B0B είναι ένα γενικό αυτοκίνητο ελεγχόμενο από ραδιόφωνο, που εξυπηρετεί προσωρινά τη βάση ενός ρομπότ που ακολουθεί τη γραμμή.

Όπως τόσα πολλά ρομπότ που ακολουθούν τη γραμμή πριν από αυτόν, θα κάνει ό, τι καλύτερο μπορεί για να παραμείνει σε μια γραμμή που προκαλείται από τη μετάβαση μεταξύ του δαπέδου και ενός αντίθετου υλικού, στην περίπτωση μας κολλητική ταινία.

Σε αντίθεση με τόσα άλλα ρομπότ που ακολουθούν τη γραμμή, το B0B συλλέγει επίσης δεδομένα και τα στέλνει μέσω WiFi.

Εντελώς υπερβολική για ένα έργο χόμπι, περιλαμβάνει πολλά θέματα που μπορεί να βρείτε ενδιαφέροντα. Αυτός ο οδηγός περιγράφει τη γέννησή του, τις λειτουργίες του και πώς μπορείτε να κάνετε ένα ακριβώς όπως εκείνος.

Περιλαμβάνει επίσης την οργή με διάφορα ηλεκτρονικά είδη που δεν λειτουργούν όπως θέλαμε και τα βήματα που κάναμε για να ξεπεράσουμε αυτές τις δυσκολίες (σας κοιτάζω ESP 8266-01).

Υπάρχουν 2 κωδικοί για να λειτουργήσει το έργο. Ο πρώτος κωδικός είναι για τη μονάδα ESP8266 την οποία χρησιμοποιούμε το Arduino ως προγραμματιστή και ο δεύτερος κώδικας πρόκειται να τρέξει στο Arduino.

Βήμα 1: Στοιχεία

Για αυτό το έργο θα χρειαστείτε:

Σκεύη, εξαρτήματα:

• 1x αυτοκίνητο ελεγκτή ραδιοφώνου, (πρέπει να διαθέτει ESC και σερβιτό τιμονιού).

Χρησιμοποιούσαμε ένα κυρίως απόθεμα Traxxas 1/16 E-Revo VXL, κυρίως επειδή αυτό είχαμε και ήμασταν αρκετά σίγουροι ότι θα μπορούσαμε να το ελέγξουμε με ένα Arduino. Επίσης επειδή θα καταλήξει να μεταφέρει ένα ασήμαντο ποσό επιπλέον υλικού, ήμασταν σίγουροι ότι αυτό δεν θα ήταν πρόβλημα για το 1/16 E-Revo.

Ωστόσο, τα περισσότερα ραδιοελεγχόμενα αυτοκίνητα (που μπορούν εύκολα να διαχωριστούν) θα μπορούσαν πιθανώς να χρησιμοποιηθούν και η διαδικασία θα είναι πολύ παρόμοια.

• Ένας τόνος κολλητικής ταινίας.

Το χρώμα πρέπει να έρχεται σε αντίθεση με το πάτωμα όσο το δυνατόν περισσότερο. Στο περιβάλλον δοκιμών μας χρησιμοποιήσαμε λευκή ταινία σε σκούρο πάτωμα.

• 1x Arduino Mega 2560.

Τα μικρότερα Arduino είναι επίσης καλά, αλλά θα πιεστείτε για καρφίτσες.

• 1x μεγάλη σανίδα ψωμιού.

Ένα είναι αρκετό, αλλά είχαμε επίσης ένα μικρότερο για να ξεχωρίσουμε τις άλλες γραμμές τάσης για να μειώσουμε τον κίνδυνο σφάλματος χρήστη.

• 1x αναλογικός αισθητήρας IR TCRT5000 (χρησιμοποιείται για την αποφυγή σύγκρουσης).

Η ακριβής μάρκα/μοντέλο δεν έχει σημασία αν είναι συμβατή με το Arduino και μετρά την απόσταση. Αναζητήστε λέξεις -κλειδιά όπως αισθητήρας "Απόσταση", "εμπόδιο". Τεχνικά ένας ψηφιακός αισθητήρας θα λειτουργούσε επίσης με μικρές αλλαγές κώδικα, αλλά χρησιμοποιούμε έναν αναλογικό.

• 1x ή 2x Gravity: Analog Grayscale Sensor v2

Το ένα είναι απαραίτητο για τον ακόλουθο της γραμμής. Το ακριβές μοντέλο δεν έχει σημασία, αρκεί να εξετάζει την ένταση του ανακλώμενου φωτός και να εξάγει ένα αναλογικό σήμα. Το δεύτερο για την ανίχνευση «δωματίου» δεν λειτούργησε τόσο καλά όσο αναμενόταν και μπορεί να παραλειφθεί, ή μπορεί να βρεθεί μια εναλλακτική λύση, όπως ένας αισθητήρας χρώματος RGB, πιθανώς για καλύτερο αποτέλεσμα. Αυτό πρέπει να το δοκιμάσουμε ακόμη.

• 1 x ESP 8266-01.

Υπάρχουν πολλές διαθέσιμες εκδόσεις του ESP 8266. Έχουμε μόνο εμπειρία με το 8266-01 και δεν μπορούμε να εγγυηθούμε ότι ο κωδικός ESP θα λειτουργήσει με διαφορετική έκδοση.

• 1 x ασπίδα Wi-Fi ESP8266-01.

Τεχνικά προαιρετικό, αλλά αν δεν το χρησιμοποιήσετε, όλα που περιλαμβάνουν τη μονάδα Wi-Fi θα γίνουν πολύ πιο περίπλοκα. Ο οδηγός, ωστόσο, θα υποθέσει ότι το έχετε (αν όχι, βρείτε τους οδηγούς στο διαδίκτυο για τη σωστή σύνδεση του ESP-01 στο Arduino), καθώς εάν κάνετε αυτό εσφαλμένα, μπορεί και πιθανόν να καταστρέψετε τη μονάδα.

• Μπαταρίες για το ίδιο το όχημα και μπαταρίες για την τροφοδοσία των πρόσθετων ηλεκτρονικών.

Χρησιμοποιήσαμε ένα ζευγάρι χωρητικότητας 2.2 AH, μπαταρίες Lipo 7.4V παράλληλα για να τροφοδοτήσουμε τα πάντα. Θα πρέπει να μπορείτε να χρησιμοποιείτε όποιες μπαταρίες χρησιμοποιείτε κανονικά με το όχημα της επιλογής σας. Εάν είστε πάνω από 5V αλλά κάτω από 20V, η χωρητικότητα είναι πιο σημαντική από την ονομαστική τάση.

• Πολλά καλώδια βραχυκυκλωτήρων.

Έχω σταματήσει να μετράω τον ακριβή αριθμό αυτών. Αν νομίζετε ότι έχετε αρκετά, πιθανότατα όχι.

• Τέλος, για να στερεώσετε τα πάντα, θα χρειαστεί να τοποθετήσετε το Arduino, τους αισθητήρες, την πινακίδα ή τις μονάδες Wi-Fi στο όχημα της επιλογής σας. Το αποτέλεσμά σας θα διαφέρει ανάλογα με το τι χρησιμοποιείτε ως βάση και ποια υλικά είναι διαθέσιμα.

Συνηθίζαμε:

• Φερμουάρ.

• Λίγη σούπερ κόλλα.

• Μικρά κομμάτια παλιοσίδερα/σωλήνας ρητίνης που είχαμε με κατάλληλη διάμετρο.

• Μια παλιά πλάκα μασονίτη από μια κορνίζα, κομμένη σε μέγεθος.

• Λίγο περισσότερο κολλητική ταινία.

• Τυχόν εργαλεία που απαιτούνται για τη λειτουργία του ραδιοελεγχόμενου αυτοκινήτου επιλογής σας.

Χρησιμοποιήσαμε ως επί το πλείστον ένα μικρό σετ οδηγών με πολλά κομμάτια, αλλά περιστασιακά έπρεπε να βγάλουμε το σετ εργαλείων που συνοδεύει το αυτοκίνητο.

Λογισμικό:

• Κόμβος-κόκκινος

Ένα σημαντικό μέρος της συλλογής δεδομένων.

• Ένας διακομιστής MQTT.

Ο μεσαίος άνδρας ανάμεσα στο όχημά μας και ο Κόμβος-κόκκινος. Αρχικά, για δοκιμές, χρησιμοποιήσαμε το test.mosquitto.org

Αργότερα χρησιμοποιήσαμε:

• CloudMQTT.com

Αυτό ήταν πολύ πιο αξιόπιστο, κάτι που περισσότερο από το να δημιουργηθεί είναι λίγο πιο περίπλοκο.

• WampServer.

Το τελευταίο μέρος της συλλογής δεδομένων. Συγκεκριμένα, θα χρησιμοποιήσουμε τη βάση δεδομένων SQL για την αποθήκευση των συλλεγόμενων δεδομένων μας.

Βήμα 2: Ηλεκτρικό διάγραμμα

Ηλεκτρικό διάγραμμα
Ηλεκτρικό διάγραμμα

Βήμα 3: Φυσική κατασκευή

Φυσική Κατασκευή
Φυσική Κατασκευή
Φυσική Κατασκευή
Φυσική Κατασκευή
Φυσική Κατασκευή
Φυσική Κατασκευή

Η λύση μας έχει μια άμεση προσέγγιση στη φυσική συναρμολόγηση.

Ο αρχικός δέκτης και το αδιάβροχο περίβλημα του αφαιρέθηκαν από το αυτοκίνητο RC, καθώς δεν χρειάζεται.

Διαπιστώσαμε ότι υπήρχε μία κατάλληλη θέση ανάμεσα στους μπροστινούς τροχούς για τον αισθητήρα γραμμής μας, οπότε το κρατήσαμε στη θέση του κάνοντας ένα βρόχο πάνω από την μπροστινή πλάκα ολίσθησης.

Ο αισθητήρας που χρησιμοποιούμε για αντι-σύγκρουση είναι κάπως σφηνωμένος πίσω από τον μπροστινό προφυλακτήρα. Εξακολουθεί να προστατεύεται από κρούσεις και ταιριάζει με την τριβή. Καταλήγει να κοιτάζει προς τα εμπρός σε μια τόσο μικρή μικρή ανοδική γωνία. Αυτό είναι τέλειο.

Η πλάκα μασονίτη, (πλάκα από το παλιό πλαίσιο εικόνας), στην κορυφή έχει μικρά τμήματα σωλήνα χαρτιού/ρητίνης κομμένα σε μέγεθος και κολλημένα στο κάτω μέρος. Αυτά ευθυγραμμίζονται με τις βάσεις για τους στύλους του αμαξώματος και απλά κάθονται στην κορυφή, κρατώντας τα πάντα με ασφάλεια. Αν υποθέσουμε ότι η κόλλα που κολλάει τον σωλήνα στην πλάκα κρατάει και ότι δεν γέρνει υπερβολικά, αυτό θα παραμείνει στη θέση του. Αξίζει επίσης να σημειωθεί ότι η πλάκα βρίσκεται μέσα στην προστατευτική σφαίρα των τροχών και των προφυλακτήρων. Το Arduino Mega και οι δύο σανίδες έχουν κολληθεί στο πιάτο είτε με διπλή πλαϊνή ταινία, είτε με ένα βρόχο κολλητικής ταινίας που είναι τυλιγμένο γύρω, κολλημένο.

Δεν έχουν ληφθεί ειδικά μέτρα για την ασφάλεια της μονάδας WiFi. Δεν είναι δικό μας, οπότε το να το κολλήσουμε ή να το κολλήσουμε θεωρήθηκε περιττό καθώς είναι τόσο ελαφρύ που δεν θα κινείται πολύ και τα καλώδια είναι αρκετά για να το κρατήσουν στη θέση του.

Τέλος, έχουμε έναν αισθητήρα για την ανίχνευση «δωματίων», ο οποίος συμπιέστηκε με φερμουάρ στα εξαρτήματα της ανάρτησης από έναν από τους πίσω τροχούς. Κατά τη λειτουργία, αυτό πρέπει να απέχει από τη γραμμή σήμανσης που χρησιμοποιεί το όχημα για πλοήγηση.

Βήμα 4: Ενότητα ESP8266

Ενότητα ESP8266
Ενότητα ESP8266
Ενότητα ESP8266
Ενότητα ESP8266

Η μονάδα WiFi, ESP8266, απαιτεί δύο διαφορετικές ρυθμίσεις ακίδων. Μια ρύθμιση πρέπει να χρησιμοποιείται όταν αναβοσβήνει η μονάδα με ένα νέο πρόγραμμα και όταν χρησιμοποιείται το Arduino Mega 2560 ως προγραμματιστής. Η άλλη ρύθμιση είναι για τη μονάδα όταν χρησιμοποιείται και αποστέλλει πληροφορίες στον μεσίτη MQTT.

Χρησιμοποιώντας το Arduino IDE για να ανεβάσετε κώδικα στη μονάδα ESP8266, θα χρειαστεί να εγκαταστήσετε έναν διαχειριστή πλακέτας και έναν πρόσθετο διαχειριστή πινάκων

Κάτω από τον διαχειριστή του πίνακα εγκαταστήστε τον διαχειριστή πλακέτας esp8266. Θα το βρείτε εύκολα αναζητώντας "esp". Είναι σημαντικό να εγκαταστήσετε την έκδοση 2.5.0, όχι παλαιότερη, ούτε νεότερη.

Στις ρυθμίσεις σε πρόσθετες διευθύνσεις URL διαχειριστή πινάκων, αντιγράψτε σε αυτήν τη γραμμή:

arduino.esp8266.com/stable/package_esp8266c…

Για να μπορέσετε να ανεβάσετε οτιδήποτε στη μονάδα ESP8266, θα πρέπει να χρησιμοποιήσετε μια συγκεκριμένη ρύθμιση καρφίτσας, ώστε να μπορείτε να αναβοσβήνετε τη μονάδα. Αυτό πρέπει να γίνεται κάθε φορά που θέλετε να κάνετε μια αλλαγή στον τρέχοντα κώδικα που εκτελείται στη μονάδα. Μην ξεχάσετε να επιλέξετε τη σωστή μονάδα ESP8266 από τον διαχειριστή της πλακέτας πριν αναβοσβήσετε τη μονάδα. Σε αυτό το έργο επιλέξαμε τον γενικό πίνακα ESP8266. Η ρύθμιση καρφιτσών για αναβοσβήνει τη μονάδα βρίσκεται στην πρώτη εικόνα σε αυτό το τμήμα.

Αφού αναβοσβήνει η μονάδα ESP8266, πρέπει να αλλάξετε τη ρύθμιση του πείρου. Μπορείτε επίσης να επιλέξετε να χρησιμοποιήσετε έναν προσαρμογέα για να διευκολύνετε τη ρύθμιση για εσάς. Σε αυτό το έργο επιλέξαμε να έχουμε έναν προσαρμογέα όποτε είχαμε τη μονάδα σε λειτουργία. Η ρύθμιση καρφιτσών με προσαρμογέα βρίσκεται στη δεύτερη εικόνα σε αυτό το τμήμα.

Ο κωδικός που θα εμφανιστεί στην ενότητα ESP8266 ρυθμίζει τη σύνδεση σε ένα WiFi και έναν MQTT Broker, σε αυτήν την περίπτωση με όνομα χρήστη και κωδικό πρόσβασης, αλλά μπορεί να γίνει χωρίς να κάνετε τις απαραίτητες αλλαγές που περιγράφονται στα σχόλια του κώδικα. Για αυτό το έργο, ο μεσίτης μας απαιτούσε όνομα χρήστη και κωδικό πρόσβασης για να λειτουργήσει. Η μονάδα διαβάζει εισερχόμενα μηνύματα από τη σειριακή θύρα στην οποία είναι συνδεδεμένη. Θα διαβάσει κάθε νέα γραμμή που δημιουργήθηκε από τον κώδικα Arduino, θα αποκρυπτογραφήσει το μήνυμα και θα δημιουργήσει ξανά το μήνυμα. Στη συνέχεια στέλνει το μήνυμα στον μεσίτη MQTT που έχει καθοριστεί στον κώδικα. Ο κωδικός για τη μονάδα ESP8266:

Βήμα 5: Arduino

Αφού διαμορφώσουμε τη μονάδα WiFi, εξετάζουμε το πρόγραμμα που θα χρησιμοποιηθεί για τον έλεγχο του κινητήρα και του σερβο στο αυτοκίνητο RC. Το αυτοκίνητο πρόκειται να αντιδράσει σύμφωνα με πληροφορίες γκρι κλίμακας από τον κεντρικό αισθητήρα, επίσης γνωστό ως "Ανιχνευτής Γραμμής" σε αυτό το έργο. Απλώς στοχεύει στη διατήρηση των πληροφοριών από τον Ανιχνευτή Γραμμής κοντά σε μια προκαθορισμένη τιμή που ισούται με τις πληροφορίες που καταγράφονται κατά την αλλαγή μεταξύ φωτός και σκοτεινού ή σε αυτό το έργο, λευκό και μαύρο. Έτσι, εάν η τιμή διαφέρει πάρα πολύ, η αντίστοιχη έξοδος στο σερβο θα οδηγήσει το αυτοκίνητο κοντά στην προκαθορισμένη τιμή της γραμμής.

Το πρόγραμμα διαθέτει δύο κουμπιά τα οποία λειτουργούν ως κουμπί εκκίνησης και διακοπής για το αυτοκίνητο RC. Τεχνικά, το κουμπί "διακοπή" είναι ένα κουμπί "όπλισης", το οποίο από την άποψη ισούται με μια τιμή PWM που αποστέλλεται στον κινητήρα και προκαλεί τη διακοπή του αυτοκινήτου RC. Το κουμπί εκκίνησης στέλνει μια τιμή PWM που ισούται με το αυτοκίνητο RC που μόλις κινείται προς τα εμπρός, καθώς θα κινείται πολύ γρήγορα αν αποκτήσει υπερβολική ορμή.

Ένας ανιχνευτής αποφυγής σύγκρουσης προστίθεται στο μπροστινό μέρος του αυτοκινήτου RC για να ανιχνεύσει εάν ο δρόμος μπροστά είναι καθαρός ή μπλοκαρισμένος. Εάν είναι μπλοκαρισμένο, το αυτοκίνητο RC θα σταματήσει μέχρι να φύγει/αφαιρεθεί το εμπόδιο. Το αναλογικό σήμα από τον ανιχνευτή χρησιμοποιείται για να προσδιορίσει εάν κάτι εμποδίζει ή όχι το δρόμο και αποτελεί κριτήριο για να μπορεί να προχωρήσει και να σταματήσει.

Ένας δευτερεύων αισθητήρας γκρίζας κλίμακας, "Ανιχνευτής δωματίου", χρησιμοποιείται για να ανιχνεύσει σε ποιο δωμάτιο έχει εισέλθει το αυτοκίνητο RC. Λειτουργεί με παρόμοια αρχή με τον Ανιχνευτή γραμμής, αλλά δεν αναζητά την αλλαγή ανάμεσα στο φως και το σκοτάδι, αλλά τις τιμές εντός συγκεκριμένου εύρους που αντιστοιχεί σε διαφορετικά δωμάτια ανάλογα με την τιμή που φαίνεται από τον Ανιχνευτή δωματίου.

Τέλος, το πρόγραμμα δημιουργεί μια σειρά πληροφοριών από τους αισθητήρες για ανάγνωση της μονάδας WiFi και στη συνέχεια αποστολή στον μεσίτη MQTT. Η γραμμή πληροφοριών δημιουργείται ως συμβολοσειρά και γράφεται στον αντίστοιχο σειριακό τύπο του οποίου είναι συνδεδεμένη η μονάδα WiFi. Είναι σημαντικό το γράψιμο στη σειρά να συμβαίνει μόνο όσο συχνά η μονάδα WiFi μπορεί να διαβάσει το εισερχόμενο μήνυμα, αλλά θυμηθείτε να μην χρησιμοποιήσετε καθυστερήσεις σε αυτόν τον κώδικα, καθώς θα επηρεάσει την ικανότητα του αυτοκινήτου RC να ακολουθήσει τη γραμμή. Αντ 'αυτού, χρησιμοποιήστε το "millis", καθώς θα επιτρέψει στο πρόγραμμα να τρέξει χωρίς καθυστέρηση, αλλά αφού περάσει μια καθορισμένη ποσότητα millis από την ενεργοποίηση του Arduino, θα γράψει ένα μήνυμα στο σίριαλ χωρίς να μπλοκάρει τον κώδικα με τον ίδιο τρόπο που καθυστερεί.

Ο κωδικός για το Arduino Mega 2560:

Βήμα 6: Βάση δεδομένων MySQL

Το WampServer είναι ένα περιβάλλον ανάπτυξης ιστοσελίδων για Windows που μας επιτρέπει να δημιουργούμε εφαρμογές με PHP και βάση δεδομένων MySQL. Το PhpMyAdmin μας επιτρέπει να διαχειριζόμαστε τις βάσεις δεδομένων μας με εύκολο τρόπο.

Για να ξεκινήσετε, μεταβείτε στη διεύθυνση:

Σε αυτό το έργο χρησιμοποιούμε έκδοση 3.17 x64 bit για Windows. Μετά την εγκατάσταση, βεβαιωθείτε ότι εκτελούνται όλες οι υπηρεσίες, πράγμα που σημαίνει ότι το μικρό εικονίδιο γίνεται πράσινο αντί για κόκκινο ή πορτοκαλί. Εάν το εικονίδιο είναι πράσινο, τότε μπορείτε να αποκτήσετε πρόσβαση στο PhpMyAdmin για να διαχειριστείτε τη βάση δεδομένων MySQL.

Αποκτήστε πρόσβαση στο MySQL χρησιμοποιώντας το PhpMyAdmin και δημιουργήστε μια νέα βάση δεδομένων. Ονομάστε το κάτι κατάλληλο που μπορείτε να θυμηθείτε, σε αυτό το έργο ονομάστηκε "line_follow_log". Αφού δημιουργήσετε τη βάση δεδομένων, θα πρέπει να δημιουργήσετε έναν πίνακα στη βάση δεδομένων. Βεβαιωθείτε ότι ο αριθμός των στηλών ταιριάζει. Στο έργο χρησιμοποιούμε 4 στήλες. Η μία στήλη προορίζεται για χρονική σήμανση και η τελευταία τρεις χρησιμοποιείται για την αποθήκευση δεδομένων από το όχημα. Χρησιμοποιήστε έναν κατάλληλο τύπο δεδομένων για κάθε στήλη. Χρησιμοποιήσαμε "longtext" για τη στήλη χρονικής σήμανσης και "mediumtext" για τα υπόλοιπα.

Αυτό θα πρέπει να είναι το μόνο που έχετε να κάνετε σε PhpMyAdmin και MySQL. Θυμηθείτε τη βάση δεδομένων σας και τον πίνακα για την ενότητα σχετικά με το Node-Red.

Βήμα 7: Κόμβος-Κόκκινο

Για να χειριστούμε τη συλλογή δεδομένων, θα χρησιμοποιήσουμε μια αρκετά απλή ροή με κόκκινο κόμβο. Συνδέεται με τον διακομιστή MQTT και γράφει στη βάση δεδομένων MYSQL.

Για να γίνει αυτό, χρειαζόμαστε μερικές παλέτες για να λειτουργήσουν διάφορες συναρτήσεις και χρειαζόμαστε κάποιον πραγματικό κώδικα για να τρέξει.

Καταρχάς. Θα χρειαστούμε τις παρακάτω παλέτες.

Node-red-contrib-mqtt-broker: Αυτή είναι η σύνδεση με τον μεσίτη MQTT.

Κόμβος-κόκκινος-ταμπλό: Ο Πίνακας ελέγχου μας, χρειάζεται για να απεικονίσει οπτικά τα δεδομένα που συλλέγονται.

Node-red-node-mysql: Η σύνδεσή μας με τη βάση δεδομένων SQL.

Αυτό δεν πρέπει να είναι ένας πλήρης οδηγός για το Node-red, αλλά θα εξηγήσω τι κάνει η ροή Node-red.

Νωρίς, είχαμε προβλήματα με τον διακομιστή MQTT της επιλογής μας που πεθαίνει/αποσυνδέεται, φαινομενικά τυχαία, κάτι που έκανε τις αλλαγές μια απογοητευτική προσπάθεια, καθώς δεν ήταν σαφές εάν οι αλλαγές ήταν επωφελείς ή όχι όταν δεν μπορούσαμε να δούμε το αποτέλεσμα. Έτσι, το κουμπί "Πέθανε ο διακομιστής;" εγχέει "Όχι" το ακόλουθο μπλοκ το εγχέει στον διακομιστή MQTT. Εάν δεν είναι νεκρό, το "Όχι" θα εμφανιστεί στο παράθυρο εντοπισμού σφαλμάτων. Αυτό γίνεται όχι μόνο για έλεγχο, αλλά για να εξαναγκάσει το Node-red να επιχειρήσει να επανασυνδεθεί με τον διακομιστή MQTT.

Το 'Test string' στέλνει μια σειρά κοστουμιών στον μεσίτη MQTT. Μορφοποιήσαμε αυτήν τη συμβολοσειρά ώστε να είναι παρόμοια με αυτήν που θα παίρναμε από το Arduino. Αυτό έπρεπε να έχει ευκολότερη διαμόρφωση του δικτύου που αποκωδικοποιεί τα μηνύματα, χωρίς να χρειάζεται να εκτελείται το έργο, συλλέγοντας δεδομένα.

Η τελευταία ροή στο χώρο εργασίας μπορεί να χωριστεί σε δύο τμήματα. Ο κάτω κλάδος απλώς διαβάζει τα μηνύματα που συγκεντρώνονται, τα δημοσιεύει στο παράθυρο εντοπισμού σφαλμάτων και τα αποθηκεύει στον διακομιστή SQL.

Το μεγάλο δίκτυο συνδεδεμένων μεταγωγέων ακολουθεί έναν κόμβο συνάρτησης εάν συμβαίνει το πραγματικό «μαγικό».

Η συνάρτηση διαδικασίας διαβάζει την εισερχόμενη συμβολοσειρά, τη χωρίζει σε κάθε ημι-άνω τελεία και περνά τα τμήματα σε κάθε έξοδο. Οι ακόλουθοι διακόπτες αναζητούν μία από τις δύο διαφορετικές εισερχόμενες πληροφορίες. Μια συγκεκριμένη πληροφορία περνάει πάντα από μία έξοδο, η άλλη επιλογή φεύγει από τη δεύτερη έξοδο. Μετά από αυτό, υπάρχει μια δεύτερη ομάδα μπλοκ διακοπτών. Θα ενεργοποιηθούν μόνο με μία συγκεκριμένη είσοδο και θα εξάγουν κάτι άλλο.

Ένα παράδειγμα, «εμπόδιο», όπως όλα τα άλλα είναι μια δυαδική επιλογή, είτε είναι σαφές στην οδήγηση, είτε δεν είναι. Έτσι θα λάβει ένα 0, ή ένα 1. Ένα 0 θα σταλεί στον κλάδο «καθαρός», ένα 1 θα σταλεί στον κλάδο «Αποκλεισμένος». Οι διακόπτες 'Clear', 'Obstructed', εάν ενεργοποιηθούν, θα βγάλουν κάτι συγκεκριμένο, Clear ή φραγμένο, αντίστοιχα. Τα πράσινα μπλοκ διαδικασίας θα δημοσιευτούν στο παράθυρο εντοπισμού σφαλμάτων, το μπλε θα γράψει στον πίνακα ελέγχου μας.

Οι κλάδοι "κατάστασης" και "τοποθεσίας" λειτουργούν ακριβώς το ίδιο.

Βήμα 8: Μεσίτης MQTT

Ο Broker είναι ένας διακομιστής που δρομολογεί μηνύματα από πελάτες προς τους κατάλληλους πελάτες προορισμού. Ένας μεσίτης MQTT είναι αυτός όπου οι πελάτες χρησιμοποιούν μια βιβλιοθήκη MQTT για να συνδεθούν με τον μεσίτη μέσω δικτύου.

Για αυτό το έργο δημιουργήσαμε έναν MQTT Broker χρησιμοποιώντας την υπηρεσία CloudMQTT με τη δωρεάν συνδρομή για μια έκδοση "Cute Cat". Έχει τον περιορισμό του, αλλά δεν ξεπερνάμε αυτούς σε αυτό το έργο. Η μονάδα WiFi μπορεί να συνδεθεί με τον μεσίτη και ο μεσίτης στη συνέχεια να δρομολογήσει τα μηνύματα σε έναν κατάλληλο πελάτη προορισμού. Σε αυτήν την περίπτωση, ο πελάτης είναι το Node-Red. Η υπηρεσία CloudMQTT ορίζει ένα όνομα χρήστη και έναν κωδικό πρόσβασης για τον διακομιστή τους, επομένως μας εγγυάται υψηλότερη ασφάλεια. Βασικά σημαίνει ότι μόνο αυτοί με το όνομα χρήστη και τον κωδικό πρόσβασης μπορούν να έχουν πρόσβαση σε αυτήν τη συγκεκριμένη υπηρεσία CloudMQTT. Το όνομα χρήστη και ο κωδικός πρόσβασης είναι ζωτικής σημασίας κατά τη ρύθμιση της σύνδεσης στον κωδικό ESP8266, όπως και στο Node-Red.

Τα τρέχοντα στατιστικά στοιχεία για τα μηνύματα που λαμβάνει ο Μεσίτης είναι ένα ευχάριστο χαρακτηριστικό, το οποίο μπορεί να χρησιμοποιηθεί για να δείτε πόσο καλά το πρόγραμμα συνδρομής σας χειρίζεται τις πληροφορίες που κατευθύνει.

Ένα ωραίο χαρακτηριστικό είναι η δυνατότητα αποστολής μηνυμάτων από τον Broker στη μονάδα WiFi, αλλά δεν χρησιμοποιήσαμε αυτά σε αυτό το έργο.

Βήμα 9: Hobby Electronics

Πριν ξεκινήσουμε γνωρίζαμε από προηγούμενο έργο ότι ο σερβοδιακόπτης διεύθυνσης θα μπορούσε να ελεγχθεί από ένα Arduino με σήμα PWM, να έχει παρόμοια καλωδίωση και να συνδεθεί σε διαφορετικά κανάλια στον ίδιο αποδέκτη ραδιοφώνου, υποθέσαμε τον Ηλεκτρονικό Έλεγχο Ταχύτητας, (ESC από τώρα), που ελέγχει τον κινητήρα, θα μπορούσε ομοίως να ελεγχθεί μέσω PWM από το Arduino.

Για να δοκιμάσουμε αυτήν τη θεωρία, χρησιμοποιούμε ένα μικρό σκίτσο Arduino. Το σκίτσο διαβάζει μια αναλογική είσοδο από ένα ποτενσιόμετρο, αλλάζει την τιμή από 0, 1024 έως 0, 255 και εξάγει την προκύπτουσα τιμή σε έναν πείρο PWM, χρησιμοποιώντας το analogWrite () ενώ είχε το αυτοκίνητο R/C σε ένα μικρό κουτί και είχε αφαιρέθηκαν οι τροχοί.

Αφού σάρωσε την εμβέλεια στον μετρητή κατσαρόλας, το ESC φάνηκε να «ξυπνά» και μπορούσαμε να το πετάξουμε πάνω -κάτω, είχαμε επίσης το Arduino να εκτυπώσει τις τιμές στη σειριακή σύνδεση, ώστε να μπορούμε να τις παρακολουθούμε.

Το ESC φάνηκε να μην του αρέσουν οι τιμές κάτω από ένα ορισμένο όριο, στην περίπτωση αυτή 128. Είδε το σήμα 191 ως ουδέτερο γκάζι και το 255 ήταν το μέγιστο γκάζι.

Δεν χρειαζόταν να μεταβάλλουμε την ταχύτητα του οχήματος και το έβαζα τέλεια με την πιο αργή ταχύτητα που θα το έκανε να κινηθεί. Το 192 ήταν η χαμηλότερη τιμή που θα γύριζε τον κινητήρα, ωστόσο δεν έχουμε ακόμη συναρμολογήσει τα πάντα και δεν είμαστε σίγουροι αν αυτή η έξοδος θα ήταν αρκετή για να μετακινήσει το όχημα μετά την τελική συναρμολόγηση, ωστόσο η εισαγωγή μιας ελαφρώς μεγαλύτερης τιμής θα πρέπει να είναι ασήμαντη.

Η παράκαμψη του ποτενσιόμετρου και η εισαγωγή σταθερής τιμής στον κώδικα, ωστόσο, δεν λειτούργησε. Το απόθεμα ESC αναβοσβήνει και δεν περιστρέφει τον κινητήρα, "προσαρμόζοντας το γκάζι" σύμφωνα με το εγχειρίδιο.

Εξαγριωμένος προβληματισμός, ρίχνοντας διάφορες τιμές σε αυτό, χρησιμοποιώντας διαφορετικά καλώδια, ακόμη και πειραματιζόμενοι με την αλλαγή της συχνότητας PWM που χρησιμοποιεί το Arduino, οδήγησαν σε περισσότερη παραξενιά.

Φαινόταν να είναι ένα διαλείπον ζήτημα, μερικές φορές θα έτρεχε, άλλες φορές αρνιόταν να κάνει τίποτα. Απλώς συνέχισε να αναβοσβήνει. Μια δοκιμή με τον αρχικό ελεγκτή και δέκτη επιβεβαίωσε ότι το ESC εξακολουθούσε να λειτουργεί ακριβώς όπως προβλέπεται, γεγονός που έκανε τα θέματα ακόμη πιο περίεργα. Υψηλότερες τιμές, αγνόησε και συνεχίζει να αναβοσβήνει, χαμηλότερες τιμές το ESC επέστρεψε στο λαμπερό πράσινο χρώμα, αλλά δεν γύρισε.

Τι ήταν διαφορετικό από τη ρύθμιση με το ποτενσιόμετρο ή τον πομπό και τον δέκτη αποθεμάτων και την έκδοση που παρείχε σταθερές τιμές;

Μερικές φορές η εργασία όπως προορίζεται και η εργασία όπως αναμενόταν δεν επικαλύπτονται πολύ στο διάγραμμα Venn. Σε αυτή την περίπτωση, όντας παιχνίδι, δεν πρέπει να υπάρχει πιθανότητα το μοντέλο να βγάλει ή να σπάσει τα δάχτυλά του ή να πιάσει τα μαλλιά του στους τροχούς ή να οδηγήσει το τρένο καθώς το μοντέλο ανάβει, ακόμα κι αν κάτι σαν το να κρατάς τον πομπό περίεργα έχει το γκάζι οποιαδήποτε άλλη θέση από την ουδέτερη.

"Ρυθμίστε την επένδυση γκαζιού", αυτό ακριβώς σημαίνει. Η ESC αναμένει ένα ουδέτερο σήμα όταν ενεργοποιηθεί, πριν λάβει ότι δεν θα κάνει τίποτα. Κανονικά ο πομπός θα ήταν πάντα σε ουδέτερη κατάσταση όταν το ESC είναι ενεργοποιημένο και από εκεί θα οδηγήσει ευτυχώς. Σε περίπτωση που δεν είναι, πιθανότατα έχει επιστρέψει σε ουδέτερη θέση τουλάχιστον μία φορά, όταν το μοντέλο είναι σταθερά στο έδαφος και ο χειριστής αισθάνεται έτοιμος να αγωνιστεί.

Ενώ χρησιμοποιούσαμε το ποτενσιόμετρο, «σκουπίζαμε» σε εύρη και τότε άρχισε να λειτουργεί. Απλώς οπλίστηκε καθώς το ποτενσιόμετρο παρέσυρε την ουδέτερη θέση και στη συνέχεια λειτούργησε.

Τα χαμηλότερα εύρη, ωστόσο εξακολουθούσαν να δυσαρεστούν το ESC. Αυτό αποδεικνύεται ότι είναι προϊόν των κύκλων εργασίας PWM.

Είτε σχεδιάστηκαν είτε έγιναν για τεχνικό λόγο, τόσο το σερβο σερβού όσο και το ESC αγνοούν σήματα κάτω από 50% κύκλους λειτουργίας. Αυτό μπορεί να συμβαίνει σε περίπτωση που ο δέκτης/πομπός σταματήσει να λειτουργεί ή εξαντληθεί η ισχύς του, το μοντέλο θα επανέλθει στο ουδέτερο και δεν θα απογειωθεί με την πλήρη όπισθεν γκάζι. Ομοίως, το σερβο περιστρέφεται μόνο 180 μοίρες και δεν χρειάζεται ολόκληρο το εύρος.

Με αυτή τη νέα γνώση στο χέρι, δημιουργήθηκε ένα νέο σκίτσο Arduino. Η αρχική έκδοση δέχεται συμβολοσειρές που έχουν εισαχθεί στο Serial monitor, το μετατρέπει σε ακέραιο αριθμό και το μεταφέρει στο pin PWM, χρησιμοποιώντας τη σερβο βιβλιοθήκη και γράψτε ()*. Εάν εισαχθεί μια νέα τιμή στη σειριακή οθόνη, η τιμή εγγραφής () ενημερώνεται.

Κατά τη διάρκεια των δοκιμών, το απόθεμα Traxxas ESC αντικαταστάθηκε με ένα Mtroniks G2 Micro, ωστόσο θα πρέπει να λειτουργούν το ίδιο, αν και οι ακριβείς τιμές μπορεί να είναι ελαφρώς διαφορετικές.

Αυτή η βιβλιοθήκη αντιμετωπίζει το ESC ως σερβο, αυτό είναι εντάξει προφανώς. Η λειτουργία εγγραφής () από τη βιβλιοθήκη Servo.h πηγαίνει από το 0 στο 180, το αναμενόμενο σήμα όπλισης αναμένεται να είναι περίπου στη μέση.

Το G2 Micro βραχίονα σε εγγραφή () σε μια σειρά από τιμές κοντά στο 90, ωστόσο ήταν δύσκολο να εντοπιστεί, καθώς φαίνεται να «θυμάται» ότι ήταν οπλισμένος.

Ο Traxxas VXL-s3 αναμένεται να οπλιστεί σε τιμή εγγραφής () 91.

Μετά το σήμα όπλισης, είτε το ESC δέχτηκε με χαρά σήματα PWM, ανεξάρτητα από τις λειτουργίες Arduino που καλούνται να τα δημιουργήσουν, και ελέγχει ανάλογα τον κινητήρα.

Μιλώντας για λειτουργίες. το τυπικό analogWrite (), καθώς και το γράψιμο () και το writeMicroseconds () από τη βιβλιοθήκη Servo.h μπορούν όλα να χρησιμοποιηθούν εναλλακτικά, απλώς λάβετε υπόψη τι κάνει και τελικά τίποτα άλλο εκτός από τον κύκλο εργασίας δεν έχει σημασία. WriteMicroseconds () θα μπορούσαν να χρησιμοποιηθούν εάν απαιτείται μεγαλύτερη ευκρίνεια, απλώς λάβετε υπόψη ότι το εύρος εδώ είναι από 1000 έως 2000, με οπλισμό ή «ουδέτερο» αναμένεται να είναι στο 1500. Με το τυπικό analogWrite () το εύρος χρήσης αναμένεται να να είναι από 128 έως 255 με περίπου 191 να είναι ουδέτερα.

Συνιστάται: