Εμπειρία δημιουργίας του πρώτου ρομπότ στο Arduino (ρομπότ «κυνηγός»)

Γεια σας

Σε αυτό το άρθρο θέλω να περιγράψω τη διαδικασία συναρμολόγησης του πρώτου μου ρομπότ χρησιμοποιώντας το Arduino. Το υλικό θα είναι χρήσιμο σε άλλους αρχάριους όπως εγώ που θέλουν να φτιάξουν κάποιου είδους «αυτοκίνητο καλάθι». Το άρθρο είναι μια περιγραφή των σταδίων εργασίας με τις προσθήκες μου σε διάφορες αποχρώσεις. Ένας σύνδεσμος προς τον τελικό κώδικα (πιθανότατα όχι τον ιδανικότερο) δίνεται στο τέλος του άρθρου.

Εμπειρία δημιουργίας του πρώτου ρομπότ στο Arduino (ρομπότ «κυνηγός»)

Όποτε ήταν δυνατόν, έβαλα τον γιο μου (8 ετών) να συμμετάσχει. Τι ακριβώς λειτούργησε με αυτό και τι όχι - Έχω αφιερώσει μέρος του άρθρου σε αυτό, ίσως θα είναι χρήσιμο σε κάποιον.

Γενική περιγραφή του ρομπότ

Πρώτα, λίγα λόγια για το ίδιο το ρομπότ (ιδέα). Δεν ήθελα πραγματικά να συναρμολογήσω κάτι τυπικό στην αρχή. Ταυτόχρονα, το σύνολο των εξαρτημάτων ήταν αρκετά στάνταρ - σασί, κινητήρες, αισθητήρας υπερήχων, αισθητήρας γραμμής, LED, tweeter. Αρχικά, από αυτό το «σετ σούπας» εφευρέθηκε ένα ρομπότ που προστατεύει την επικράτειά του. Οδηγεί προς τον δράστη που έχει περάσει την κυκλική γραμμή και μετά επιστρέφει στο κέντρο. Ωστόσο, αυτή η έκδοση απαιτούσε μια τραβηγμένη γραμμή, συν επιπλέον μαθηματικά για να παραμείνει στον κύκλο ανά πάσα στιγμή.

Επομένως, μετά από σκέψη, άλλαξα κάπως την ιδέα και αποφάσισα να φτιάξω ένα ρομπότ «κυνηγός». Στην αρχή, γυρίζει γύρω από τον άξονά του, επιλέγοντας έναν κοντινό στόχο (άτομο). Εάν εντοπιστεί το «θήραμα», ο «κυνηγός» ανάβει τα φώτα που αναβοσβήνουν και τη σειρήνα και αρχίζει να οδηγεί προς το μέρος του. Όταν το άτομο απομακρύνεται/φεύγει, το ρομπότ επιλέγει έναν νέο στόχο και τον επιδιώκει και ούτω καθεξής. Ένα τέτοιο ρομπότ δεν χρειάζεται περιορισμένο κύκλο και μπορεί να λειτουργήσει σε ανοιχτούς χώρους.

Όπως μπορείτε να δείτε, αυτό μοιάζει πολύ με ένα παιχνίδι catch-up. Αν και τελικά το ρομπότ δεν αποδείχθηκε αρκετά γρήγορο, αλληλεπιδρά ειλικρινά με τους ανθρώπους γύρω του. Αρέσει ιδιαίτερα στα παιδιά (κάποιες φορές όμως φαίνεται ότι κοντεύουν να το πατήσουν, η καρδιά τους σκάει...). Νομίζω ότι αυτή είναι μια καλή λύση για τη διάδοση του τεχνικού σχεδιασμού.

Δομή ρομπότ

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

Εμπειρία δημιουργίας του πρώτου ρομπότ στο Arduino (ρομπότ «κυνηγός»)

