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

Προγραμματισμός Micro: Bit Robot & Joystick: Bit Controller With MicroPython: 11 Steps
Προγραμματισμός Micro: Bit Robot & Joystick: Bit Controller With MicroPython: 11 Steps

Βίντεο: Προγραμματισμός Micro: Bit Robot & Joystick: Bit Controller With MicroPython: 11 Steps

Βίντεο: Προγραμματισμός Micro: Bit Robot & Joystick: Bit Controller With MicroPython: 11 Steps
Βίντεο: 5 Years of Coding in under a Minute #shorts 2024, Νοέμβριος
Anonim
Προγραμματισμός Micro: Bit Robot & Joystick: Bit Controller With MicroPython
Προγραμματισμός Micro: Bit Robot & Joystick: Bit Controller With MicroPython

Για το Robocamp 2019, το καλοκαιρινό μας στρατόπεδο ρομποτικής, νέοι ηλικίας 10-13 ετών συγκολλούν, προγραμματίζουν και κατασκευάζουν ένα «ρομπότ αντιβάρους» βασισμένο σε μικροσκόπιο BBC: bit, καθώς και προγραμματίζουν ένα micro: bit για χρήση ως τηλεχειριστήριο.

Εάν βρίσκεστε αυτή τη στιγμή στο Robocamp, μεταβείτε στο Βήμα 3, όπως κάναμε τα πρώτα δύο βήματα ως ομάδα

Αυτός είναι ένας οδηγός βήμα προς βήμα για να επικοινωνήσετε ένα ρομπότ micro: bit με χειριστήριο joystick: bit.

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

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

Μπορείτε να βρείτε αρχεία σχεδίασης για το ρομπότ μας εδώ:

Αυτός ο οδηγός είναι γραμμένος για αρχάριους, αλλά αν δεν έχετε χρησιμοποιήσει ποτέ micro: bit με MicroPython, σας συνιστούμε να δοκιμάσετε πρώτα ένα απλούστερο πρόγραμμα, όπως το σήμα ονόματός μας Instructable: https://www.instructables.com/id/Felt -Microbit-Nam…

Προμήθειες

2x BBC micro: bit

Ρομπότ που λειτουργεί με μικροσκόπιο BBC: bit (δείτε την επεξήγηση παραπάνω)

joystick: bit controller (πήραμε το δικό μας από τα Cool Components)

Βήμα 1: Ρύθμιση ρομπότ

Έχετε μερικές επιλογές για τη σύνταξη κώδικα MicroPython για το micro: bit:

  • Mu, το οποίο μπορείτε να κατεβάσετε και να εγκαταστήσετε από εδώ:
  • Ο διαδικτυακός επεξεργαστής, τον οποίο μπορείτε να βρείτε εδώ:

Αυτές οι οδηγίες υποθέτουν ότι χρησιμοποιείτε το Mu

Ανοίξτε το Mu και συνδέστε το micro: bit στον υπολογιστή σας. Το Mu πρέπει να αναγνωρίσει ότι χρησιμοποιείτε ένα micro: bit και επιλέξτε micro: bit 'Mode', αλλά αν δεν το κάνει, αλλάξτε το χειροκίνητα.

επιλέξτε τη λειτουργία
επιλέξτε τη λειτουργία

Λάβετε ένα αντίγραφο του κώδικα δοκιμής ρομπότ από εδώ:

Εάν δεν έχετε συνηθίσει το Github, μπορεί να είναι απρόβλεπτο! Δύο εύκολοι τρόποι για να λάβετε αυτόν τον κωδικό είναι:

  1. Αποθηκεύστε το αρχείο Raw στον υπολογιστή σας και, στη συνέχεια, φορτώστε το στο Mu:
  2. Αντιγράψτε και επικολλήστε όλο τον δεδομένο κώδικα σε ένα νέο αρχείο στο Mu.
αποθήκευση ακατέργαστου αρχείου
αποθήκευση ακατέργαστου αρχείου

Τώρα κάντε κλικ στο κουμπί "Flash" από τη γραμμή εργαλείων του Mu, για να στείλετε τον νέο σας κώδικα στο micro: bit.

Αυτό δεν θα λειτουργήσει αν δεν είναι συνδεδεμένο το micro: bit

Το κίτρινο φως στο πίσω μέρος του micro: bit θα αρχίσει να αναβοσβήνει. Όταν τελειώσει, ο κωδικός σας έχει μεταφερθεί.

ΡΥΘΜΙΣΗ ΤΩΝ ΚΙΝΗΤΗΡΙΩΝ ΟΔΗΓΙΩΝ

Αυτό το πρόγραμμα θα ενεργοποιήσει τους κινητήρες σε διαφορετικές κατευθύνσεις όταν πατήσετε το κουμπί 'A' στο micro: bit.

Αυτό που θέλετε να συμβεί είναι:

  • Όταν εμφανιστεί η ένδειξη 'A', αφήστε το μοτέρ προς τα εμπρός
  • Όταν εμφανίζεται το 'B', αφήστε τον κινητήρα προς τα πίσω
  • Όταν εμφανιστεί η ένδειξη 'C', το δεξί μοτέρ προωθείται
  • Όταν εμφανίζεται η ένδειξη 'D', δεξιά μοτέρ προς τα πίσω

Αυτό πιθανότατα δεν θα ισχύει, καθώς εξαρτάται από το πώς έχετε συνδέσει το ρομπότ σας!

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

Εάν χρησιμοποιείτε ένα από τα ρομπότ μας (αρχεία), αλλάξτε τα ονόματα μεταβλητών για να κάνετε το ρομπότ να κινηθεί προς τις σωστές κατευθύνσεις:

εναλλαγή μεταβλητών καρφιτσών
εναλλαγή μεταβλητών καρφιτσών

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

ΔΟΚΙΜΗ ΤΟΥ ΟΔΗΓΟΥ

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

Λέτε στο ρομπότ να οδηγεί καλώντας τη λειτουργία μονάδας δίσκου (). Αυτό απαιτεί δύο ορίσματα - μια τιμή για τον αριστερό κινητήρα και μια τιμή για τους δεξιούς κινητήρες, μεταξύ 0 (σβηστό) και 1023 (μέγιστη ταχύτητα).

Για παράδειγμα, καλώντας τη μονάδα δίσκου (500, 500), λέτε και στους δύο κινητήρες να ανάψουν, προς τα εμπρός, με τη μισή ταχύτητα περίπου.

Δοκιμάστε μερικές επιλογές για να έχετε μια αίσθηση για το πόσο ευθεία κινείται και πόσο καλά γυρίζει.

Υπόδειξη: οι δοκιμές κινητήρα βρίσκονταν τόσο στο βρόχο True όσο και στην εντολή if - οι κινητήρες δεν θα γυρνούσαν μέχρι να πατήσετε το κουμπί Α στο micro: bit και ελέγχεται για πάντα αν έχετε πατήσει το κουμπί Α.

Υπόδειξη: τα μοτέρ δεν θα σβήσουν μέχρι να τους το πείτε! Θα συνεχίσουν να κάνουν την τελευταία τους οδηγία.

ΠΡΟΑΙΡΕΤΙΚΑ: ΒΕΛΤΙΩΣΗ ΟΔΗΓΗΣΗΣ ΣΕ ΕΥΘΥΝΗ ΓΡΑΜΜΗ

Εάν το ρομπότ σας δεν οδηγεί σε ευθεία γραμμή, ένας από τους κινητήρες σας μπορεί να γυρίζει πιο γρήγορα από τον άλλο.

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

Κάντε κύλιση προς τα πάνω για να βρείτε τον ορισμό της λειτουργίας μονάδας δίσκου και κοιτάξτε τις δύο πρώτες οδηγίες:

def drive (L, R):

# Παρακάτω είναι μια προσαρμογή για τη διόρθωση της απόκλισης στην ταχύτητα του κινητήρα L = int (L*1) R = int (R*1)

Αυτές οι δύο γραμμές λαμβάνουν αυτήν τη στιγμή την τιμή των L και R, τις πολλαπλασιάζουν με 1 και, στη συνέχεια, βεβαιωθείτε ότι είναι ακέραιοι αριθμοί (int).

Για παράδειγμα, εάν ο αριστερός κινητήρας σας είναι πιο γρήγορος, αλλάξτε το *1 στη γραμμή του σε *0,9 και δείτε αν αυτό βελτιώνει τα πράγματα.

Δεν θα μπορείτε να το κάνετε τέλειο, αλλά μπορείτε να συνεχίσετε να προσαρμόζεστε μέχρι να οδηγήσει πιο ίσια.

ΡΥΘΜΙΣΗ-ΡΑΔΙΟΦΩΝΟ

Τώρα ρυθμίστε το ραδιόφωνο, προσθέτοντας τις ακόλουθες γραμμές στο επάνω μέρος του κωδικού σας:

εισαγωγή ραδιοφώνου

radio.config (κανάλι = 7, ομάδα = 0, ουρά = 1) radio.on ()

Αυτό θα επιτρέψει στο ρομπότ σας να λάβει οδηγίες από άλλο micro: bit, αλλά προς το παρόν θα λάβει οδηγίες από οποιοδήποτε άλλο micro: bit.

Αυτό συμβαίνει επειδή το κανάλι 7 και η ομάδα 0 είναι τα προεπιλεγμένα κανάλια.

Αλλάξτε αυτούς τους αριθμούς, επιλέγοντας ένα κανάλι μεταξύ 0-82 και μια ομάδα μεταξύ 0-255. Τώρα το micro: bit σας θα λάβει οδηγίες μόνο από άλλους με τις ίδιες πληροφορίες διαμόρφωσης.

ουρά = 1 σημαίνει το μικρό: το bit θα κρατήσει μόνο ένα εισερχόμενο μήνυμα τη φορά - αυτό δίνει λίγο πιο γρήγορο χρόνο απόκρισης από τον προεπιλεγμένο, που είναι 3.

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

Δοκιμάστε τον ακόλουθο κώδικα ως δοκιμή (δεν θα κάνει τίποτα μέχρι να ρυθμίσετε το χειριστήριο στο Βήμα 2):

ενώ True:

μήνυμα = radio.receive () αν το μήνυμα == 'forward': drive (500, 500)

Βήμα 2: Ρύθμιση Joystick

Αποσυνδέστε το micro: bit του ρομπότ σας και συνδέστε το micro: bit του joystick

Λάβετε ένα αντίγραφο του κωδικού ρύθμισης του joystick από εδώ:

Ρυθμίστε το ραδιόφωνο χρησιμοποιώντας την ίδια διαμόρφωση (αριθμός καναλιού και ομάδας) όπως κάνατε για το ρομπότ - αυτό θα επιτρέψει στους δύο να επικοινωνούν μεταξύ τους.

Στο τέλος του προγράμματος, ξεκινήστε τον κύριο βρόχο σας:

ενώ True:

εάν button_a.was_pressed (): radio.send ('εμπρός')

Αυτός ο κωδικός δεν χρησιμοποιεί ακόμα το joystick: bit. Χρησιμοποιεί το κουμπί A στο micro: bit για να στείλει ένα μήνυμα.

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

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

ΣΥΜΒΟΥΛΕΣ ΑΝΤΙΜΕΤΩΠΙΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Εάν λάβετε ένα μήνυμα σφάλματος στο χειριστήριο micro: bit … εντοπίστε σφάλματα στον κωδικό του ελεγκτή σας

Εάν λάβετε ένα μήνυμα σφάλματος στο micro robot σας: bit … το ραδιοφωνικό σας μήνυμα στάλθηκε με επιτυχία! Αλλά το ρομπότ δεν μπορεί να το καταλάβει, οπότε ελέγξτε ότι το μήνυμα που στείλατε και το μήνυμα που είπατε στο ρομπότ να ακούσει για αντιστοιχία.

Αν δεν γίνει απολύτως τίποτα

  • Βεβαιωθείτε ότι έχετε αναβοσβήνει τον σωστό κωδικό σε κάθε micro: bit - είναι εύκολο να αναβοσβήνετε κατά λάθος το λάθος!
  • Βεβαιωθείτε ότι οι αριθμοί καναλιού και ομάδας σας ταιριάζουν σε κάθε μικρό: bit

Βήμα 3: Έλεγχος των τιμών Joystick

Τα επόμενα βήματα χρησιμοποιούν όλα τον κωδικό ελεγκτή

Προτού μπορέσετε να χρησιμοποιήσετε το χειριστήριο στο χειριστήριό σας, πρέπει να γνωρίζετε τι είδους τιμές παίρνετε όταν πιέζετε το ραβδί.

Αντικαταστήστε τον κύριο βρόχο σας με τον ακόλουθο κώδικα:

ενώ True:

joystick = joystick_push () εκτύπωση (joystick) sleep (500)

Μετακινήστε αυτόν τον κωδικό στο micro: bit σας και, στη συνέχεια, κάντε κλικ στο κουμπί REPL στη γραμμή εργαλείων του Mu. Αυτό θα ανοίξει ένα τερματικό στο κάτω μέρος του προγράμματος επεξεργασίας, το οποίο σας δίνει έναν σύνδεσμο σε πραγματικό χρόνο με το micro: bit.

ανοίξτε το REPL
ανοίξτε το REPL

Αυτό δεν θα λειτουργήσει αν δεν είναι συνδεδεμένο το micro: bit

Με το REPL ανοιχτό, πατήστε το κουμπί επαναφοράς στο πίσω μέρος του micro: bit σας.

Εικόνα
Εικόνα

Θα πρέπει να δείτε ορισμένες τιμές να "εκτυπώνονται" στην οθόνη σας:

τιμές στο τερματικό
τιμές στο τερματικό

Σπρώξτε το ραβδί του χειριστηρίου και δείτε τι συμβαίνει με τους αριθμούς.

Σημειώστε τις τιμές που δίνονται όταν το χειριστήριο βρίσκεται στην κεντρική θέση - στην περίπτωσή μου (518, 523).

Κάντε ξανά κλικ στο κουμπί REPL στη γραμμή εργαλείων του Mu για να το κλείσετε - δεν θα μπορείτε να αναβοσβήνετε νέο κώδικα στο micro: bit ενώ είναι ανοιχτό.

Βήμα 4: Προσαρμογή των μεταβλητών Χ και Υ

Θέλετε να αλλάξετε τις τιμές που δίνει η συνάρτηση joystick, έτσι ώστε:

  • στο κέντρο είναι μηδέν
  • επάνω είναι θετικό
  • κάτω είναι αρνητικό.

Αυτό ταιριάζει με τις οδηγίες που χρειάζεται το ρομπότ - έναν θετικό αριθμό για να οδηγήσει προς τα εμπρός και έναν αρνητικό αριθμό για να οδηγήσει προς τα πίσω.

Κοιτάξτε τους αριθμούς που πήρατε στο τελευταίο βήμα. Ο πρώτος αριθμός είναι x και ο δεύτερος αριθμός y.

Επεξεργαστείτε τον ορισμό joystick_push () που υπάρχει ήδη στο πρόγραμμα, μείον τις τιμές σας από το πρωτότυπο:

def joystick_push ():

x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 επιστροφή x, y

Χρησιμοποιήστε τους δικούς σας αριθμούς, μπορεί να είναι διαφορετικοί από τους δικούς μου

Αναβοσβήνετε τον νέο σας κωδικό, ανοίξτε το REPL, πατήστε το κουμπί επαναφοράς micro: bit και ελέγξτε τις τιμές σας.

Παίρνετε (0, 0);

Βήμα 5: Μετατροπή X και Y σε τιμές για τα αριστερά και δεξιά μοτέρ

