Εφαρμογή στην πράξη
Ήρθε η στιγμή για να δούμε πως συνδέεται και πώς λειτουργεί ένας σερβοκινητήρας.
Θα χρειαστούν κάποια υλικά:
1. Ένα σερβοκινητήρας π.χ. MG995

2. Μια πλακέτα Arduino UNO ή συμβατό

3. Μια πλακέτα Arduino UNO κενή επάνω στην οποία θα γίνει το κύκλωμα των συνδέσεων και στη συνέχεια θα κουμπώσει στην πλακέτα του Arduino.

4. Ένα τροφοδοτικό 5-7V DC για να τροφοδοτήσει το σερβοκινητήρα.
5. Ένα ποτενσιόμετρο 10Κ
Θα χρειαστούν επίσης κάποια εργαλεία (κολλητήρι κοφτάκι κλπ), μερικά μέτρα καλώδιο λεπτό και λίγη εμπειρία κατασκευών.
Για να προγραμματίσετε το σύστημα και να λειτουργήσει θα πρέπει να έχετε εγκατεστημένο το Ardouino IDE και μικρή εμπειρία μαζί του. Τόσο το υλικό όσο και το λογισμικό είναι OPEN, βλέπε
https://el.wikipedia.org/wiki/Υλισμικό_ανοικτής_πηγής
https://el.wikipedia.org/wiki/Λογισμικό_ανοικτού_κώδικα
Κατασκευή
Στην κενή πλακέτα Arduino UNO κατασκευάζω το κύκλωμα σύνδεσης των υλικών. Ένα παράδειγμα συνδεσμολογίας βλέπετε στο https://www.arduino.cc/en/Tutorial/Knob στο οποίο έχω κάνει τις απαραίτητες τροποποιήσεις.
Στη φωτογραφία που ακολουθεί βλέπετε τελειωμένη την κατασκευή. Εδώ χρησιμοποιώ δύο σερβοκινητήρες και δύο ποτενσιόμετρα, γιατί η κατασκευή έχει και μελλοντική χρήση. Οι σερβοκινητήρες είναι τοποθετημένοι έτσι ώστε οι κινήσεις να γίνονται σε δύο κάθετα μεταξύ τους επίπεδα. Αυτή τη λεπτομέρεια θα την χρησιμοποιήσουμε σε επόμενη κατασκευή μας.
Στο τέλος του άρθρου σας έχω ένα βίντεο όπου βλέπετε την κατασκευή σε λειτουργία.

Το κάθε ποτενσιόμετρο έχει τρία pin. Τα δύο ακραία συνδέονται στη γείωση GND και στα 5V αντίστοιχα. Ανάλογα με τη θέση περιστροφής του ποτενσιόμετρου το μεσαίο θα έχει δυναμικό μεταξύ 0 και 5V. Το μεσαίο pin του ποτενσιόμετρου συνδέεται στην αναλογική είσοδο Α0 του Arduino. Οι τιμές που θα διαβάζει το πρόγραμμα για την είσοδο Α0 θα είναι μεταξύ 0 και 1023.
Ο σερβοκινητήρας χρειάζεται συνήθως περισσότερο ρεύμα από αυτό μπορεί να δώσει η τροφοδοσία του Arduino από μια USB θύρα. Για το λόγο αυτό χρησιμοποιούμε το πρόσθετο τροφοδοτικό. Η γείωση αυτού του τροφοδοτικού θα συνδεθεί με το GND του Arduino. Καλό θα είναι μεταξύ της γείωσης και του θετικού του τροφοδοτικού να συνδεθεί ένας πυκνωτής 1000μF, που θα εξασφαλίζει τη μεγάλη απαίτηση σε ρεύμα κατά την εκκίνηση του κινητήρα.
Οι σερβοκινητήρες έχουν τρία καλώδια: ρεύμα, γείωση και σήμα. Το καλώδιο τροφοδοσίας είναι συνήθως κόκκινο και θα πρέπει να συνδεθεί στο 5-7V του τροφοδοτικού. Το καλώδιο γείωσης είναι συνήθως μαύρο ή καφέ και θα πρέπει να συνδεθεί σε μια ακίδα γείωσης στην πλακέτα Arduino. Η ακίδα σήματος είναι συνήθως κίτρινη, πορτοκαλί ή λευκή και θα πρέπει να συνδεθεί με μια ψηφιακή ακίδα στην πλακέτα Arduino. Στη δική μας κατασκευή θα συνδεθεί στο ψηφιακό pin 4.
Προγραμματισμός του Arduino
Το πρόγραμμα που σας παρουσιάζω κινεί δύο σερβοκινητήρες με τη χρήση δύο ποτενσιόμετρων όπως δείχνει και το video. Η κατασκευή έγινε με δύο μηχανισμούς σερβοκινητήρων γιατί θα χρησιμοποιηθεί και σε επόμενο πείραμα.
Το Arduino UNO δίνει τη δυνατότητα για παραγωγή PWM σήματος στα pin 3,5,6,9,10 και 11. Εμείς χρησιμοποιούμε τη βιβλιοθήκη Servo.h για να απλοποιήσουμε τον προγραμματισμό για την παραγωγή του PWM σήματος, επίσης με τον τρόπο που χειρίζεται αυτή η βιβλιοθήκη την παραγωγή PWM σήματος μπορούμε χρησιμοποιήσουμε όλα τα ψηφιακά pin για την δημιουργία PWM σήματος.
/*
έλεγχος της θέσης δύο σερβοκινητήρων με τη χρήση δύο μεταβλητών αντιστάσεων – ποτενσιομέτρων
Μανώλης Αριστοβουλίδης 10/2021
*/
#include <Servo.h>
Servo servo1; // δημιουργία ενός servo object για τον έλεγχο του servo
Servo servo2;
int potpin1 = A0; // αναλογικό pin για τη σύνδεση ποτενσιομέτρου
int potpin2 = A1; // αναλογικό pin για τη σύνδεση ποτενσιομέτρου
int val1; // μεταβλητή για την ανάγνωση της τιμής του αναλογικό pin
int val2; // μεταβλητή για την ανάγνωση της τιμής του αναλογικό pin
void setup() {
servo1.attach(4); // κάνει προσάρτηση του servo στο pin 4 του servo object
servo2.attach(5); //κάνει προσάρτηση του servo στο pin 5 του servo object
Serial.begin(9600); //αρχικοποιεί τη σειριακή επικοινωνία
}
void loop() {
val1 = analogRead(potpin1); // διαβάζει την αναλογική τιμή (τιμές μεταξύ 0 και 1023)
val2 = analogRead(potpin2); // διαβάζει την αναλογική τιμή (τιμές μεταξύ 0 και 1023)
val1 = map(val1, 0, 1023, 0, 180); // μεταροπή σε κλίμακα για το servo (τιμές μεταξύ 0 και 180)
val2 = map(val2, 0, 1023, 0, 180); // μεταροπή σε κλίμακα για το servo (τιμές μεταξύ 0 και 180)
servo1.write(val1); // ρυθμίζει τη θέση του servo στην τιμή της κλίμακας
servo2.write(val2); // ρυθμίζει τη θέση του servo στην τιμή της κλίμακας
Serial.print("val1 : ");
Serial.print(val1);
Serial.print(" - val2 : ");
Serial.println(val2);
delay(20); // περιμένει για την ολοκλήρωση της κίνησης του servo
}
Τον κώδικα μπορείτε να τον κατεβάσετε από εδώ https://avlos.gr/wpress/download/servo
Στο video που ακολουθεί βλέπετε το μηχανισμό σε λειτουργία https://youtu.be/BCxv9VGqhQk