Οι «εγκέφαλοι» του ρομπότ είναι μια πλακέτα arduino uno (1). ήταν σε ένα σετ που παραγγέλθηκε από την Κίνα. Για τους σκοπούς μας, είναι αρκετά (επικεντρωνόμαστε στον αριθμό των καρφίδων που χρησιμοποιούνται). Από το ίδιο κιτ πήραμε ένα έτοιμο πλαίσιο (2), στο οποίο είναι στερεωμένοι δύο κινητήριοι τροχοί (3) και ένας πίσω (ελεύθερα περιστρεφόμενος) (4). Το κιτ περιλάμβανε επίσης μια έτοιμη θήκη μπαταριών (5). Μπροστά από το ρομπότ υπάρχει ένας αισθητήρας υπερήχων (HC-SR04) (6), στο πίσω μέρος υπάρχει ένας οδηγός κινητήρα (L298N) (7), στο κέντρο υπάρχει ένα φλας LED (8) και λίγο έως στο πλάι υπάρχει ένα tweeter (9).

Στο στάδιο της διάταξης εξετάζουμε:

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

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

Αποχρώσεις:

  1. Το σασί από το κιτ έχει πολλές εργοστασιακές τρύπες, αλλά ακόμα δεν έχω καταλάβει ποια είναι η λογική σε αυτές. Οι κινητήρες και το πακέτο μπαταριών ασφαλίστηκαν χωρίς προβλήματα, στη συνέχεια άρχισε η "ρύθμιση" με τη διάνοιξη νέων οπών για τη στερέωση αυτού ή του άλλου πίνακα.
  2. Οι ορειχάλκινες σχάρες και άλλα κουμπιά από αποθηκευτικούς χώρους ήταν μεγάλη βοήθεια (μερικές φορές έπρεπε να τα βγάλουμε).
  3. Πέρασα τις ράβδους από κάθε σανίδα μέσα από τους σφιγκτήρες (και πάλι τους βρήκα στην αποθήκευση). Πολύ βολικό, όλα τα καλώδια βρίσκονται όμορφα και δεν κρέμονται.

Μεμονωμένα μπλοκ

Τώρα θα περάσω μπλοκ και θα σας πω προσωπικά για το καθένα.

χώρος μπαταρίας

Είναι σαφές ότι το ρομπότ πρέπει να έχει μια καλή πηγή ενέργειας. Οι επιλογές μπορεί να διαφέρουν, επέλεξα την επιλογή με 4 μπαταρίες AA. Συνολικά δίνουν περίπου 5 V και αυτή η τάση μπορεί να εφαρμοστεί απευθείας στον πείρο 5V της πλακέτας arduino (παρακάμπτοντας τον σταθεροποιητή).

Φυσικά, είχα κάποια προσοχή, αλλά αυτή η λύση είναι αρκετά εφαρμόσιμη.

Δεδομένου ότι χρειάζεται τροφοδοσία παντού, για ευκολία έφτιαξα δύο συνδέσμους στο κέντρο του ρομπότ: ο ένας "διανέμει" το έδαφος (στα δεξιά) και ο δεύτερος - 5 V (στα αριστερά).

Εμπειρία δημιουργίας του πρώτου ρομπότ στο Arduino (ρομπότ «κυνηγός»)

Μοτέρ και οδηγός

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

Εμπειρία δημιουργίας του πρώτου ρομπότ στο Arduino (ρομπότ «κυνηγός»)

Για τον έλεγχο των κινητήρων, όπως έγραψα παραπάνω, χρησιμοποιείται το πρόγραμμα οδήγησης L298N. Σύμφωνα με την τεκμηρίωση, έχει τρεις ακίδες για κάθε κινητήρα: έναν για την αλλαγή της ταχύτητας και ένα ζεύγος ακίδων για την κατεύθυνση περιστροφής. Εδώ υπάρχει ένα σημαντικό σημείο. Αποδεικνύεται ότι εάν η τάση τροφοδοσίας είναι 5 V, τότε ο έλεγχος ταχύτητας απλά δεν λειτουργεί! Δηλαδή, είτε δεν γυρίζει καθόλου, είτε γυρίζει στο μέγιστο. Αυτό είναι το χαρακτηριστικό που με έκανε να «σκοτώσω» μερικά βράδια. Στο τέλος, βρήκα μια αναφορά κάπου σε ένα από τα φόρουμ.

