maqueen bulldozer with mechanic loader

Μετάτρεψε το Maqueen σε αυτόνομη μπουλντόζα

Προσάρμοσε στο Maqueen τα κατάλληλα μηχανικά εξαρτήματα και φτιάξε μια ρομποτική μπουλντόζα που σαρώνει μόνη της μια ορισμένη περιοχή.

Ένα μηχάνημα με ευφυΐα

Φαντάσου μια μπουλντόζα που μπορεί να δουλεύει μόνη της, χωρίς να χρειάζεται οδηγό! Ένα τέτοιο εντυπωσιακό μηχάνημα είναι μια αυτόνομη μπουλντόζα!

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

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

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

Μπορείς να χρησιμοποιήσεις είτε τα μηχανικά μέρη του πακέτου micro:Maqueen Mechanic – Loader είτε το πλήρες πακέτο Mechanic Full Set. Με το πλήρες πακέτο μπορείς να υλοποιήσεις και άλλα ρομποτικά μηχανήματα επεκτείνοντας κατά πολύ τις δυνατότητες του Maqueen.

dfrobot maqueen mechanic loader

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

Τι θα χρειαστείς

Ηλεκτρονικά μέρη

  • Κινητήρες
  • Αισθητήρες γραμμής
  • Servo

Έννοιες προγραμματισμού

  • Τελεστές σύγκρισης
  • Μεταβλητές
  • Εντολές επανάληψης
  • Παραγωγή τυχαίων αριθμών

Προγραμματισμός με MakeCode

Για να προγραμματίσεις το Microbit με MakeCode ακολούθησε τις οδηγίες που θα βρεις εδώ:

Microbit & MakeCode: Ένας Οδηγός για Αρχάριους

Ξεκίνα προσθέτοντας τις εντολές που σχετίζονται με τον έλεγχο του Maqueen Plus V2. Πάτησε στο εικονίδιο των ρυθμίσεων και έπειτα κάνε κλικ στις “Επεκτάσεις”.

επεκτασεις make code addons

Συμπλήρωσε στη γραμμή αναζήτησης το link της επέκτασης:

https://github.com/DFRobot/pxt-DFRobot_MaqueenPlus_v20

add an addon on makecode

Κάνε κλικ στην επέκταση και μόλις επιστρέψεις στην κεντρική σελίδα θα βρεις τις νέες εντολές που αφορούν το Maqueen Plus V2.

extension maqueen plus v2 makecode

Κάνε κλικ στην κατηγορία “Μεταβλητές” και έπειτα επίλεξε “Δημιουργία μεταβλητής”. Δημιούργησε τις μεταβλητές “speed” και “degrees”. Πλέον, στην κατηγορία “Μεταβλητές” εμφανίζονται τα νέα block με τις εντολές που σχετίζονται με αυτές.

Κατά την έναρξη ξεκινά η επικοινωνία του Microbit με την πλατφόρμα του Maqueen με το πρωτόκολλο I2C. Επίσης, ορίζονται οι αρχικές τιμές που θα έχουν οι μεταβλητές “speed” και “degrees”. Στην κατηγορία εντολών “Ακροδέκτες” βρίσκεται η εντολή “σέρβο εγγραφή ακροδέκτης … την τιμή …” που περιστρέφει τον σερβοκινητήρα. Σύνδεσε την τριάδα των ακροδεκτών του σερβοκινητήρα στην πλατφόρμα του Maqueen στο σημείο που υπάρχει η ένδειξη “servo” και πιο συγκεκριμένα στη θέση P1. To καφέ καλώδιο του servo συνδέεται στη γείωση (GND), το κόκκινο καλώδιο του servo ενώνεται με τον κόκκινο ακροδέκτη που θα το τροφοδοτήσει με 5V και τέλος το πορτοκαλί καλώδιο του servo θα πάρει σήμα από τον πράσινο ακροδέκτη με την ένδειξη P1.

Πρώτα τρέξε το πρόγραμμα με τις αρχικές εντολές όπως αυτές φαίνονται στην παρακάτω εικόνα και ύστερα βίδωσε τα μηχανικά εξαρτήματα επάνω στο Maqueen, με τέτοιο τρόπο που το μπροστινό μέρος (η λεπίδα της μπουλντόζας) να βρίσκεται στην κάτω θέση όταν το servo είναι στη θέση των 90 μοιρών!