Προς το παρόν, αυτό το χειριστήριο δεν θα είναι πολύ χρήσιμο για να οδηγήσετε ένα ρομπότ. Πιέζοντας προς τα εμπρός σε όλη τη διαδρομή, θα λάβετε μια τιμή όπως (0, 500).

Αν δίνατε αυτούς τους αριθμούς στο ρομπότ, θα άναβε το δεξί μοτέρ αλλά όχι το αριστερό, κάτι που δεν είναι αυτό που θέλετε να συμβεί!

Αυτό το διάγραμμα δείχνει τι συμβαίνει με τις τιμές x και y όταν μετακινείτε το joystick και τι θέλουμε να κάνει το ρομπότ όταν μετακινείτε το joystick.

διάγραμμα
διάγραμμα

Πρέπει να χρησιμοποιήσετε κάποια μαθηματικά για να αναμίξετε τις τιμές x και y, για να σας δώσουμε κάτι πιο χρήσιμο.

ν

ΤΑ ΜΑΘΗΜΑΤΑ

Ας ξεκινήσουμε πιέζοντας το χειριστήριο μέχρι το τέλος.

Ένα παράδειγμα των τιμών που μπορεί να λάβετε είναι:

x = 0

y = 500

Για να είναι χρήσιμο στο ρομπότ, θέλετε να λάβετε τιμές όπως αυτές:

αριστερά = 500

δεξιά = 500

Ας προσπαθήσουμε να προσθέσουμε x και y με διαφορετικούς τρόπους για να δούμε τι αριθμούς παίρνουμε:

x + y = 0 + 500 = 500

x - y = 0 - 500 = -500 y + x = 500 + 0 = 500 y - x = 500 - 0 = 500

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

Ένα παράδειγμα των τιμών που μπορεί να λάβετε είναι:

x = 500

y = 0

Για να κάνετε το ρομπότ να στρίψει δεξιά, θέλετε ο αριστερός κινητήρας να κινείται προς τα εμπρός και ο δεξιός κινητήρας να κινείται προς τα πίσω:

αριστερά = 500

δεξιά = -500

Ας δοκιμάσουμε ξανά τον τύπο μας:

x + y = 500 + 0 = 500

x - y = 500 - 0 = 500 y + x = 0 + 500 = 500 y - x = 0 - 500 = -500

Συγκρίνετε τα δύο σύνολα τύπου για να διαπιστώσετε ποια επιλογή θα σας δώσει τη σωστή αριστερή τιμή και ποια επιλογή θα σας δώσει τη σωστή σωστή τιμή.

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

ν

ΕΠΕΚΤΑΣΗ ΤΗΣ ΛΕΙΤΟΥΡΓΙΑΣ JOYSTICK

Αναπτύξτε και επεξεργαστείτε τη λειτουργία joystick για να δημιουργήσετε δύο νέες μεταβλητές για αριστερά και δεξιά και να επιστρέψετε αυτές τις τιμές αντί για x και y:

def joystick_push ():

x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 αριστερά = δεξιά = επιστροφή αριστερά, δεξιά

Αναβοσβήνετε τον νέο σας κωδικό, ανοίξτε το REPL, πατήστε το κουμπί επαναφοράς micro: bit και ελέγξτε τις τιμές σας.

Παίρνετε τις αξίες που περιμένετε;

Αν χρειάζεστε περισσότερη βοήθεια, ανατρέξτε στον κωδικό μας εδώ:

Βήμα 6: Αποστολή των τιμών ως μηνύματα ραδιοφώνου

Τώρα έχετε κάποιες τιμές έτοιμες να στείλετε στο ρομπότ σας.

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

ενώ True:

joystick = joystick_push () μήνυμα = str (joystick [0]) + "" + str (joystick [1])

Αυτό δεν θα στείλει το μήνυμα ακόμα!

Τι συμβαίνει σε αυτήν τη νέα γραμμή κώδικα;

  • joystick [0] σημαίνει το πρώτο κομμάτι πληροφοριών που βγαίνει από τη λειτουργία του joystick (αριστερά)
  • Το joystick [1] είναι το επόμενο κομμάτι πληροφοριών (δεξιά)
  • Το str () μετατρέπει και τους δύο αυτούς αριθμούς σε μορφή συμβολοσειράς (κείμενο αντί αριθμών) - αυτό είναι απαραίτητο για να μπορέσετε να στείλετε τις πληροφορίες μέσω του ραδιοφώνου.

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

Παράδειγμα:

150 + 100 = 250

str (150) + str (100) = 150100

Συνεπώς, ο συνδυασμός θα συνδέσει τις αριστερές και τις δεξιές σας τιμές μεταξύ τους.

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

Τέλος, επεκτείνετε τον κωδικό σας για να στείλετε αυτό το νέο μήνυμα μέσω ραδιοφώνου:

radio.send (μήνυμα)

ύπνος (10)

Ο ύπνος επιβραδύνει την αποστολή μηνυμάτων, έτσι ώστε το μικρό: bit να μην υπερφορτώνεται με πάρα πολλές πληροφορίες!

Μετακινήστε αυτόν τον κωδικό στο micro controller σας: bit και εντοπίστε σφάλματα πριν προχωρήσετε στο επόμενο βήμα

Βήμα 7: Λήψη μηνυμάτων στο ρομπότ σας

Επιστρέψτε στον κώδικα του ρομπότ σας από την αρχή - θυμηθείτε να αποσυνδέσετε το micro controller micro: bit, ώστε να μην αναβοσβήνετε κατά λάθος τον κώδικα του ρομπότ

Μετακινηθείτε προς τα κάτω στον κύριο βρόχο σας - αφαιρέστε τον κωδικό δοκιμής και προσθέστε τον αντ 'αυτού:

ενώ True:

μήνυμα = radio.receive () print (message) sleep (100)

Αυτό ορίζει μια μεταβλητή ίση με το εισερχόμενο μήνυμα και εκτυπώνει το μήνυμα στο REPL - για να ελέγξει ότι τα μηνύματα περνούν όπως αναμενόταν.

Αναβοσβήνετε τον νέο σας κωδικό, συνδεδεμένο με το REPL και, στη συνέχεια, πιέστε το χειριστήριο.

Θα πρέπει να πάρετε κάτι σαν αυτό:

ΑΠΑΝΤΗΣΗ τιμών
ΑΠΑΝΤΗΣΗ τιμών

ΣΥΜΒΟΥΛΕΣ ΑΝΤΙΜΕΤΩΠΙΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Εάν λάβετε ένα μήνυμα σφάλματος στο χειριστήριο micro: bit … εντοπίστε σφάλματα στον κωδικό του ελεγκτή σας

Εάν λάβετε ένα μήνυμα σφάλματος στο micro robot σας: bit … το ραδιοφωνικό σας μήνυμα στάλθηκε με επιτυχία! Αλλά το ρομπότ δεν μπορεί να το καταλάβει, οπότε ελέγξτε ότι το μήνυμα που στείλατε και το μήνυμα που είπατε στο ρομπότ να ακούσει για αντιστοιχία.

Αν δεν γίνει απολύτως τίποτα

  • Βεβαιωθείτε ότι έχετε αναβοσβήνει τον σωστό κώδικα σε κάθε micro: bit - είναι εύκολο να αναβοσβήνετε κατά λάθος το λάθος!
  • Βεβαιωθείτε ότι οι αριθμοί καναλιού και ομάδας σας ταιριάζουν σε κάθε μικρό: bit

Βήμα 8: Χρήση των εισερχόμενων μηνυμάτων για τον έλεγχο των κινητήρων του ρομπότ

Τώρα λαμβάνετε δύο αριθμούς που αποστέλλονται μέσω του ραδιοφώνου ως συμβολοσειρά.

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

Πριν το κάνετε αυτό, πρέπει να ελέγξετε ότι το μήνυμα που λαμβάνετε είναι στη σωστή μορφή.

Εάν δεν αποστέλλονται μηνύματα, θα λάβετε "Κανένα" αντ 'αυτού. Εάν προσπαθήσετε να το χωρίσετε, θα λάβετε ένα μήνυμα σφάλματος.