Σε γενικές γραμμές, χρειαζόμουν χαμηλή ταχύτητα περιστροφής κατά την περιστροφή του ρομπότ - έτσι ώστε να έχει χρόνο να σαρώσει το χώρο. Όμως, αφού δεν προέκυψε τίποτα από αυτή την ιδέα, έπρεπε να το κάνω διαφορετικά: μια μικρή στροφή - στάση - στροφή - στάση κλπ. Και πάλι όχι τόσο κομψό, αλλά εφαρμόσιμο.

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

αισθητήρα υπερήχων

Εμπειρία δημιουργίας του πρώτου ρομπότ στο Arduino (ρομπότ «κυνηγός»)

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

Ως τέτοια επεξεργασία έθεσα διάμεσο φίλτρο για τρεις μετρήσεις. Με βάση δοκιμές σε αληθινά παιδιά (κανένα παιδί δεν τραυματίστηκε κατά τη διάρκεια των δοκιμών!), αποδείχθηκε αρκετά επαρκής για την ομαλοποίηση των δεδομένων. Η φυσική εδώ είναι απλή: έχουμε σήματα που ανακλώνται από απαραίτητη αντικείμενα (δίνοντας την απαιτούμενη απόσταση) και αντανακλώνται από πιο μακρινά, για παράδειγμα, τοίχους. Οι τελευταίες είναι τυχαίες εκπομπές σε μετρήσεις της μορφής 45, 46, 230, 46, 46, 45, 45, 310, 46... Αυτά κόβει το διάμεσο φίλτρο.

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

Φλαμάς και σειρήνα

Ίσως τα πιο απλά στοιχεία όλων των παραπάνω. Φαίνονται στις παραπάνω φωτογραφίες. Δεν υπάρχει τίποτα να γράψουμε για το υλικό εδώ, οπότε ας προχωρήσουμε τώρα κώδικας.

Πρόγραμμα ελέγχου

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

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

Οι χρονοδιακόπτες μπορούν να διασυνδεθούν. Για παράδειγμα, το tweeter λειτουργεί ταυτόχρονα με το flasher. Αυτό απλοποιεί λίγο το πρόγραμμα.

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

Αποχρώσεις της παιδαγωγικής

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

Εργαστείτε σύμφωνα με τις οδηγίες

Ελέγξαμε πρώτα κάθε λεπτομέρεια ξεχωριστά - LED, tweeter, κινητήρες, αισθητήρες κ.λπ. Υπάρχει ένας μεγάλος αριθμός έτοιμων παραδειγμάτων - μερικά στο περιβάλλον ανάπτυξης, άλλα μπορούν να βρεθούν στο Διαδίκτυο. Αυτό σίγουρα με κάνει χαρούμενο. Παίρνουμε τον κωδικό, συνδέουμε το εξάρτημα, βεβαιωνόμαστε ότι λειτουργεί και μετά αρχίζουμε να τον αλλάζουμε ανάλογα με την εργασία μας. Το παιδί κάνει τις συνδέσεις σύμφωνα με το διάγραμμα και υπό την επίβλεψή μου. Αυτό είναι καλό. Πρέπει επίσης να είστε σε θέση να εργάζεστε αυστηρά σύμφωνα με τις οδηγίες.

Σειρά εργασιών («από συγκεκριμένα σε γενικά»)

