Α. Βασική Χρήση κινητήρα - Servo με τη βιβλιοθήκη <Servo.h> (συνδέω τα 3 καλωδιάκια του servo στο σήμα, στο + (κόκκινο) και στο - (μαύρο, καφέ, κλπ)) Με 4 βασικές εντολές μπορώ να χειριστώ οποιοδήποτε servo. (1) Εισαγωγή της βιβλιοθήκης στην αρχή του sketch (2) Δήλωση - ονομασία Servo μετά την εισαγωγή της βιβλιοθήκης (3) Δήλωση ακίδας (Pin) σήματος του servo-κινητήρα στη ρουτίνα setup() myservo.attach(10); // σε ποιά ακίδα το συνδέσαμε (4) Κίνηση Σέρβο myservo.write(100); // Μοίρες στις οποίες θέλω να μετακινηθεί εδώ 100 παράδειγμα βασικού κώδικα // (1) // (2) void setup(){ myservo.attach(10); // (3) myservo.write(100); // (4)
Β. Χρήση κινητήρα - Servo με τη βοήθεια μιας μεταβλητής για να κάνει σάρωμα δεξιά-αριστερά Κώδικας: // εισαγωγή βιβλιοθήκης για τα servo int spin = 10; // μεταβλητή ΑΚΕΡΑΙΑ spin που δηλώνει το pin που συνέδεσα το servo // δήλωση σέρβο myservo.attach(spin); // το servo στο Pin Spin (δλδ 10) myservo.write(0); // Πήγαινε στη θέση 0 μοίρες int moires; // δηλώνω μια μεταβλητή ακέραια for (moires=0; moires <=180; moires=moires+1) { myservo.write(moires); for (moires=180; moires >=0; moires=moires-1) { myservo.write(moires);
Γ. Χρήση κινητήρα - Servo με χρήση ποτενσιομέτρου = μεταβλητή αντίσταση Νέα εντολή map = αντιστοίχιση τιμών κώδικας myservo.attach(10); pinmode(a1, INPUT); // χρήση pin A1 για είσοδο = διαβάζω τιμές int potval,sval; // μεταβλητές potval = analogread(a1); // διαβάζω την τιμή απο τη θέση του σέρβο 0-1023 sval = map(potval, 0, 1023, 0, 180); // αντιστοιχώ σε 0-180 με την εντολή map myservo.write(sval); ΕΝΑΛΛΑΚΤΙΚΟΣ ΚΩΔΙΚΑΣ ΜΕ ΜΕΤΑΒΛΗΤΕΣ ΓΙΑ ΕΥΚΟΛΗ ΑΛΛΑΓΗ PINs int spin = 10; int potpin = A1; // το pin του ποτενσιόμετρου Servo s; int potval = 0; // η τιμή του ποτενσιόμετρου int sval = 0; s.attach(spin); pinmode(potpin, INPUT); potval = analogread(potpin); sval = map(potval, 0, 1023, 0, 180); s.write(sval);
Δ1. Σειριακή επικοινωνία arduino με Η/Υ ή άλλο μηχάνημα Σειριακή επικοινωνία = επικοινωνία χαρακτήρα χαρακτήρα. Πχ USB, Bluetooth κλπ Νέες εντολές: (1) στην ρουτίνα setup αρχικοποιώ την σειριακή επικοινωνία με την εντολή Serial.begin(9600); // 9600 = ταχύτητα εδώ 9600 χαρακτήρες / δευτερόλεπτο (2) στη συνέχεια με την εντολή Serial.print(); ή Serial.println(); στέλνω δεδομένα απο το arduino σε άλλη συσκευή. Η διαφορά των 2 εντολών είναι ότι η Serial.print(); μετά το τέλος του μηνύματος δεν αλλάζει γραμμή, ενώ η Serial.println(); αλλάζει. Serial.print(Χ); // στέλνω στη σειριακή θύρα την τιμή της Χ χωρίς να αλλάξω γραμμή Serial.println("gonia 0"); // στέλνω στη σειριακή θύρα το μήνυμα gonia 0 κώδικας int servopin = 10; // συνδέω το σέρβο στο pin 7 int myangle; // γωνία του σέρβο = ακέραιος αριθμός (int) από 0... 180 myservo.attach(servopin); // ή myservo.attach(10); Serial.begin(9600); myservo.write(0); // to servo στις 0 μοίρες Serial.println("gonia 0"); // μήνυμα αποστολή στη σειριακή θύρα delay(2000); // πέρασμα απο όλες τις θέσεις 0-180 for (myangle=0; myangle<=180; myangle++) { myservo.write(myangle); Serial.print("gonia "); // μήνυμα αποστολή στη σειριακή θύρα Serial.println(myAngle); // αποστολή τιμής μιας μεταβήτής στη σειριακή θύρα myservo.write(0); delay(1000);
Δ2. Σειριακή επικοινωνία arduino με Η/Υ ή άλλο μηχάνημα και είσοδος τιμών Νέες εντολές IF = ΑΝ = επιλογή. (το ίδιο κύκλωμα με την άσκηση Δ1) κώδικας: // χειρισμός του σέρβο μέσω σειριακής επικοινωνίας απο το πληκτρολόγιο // πατάμε ένα ψηφίο 0-9 το σέρβο πάει σε 6 = 60 μοίρες κλπ int servopin = 10; // συνδέω το σέρβο στο pin 10 int myangle; // γωνία του σέρβο = ακέραιος αριθμός (int) από 0... 180 char timi; // μεταβλητή χαρακτήρας myservo.attach(10); // ή myservo.attach(servopin); Serial.begin(9600); if (Serial.available() > 0) { // αν υπάρχουν δεδομένα διαθέσιμα timi = Serial.read(); // διάβασε τον χαρακτήρα απο το πληκτρολόγιο int arithmos = timi - '0'; // για να μετατρέψω έναν χαρακτήρα σε αριθμό - '0'; myservo.write(arithmos*10); // στείλε το servo στην επιθυμητή γωνία Serial.print("degrees "); // γράψε στη σειριακή οθόνη το μήνυμα Serial.println(arithmos*10);