Σκοπός Ψηφιακά Αντικείμενα Μάθημα 1 Δραστηριότητα 1 ΜΕΤΡΩΝΤΑΣ ΑΠΟΣΤΑΣΗ ΜΕ ΤΟΝ ΑΙΣΘΗΤΗΡΑ ΥΠΕΡΗΧΩΝ (SR04). Ψηφιακά Αντικείμενα Μικροελεγκτής Προγραμματισμός Φυσικών Συστημάτων Νέα Ψηφιακά Αντικείμενα Αισθητήρες Απόστασης: o Αισθητήρας Υπέρηχων και ο Infrared Η Αρχή Λειτουργίας των Υπέρηχων (Sonar) Μετρώντας Απόσταση με τον Αισθητήρα Υπέρηχων SR04. Δομές προγραμματισμού. Το πρόγραμμα, για τη Μέτρηση Απόστασης με τον SR04 1
1.1 ΕΠΙΔΙΩΞΗ ΤΗΣ ΑΣΚΗΣΗΣ Σ αυτή την άσκηση, εξετάζουμε έναν αισθητήρα που χρησιμοποιείται πολύ στη ρομποτική και σε βιομηχανικές εφαρμογές. Ο αισθητήρας υπερήχων μπορεί να υπολογίζει την απόσταση αντικειμένων, από αυτόν, εκπέμποντας ένα υπέρηχο ένα ηχητικό σήμα σε συχνότητα υψηλότερη των ακουστικών συχνοτήτων και υπολογίζοντας το χρόνο που αυτό το ηχητικό σήμα κάνει να επιστρέψει, όταν ανακλάται από ένα αντικείμενο. Η αρχή / ιδέα ονομάζεται SONAR (SOund Navigation and Range) και χρησιμοποιείται στα υποβρύχια, για να υπολογίζουν την απόσταση τους από άλλα σκάφη, αλλά χρησιμοποιείται ακόμα, από τις νυχτερίδες, για να εντοπίζουν τα θηράματα τους. Σ αυτή τη δραστηριότητα, θα χρησιμοποιήσουμε αυτή την ιδέα, για να υπολογίζουμε την απόσταση αντικειμένων από ένα αισθητήρα υπερήχων που μπορεί να είναι επάνω σ ένα ρομποτικό αυτοκίνητο. Ο αισθητήρας που θα χρησιμοποιήσουμε είναι ο SR04. Όμως, κάθε άλλος αισθητήρας υπερήχων λειτουργεί παρόμοια. 1.2 Μετρώντας Απόσταση infrared και ultrasonic Ο αισθητήρας υπερήχων είναι ένας πολύ σημαντικός αισθητήρας, για κάθε ρομποτική συσκευή είναι συχνά, το οπτικό όργανο μίας ρομποτικής συσκευής. Ο αισθητήρας υπερήχων είναι ένας χρήσιμος αισθητήρας, γιατί μας επιτρέπει να δημιουργούμε συστήματα που αντιδρούν, ανάλογα με το πόσο κοντά την απόσταση μας από αυτά ή την απόσταση αντικειμένων, από αυτά. Υπάρχουν δύο διαφορετικοί αισθητήρες απόστασης: ο αισθητήρας υπερήχων (sonar) και o IR (infrared) αισθητήρας (Εικόνα 1). Αυτοί οι δύο έχουν λίγο διαφορετικές αρχές λειτουργίας. Ο αισθητήρας υπερήχων (sonar) λειτουργεί, εκπέμποντας ένα ηχητικό σήμα και υπολογίζοντας το χρόνο που κάνει αυτό το σήμα να επιστρέψει, όταν ανακλάται από ένα αντικείμενο, εμπρός από τον αισθητήρα. Ο IR (infrared) μετράει την απόσταση ενός αντικειμένου από τον αισθητήρα, εκπέμποντας μία δέσμη υπέρυθρου φωτός που ανακλάται από ένα αντικείμενο, εμπρός από τον αισθητήρα. Ο αισθητήρας εκπέμπει τη δέσμη φωτός με μικρή γωνία. Αυτή η δέσμη ανακλάται από ένα αντικείμενο με διαφορετική γωνία ανάκλασης, ανάλογα με την απόσταση του αντικειμένου από τον αισθητήρα. Έτσι, ο αισθητήρας υπολογίζει την απόσταση ενός αντικειμένου από αυτόν, από τη γωνία που αυτό το αντικείμενο ανακλά τη δέσμη φωτός, από τον αισθητήρα. 2
Εικόνα 1: Ο αισθητήρας υπερήχων (SR04, επάνω) και ο infrared (αισθητήρας υπέρυθρου φωτός, κάτω). 1.3 Σχηματικό Διάγραμμα του Κυκλώματος Συνδέοντας έναν αισθητήρα υπερήχων είναι πολύ απλό. Ο αισθητήρας υπερήχων έχει τέσσερεις ακροδέκτες. Ο ένας, είναι ο ακροδέκτης τροφοδοσίας. Συνδέουμε αυτό τον ακροδέκτη στα 5 V. Ο άλλος είναι ο ακροδέκτης που συνδέουμε στο GND. Συνδέουμε τον ακροδέκτη TRIG στη θύρα 13 του Arduino και τον ακροδέκτη ECHO στη θύρα 12 του Arduino (Εικόνα 2). 1.4 Αισθητήρες Υπερήχων: Η Αρχή Λειτουργίας τους Ο αισθητήρας υπερήχων (sonar) μας επιτρέπει να μετράμε απόσταση, στη βάση του χρόνου που κάνει ένα ηχητικό κύμα να επιστρέψει, στον αισθητήρα. Ο αισθητήρας λειτουργεί, εκπέμποντας ένα ηχητικό σήμα και υπολογίζοντας το χρόνο t που κάνει αυτό το σήμα να επιστρέψει, όταν ανακλάται, από ένα αντικείμενο, στην ευθεία του αισθητήρα (Εικόνα 3). 3
Εικόνα 2: Αναλυτικό διάγραμμα της συνδεσμολογίας του κυκλώματος. 4
Εικόνα 3: Η αρχή λειτουργίας του αισθητήρα υπερήχων ( sonar). Επειδή η ταχύτητα v του ήχου στον αέρα είναι γνωστή, μπορούμε να υπολογίσουμε την απόσταση d ενός αντικειμένου από τον αισθητήρα, από το χρόνο t που ένα ηχητικό σήμα που εκπέμπει ο αισθητήρας, κάνει να επιστρέψει στον αισθητήρα: d = v t / 2 Το ηχητικό σήμα που εκπέμπει ο αισθητήρας είναι σε μία συχνότητα που είναι υψηλότερη των συχνοτήτων που μπορούμε το ανθρώπινο αυτί μπορεί να αντιληφθούμε. Ο αισθητήρας υπερήχων είναι χρήσιμος σε πολλές εφαρμογές, ειδικά όταν χρειάζεται να εντοπίζουμε μεγάλα αντικείμενα. Όμως, το ηχητικό σήμα που δημιουργεί / εκπέμπει ο αισθητήρας διαχύνεται σ ένα μεγάλο εύρος (Εικόνα 3). Αυτό, μερικές φορές, προκαλεί παρεμβολές. Αν δηλαδή, υπάρχουν πολλά αντικείμενα σε διάφορες αποστάσεις από τον αισθητήρα, ο αισθητήρας θα εντοπίσει το πλησιέστερο από αυτά. Διαφορετικοί αισθητήρες υπερήχων μπορεί να εντοπίζουν αντικείμενα σε διαφορετικές κλίμακες απόστασης. Ο αισθητήρας που χρησιμοποιούμε, σ αυτή την άσκηση (SR04) μπορεί να εντοπίζει αντικείμενα σε μικρή σχετικά απόσταση 2 400 cm. 1.5 Ανάλυση του Προγράμματος Πρώτα, δηλώνουμε μεταβλητές, για τη LED και τις θύρες 12 και 13 του Arduino που συνδέουμε τους ακροδέκτες του αισθητήρα υπερήχων. 5
const int trigpin = 13; const int echopin = 12; const int led = 11; void setup() { Serial.begin (9600); pinmode(trigpin, OUTPUT); pinmode(echopin, INPUT); pinmode(led, OUTPUT); } void loop() { long duration, distance; int intensity; //Δημιουργούμε ένα τετραγωνικό παλμό στο TRIG Pin που θα προκαλέσει τη εκ //πομπή ενός ηχητικού σήματος, από τον αισθητήρα. digitalwrite(trigpin, LOW); delaymicroseconds(2); digitalwrite(trigpin, HIGH); delaymicroseconds(10); digitalwrite(trigpin, LOW); duration = pulsein(echopin, HIGH); distance = microsecondstocentimeters(duration); 6
Serial.print(distance); Serial.println(" cm"); intensity = map(distance, 500, 2, 0, 255); analogwrite(led, intensity); delay(100); } long microsecondstocentimeters(long microseconds) { // The speed of sound is 340 m/s or 29 microseconds per centimeter. // The ping travels out and back, so to find the distance of the // object we take half of the distance travelled. return microseconds / 29 / 2; } Εικόνα 4: Το πρόγραμμα, για τη μέτρηση της απόστασης αντικειμένων, χρησιμοποιώντας τον αισθητήρα υπερήχων SR04.. Στη setup(), απλά ορίζουμε το ρυθμό / ταχύτητα μετάδοσης δεδομένων, ανάμεσα στον Arduino και στον υπολογιστή. Ορίζουμε τη θύρα που θα ανάβουμε και θα σβήνουμε τη LED, σα θύρα εξόδου (OUTPUT). Στη loop(), δημιουργούμε το ηχητικό σήμα, διαβάζουμε το χρόνο επιστροφής του σήματος, μέσα από τη συνάρτηση: duration = pulsein(echopin, HIGH); και μετατρέπουμε αυτό το χρόνο σε απόσταση (Εικόνα ) Εκτυπώνουμε αυτή την απόσταση στη σειριακή οθόνη και μετά, ανάβουμε τη LED με ένταση ανάλογη της απόστασης. Όσο μικρότερη είναι η απόσταση του αντικειμένου, εμπρός από τον αισθητήρα υπερήχων, τόσο εντονότερος θα είναι ο φωτισμός της LED, χρησιμοποιώντας τη διαμόρφωση εύρους παλμού της: 7
analogwrite(led, intensity) Επειδή η διαμόρφωση εύρους παίρνει τιμές από 0 μέχρι 255 και αισθητήρας εντοπίζει αντικείμενα σε απόσταση 0 500 cm, χρησιμοποιούμε τη συνάρτηση map(), για να αντιστοιχίσουμε τιμές από το διάστημα [0, 500], στο διάστημα [0, 255]. Ανάλογα με το άναμμα σβήσιμο της LED, θα μπορούσαμε να λειτουργούμε το DC κινητήρα, στη βάση της απόστασης ενός αντικειμένου, από τον αισθητήρα απόστασης. 8