Έλεγχος ενός σερβομηχανισμού με Raspberry Pi Pico W και PWM

Ένας σερβομηχανισμός είναι ένας από τους βασικότερους τρόπους για να μάθετε να χρησιμοποιείτε τη διαμόρφωση εύρους παλμών (PWM) με το Raspberry Pi. Σε αυτό το άρθρο, θα σας δείξω πώς να το κάνετε αυτό με ένα Raspberry Pi Pico W.

Στόχοι σεμιναρίου PWM

Ένα σερβο με ένα Pico W και PWM
  • Μάθετε πώς να χρησιμοποιείτε PWM για τον έλεγχο της γωνίας του σερβομηχανισμού
  • Ρύθμιση διακομιστή με το Pico W
  • Ο διακομιστής παραδίδει ιστοσελίδα με ρυθμιστικό για τον έλεγχο του σερβομηχανισμού

Απαιτούμενα ανταλλακτικά

  • Raspberry Pi Pico W με κεφαλίδες
  • Καλώδιο βραχυκυκλώματος
  • Servo (χρησιμοποιούμε το μικροservo Tower Pro SG90)

Τι είναι η διαμόρφωση πλάτους παλμού;

Τα παιδιά βρίσκουν διασκεδαστικό να ανάβουν και να σβήνουν τα φώτα επανειλημμένα.

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

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

Με ένα Raspberry Pi, μπορείτε εύκολα να το κάνετε αυτό με αυτοματοποιημένο τρόπο. Στην ουσία, θα λέτε στο Raspberry Pi πόσες φορές θέλετε τα πράγματα να είναι "ON" σε ένα συγκεκριμένο χρονικό διάστημα.

Αυτό σας επιτρέπει να αμβλύνετε τις λυχνίες LED:

τηλεχειριστήριο picockpit gpio pwm
Εναλλαγή της φωτεινότητας των LED με τη λειτουργία PWM του PiCockpit

Επίσης, αυτό σας επιτρέπει να ελέγχετε τη γωνία του βραχίονα του σερβομηχανισμού.

Μια σημαντική έννοια PWM: ο κύκλος λειτουργίας

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

Ας υποθέσουμε λοιπόν ότι το κύκλωμά σας είναι ενεργοποιημένο το μισό χρόνο. Επομένως, μπορούμε να πούμε ότι ο κύκλος λειτουργίας είναι 50%.

Αν το έχετε ενεργοποιημένο όλη την ώρα, ο κύκλος λειτουργίας του θα είναι στο 100%, και αντίστροφα, αν είναι απενεργοποιημένο όλη την ώρα σημαίνει 0

Απεικόνιση του κύκλου λειτουργίας από Sparkfun (CC BY-SA 4.0)

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

Για μια λυχνία LED, αυτό σημαίνει ότι η λυχνία LED είναι αναμμένη για ένα χρονικό διάστημα, στη συνέχεια αφαιρείται το ρεύμα, στη συνέχεια παρέχεται ξανά ρεύμα και επαναλαμβάνεται.

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

Έλεγχος σερβομηχανισμού SG90 με PWM

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

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

Αυτό είναι το φύλλο δεδομένων για το SG90, από την Luxor Parts:

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

  • Καφέ = αρνητικό
  • Κόκκινο = θετικό
  • Πορτοκαλί = σήμα

Και για τη συχνότητα παλμού/κύκλο λειτουργίας

  • Θα πρέπει να έχετε κύκλο λειτουργίας 20ms ή 50Hz.
  • Ένα σήμα 1ms = μηδέν μοίρες
  • Ένα σήμα 2ms = 180 μοίρες περιστροφής
Με ένα σήμα 1ms, ο σερβομηχανισμός περιστρέφεται κατά μηδέν μοίρες.

Αυτό σημαίνει ότι κάθε ms, ο σερβομηχανισμός θα αναζητά μια ενημέρωση. Εάν συνεχίσετε να του στέλνετε ένα σήμα 2 ms, θα παραμείνει σε πλήρη περιστροφή (180 μοίρες). Αν το αλλάξετε σε 1,5ms, θα περιστρέφεται κατά 90 μοίρες και στα 1ms, θα περιστρέφεται κατά μηδέν μοίρες.

Με ένα σήμα 2ms, ο σερβομηχανισμός περιστρέφεται κατά 180 μοίρες.

Σύνδεση του σερβομηχανισμού στο Pico W

Για να χρησιμοποιήσετε τον κωδικό μας, πρέπει να συνδέσετε το καλώδιο σήματος στο GPIO 0. Το καλώδιο σήματος είναι το πορτοκαλί καλώδιο στο SG90.

Στη συνέχεια, συνδέστε το κόκκινο καλώδιο στο VBUS (που σας δίνει 5V). Όπως μπορείτε να δείτε από το φύλλο δεδομένων, η τάση λειτουργίας για το SG50 είναι 4,8V έως 6V, οπότε η ακίδα 3,3V στο Pico W δεν θα λειτουργήσει.

Κωδικοποίηση του σερβοελέγχου Pico W

Μπορείτε να βρείτε τον κωδικό εδώ στο GitHub μας.

Ας δούμε τον κώδικα.

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


class Servo:
    def __init__(self, MIN_DUTY=300000, MAX_DUTY=2300000, pin=0, freq=50):
        self.pwm = machine.PWM(machine.Pin(pin))
        self.pwm.freq(freq)
        self.MIN_DUTY = MIN_DUTY
        self.MAX_DUTY = MAX_DUTY
        
    def rotateDeg(self, deg):
        if deg < 0:
            deg = 0
        elif deg > 180:
            deg = 180
        duty_ns = int(self.MAX_DUTY - deg * (self.MAX_DUTY-self.MIN_DUTY)/180)
        self.pwm.duty_ns(duty_ns)

servo = Servo()

Η κλάση Servo χρησιμοποιεί την κλάση machine.PWM που είναι διαθέσιμη στο MicroPython. Δείτε την τεκμηρίωση εδώ.

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

ssid = 'Servo-Control'
password = 'PicoW-Servo'

ap = network.WLAN(network.AP_IF)
ap.config(essid=ssid, password=password)
ap.active(True)

while ap.active() == False:
  pass

print('Connection successful')
print(ap.ifconfig())

Όπως μπορείτε να δείτε από τις δύο πρώτες γραμμές, το SSID που ψάχνετε είναι Servo-Control και ο κωδικός πρόσβασης είναι PicoW-Servo.

Αφού συνδεθείτε στο δίκτυο WiFi, μπορείτε να μεταβείτε στη διεύθυνση IP του Pico W, η οποία από προεπιλογή είναι 192.168.4.1. Εναλλακτικά, μπορείτε επίσης να ελέγξετε το αρχείο καταγραφής στο Thonny για να δείτε ποια είναι η διεύθυνση IP του Pico σας.

Πώς επικοινωνεί η ιστοσελίδα με το σερβομηχανισμό;

Έλεγχος ρυθμιστικού σερβο

Όταν συνδέεστε στη διεύθυνση IP του Pico W, σας αποστέλλεται το αρχείο index.html, το οποίο μπορείτε να βρείτε στο αποθετήριο Github.

Το αρχείο index.html έχει αυτές τις σημαντικές γραμμές:

 <form id="form">
            <input type="range" class="slider" min="0" max="180" value="slider_value" name="servo" id="servo">
            <output></output>
        </form>

Όπως μπορείτε να δείτε, υπάρχει ένα αντικείμενο που είναι το ρυθμιστικό.

Υπάρχει επίσης ένα που εμφανίζει το βαθμό περιστροφής.

Το τμήμα JavaScript ενημερώνει το καθώς και τη διεύθυνση URL, ώστε το Pico W να μπορεί να συλλάβει τα δεδομένα και να περιστρέψει το σερβομηχανισμό.

Τα στοιχεία και έχουν γονέα .

Εδώ είναι το σενάριο στο μπροστινό μέρος,