Τι είναι ο σερβοκινητήρας;
Ο σερβοκινητήρας είναι ένας κινητήρας με μηχανισμό ελέγχου και αλγόριθμο, δηλαδή, αυτή η μηχανική συσκευή έχει έναν εσωτερικό ελεγκτή που τοποθετεί με ακρίβεια τον ρότορα του κινητήρα σε γωνία που καθορίζεται από το εισερχόμενο σήμα ελέγχου. Ωστόσο, ο σερβοκινητήρας που έχει αυτός ο ελεγκτής είναι αυτός των 90° ή των 180°.

Για να το καταλάβουμε αυτό, ας δούμε ότι φυσικά ο σερβοκινητήρας αποτελείται από τρία καλώδια: GND, Power (5v) και Control. Δηλαδή, τα δύο πρώτα χρησιμοποιούνται ως τροφοδοσία καθώς το καλώδιο ελέγχου χρησιμοποιείται για την αποστολή του σήματος τοποθέτησης του κινητήρα με μια ακολουθία παλμών PWM.
Ένας σερβομηχανισμός με MicroPython που υλοποιείται σε Raspberry Pi Pico ή σε ESP8266 θα μπορούσε να έχει τεράστιες δυνατότητες, δεδομένου ότι η ίδια η πλακέτα θα είναι υπεύθυνη για την αποστολή αυτού του σήματος PWM για να τοποθετήσει τον κινητήρα σε μια θέση σε συγκεκριμένες μοίρες.
Σερβομηχανισμοί συνεχούς περιστροφής
Οι σερβοκινητήρες 360° είναι τυπικοί σερβομηχανισμοί τηλεχειριζόμενου ελέγχου που έχουν τροποποιηθεί για να προσφέρουν έλεγχο ταχύτητας ανοιχτού βρόχου αντί για τον συνήθη έλεγχο θέσης κλειστού βρόχου, επομένως εδώ δεν μπορείτε πλέον να καθορίσετε με το raspberry pico τη θέση που θέλετε να μετακινήσετε το ρότορα του κινητήρα, αλλά αντίθετα καθορίζετε την ταχύτητα περιστροφής.
Η τροποποίηση τους μετατρέπει σε κινητήρες με σύστημα μείωσης κινητήρα που τους επιτρέπει να αυξάνουν τη δύναμή τους και να μειώνουν την ταχύτητά τους, όπου μπορούν επιπλέον να ελέγχουν την κατεύθυνση περιστροφής, όλα αυτά ενσωματωμένα σε ένα συμπαγές και οικονομικό πακέτο.
Σήμα ελέγχου ενός ServoMotor με MicroPython
Μπορούμε να επιτύχουμε τον έλεγχο ενός σερβοκινητήρα με απλό τρόπο με τον μικροελεγκτή RP2040 του Raspberry Pi Pico ή το ESP, χρησιμοποιώντας τις μονάδες PWM που έχουν προγραμματιστεί μέσω της MicroPython. Εισάγουμε τις κλάσεις Pin και PWM από τη μονάδα machine και τη μονάδα utime . από Pin εισαγωγής μηχανής , PWM
from machine import Pin, PWM
import utime
Γενικά, οι εμπορικοί σερβοκινητήρες επεξεργάζονται έναν παλμό με περίοδο 20 ms για να εκτελέσουν σωστά ολόκληρη την κίνηση του σερβομηχανισμού, είτε 90° είτε 180° για τη θέση ή 360° για την ταχύτητα.
Με άλλα λόγια πρέπει να ρυθμίσουμε μια συχνότητα 50Hz στον σερβοκινητήρα μας σε οποιοδήποτε από τα PWM Pin του μικροελεγκτή μας.
Σε ποιες ακίδες μπορούμε να συνδέσουμε τον σερβομηχανισμό μας;

Διαμόρφωση πλάτους παλμού PWM
Οι σερβοκινητήρες λειτουργούν μέσω διαμόρφωσης πλάτους παλμού – ( pulse width modulation, PWM). Για τους σερβοκινητήρες μοντέλων, η συχνότητα που χρησιμοποιείται για την αποστολή της ακολουθίας παλμών στον σερβοκινητήρα είναι 50 Hz – αυτό σημαίνει ότι κάθε κύκλος διαρκεί 20 ms. – Οι διάρκειες κάθε παλμού ερμηνεύονται ως εντολές τοποθέτησης του ρότορα του κινητηρα, ενώ τα κενά μεταξύ κάθε παλμού αγνοούνται. Στους περισσότερους σερβοκινητήρες τα πλάτη παλμών είναι 1 ms έως 2 ms, τα οποία όταν εφαρμόζονται στον σερβοκινητήρα δημιουργούν μια μετατόπιση από -90° έως +90°, επομένως, με απλούστερο τρόπο, η γωνία περιστροφής καθορίζεται από το πλάτος του παλμού. Εάν το πλάτος παλμού ήταν 1,5 ms, ο κινητήρας θα τοποθετηθεί στο κεντρικό τμήμα του εύρους – στις 0° –

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

Για αυτό χρησιμοποιούμε την ακόλουθη οδηγία διαμόρφωσης PWM στο MicroPython που μας επιτρέπει να ορίσουμε την περίοδο ενεργοποίησης για τον έλεγχο των σερβοκινητήρων μας:
servo_180.duty_ns(100000) # 1ms -> 0 μοίρες (180) ή CW (360)
utime.sleep_ms(500) # χρόνος για κίνηση
servo_180.duty_ns(150000) # ,5ms -> 90 μοίρες (180) ή Κέντρο (360)
utime.sleep_ms(500) # χρόνος για κίνηση
servo_180.duty_ns(200000) # 2ms -> 180 μοίρες (180) ή CCW (360)
utime.sleep_ms(500) # χρόνος για κίνηση
Σερβοκινητήρες συνεχούς περιστροφής
Σε αντίθεση με τους σερβοκινητήρες που περιστρέφονται σε περιορισμένο εύρος, οι σερβοκινητήρες συνεχούς περιστροφής είναι τελείως διαφορετικοί επειδή οι κινητήρες μπορούν να περιστρέφονται 360° και σε αυτούς η θέση ή το εύρος περιστροφής του κινητήρα δεν μπορεί να ελεγχθεί αφού μόνο η ταχύτητα και η η κατεύθυνση περιστροφής μπορούν να ελεγχθούν.
Εάν θέλετε να τροποποιήσετε έναν σερβοκινητήρα περιορισμένης εμβέλειας ώστε να έχει συνεχή περιστροφή, το πρώτο πράγμα που πρέπει να κάνετε είναι να αφαιρέσετε το περίβλημα και, χρησιμοποιώντας μια ακολουθία παλμών 1,5 ms, να μετακινήσετε τον άξονα έτσι ώστε να τοποθετηθεί στο κεντρικό τμήμα και στη συνέχεια Διορθώστε το έτσι ώστε να μην περιστρέφεται άλλο. Εάν ο σερβοκινητήρας έχει μηχανικά στοιχεία που περιορίζουν την περιστροφή, αυτά πρέπει να κοπούν. Τώρα το ερώτημα είναι γιατί το ποτενσιόμετρο να παραμένει σταθερό; Ο λόγος για τον οποίο το ποτενσιόμετρο πρέπει να σταθεροποιηθεί είναι επειδή ο συγκριτής θα ανιχνεύει πάντα ότι ο άξονας παραμένει στην κεντρική θέση όλη την ώρα και εάν σταλεί ένας παλμός για να περιστραφεί σε μία από τις δύο κατευθύνσεις, ο κινητήρας θα περιστραφεί για να φτάσει σε αυτήν τη θέση και δεδομένου ότι το ποτενσιόμετρο δεν παρέχει πλέον το σήμα ανάδρασης για αυτή τη θέση, ο κινητήρας θα συνεχίσει να περιστρέφεται άπειρα.
Παράδειγμα Servomotor 180° και 360° Raspberry Pi Pico
Μέσω του περιβάλλοντος Thonny στη MicroPython, θα ζητήσουμε από τον χρήστη την τιμή σε μοίρες στις οποίες θέλει να μετακινήσει τον σερβοκινητήρα και θα εφαρμόσουμε αυτό το σήμα σε σερβοκινητήρα 180° και επίσης σε σερβοκινητήρα πλήρους περιστροφής 360°. Το τελευταίο πρέπει να περιστρέφεται προς την κατεύθυνση CW, CCW ή να σταματήσει.
Κώδικας:
from machine import Pin, PWM
import utime
def main():
#Ρυθμίστε το Servo σε 180
servo_180 = PWM(Pin(15))
servo_180.freq(50)
#Ρυθμίστε το 360 Servo
servo_360 = PWM(Pin(14))
servo_360.freq(50)
while True:
angle = float(input('Εισαγάγετε μια γωνία: '))
if angle >= 0 and angle <= 180:
duty = int((12.346*angle**2 + 7777.8*angle + 700000))
servo_180.duty_16(duty)
servo_360.duty_ns(duty)
else:
print('Εισαγάγετε μια γωνία μεταξύ 0 και 180')
if __name__ == '__main__':
main()
Παράδειγμα Servomotor 180° και 360° ESP8266
Θα επαναλάβουμε το ίδιο παράδειγμα, αλλά τώρα θα τροποποιήσουμε τον κώδικα ώστε να λειτουργεί με το ESP8266 NodeMCU. Σε αυτήν την περίπτωση πρέπει να διαμορφώσουμε το PWM ώστε να λειτουργεί με τη συνάρτηση duty() και επομένως πρέπει να μετατρέψουμε τον κύκλο λειτουργίας σε bit από 0 – 1023 στην περίοδο των 20ms.
Κώδικας:
from machine import Pin, PWM
import utime
def main():
#Ρυθμίστε το Servo σε 180
servo_180 = PWM(Pin(15))
servo_180.freq(50)
#Ρυθμίστε το 360 Servo
servo_360 = PWM(Pin(14))
servo_360.freq(50)
while True:
angle = float(input('Εισαγάγετε μια γωνία: '))
if angle >= 0 and angle <= 180:
#nanoseconds
duty = ((12.346*angle**2 + 7777.8*angle + 700000))
milliseconds
duty /= 1000000
#bits
duty = int(duty* 1023 / 20 )
servo_180.duty_16(duty)
servo_360.duty_ns(duty)
else:
print('Εισαγάγετε μια γωνία μεταξύ 0 και 180')
if __name__ == '__main__':
main()
1. Βασικός έλεγχος Servo
Σκοπός
Θα ελέγξουμε έναν σερβομηχανισμό εφαρμόζοντας μια έξοδο PWM.
Λειτουργικότητα
Η παρακάτω εικόνα δείχνει τον κύκλο λειτουργίας του σήματος PWM με το οποίο ενεργούμε στον σερβομηχανισμό. Οι χρόνοι ενεργοποίησης Ton και ο χρόνος απενεργοποίησης Toff διαμορφώνουν τον πλήρη κύκλο, η σχέση μεταξύ τους θα μας δώσει μια ιδέα για τη γωνία περιστροφής.

Διάγραμμα κύκλου λειτουργίας. Ο κύκλος λειτουργίας του σήματος PWM υπολογίζεται από την ακόλουθη εξίσωση.
Περίοδος = 1/Συχνότητα
Περίοδος= T on + T off
Κύκλος λειτουργίας= T ενεργοποιημένο / (T on +T off) * 100 (τοις εκατό)
Θα ορίσουμε τη σερβομηχανή μας με όνομα « servo » και ορίζουμε τη βασική συχνότητα του σήματος PWM στα 50 Hz και τις τιμές MIN_DUTY = 1600 και MAX_DUTY = 8400.
Πρόγραμμα
Θέλουμε ο σερβομηχανισμός να περιστρέφεται εναλλάξ μεταξύ της γωνίας που ισοδυναμεί με MIN_DUTY και MAX_DUTY με καθυστέρηση για κάθε θέση 1000 ms.
1. Φορτώνουμε πρώτα τις βιβλιοθήκες
from machine import Pin, PWM
import time
2. Στη συνέχεια ορίζουμε το όνομα του σερβομηχανισμού και την ακίδα του, ορίζουμε επίσης τη συχνότητα εργασίας και τις τιμές MIN_DUTY=1600 και MAX_DUTY=8400
MIN_DUTY = 1600
MAX_DUTY = 8400
servo = PWM(Pin(15)) # Συνδέστε τον σερβομηχανισμό στην ακίδα GP15
servo.freq(50)
3. Μέσα στο while τοποθετούμε τις δύο θέσεις και τις καθυστερήσεις αναμονής
servo.duty_u16(MIN_DUTY) # Ορισμός χρόνου κύκλου εργασίας.
time.sleep_ms(1000)
servo.duty_u16(MAX_DUTY)
time.sleep_ms(1000)
Ο κώδικας:
"""
Αυτό το παράδειγμα κώδικα χρησιμοποιεί: Maker Pi Pico:
Αναφορά: www.Cytron.io/p-maker-pi-pico
Αυτό το παράδειγμα κώδικα χρησιμοποιεί: Analog Micro Servo 9g (3V-6V)
Αναφορά: www.cytron.io/p-analog-micro-servo-9g-3v-6v """
"""
from machine import Pin, PWM
import time
# προσαρμόστε τις τιμές του κύκλου λειτουργίας που λειτουργούν
# για τον σερβοκινητήρα σας
MIN_DUTY = 1600
MAX_DUTY = 8400
servo = PWM(Pin(15)) # Συνδέστε τον σερβο με τον ακροδέκτη GP15
servo.freq(50) # Ρυθμίστε τη συχνότητα PWM στα 50 Hz
while True:
servo.duty_u16(MIN_DUTY) # Establecer ciclo de trabajo
time.sleep_ms(1000)
servo.duty_u16(MAX_DUTY)
time.sleep_ms(1000)
Ρύθμιση στην πράξη

2. Έλεγχος μέσω της βιβλιοθήκης “Servo”.
Σκοπός
Θα ελέγξουμε έναν σερβομηχανισμό, αλλά αυτή τη φορά θα το κάνουμε χρησιμοποιώντας μια βιβλιοθήκη που μας παρέχουν.
Λειτουργικότητα
Αυτό που θα κάνουμε βασικά είναι να καλέσουμε τις λειτουργίες που υλοποιούνται στη βιβλιοθήκη για να ελέγχουν τον σερβομηχανισμό. Θα χρησιμοποιήσουμε την κάρτα MAKER PI RP2040 και από τις εξόδους ελέγχου σερβομηχανισμού χρησιμοποιούμε την έξοδο GP15. Ο σερβομηχανισμός μας θα εκτελέσει μια κυκλική ακολουθία 4 γωνιακών θέσεων που θα εισαγάγουμε μέσω μιας συστοιχίας 4 δεδομένων. Φορτώνουμε τη βιβλιοθήκη “ myservo” στην αρχή του προγράμματός μας και χρησιμοποιούμε τη συνάρτηση “ xx.servoAngle(a) ” από αυτήν, η οποία συλλέγει την τιμή της γωνίας ως παράμετρο.
Πρόγραμμα
1. Πρώτα φορτώνουμε τις βιβλιοθήκες, συμπεριλαμβανομένης της βιβλιοθήκης myservo
from myservo import Servo
from machine import Pin
import array
import time
2. Διαμορφώνουμε την ακίδα του σερβοκινητήρα και την θέση του στις 0º
servo=Servo(15)
servo.ServoAngle(0)
3. Γράφουμε τη διάταξη των γωνιών.
int_array = array.array('i', [0, 20, 120, 60])
Στη συνέχεια ορίζουμε τη δομή while με έλεγχο σφάλματος και μέσα σε αυτήν καθιερώνουμε έναν βρόχο που διαβάζει τον πίνακα με την εντολή for. Μετά την τοποθέτηση σε κάθε γωνία κάνουμε τον σερβοκινητήρα να σταματά για χρόνο 4 δευτερολέπτων.
try: (control de error)
while True:
for a in int_array:
servo.ServoAngle(a)
time.sleep_ms(4000)
except:
servo.deinit()
Ο κώδικας:
#Ακολουθία ελέγχου θέσης ενός SERVO με τη βιβλιοθήκη myservo
from myservo import Servo
from machine import Pin
import array
import time
servo=Servo(15) #συνδεδεμένος με pin GP15
servo.ServoAngle(0) # Γωνία θέσης έναρξης = 0
int_array = array.array('i', [0, 20, 120, 60]) # Λίστα θέσεων
try: (control de error)
while True:
for a in int_array:
servo.ServoAngle(a)
time.sleep_ms(4000)
except:
servo.deinit()
Ρύθμιση στην πράξη

Ανάλυση και πρόταση δραστηριοτήτων
Προτείνουμε μια παραλλαγή του παραπάνω παραδείγματος. Η παραλλαγή συνίσταται στο γεγονός ότι ταυτόχρονα με τις στροφές θέσης, μπορούμε να εκτυπώσουμε τη γωνία περιστροφής στην κονσόλα του Thonny. Ας εκτελέσουμε μια ακολουθία με τις ακόλουθες τιμές
[0, 10, 20, 30, 40, 50, 180]
Θα εργαστούμε με το σέρβο που είναι συνδεδεμένο στο GP15 και ο χρόνος μεταξύ κάθε θέσης θα ρυθμιστεί στα 1000 ms.
Αυτό θα ήταν το πρόγραμμα.
#Ακολουθία ελέγχου θέσης ενός SERVO με τη βιβλιοθήκη myservo
from myservo import Servo
from machine import Pin
import array
import time
servo=Servo(15) #συνδεδεμένος με pin GP15
servo.ServoAngle(0) # Γωνία θέσης έναρξης = 0
int_array = array.array('i', [0, 10, 20, 30, 40, 50, 180]) # Λίστα θέσεων
try: (έλεγχος σφαλμάτων)
while True:
for a in int_array:
servo.ServoAngle(a)
time.sleep_ms(4000)
except:
servo.deinit()
3. Έλεγχος σερβοκινητήρα με το Maker Pi RP2040
Σκοπός
Με αυτό το παράδειγμα, θέλουμε να ελέγξουμε τέσσερα σερβο χρησιμοποιώντας την κάρτα MAKER PI RP2040.
Λειτουργικότητα
Θα συνδέσουμε τέσσερα σερβο στις ακίδες GP15, GP14, GP13 και GP12 που θα ελέγξουμε ταυτόχρονα.
Θέλουμε να ελέγξουμε την περιστροφή μέσω δύο πλήκτρων, αυτών που βρίσκονται στην ίδια την κάρτα GP20 και GP21 με τέτοιο τρόπο ώστε με καθένα από αυτά να κάνουμε τα σερβο να κινούνται και προς τις δύο κατευθύνσεις περιστροφής.
Η περιστροφή θα είναι 1º για κάθε φορά που πατάμε το αντίστοιχο κουμπί. Ο χρόνος καθυστέρησης στο κουμπί για την αποφυγή αναπήδησης θα είναι 100 ms (time.sleep(0.1))
Πρόγραμμα
1. Πρώτα φορτώνουμε τις βιβλιοθήκες, συμπεριλαμβανομένης της βιβλιοθήκης myservo
import machine
import utime
import time
2. Διαμορφώνουμε τις ακίδες των σερβοκινητήρων και τα δυο κουμπιά (πλήκτρα).
servo=Servo(15)
servo.ServoAngle(0)
button1 = machine.Pin(20, machine.Pin.IN, machine.Pin.PULL_DOWN)
button2 = machine.Pin(21, machine.Pin.IN, machine.Pin.PULL_DOWN)
# διαμορφώνουμε τις ακίδες των σερβοκινητήρων
pwm1 = machine.PWM(machine.Pin(12))
pwm2 = machine.PWM(machine.Pin(13))
pwm3 = machine.PWM(machine.Pin(14))
pwm4 = machine.PWM(machine.Pin(15))
3. Διαμορφώνουμε τις παραμέτρους των σερβο, της συχνότητας και του κύκλου λειτουργίας.
pwm1.freq(50)
pwm2.freq(50)
pwm3.freq(50)
pwm4.freq(50)
angle = 0.0
min_dutycycle = 2200
max_dutycycle = 8300
dutycycle = 0
4. Στη συνέχεια, ορίζουμε τη δομή while στην οποία αυτό που κάνουμε είναι να ελέγχουμε το πάτημα των κουμπιών Button1 GP20 και Button2 GP21 με τη βοήθεια δύο if υπό όρους. Η μεταβλητή που θα αυξηθεί ή θα μειωθεί θα είναι η μεταβλητή “angle”. Για να μετατρέψουμε αυτήν την τιμή στην πραγματική μεταβλητή που θα συλλέξει ο κύκλος λειτουργίας του σερβο, το κάνουμε χρησιμοποιώντας τον τύπο:
dutycycle = int(((max_dutycycle – min_dutycycle) / 180) * angle) + min_dutycycle
Στην αρχή των οδηγιών που περιλαμβάνονται στον βρόχο while θα βάλουμε μια οδηγία για την εκτύπωση της τιμής της γωνίας
print(“Γωνία”,angle,”Κυκλος λειτουργίας”, dutycycle)
Ο κώδικας:
#Έλεγχος τεσσάρων 4 σερβοκινητήρων με την κάρτα MAKER Pi RP2040
import machine
import utime
import time
# διαμορφώνουμε τις ακίδες των σερβοκινητήρων
button1 = machine.Pin(20, machine.Pin.IN, machine.Pin.PULL_DOWN)
button2 = machine.Pin(21, machine.Pin.IN, machine.Pin.PULL_DOWN)
# Διαμορφώνουμε τις παραμέτρους των σερβο, συχνότητα και κύκλο λειτουργίας.
pwm1 = machine.PWM(machine.Pin(12))
pwm2 = machine.PWM(machine.Pin(13))
pwm3 = machine.PWM(machine.Pin(14))
pwm4 = machine.PWM(machine.Pin(15))
pwm1.freq(50)
pwm2.freq(50)
pwm3.freq(50)
pwm4.freq(50)
angle = 0.0
min_dutycycle = 2200
max_dutycycle = 8300
dutycycle = 0
while True:
print("Γωνία",angle,"Κυκλος λειτουργίας", dutycycle)
# Διαβάστε τιμές από τα πλήκτρα.
if button1.value():
angle += 5 time.sleep(0.1)
if button2.value():
angle -= 5 time.sleep(0.1)
# Περιορίστε τη γωνία στην περιοχή 0 έως 180 μοίρες.
if angle > 180:
angle = 180.0
if angle < 0:
angle = 0.0
dutycycle = int(((max_dutycycle - min_dutycycle) / 180) * angle) + min_dutycycle
pwm1.duty_u16(dutycycle) #Μετακινεί το Servo που είναι συνδεδεμένο στο GP12
pwm2.duty_u16(dutycycle) #Μετακινεί το Servo που είναι συνδεδεμένο στο GP13
pwm3.duty_u16(dutycycle) #Μετακινεί το Servo που είναι συνδεδεμένο στο GP14
pwm4.duty_u16(dutycycle) #Μετακινεί το Servo που είναι συνδεδεμένο στο GP15
utime.sleep(0.01)
Ρύθμιση στην πράξη

Η εμφάνιση του Thonny

Ανάλυση και πρόταση δραστηριοτήτων
Προτείνεται μια παραλλαγή του προηγούμενου προγράμματος στην οποία θέλουμε το σερβο να εκτελεί μια κίνηση μπρος-πίσω ταξιδεύοντας σεένα τόξο ισοδύναμο με 120º.
Θέλουμε το σερβο να περιστρέφεται δεξιόστροφα σε βήματα των 1º μέχρι να φτάσει τις 120º. Τότε θέλουμε η στροφή να είναι η ίδια αλλά προς την αντίθετη κατεύθυνση.
Θέλουμε ο χρόνος μεταξύ των βημάτων να είναι 15 ms (time.sleep_ms(15) )

Το πρόγραμμα
from myservo
import Servo
import time
servo=Servo(15)
servo.ServoAngle(0)
time.sleep_ms(1000)
try:
while True:
for i in range(0, 120, 1):
servo.ServoAngle(i)
time.sleep_ms(15)
for i in range(120, 0, -1):
servo.ServoAngle(i)
time.sleep_ms(15)
except:
servo.deinit()
Σύνδεση

4. Έλεγχος σερβοκινητήρα με ποντεσιόμετρο
Σκοπός
Ελέγξτε τη γωνία περιστροφής ενός σερβο με τη βοήθεια ενός ποτενσιόμετρου.
Λειτουργικότητα
Πρόκειται για τη μετατροπή της περιστροφής του ποτενσιόμετρου μας σε μια τιμή που θα στείλουμε στη συνάρτηση περιστροφής του σερβο ως παράμετρο. Θα χρησιμοποιήσουμε ένα ποτενσιόμετρο συνδεδεμένο στον ακροδέκτη GP27 της πλακέτας MAKER PI RP2040. Ο σερβοκινητήρας θα συνδεθεί στους ακροδέκτες που αντιστοιχούν στην έξοδο GP15. Για τον έλεγχο του σερβο θα χρησιμοποιήσουμε τη βιβλιοθήκη “myservo”. Η τιμή ανάγνωσης του αναλογικού καναλιού GP27 πρέπει να αντιστοιχιστεί στην τιμή από 0 έως 180, καθώς θα περιστρέψουμε το σερβο σε αυτό το εύρος τιμών, γι ‘αυτό καταφεύγουμε σε έναν απλό υπολογισμό:
angle = (adcValue * 180) / 65535
Η συνάρτηση που μετακινεί τη γωνία του σερβοκινητήρα είναι:
servo. ServoAngle(0)
Πρόγραμμα
Η ολοκλήρωση του προγράμματος θα προσαρμοστεί στην ακόλουθη σειρά συγγραφής του προγράμματος.
1. Πρώτα φορτώνουμε τις βιβλιοθήκες
from myservo import Servo
from machine import ADC, Pin
import time
2. Ορίστε τις ακίδες που θα χρησιμοποιηθούν και ρυθμίστε τη γωνιακή θέση σε 0º
servo=Servo(15)
servo.ServoAngle(0)
adc=ADC(27)
3. Θα ελέγξουμε σφάλματα με τη δομή:
try:
.....
Except:
Servo.deinit()
4. Στη δομή while θα διαβάσουμε την τιμή του αναλογικού καναλιού και θα τη συσχετίσουμε με την τιμή “angle” για να τη μεταβάλλουμε από 0º έως 180º. Συμπεριλαμβάνουμε καθυστέρηση και εκτύπωση της τιμής μεταβλητής γωνίας στην κονσόλα του Thonny.
Πλήρες πρόγραμμα
from myservo import Servo
from machine import ADC, Pin
import time
servo=Servo(15)
servo.ServoAngle(0)
adc=ADC(27)
try:
while True:
adcValue = adc.read_u16()
angle = int((adcValue * 180) / 65535)
servo.ServoAngle(int(angle))
time.sleep_ms(50)
print(angle)
except:
servo.deinit()
Σύνδεση

Ανάλυση και πρόταση δραστηριοτήτων