Αυτό είναι ένα δύσκολο σημείο. Πρέπει να μάθετε ότι ένα μεγάλο έργο ("φτιάξτε ένα ρομπότ") αποτελείται από μικρές εργασίες ("σύνδεση αισθητήρα", "σύνδεση κινητήρων"...) και αυτές, με τη σειρά τους, αποτελούνται από ακόμη μικρότερα βήματα ("βρες ένα πρόγραμμα, "σύνδεση πλακέτας." ", "λήψη υλικολογισμικού"...). Εκτελώντας περισσότερο ή λιγότερο κατανοητές εργασίες του κατώτερου επιπέδου, «κλείνουμε» τις εργασίες του μεσαίου επιπέδου και από αυτές διαμορφώνεται το συνολικό αποτέλεσμα. Εξήγησα, αλλά νομίζω ότι η συνειδητοποίηση δεν θα έρθει σύντομα. Κάπου, μάλλον, από την εφηβεία.

Εγκατάσταση

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

Εργασία με υπολογιστή

Έγραψα το πρόγραμμα για το ρομπότ, αλλά παρόλα αυτά κατάφερα να πετύχω κάποια ευνοϊκά αποτελέσματα.

Πρώτον: Αγγλικά. Μόλις το είχαν ξεκινήσει στο σχολείο, οπότε δυσκολευόμασταν να καταλάβουμε τι ήταν το pishalka, το migalka, το yarkost και άλλες μεταγραφές. Τουλάχιστον αυτό το καταλάβαμε. Σκόπιμα δεν χρησιμοποίησα εγγενείς αγγλικές λέξεις, αφού δεν έχουμε φτάσει ακόμη σε αυτό το επίπεδο.

Δεύτερον: αποτελεσματική εργασία. Διδάξαμε συνδυασμούς πλήκτρων πρόσβασης και πώς να εκτελούμε γρήγορα τυπικές λειτουργίες. Περιοδικά, όταν γράφαμε το πρόγραμμα, ο γιος μου και εγώ αλλάζαμε θέσεις και έλεγα τι έπρεπε να γίνει (αντικατάσταση, αναζήτηση κ.λπ.). Έπρεπε να επαναλάβω ξανά και ξανά: "επιλογή με διπλό κλικ", "κρατήστε πατημένο το Shift", "κρατήστε πατημένο το Ctrl" και ούτω καθεξής. Η διαδικασία εκμάθησης εδώ δεν είναι γρήγορη, αλλά νομίζω ότι οι δεξιότητες σταδιακά θα κατατεθούν «στον υποφλοιό».

Κρυφό κείμενοΜπορείτε να πείτε ότι τα παραπάνω είναι σχεδόν προφανή. Αλλά, ειλικρινά, αυτό το φθινόπωρο είχα την ευκαιρία να διδάξω πληροφορική στην 9η τάξη σε ένα σχολείο. Αυτό ειναι φρικτό. Οι μαθητές δεν γνωρίζουν βασικά πράγματα όπως Ctrl + Z, Ctrl + C και Ctrl + V, επιλέγοντας κείμενο κρατώντας πατημένο το Shift ή κάνοντας διπλό κλικ σε μια λέξη και ούτω καθεξής. Κι αυτό παρά το γεγονός ότι ήταν στο τρίτο έτος σπουδών πληροφορικής... Βγάλτε το δικό σας συμπέρασμα.

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

Όπως μπορείτε να δείτε, είμαστε ακόμα στην αρχή. Θα συνεχίσουμε να ακονίζουμε τις δεξιότητες και τις γνώσεις μας· θα είναι χρήσιμες στη ζωή.

Παρεμπιπτόντως, για το μέλλον...

Περαιτέρω ανάπτυξη

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

Και στο τέλος, μάλιστα, οι ήρωες αυτού του άρθρου (βίντεο κάνοντας κλικ):

Εμπειρία δημιουργίας του πρώτου ρομπότ στο Arduino (ρομπότ «κυνηγός»)

Спасибо за внимание!

Κωδικός σύνδεσμος

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο