Arduino: Φτιάξτε ένα ρομπότ με ανιχνευτή εμποδίων

dimitris | Τετ, 09/24/2014 - 18:37 | 28' | 2

Δείτε μερικές πραγματικά όμορφες χρήσεις αυτής της φανταστικής πλακέτας Arduino και φτιάξτε ένα αυτόνομο ρομπότ με ανιχνευτή εμποδίων!

Του Γιώργου Χατζηκυριάκου

arduino-robot-plagia-linuxinside.jpg

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

Στο κείμενο που ακολουθεί θα δούμε τρεις μικρές εφαρμογές, που έχουν σχέση με την αρχική μου σκέψη. Η πρώτη έχει να κάνει με ανίχνευση κάποιου αντικειμένου και την ειδοποίησή με την ανάλογη έξοδο (π.χ. ανάβοντας led συγκεκριμένου χρώματος). Στη δεύτερη εφαρμογή, θα υλοποιήσουμε ένα μικρό ρομπότ με δυο σερβοκινητήρες, το οποίο θα κινείται προς μια κατεύθυνση και μόλις ανιχνεύσει κάποιο εμπόδιο θα κάνει μια κίνηση προσπαθώντας να το αποφύγει. Τέλος, στην τρίτη εφαρμογή θα προσπαθήσουμε να κατασκευάσουμε ένα αισθητήρα επαφής για το ρομπότ με τον οποίο θα αποφεύγει εμπόδια, μόλις έρθει σε επαφή με αυτά. Τα υλικά που χρησιμοποιήσαμε δεν ξεπερνούσαν τα 35 δολάρια Αμερικής και τα προμηθευτήκαμε από την εταιρία Parallax.

Πριν προχωρήσουμε στις εφαρμογές ας εξηγήσουμε ορισμένα πράγματα σχετικά με τη διαμόρφωση μήκους κύματος (“Pulse-width modulation” ή PWM) , την οποία θα χρησιμοποιήσουμε στα παραδείγματα που ακολουθούν. Το PWM χρησιμοποιεί τετραγωνικό κύμα που το μήκος του παλμού του διαμορφώνεται και σαν αποτέλεσμα έχει την μεταβλητότητα της μέσης τιμής της κυματομορφής (waveform). Στην ουσία το PWM χρησιμοποιεί έναν μετρητή ο οποίος αυξάνεται περιοδικά και επαναφέρεται στην αρχική του κατάσταση μετά το τέλος της κάθε περιόδου . Όταν η τιμή του μετρητή είναι μεγαλύτερη από την καθορισμένη τιμή τότε η έξοδος PWM αλλάζει κατάσταση από HIGH σε LOW (ή από LOW σε HIGH). Επαναλαμβάνοντας τώρα αυτή την περίοδο τότε δημιουργείται ένας παλμός συγκεκριμένης συχνότητας.

Ένας τύπος που ίσος φανεί χρήσιμος σε κάποιες εφαρμογές είναι αυτός που συσχετίζει τη συχνότητα (σε hertz) με την περίοδο (σε microsecond) δηλαδή: f=1/T ή T=1/f

Το PWM βρίσκει διάφορες εφαρμογές όπως: στις τηλεπικοινωνίες, στη μεταγωγή του ρεύματος, ρύθμιση τάσης καθώς και στην παραγωγή ηχητικών εφέ ή ενίσχυση του ήχου. Στο Arduino υπάρχουν έξι PWM pins, στα ψηφιακά 3,5,6,9,10,11.

ΕΦΑΡΜΟΓΗ 1: Ανίχνευση εμποδίων

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

Εικόνα 1: Ανάκλαση ενός σήματος υπέρυθρων σε αντικείμενο.

Στο παράδειγμα μας χρησιμοποιήσαμε πομπό που μπορεί να στείλει τετραγωνικό παλμό συχνότητας 38,5kHz (38500 Hz) και ένα δέκτη που μπορεί να ανιχνεύσει αυτό το σήμα. Αυτά τα εξαρτήματα μπορούμε να τα προμηθευτούμε από online καταστήματα στο διαδίκτυο, από το κοντινότερο καταστήματα ηλεκτρονικών  η ακόμα να τα αφαιρέσουμε από χαλασμένους δέκτες ή χειριστήρια (remote controls)τηλεοράσεων,  DVD Players ή στερεοφωνικών συστημάτων που μπορεί να έχουμε. Επίσης υπάρχουν και έτοιμα modules πομποδέκτη υπέρυθρων ειδικά σχεδιασμένα για εφαρμογή σε ρομποτικά συστήματα.

Τα υλικά που χρησιμοποιήσαμε στην υλοποίηση της πρώτης εφαρμογής είναι τα εξής :

  • Ένα Arduino Diecimila.
  • Δυο LED (διαφορετικού χρώματος... κόκκινο-πράσινο).
  • Έναν Πομπό υπέρυθρων (Parallax IR Transmitter Assembly Kit).
  • Ένα Δέκτη υπέρυθρων (Panasonic PNA4601M).
  • Μια αντίσταση 220Ω (κόκκινο – κόκκινο - καφέ).
  • Μια αντίσταση 1ΚΩ (καφέ – μαύρο - κόκκινο).

Η συνδεσμολογία του κυκλώματος που ακολουθήσαμε για την πρώτη εφαρμογή μας είναι αυτό στην εικόνα 2.

Εικόνα 2: Το κύκλωμα σύνδεσης των δυο led καθώς και του πομποδέκτη υπερύθρων.

Πριν ξεκινήσουμε τις συνδέσεις πρέπει να σιγουρευτούμε ότι η πλακέτα δεν είναι συνδεδεμένη με το καλώδιο USB η άλλη μορφή τροφοδοσίας. Μετά κάνουμε τα εξής:

  1. Το πράσινο LED (+) το συνδέουμε στο  digital pin 6 του Arduino.
  2. Το κόκκινο LED (+) το συνδέουμε στο  digital pin 7.
  3. Τα ποδαράκια (-) των LED τα συνδέουμε στη γείωση (GND)
  4. Το πομπό υπέρυθρων (+) το συνδέουμε στην αντίσταση 1ΚΩ και στη συνέχεια στο digital pin 11 (PWM), ενώ το (-) στο GND.
  5. Το δέκτη υπέρυθρων (out) το συνδέουμε στην αντίσταση 220Ω και στη συνέχεια στο digital pin 8 του Arduino, ενώ τα ποδαράκια (+) και (-) τα συνδέουμε στα 5 Volt και GND αντίστοιχα.

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

Εικόνα 3: Η πρώτη εφαρμογή...

ΠΡΟΣΟΧΗ

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

Ο κώδικας με τον οποίο θα προγραμματίσουμε το Arduino είναι ο εξής:

#include <FrequencyTimer2.h>
int pin_ir_led = 11;
int pin_ir_rec = 8;
int pin_led_1 = 6;
int pin_led_2 = 7;
void setup(){
pinMode(pin_ir_led, OUTPUT);
FrequencyTimer2::setPeriod(38500L);
FrequencyTimer2::enable();
pinMode(pin_led_1, OUTPUT);
pinMode(pin_led_2, OUTPUT);
pinMode(pin_ir_rec, INPUT);
}

void loop(){
  while(digitalRead(pin_ir_rec) == LOW){
   digitalWrite(pin_led_1,HIGH);
   digitalWrite(pin_led_2,LOW);
   delay(2000);
  }
   digitalWrite(pin_led_1,LOW);
   digitalWrite(pin_led_2,HIGH);
}

Για να πετύχουμε ακριβώς τη συχνότητα που θα στείλει ο πομπός στο δέκτη χρησιμοποιήσαμε την βιβλιοθήκη  FrequencyTimer2 την οποία μπορούμε να κατεβάσουμε από το επίσημο site του Arduino και η οποία χρησιμοποιεί τον hardware Timer2 του μικροελεγκτή δεσμεύοντας τα PWM pin 11 και 3 (στον atmega168) για έξοδο του σήματος.

Στο παράδειγμα μας συνδέσαμε το πομπό υπέρυθρων στο PWM pin 11 και χρησιμοποιήσαμε την δήλωση FrequencyTimer2::setPeriod (38500L) για να ορίσουμε την συχνότητα του σήματος. Φυσικά αν ξέραμε την περίοδο σε microseconds και όχι σε Ηertz  θα μπορούσαμε να το δηλώσουμε σαν FrequencyTimer2::setPeriod(25.9) αλλά χωρίς τον χαρακτήρα “L” στο τέλος.

Στη συνέχεια με την δήλωση:

  while(digitalRead(pin_ir_rec) == LOW){
    ...
  }

Ελέγχουμε αν η είσοδος στο pin 8 του μικροελεγκτή στο οποίο συνδέσαμε τον δέκτη έχει την τιμή LOW, όπου αυτό σημαίνει ότι ανιχνεύθηκε κάποιο σήμα από το δέκτη.

Αυτό συμβαίνει για τον λόγο ότι ο δέκτης περιλαμβάνει ένα τρανζίστορ που λειτουργεί σαν διακόπτης. Σε περίπτωση απουσίας ακτίνων ο διακόπτης παραμένει ανοικτός, υλοποιώντας ένα κύκλωμα όπου το pin 8 του μικροελεγκτή,όταν συνδέεται με την τάση τροφοδοσίας (5V) έχει τιμή HIGH. Αντίθετα όταν ο δέκτης δεχτεί υπέρυθρες ακτίνες, ο διακόπτης κλείνει, συνδέοντας το κύκλωμα με την γείωση. Μόλις γίνει αυτό τότε ανάβει το κόκκινο LED για δυο δευτερόλεπτα, αλλιώς  ανάβει το πράσινο.

Η εντολή digitalRead() χρησιμεύει για να “διαβάσουμε” τη τιμή του pin τη συγκεκριμένη στιγμή και επιστρέφει μια Boolean τιμή (True/False), ενώ η εντολή digitalWrite(pin_led_1,LOW) δίνει τιμή LOW ή HIGH στο pin εξόδου που δηλώσαμε, Η τιμή LOW αναλογεί στο λογικό 0 (0 Volts) ενώ η τιμή HIGH αναλογεί στο λογικό 1 (5 Volts).

Αν όλα πήγαν καλά τότε παρατηρούμε ότι πλησιάζοντας κάποιο αντικείμενο απέναντι από τον πομπό/δέκτη ανάβει το ανάλογο LED.

ΕΦΑΡΜΟΓΗ 2: Κίνηση

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

Για την υλοποίηση της εφαρμογής χρησιμοποιήσαμε τη βιβλιοθήκη ServoTimer1 την οποία και αυτή μπορούμε να κατεβάσουμε από το επίσημο site του Arduino και η οποία χρησιμοποιεί τον hardware Timer1 του μικροελεγκτή και δεσμεύει τα PWM pin 9 και 10 (στον atmega168) για έξοδο.

Σε αυτό το σημείο να σημειώσουμε ότι τα σερβοκινητήρες είναι κινητήρες ακριβείας, που η κίνηση τους εξαρτάται από ένα παλμό που τους στέλνουμε ο οποίος έχει μεταβλητό πλάτος, όπως βλέπουμε στην εικόνα 4.

Εικόνα 4: Η κίνηση των servo εξαρτάται από ένα παλμό μεταβλητού πλάτους.

Για να κινηθεί ο σερβοκινητήρας προς τα αριστερά (0 μοίρες) πρέπει να του ορίσουμε παλμό πλάτους 1ms. Για να κινηθεί προς τα δεξιά (180 μοίρες) πρέπει να του ορίσουμε παλμό πλάτους 2ms, ενώ για να μείνει στάσιμος (90 μοίρες) του ορίσουμε παλμό πλάτους 1.5ms. Ο σερβοκινητήρας περιμένει ένα παλμό κάθε 20ms, ο χρόνος αυτός αποτελεί και την περίοδο του σήματος που στέλνουμε. Οι χρόνοι πλάτους και περιόδου θα μας βοηθήσουν στη περίπτωση που θέλουμε να δημιουργήσουμε για κάποιο λόγο το σήμα χειροκίνητα.

Φυσικά αυτοί οι χρόνοι μπορούν να διαφέρουν από ένα σερβοκινητήρα σε κάποιο άλλο οπότε η βιβλιοθήκη μας παρέχει τη δυνατότητα να ορίσουμε το πλάτος του παλμού που θα χρησιμοποιήσουμε με τις εντολές setMaximumPulseWidth(microseconds) και setMinimumPulseWidth(microseconds) ορίζοντας το μέγιστο και ελάχιστο πλάτος του παλμού σε microseconds (1 millisecond (ms) = 1000 microseconds (µs)).

Τα υλικά που χρησιμοποιήσαμε στην δεύτερη εφαρμογή είναι :

  • Ένα Arduino Diecimila.
  • Δυο σερβοκινητήρες (Parallax Standard Servo).
  • Έναν Πομπό υπέρυθρων (Parallax IR Transmitter Assembly Kit).
  • Ένα Δέκτη υπέρυθρων (Panasonic PNA4601M).
  • Μια αντίσταση 220Ω.
  • Μια αντίσταση 1ΚΩ.

Το κύκλωμα που ακολουθήσαμε για την δεύτερη εφαρμογή είναι αυτό που φαίνεται στην εικόνα 5 (αριστερά).

Εικόνα 5: Το κύκλωμα σύνδεσης των δυο servo καθώς και του διακόπτη για το μουστάκι.

Οι συνδέσεις του πομπού και δέκτη υπερύθρων παραμένουν ίδιες όπως και στην πρώτη εφαρμογή.

  1. Το πρώτο σερβοκινητήρα (pulse) το συνδέουμε στο  digital pin 9 (PWM) του Arduino.
  2. Το δεύτερο σερβοκινητήρα (pulse) το συνδέουμε στο  digital pin 10 (PWM).
  3. Τα ποδαράκια (+) και (-) των δυο σέρβο (κόκκινο και μαύρο) τα συνδέουμε στα 5 Volt και GND αντίστοιχα
  4. Το πομπό υπέρυθρων (+) το συνδέουμε στην αντίσταση 1ΚΩ και στη συνέχεια στο digital pin 11 (PWM), ενώ το (-) στο GND.
  5. Το δέκτη υπέρυθρων (out) το συνδέουμε στην αντίσταση 220Ω και στη συνέχεια στο digital pin 8 του Arduino, ενω τα  (+) και (-) τα συνδέουμε στα 5 Volt και GND αντίστοιχα.

Δείτε την εικόνα 6 για να πάρετε μια ιδέα.

Εικόνα 6: Η δεύτερη εφαρμογή μας...

Να και ο κώδικας για τον προγραμματισμό του Arduino...

#include <ServoTimer1.h>
#include <FrequencyTimer2.h>
int pin_ir_led = 11;
int pin_ir_rec = 8;
ServoTimer1 servo1;
ServoTimer1 servo2;

void setup(){
pinMode(pin_ir_led, OUTPUT);
FrequencyTimer2::setPeriod(38500L);
FrequencyTimer2::enable();
pinMode(pin_ir_rec, INPUT);
servo1.attach(9);
servo2.attach(10);
}

void move(int s1, int s2){
      servo1.write(s1);
      servo2.write(s2);
}

void loop(){
  while(digitalRead(pin_ir_rec) == LOW){
     move(180,0);
     delay(2000);
     move(0,0);
     delay(500);
  }
      move(0,180);
}

Όπως βλέπετε, δεν αλλάξαμε πολλά πράγματα από το προηγούμενο παράδειγμα όσο αφορά τη λογική. Αυτό που προσθέσαμε ήταν μια συνάρτηση που καθορίζει την κίνηση των σερβοκινητήρων 1 και 2. Η δήλωση των pin, που θα χρησιμοποιήσουμε για τα σέρβο, διαφέρει από τις υπόλοιπες  δηλώσεις εισόδου/εξόδου και γίνεται με τη δήλωση servo1.attach(9), ενώ η αποδέσμευση του σέρβο από το pin γίνεται με τη δήλωση servo1.detach().

void move(int s1, int s2){
      servo1.write(s1);
      servo2.write(s2);
}

Η συνάρτηση move δέχεται σαν ορίσματα δυο ακέραιους, τις μοίρες για την κίνηση των δυο σερβοκινητήρων και στην συνέχεια με την εντολή servo1.write(s1) στέλνει τον ανάλογο παλμό στο σερβοκινητήρα. Η συνάρτηση move καλείται σαν move(<μοίρες για Servo1>,<μοίρες για Servo2>). Ο ελιγμός αποφυγής αντικειμένου δεν είναι τίποτα άλλο από μια κίνηση δυο δευτερόλεπτων πίσω και 500 millisecond δεξιά.

ΕΦΑΡΜΟΓΗ 3: ΕΠΑΦΗ

Ένας άλλος ποιο εύκολος στην κατασκευή αισθητήρας για ανίχνευση εμποδίων είναι ο αισθητήρας επαφής η αλλιώς όπως είναι γνωστός στη ρομποτική Whiskers (μουστάκια :) ). Ο αισθητήρας δεν είναι τίποτα περισσότερο από ένα μικροδιακόπτη τον οποίου τοποθετήσαμε στο μπροστινό μέρος του ρομπότ με τέτοιο τρόπο ώστε να είναι πρώτος αυτός που θα έρθει σε επαφή με το αντικείμενο και όχι το κυρίως σώμα του ρομπότ. Για να διευκολύνουμε τον τρόπο που έρχεται σε επαφή ο διακόπτης με το αντικείμενο, του τοποθετήσαμε ένα επιπρόσθετο μέρος όπως βλέπουμε στην εικόνα 7, κάνοντας έτσι το κουμπί του διακόπτη μακρύτερο.

Εικόνα 7: Η τρίτη εφαρμογή...

Τα υλικά που χρησιμοποιήσαμε στην τρίτη εφαρμογή είναι :

  • Ένα Arduino.
  • Δυο σέρβο (Parallax Standard Servo).
  • Ένα μικροδιακόπτη.
  • Μία αντίσταση 10ΚOhm (καφέ – μαύρο - πορτοκαλί).

Το κύκλωμα που ακολουθήσαμε για την τρίτη εφαρμογή είναι αυτό στην εικόνα 5 (δεξιά). Η συνδεσμολογία έχει ως εξής:

1. Το πρώτο σερβοκινητήρα (pulse) το συνδέουμε στο  digital pin 9 (PWM) του Arduino.
2. Το δεύτερο σερβοκινητήρα (pulse) το συνδέουμε στο  digital pin 10 (PWM).
3. Το μικροδιακόπτη τον συνδέουμε στο pin 8 του Arduino.
4. Τα ποδαράκια (+) και (-) των δυο σέρβο (κόκκινο και μαύρο) τα συνδέουμε στα 5 Volt και GND αντίστοιχα.

Όπως θα δούμε και στο πρόγραμμα που ακολουθεί τον αισθητήρα τον αντιμετωπίζουμε σαν έναν απλό διακόπτη (μιας και είναι άλλωστε...). Να ο κώδικας:

#include <ServoTimer1.h>

int pin_whisker = 8;
ServoTimer1 servo1;
ServoTimer1 servo2;

void setup(){
pinMode(pin_whisker, INPUT);
servo1.attach(9);
servo2.attach(10);
}

void move(int s1, int s2){
      servo1.write(s1);
      servo2.write(s2);
}

void loop(){
   
  if(digitalRead(pin_whisker) == HIGH){
     move(180,0);
     delay(2000);
     move(0,0);
     delay(500);
  }
    move(0,180);
}

Μπορούμε επίσης να τοποθετήσουμε 1-4 αισθητήρες whisker στο ρομπότ μας, σε διαφορετική είσοδο το κάθε ένα και να τους προγραμματίσουμε ξεχωριστά ούτως ώστε το ρομπότ να αντιδρά με διαφορετικό τρόπο. Για παράδειγμα, αν βρει εμπόδιο αριστερά να στρίψει δεξιά, ενώ όταν βρει εμπόδιο δεξιά να στρίψει προς τα  αριστερά κοκ. Οι αισθητήρες μπορεί να βρίσκονται τοποθετημένοι περιμετρικά του ρομπότ.

Περισσότεροι σέρβο...

Στην περίπτωση που θέλουμε να χρησιμοποιήσουμε περισσότερους από δυο σερβοκινητήρες μπορούμε να ακολουθήσουμε την τεχνική που ακολουθεί ο Brian Evans στο “Αrduino Programming Νotebook” (σελίδα 38). Εκεί δημιουργεί χειροκίνητα τον παλμό για τα σέρβο. Αυτό το πετυχαίνει επαναλαμβάνοντας την κλήση μιας συνάρτησης κάθε 20ms (περίοδος του σήματος ), η συνάρτηση αυτό που κάνει είναι να δημιουργεί το πλάτος του σήματος δίνοντας HIGH και LOW στο pin που είναι ενωμένο ο σερβοκινητήρας για χρονικά διαστήματα που αναφερθήκαμε πιο πάνω (δείτε εικόνα 4) ούτως ώστε να επιτευχθεί η κίνηση. Το κείμενο είναι διαθέσιμο για κατέβασμα από το διαδίκτυο δωρεάν και ο σύνδεσμος δίνεται στις παραπομπές...

Αυτονομία του ρομπότ

Από τη στιγμή που συνδέσαμε σερβοκινητήρες και ορισμένους αισθητήρες στο ρομπότ επιβάλλεται να το αποσυνδέσουμε από την τροφοδοσία που μας προσφέρει η USB θύρα και να του τοποθετήσουμε δική του τροφοδοσία, δηλαδή μπαταρίες που θα του δίνουν σαφώς μεγαλύτερο εύρος κινήσεων. Σύμφωνα με το επίσημο site του Arduino, η προτεινόμενη εξωτερική τάση (ενώνοντας το PWR SEL στη θέση EXT) είναι 7 – 12 Volts. Επειδή όμως συνδέσαμε δυο σέρβο και η τάση μπορεί να μην είναι επαρκής για την σωστή λειτουργία τους πρέπει να τους συνδέσουμε σε ξεχωριστή πηγή τάσης. Συνήθως οι σερβοκινητήρες που χρησιμοποιούμε για τέτοιου είδους ρομποτικά συστήματα δέχονται τάση 4,5 με 6 Volts. Η σύνδεση τους γίνεται με τον εξής τρόπο: τα (+) και (-) των δυο σέρβο συνδέονται στα ανάλογα (+) και (-) της μπαταρίας όπως επίσης και το (-) της μπαταρίας στη γείωση της πλακέτας του Arduino. Προσωπικά χρησιμοποίησα μια μπαταρία 9V για τη τροφοδοσία του Arduino και μια μπαταρία 6V (4 x  1,5V) για την τροφοδοσία των δυο σέρβο. Η συνδεσμολογία δίνεται στην εικονα 8.

Εικόνα 8: Σύνδεση εξωτερικής πηγής στα δυο servo.

Στις εικόνες 9 και 10 φαίνεται το ολοκληρωμένο ρομπότ μας σε όλο του το μεγαλείο:

Δείτε εδώ ένα βίντεο του ρομπότ εν δράση!

 

Μειονεκτήματα

Ένα σημείο που μπορεί να κάνει το ρομπότ μας ασταθές είναι από τις παρεμβολές άλλων πηγών υπερύθρων, όπως τηλεχειριστήρια τηλεοράσεων, DVD Players κ.τ.λ. Εδώ μπορούμε να εφαρμόσουμε  μια άλλη τεχνική, αυτή του ηχοβολησμού η όπως αλλιώς την ξέρουμε ... sonar . Η λογική είναι ίδια με αυτή των υπερύθρων, δηλαδή ανάκλαση του ήχου (ultrasound) αυτή τη φορά σε ένα αντικείμενο και η σύλληψη του από ένα δέκτη. Το sonar επίσης είναι ένας καλός τρόπος να γνωρίζουμε και την απόσταση του ρομπότ από το αντικείμενο και επιπλέον έχει εφαρμογή σε θέματα χαρτογράφησης χώρου. Μικρά συστήματα sonar (πομπού – δέκτη) που είναι ειδικά σχεδιασμένα για ρομποτικά συστήματα υπάρχουν και είναι διαθέσιμα σε διάφορα online καταστήματα (δείτε στο τέλος του άρθρου).

 

KANTE ΠΕΡΙΣΣΟΤΕΡΑ

Το project αυτού του τεύχους δεν είναι φυσικά ότι καλύτερο μπορείτε να κάνετε. Να μερικές επιπλέον ιδέες:

  • Προγραμματισμός του ρομπότ να ακολουθεί τοίχους.
  • Αποφυγή πτώσης του ρομπότ από σκαλιά.
  • Προγραμματισμός του ρομπότ να ακολουθεί μια γραμμή.
  • Έξοδος Ρομπότ από λαβύρινθο.
  • Κίνηση απλού ρομποτικού βραχίονα με χρήση Servo.
  • Χρήση γέφυρας “Η” για για τον έλεγχο DC motor.
  • Μελέτη μικρού συστήματος ηχοβολισμού (Sonar) για ανίχνευση αντικείμενων και χαρτογράφησης χώρου.

 

ΠΟΥ ΘΑ ΒΡΕΙΤΕ ΤΑ ΕΞΑΡΤΗΜΑΤΑ

Αναρωτιέστε από που μπορείτε να προμηθευτείτε τα εξαρτήματα; Αν δεν βγάλετε άκρη με τα μαγαζιά ηλεκτρονικών της γειτονιάς, υπάρχουν μερικά online καταστήματα που μπορείτε να προμηθευτείτε ηλεκτρονικά εξαρτήματα όπως σερβοκινητήρες, leds, Infrared Transmitters κτλ. Να μερικά:

 

ΔΙΑΒΑΣΤΕ ΠΕΡΙΣΣΟΤΕΡΑ

 

Φόρουμ
Δώσε αστέρια!

MO: 5 (ψήφοι: 1)

Σχόλια

Χμμ, κάποιος "χάλασε" το ρομπότ της Deagostini :)

 

Ωραίο άρθρο... μπράβο!

καλησπέρα πολύ ενδιαφέρων το άρθρο σας... θα ήθελα να το υλοποιήσω και εγώ ... θέλω μια βοήθεια για να μην κάνω Κανά λάθος και κάνω καμιά ζημιά... εγώ έχω τον αισθητήρα υπερύθρων ultra sonic HC SR04... πως ακριβώς θα τον συνδέσω? χρειάζεται η αντιστάσεις και και σε αυτόν τον αισθητήρα? η όχι? 

 

το GND του αισθητήρα το σύνδεσα στο GND... 

To echo στο pin 12 με αντίσταση 1kΩ ενδιάμεσα...

το trig το σύνδεσα στην άλλη αντίσταση και στο pin 8 μετά...

και το vcc το σύνδεσα στο 5volt....

 

( το σύνδεσα σωστά?)