Χρησιμοποίησε την εντολή “για πάντα” για να δημιουργήσεις μια δομή επανάληψης και μέσα της βάλε ακόμα μία επανάληψη με την εντολή “ενώ”. Αρχικά η μπουλντόζα θα κινείται συνεχώς ευθεία μπροστά, με κατεβασμένη τη λεπίδα, μέχρι να συναντήσει τη μαύρη γραμμή του κύκλου. Τότε, ο κεντρικός αισθητήρας γραμμής (Μ) θα δώσει τιμή 1 και η επανάληψη που ορίζεται από την “ενώ” θα τερματιστεί, ώστε να εκτελεστεί η εντολή set all motor stop και το ρομπότ να σταματήσει.

Για να περιστραφεί ομαλά το servo και να ανέβει σχετικά αργά η λεπίδα, χρησιμοποίησε μία ακόμα “ενώ” στην οποία θα μειώνονται οι μοίρες του servo κατά 2 σε κάθε επανάληψη, με μια μικρή καθυστέρηση 50ms κάθε φορά. Οι επαναλήψεις εκτελούνται μέχρι να γίνει 0 η μεταβλητή “degrees”, όπου και η λεπίδα θα έχει ανέβει ψηλά. Δεν αρκεί σε κάθε επανάληψη να αλλάζει απλώς η “degrees”, αλλά θα πρέπει η νέα τιμή της να περνά στην εντολή που κινεί το servo.

Έπειτα η μπουλντόζα θα πρέπει να κάνει αναστροφή για να κατευθυνθεί και πάλι προς το εσωτερικό του κύκλου. Βάλε τους κινητήρες να περιστραφούν αντίστροφα για τυχαίο χρονικό διάστημα από 500ms έως 1500ms. Με αυτό τον τρόπο, όποτε το ρομποτάκι κάνει αναστροφή, θα είναι προσανατολισμένο προς μια διαφορετική κατεύθυνση κάθε φορά. Αν επιλέξεις να αλλάξεις την τιμή της “speed” στην αρχή του προγράμματος, θα πρέπει να τροποποιήσεις αντίστοιχα και το εύρος των τυχαίων αριθμών που θα παραχθούν, ώστε το ρομποτάκι να γυρίζει κάθε φορά προς το εσωτερικό του κύκλου.

Στη συνέχεια θα πρέπει να κατέβει και πάλι το μπροστινό εξάρτημα της μπουλντόζας. Χρησιμοποίησε μία δομή επανάληψης αντίστοιχη με αυτή που ανέβαζε το μπροστινό τμήμα, μόνο που τώρα οι μοίρες αυξάνονται σταδιακά κατά 2 μέχρι να γίνουν 90 ώστε η λεπίδα να κατέβει. Όλες οι προηγούμενες κινήσεις θα επαναλαμβάνονται συνεχώς και το ρομποτάκι θα σαρώνει την περιοχή, απομακρύνοντας οτιδήποτε βρεθεί στον δρόμο του!

Παρακάτω μπορείς να δεις το προτεινόμενο πρόγραμμα συνολικά. Δοκίμασε να το τροποποιήσεις και μη διστάσεις να πειραματιστείς!

Προγραμματισμός με Python

Για να προγραμματίσεις το Microbit με Python ακολούθησε τις οδηγίες που θα βρεις εδώ:

Microbit & Python: Κάντε τα πρώτα σας βήματα

Επιπλέον, στον παραπάνω οδηγό θα βρεις αναλυτικές οδηγίες για το τρόπο που εισάγεις μία βιβλιοθήκη στον συγκεκριμένο editor. Κατέβασε τη βιβλιοθήκη “GRobotronicsMaqueen” από εδώ:

https://github.com/grobotronics/Microbit/blob/main/Maqueen/GRobotronicsMaqueen.py

Στη αρχή του προγράμματος πρόσθεσε τις βιβλιοθήκες “microbit”, “time” και “random”. Για τον έλεγχο του Maqueen θα χρησιμοποιηθούν και οι κλάσεις “LineSensors”, “MoveMaqueen” και “PlusV2ServoController” της βιβλιοθήκης “GRobotronicsMaqueen”.

from microbit import *
from time import sleep
from random import randint
from GRobotronicsMaqueen import LineSensors, MoveMaqueen, PlusV2ServoController

Έπειτα δημιούργησε το αντικείμενο “line” της κλάσης “LineSensors”, το αντικείμενο “robot” της κλάσης “MoveMaqueen” και το αντικείμενο “servo1” της κλάσης “PlusV2ServoController” δηλώνοντας παράλληλα τον ακροδέκτη στον οποίο συνδέεται το servo.

line = LineSensors()
robot = MoveMaqueen()
servo1 = PlusV2ServoController(pin1)

Στη συνέχεια όρισε τις αρχικές τιμές που θα έχουν οι μεταβλητές “speed” και “degrees”. Για να περιστρέψεις τον σερβοκινητήρα πρόσθεσε την εντολή servo1.set_servo(degrees)”. Σύνδεσε την τριάδα των ακροδεκτών του σερβοκινητήρα στην πλατφόρμα του Maqueen στο σημείο που υπάρχει η ένδειξη “servo” και πιο συγκεκριμένα στη θέση P1. To καφέ καλώδιο του servo συνδέεται στη γείωση (GND), το κόκκινο καλώδιο του servo ενώνεται με τον κόκκινο ακροδέκτη που θα το τροφοδοτήσει με 5V και τέλος το πορτοκαλί καλώδιο του servo θα πάρει σήμα από τον πράσινο ακροδέκτη με την ένδειξη P1.

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

from microbit import *
from time import sleep
from random import randint
from GRobotronicsMaqueen import LineSensors, MoveMaqueen, PlusV2ServoController

line = LineSensors()
robot = MoveMaqueen()
servo1 = PlusV2ServoController(pin1)

speed = 50
degrees = 90

servo1.set_servo(degrees)

Μέσα στη βασική δομή επανάληψης που ορίζεται από τη “while True” καταχωρούνται συνεχώς στις μεταβλητές “L2”, “L1”, “M”, “R1” και “R2” οι τιμές που επιστρέφει η εντολή line.return_sensor_values()”.

while True:
    L2, L1, M, R1, R2 = line.return_sensor_values()

Πρόσθεσε άλλη μία επανάληψη, εντός της προηγούμενης, με μία ακόμα “while”. Αρχικά η μπουλντόζα θα κινείται συνεχώς ευθεία μπροστά, με κατεβασμένη τη λεπίδα, μέχρι να συναντήσει τη μαύρη γραμμή του κύκλου. Τότε, ο κεντρικός αισθητήρας γραμμής (Μ) θα επιστρέψει “BLACK” και η εσωτερική επανάληψη θα τερματιστεί, ώστε να εκτελεστεί η εντολή “robot.stop()” και το ρομπότ να σταματήσει.

while True:
    L2, L1, M, R1, R2 = line.return_sensor_values()

    while M == "WHITE":
        L2, L1, M, R1, R2 = line.return_sensor_values()
        robot.move(speed, speed)
    robot.stop()

Για να περιστραφεί ομαλά το servo και να ανέβει σχετικά αργά η λεπίδα, χρησιμοποίησε και πάλι μία whileστην οποία θα μειώνονται οι μοίρες του servo κατά 2 σε κάθε επανάληψη, με μια μικρή καθυστέρηση 0,05s κάθε φορά. Οι επαναλήψεις εκτελούνται μέχρι να γίνει 0 η μεταβλητή “degrees”, όπου και η λεπίδα θα έχει ανέβει ψηλά. Δεν αρκεί σε κάθε επανάληψη να αλλάζει απλώς η “degrees”, αλλά θα πρέπει η νέα τιμή της να περνά στην εντολή που κινεί το servo.

    while degrees > 0:
        degrees = degrees - 2
        servo1.set_servo(degrees)
        sleep(0.05)

Έπειτα η μπουλντόζα θα πρέπει να κάνει αναστροφή για να κατευθυνθεί και πάλι προς το εσωτερικό του κύκλου. Βάλε τους κινητήρες να περιστραφούν αντίστροφα με ένα “-” στην ταχύτητα του δεξιού κινητήρα. Χρησιμοποίησε την εντολή “randint(value, value)” για να εξάγεις τυχαίους ακέραιους αριθμούς. Η λέξη randint αποτελεί συντομογραφία των λέξεων random integer (τυχαίος ακέραιος). Ταυτόχρονα διαίρεσε με το 1000 για να προκύψει ένας δεκαδικός αριθμός στο διάστημα από 0,5s έως 1,5s. Αυτή είναι τελικά η τιμή που περνά στη “sleep(value)”. Με αυτό τον τρόπο, όποτε το ρομποτάκι κάνει αναστροφή, θα είναι προσανατολισμένο προς μια διαφορετική κατεύθυνση κάθε φορά. Αν επιλέξεις να αλλάξεις την τιμή της “speed” στην αρχή του προγράμματος, θα πρέπει να τροποποιήσεις αντίστοιχα και το εύρος των τυχαίων αριθμών που θα παραχθούν, ώστε το ρομποτάκι να γυρίζει κάθε φορά προς το εσωτερικό του κύκλου.

    robot.move(speed, -speed)
    sleep((randint(500, 1500))/1000)
    robot.stop()

Στη συνέχεια θα πρέπει να κατέβει και πάλι το μπροστινό εξάρτημα της μπουλντόζας. Χρησιμοποίησε μία δομή επανάληψης αντίστοιχη με αυτή που ανέβαζε το μπροστινό τμήμα, μόνο που τώρα οι μοίρες αυξάνονται σταδιακά κατά 2 μέχρι να γίνουν 90 ώστε η λεπίδα να κατέβει. Όλες οι προηγούμενες κινήσεις θα επαναλαμβάνονται συνεχώς και το ρομποτάκι θα σαρώνει την περιοχή, απομακρύνοντας οτιδήποτε βρεθεί στον δρόμο του!

Παρακάτω μπορείς να δεις το προτεινόμενο πρόγραμμα συνολικά. Δοκίμασε να το τροποποιήσεις και μη διστάσεις να πειραματιστείς!

from microbit import *
from time import sleep
from random import randint
from GRobotronicsMaqueen import LineSensors, MoveMaqueen, PlusV2ServoController

line = LineSensors()
robot = MoveMaqueen()
servo1 = PlusV2ServoController(pin1)

speed = 50
degrees = 90

servo1.set_servo(degrees)

while True:
    L2, L1, M, R1, R2 = line.return_sensor_values()

    while M == "WHITE":
        L2, L1, M, R1, R2 = line.return_sensor_values()
        robot.move(speed, speed)
    robot.stop()

    while degrees > 0:
        degrees = degrees - 2
        servo1.set_servo(degrees)
        sleep(0.05)
        
    robot.move(speed, -speed)
    sleep((randint(500, 1500))/1000)
    robot.stop()
    
    while degrees < 90:
        degrees = degrees + 2
        servo1.set_servo(degrees)
        sleep(0.05)

Προσαρμογή για το Maqueen Lite

Αν διαθέτεις Maqueen Lite και όχι Maqueen Plus V2, για να το προγραμματίσεις με MakeCode πρόσθεσε την επέκταση με αυτό το link: https://github.com/DFRobot/pxt-maqueen

Η δομή και η λογική του προγράμματος παραμένουν ίδιες με την περίπτωση του Maqueen Plus V2, όμως τώρα, “διαβάζονται” και οι δύο αισθητήρες που διαθέτει το Maqueen Lite στο μπροστινό μέρος του, καθώς δεν διαθέτει έναν κεντρικό όπως το Maqueen Plus V2. Μια ακόμη σημαντική διαφορά είναι ότι, σε αντίθεση με το Maqueen Plus V2, η τιμή που δίνει ένας αισθητήρας του Maqueen Lite όταν βρίσκεται πάνω από μια μαύρη γραμμή είναι 0. Σε διαφορετική περίπτωση η τιμή που καταγράφεται είναι 1 (λευκή ή ανοιχτόχρωμη επιφάνεια).

Δύο είναι οι αισθητήρες που διαβάζονται και κατά τον προγραμματισμό του Maqueen Lite με Python, επειδή δεν διαθέτει έναν κεντρικό. Επιπλέον, τώρα δεν χρησιμοποιείται η κλάση “LineSensors” και οι τιμές των αισθητήρων γραμμής καταχωρούνται μέσω της εντολής “read_digital()” από τη βιβλιοθήκη “microbit”. Τέλος, για τον χειρισμό του servo χρησιμοποιείται η κλάση “LiteServoController” αντί της “PlusV2ServoController” και κατά την ενεργοποίηση του σερβοκινητήρα καταγράφεται η πληροφορία “SERVO1”, που φανερώνει ότι ο σερβοκινητήρας συνδέθηκε στον ακροδέκτη S1 της πλατφόρμας του Maqueen Lite.

from microbit import *
from time import sleep
from random import randint
from GRobotronicsMaqueen import MoveMaqueen, LiteServoController

robot = MoveMaqueen()
servo = LiteServoController()

speed = 20
degrees = 90

servo.set_servo("SERVO1", degrees)

while True:
    L = pin13.read_digital()
    R = pin14.read_digital()
    
    while L == 1 and R == 1:
        L = pin13.read_digital()
        R = pin14.read_digital()
        robot.move(speed, speed)
    robot.stop()
    
    while degrees > 0:
        degrees = degrees - 2
        servo.set_servo("SERVO1", degrees)
        sleep(0.05)
    
    robot.move(speed, -speed)
    sleep((randint(600, 1200))/1000)
    robot.stop()
    
    while degrees < 90:
        degrees = degrees + 2
        servo.set_servo("SERVO1", degrees)
        sleep(0.05)

Αρχεία

Σύνδεσμοι

Νέα γενιά Edison V3: Φέρνοντας την επανάσταση στην εκπαιδευτική ρομποτική!

Gravity, η δύναμη του γρήγορου prototyping στα χέρια σας!

Παίξτε Πέτρα, Ψαλίδι, Χαρτί με το BBC micro:bit!

Μάθε στο Maqueen να αναγνωρίζει και να ακολουθεί αντικείμενα