ενώ True:

μήνυμα = radio.receive () αν το μήνυμα δεν είναι None: message = message.split () drive (int (μήνυμα [0]), int (μήνυμα [1]))

Τι συμβαινει εδω?

  • Ο νέος κώδικας θα εκτελεστεί εάν το μήνυμα είναι κάτι άλλο από "Κανένα".
  • message.split () ελέγχει για ένα διάστημα στο μήνυμα (το οποίο προσθέσαμε στο τελευταίο βήμα) και το χρησιμοποιεί για να χωρίσει το μήνυμα στα δύο.
  • int (μήνυμα [0]), int (μήνυμα [1]) κάνει το αντίθετο από αυτό που κάναμε στο προηγούμενο βήμα - παίρνει κάθε πληροφορία ξεχωριστά και τη μετατρέπει σε ακέραιο (έναν ακέραιο αριθμό).
  • int (μήνυμα [0]) χρησιμοποιείται ως τιμή για τον αριστερό κινητήρα στη λειτουργία μετάδοσης κίνησης και το int (μήνυμα [1]) χρησιμοποιείται ως τιμή για το δεξί μοτέρ.

Ελέγξτε ότι λειτουργεί - γυρίζουν οι κινητήρες όταν πιέζετε το χειριστήριο;

Αν όχι - ώρα για κάποιο σφάλμα!

Αν ναι, φανταστικό! Έχετε ρομπότ τηλεχειριστηρίου που λειτουργεί!

Αφιερώστε λίγο χρόνο στην εξάσκηση με το ρομπότ σας προτού προχωρήσετε στο επόμενο βήμα. Οδηγεί όπως περιμένετε;

Τα επόμενα βήματα θα σας δείξουν πώς να χρησιμοποιήσετε τα κουμπιά στο joystick για να προσθέσετε επιπλέον λειτουργικότητα στο ρομπότ σας

Εάν θέλετε να δείτε την έκδοση αυτού του κώδικα μέχρι τώρα:

  • Ρομπότ:
  • Ελεγκτής:

Βήμα 9: Χρήση των κουμπιών - Λήψη πρόσθετων μηνυμάτων

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

Για να επιτρέψετε στο micro: bit σας να ερμηνεύει άλλα μηνύματα, θα πρέπει πρώτα να ελέγξει κάθε αναμενόμενο μήνυμα και, στη συνέχεια, να διαχωρίσει το μήνυμα μόνο αν δεν έχει πει να κάνει κάτι άλλο με αυτό.

Αναπτύξτε τον κωδικό σας ως εξής:

αν το μήνυμα δεν είναι Κανένα:

αν μήνυμα == 'γεια': display.show (Image. HAPPY) elif message == 'duck': display.show (Image. DUCK) else: message = message.split () drive (int (μήνυμα [0]), int (μήνυμα [1])))

Πρώτον, θα ελέγξει αν έχει λάβει το μήνυμα "γεια". Εάν έχει, θα εμφανίσει μια ευτυχισμένη εικόνα και, στη συνέχεια, επιστρέψτε στην κορυφή του βρόχου και ελέγξτε για το επόμενο μήνυμα.

Εάν το μήνυμα δεν είναι γεια, θα ελέγξει στη συνέχεια εάν το μήνυμα είναι "πάπια".

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

Το σύμβολο διπλού ίσου είναι σημαντικό - σημαίνει "είναι ίσο με", σε σύγκριση με ένα μόνο σύμβολο ίσων όρων, το οποίο ορίζει κάτι (οπότε το μήνυμα = "γεια" σημαίνει ότι ορίζουμε τη μεταβλητή σε "γεια", μήνυμα == "γεια" σημαίνει ότι ρωτάμε αν το μήνυμα είναι ίσο με "γεια").

Δοκιμάστε το με δύο μόνο επιλογές προς το παρόν, για να το δοκιμάσετε - μπορείτε να προσθέσετε όσα άλλα μηνύματα θέλετε αργότερα.

Σύνδεσμος προς τον κωδικό εργασίας:

Βήμα 10: Αποστολή πρόσθετων μηνυμάτων χρησιμοποιώντας τα κουμπιά του ελεγκτή

Αποσυνδέστε το micro: bit του ρομπότ σας και συνδέστε το micro: bit του joystick

Επιστρέψτε στον κωδικό του ελεγκτή για επεξεργασία.

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

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

ενώ True:

joystick = joystick_push () κουμπί = button_press ()

button_press () επιστρέφει μια τιμή A, B, C, D, E ή F ανάλογα με το κουμπί που πιέζεται αυτήν τη στιγμή (αν δεν πατηθεί τίποτα, επιστρέφει Καμία).

Τώρα μπορούμε να κάνουμε μια δήλωση if-elif-else, όπως κάναμε για τον κώδικα ρομπότ-χρησιμοποιώντας δύο κουμπιά και να στείλουμε την τιμή του joystick αν δεν πατηθεί κανένα κουμπί.

αν κουμπί == 'A':

radio.send ('hello') sleep (500) elif button == 'B': radio.send ('duck') sleep (500) else: message = str (joystick [0]) + "" + str (joystick [1]) radio.send (μήνυμα) ύπνος (10)

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

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

Ο ύπνος μετά την αποστολή του μηνύματος το επιβραδύνει, έτσι ώστε να μην ελέγξει ξανά τόσο γρήγορα το κουμπί - δοκιμάστε μερικούς αριθμούς εδώ για να έχετε το τέλειο χρονικό διάστημα για εσάς - πολύ αργά και δεν θα ανταποκρίνεται, επίσης γρήγορα και το ρομπότ σας θα λάβει τόσα πολλά μηνύματα κουμπιού που μπορεί να σταματήσει να ανταποκρίνεται στο χειριστήριο!

Λειτουργεί?

Εάν λαμβάνετε μηνύματα λάθους, σκεφτείτε προσεκτικά τι έχετε αλλάξει και τι συμβαίνει.

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

Σύνδεσμος προς τον κωδικό εργασίας:

Βήμα 11: Επόμενα βήματα

Έχετε τώρα τη γνώση που χρειάζεστε για να εργαστείτε με τους κινητήρες του ρομπότ σας και με το χειριστήριο: bit controller

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

Έχετε έξι κουμπιά στο χειριστήριο σας! Τι θέλετε να κάνουν;

  • Τι θα λέγατε για προγραμματισμό μιας ρουτίνας χορού για το ρομπότ σας να κάνει με εντολή; Γράψτε έναν αλγόριθμο εντολών drive (), διαχωρισμένων με εντολές sleep ()!
  • Θέλετε να αλλάξετε την κατεύθυνση που κινείται το ρομπότ έτσι ώστε να μπορεί εύκολα να οδηγεί ανάποδα; Σκεφτείτε τις τιμές x και y του χειριστηρίου σας. Τι αντιπροσωπεύουν και πώς μπορείτε να τα χειριστείτε;
  • Έχει το ρομπότ σας (ή θα μπορούσατε να προσθέσετε!) Επιπλέον δυνατότητες όπως LED, ηχείο ή αισθητήρες;

Ιδέες για τη βελτίωση του κώδικα

  • Θα μπορούσατε να βοηθήσετε το ρομπότ σας να αντιμετωπίσει άγνωστα μηνύματα χρησιμοποιώντας try/εκτός κώδικα;
  • Τα μαθηματικά που χρησιμοποιούνται για τον υπολογισμό της αριστερής και της δεξιάς τιμής από το joystick δεν μας δίνουν όλο το εύρος τιμών (η μονάδα δίσκου του ρομπότ μπορεί να δεχτεί έναν αριθμό έως 1023). Μπορείτε να επεξεργαστείτε αυτόν τον κώδικα για να έχετε καλύτερο εύρος;
  • Υπάρχουν άλλες μέθοδοι ανάμειξης των τιμών του joystick - μπορείτε να βρείτε έναν καλύτερο τρόπο να το κάνετε;

Συνιστάται: