#71 Φτιάχνοντας ένα ρομποτικό όχημα με το Arduino - Αποφυγή εμποδίων





Στο σημερινό άρθρο θα κάνουμε το ρομπότ να κινείτε μόνο του στον χώρο, αποφεύγοντας τυχών εμπόδια που θα συναντήσει στον δρόμο του.

Για να το πετύχουμε αυτό θα χρησιμοποιήσουμε έναν αισθητήρα υπερήχων και για αποφύγουμε συγκρούσεις με αντικείμενα που βρίσκονται εκτός του πεδίου ανίχνευσης θα χρησιμοποιήσουμε και δυο διακόπτες "επαφής". Επιπλέον για την καλύτερη επιλογή του δρόμου διαφυγής, έχουμε τοποθετήσει στο μπροστινό μέρος του ρομποτικού οχήματος έναν servo κινητήρα ο οποίος θα γυρνάει τον αισθητήρα υπερήχων δεξιά και αριστερά.

Λίγα λόγια για τους υπέρηχους


Όπως φαίνεται και στην παραπάνω εικόνα, οι υπέρηχοι βρίσκονται πάνω απ' τις ακουστικές συχνότητες, έτσι δεν μπορεί να τους ακούσει το ανθρώπινο αυτί. Παρόλο πάντως που εμείς δεν τους ακούμε κάποια ζώα μπορούν και να τους ακούν αλλά και να τους χρησιμοποιούν. Χαρακτηριστικά παραδείγματα που μας το δείχνουν αυτό είναι η κίνηση των νυχτερίδων και η σφυρίχτρα που χρησιμοποιείται για τους σκύλους. Αισθητήρες υπερήχων συναντάμε σε πολλές εφαρμογές στην ιατρική, στην πλοήγηση σκαφών/πλοίων ακόμα και στα αυτοκίνητα μας στα γνωστά park sensors. 

Οι αισθητήρες υπερήχων λειτουργούν με την ίδια αρχή που λειτουργούν τα ραντάρ και τα σόναρ. Εκτιμούν την απόσταση ενός στόχου λαμβάνοντας υπόψη τους την αντανάκλαση ενός ραδιοκύματος ή ενός ηχητικού σήματος πάνω στο στόχο.


Δημιουργούν υψηλής συχνότητας κύματα και χρησιμοποιώντας το επιστρεφόμενο σήμα καθορίζουν την απόσταση ή ακόμα και την ταχύτητα του στόχου. Για να το επιτύχουν αυτό χρησιμοποιούν τον χρόνο που έκανε το σήμα για να καλύψει την απόσταση από τον αισθητήρα στο αντικείμενο και πίσω. 

Στο Arduino η διαδικασία αυτή (αντιστοίχηση χρόνου σε απόσταση) είναι αρκετά απλή διότι υπάρχει συγκεκριμένη βιβλιοθήκη για τον αισθητήρα HC-SR04 που κάνει την "δύσκολη" δουλεία. Εμείς στον κώδικα μας αρκεί να κάνουμε χρήση μόνο μιας εντολής! Η εντολή αυτή θα μας επιστρέψει την απόσταση σε εκατοστά (cm).

Οπτικό πεδίο ~30°

Συνδεσμολογία

Απ΄ εδώ και στο εξής θα χρησιμοποιείτε το breadboard για τα καλώδια τροφοδοσίας 5V και GND αλλά και για μικρά καλώδια που δεν φτάνουν στο Arduino, ως προέκταση.

Αισθητήρας HC-SR04 (Ultrasonic Sensor)

  • Vcc - Arduino pin 5V (θέση breadboard)
  • Trig - Arduino pin A0
  • Echo - Arduino pin A1
  • Gnd - Arduino pin GND (θέση breadboard)

Διακόπτες "επαφής"

Θα πρέπει να έχετε τοποθετήσει έναν διακόπτη σε κάθε πλευρά του ρομποτικού οχήματος, εναν αριστερά και έναν δεξιά. Κάθε διακόπτης έχει δυο επαφές, το ένα καλώδιο θα πρέπει να πάει στην γείωση - gnd και το άλλο σε κάποιο pin του Arduino. Αν έχετε διακόπτη με τρις επαφές τότε θα πρέπει να συνδέσετε τα pins 'com' και 'no'. Δεδομένου οτι έχουμε να κάνουμε με διακόπτη δύο θέσεων, δεν παίζει ρόλο πιο pin θα επιλέξετε για την παρακάτω συνδεσμολογία.

  • Διακόπτης αριστερά - COM - Arduino pin GND (θέση breadboard)
  • Διακόπτης αριστερά - NO - Arduino pin 7

  • Διακόπτης δεξιά - COM - Arduino pin GND (θέση breadboard)
  • Διακόπτης δεξιά - ΝΟ - Arduino pin 8
NC: normaly close, NO: nornaly open, com: common 
Servo motor

Έχει τρία καλώδια, Vcc κόκκινο, GND μαύρο/καφέ και συνήθως πορτοκαλί το σήμα το οποίο το πάει στο Arduino pin 3.

Κώδικας

Το παρακάτω πρόγραμμα χρησιμοποιεί την βιβλιοθήκη ultrasonic.h για την εύρεση την απόστασης σε cm απ' το εμπόδιο που βλέπει ο αισθητήρας υπερήχων. Αν θέλετε να κάνετε χρήση του Arduino IDE αντί του Codebender και σας αρέσει να παιδεύεστε θε πρέπει να την βρείτε και να την εγκαταστήσετε μόνοι σας, μην με ρωτάτε για το Arduino IDE όταν όλα γίνονται αυτόματα με το Codebender.
Διαβάστε τον κώδικα για να τον κατανοήσετε. Πατήστε το πράσινο κουμπί "Run on Arduino" για να προγραμματίσετε το Arduino uno. Μην τοποθετήσετε ακόμα τις μπαταρίες.



Αποσυνδέστε το απ' τον υπολογιστή σας και βάλτε όλες τις μπαταρίες.

Αρχή λειτουργίας

Όταν το ρομποτικό όχημα ανιχνεύσει αντικείμενο σε απόσταση 10cm τότε σταματάει, κοιτάει αριστερά και δεξιά ψάχνοντας για τον καλύτερο τρόπο διαφυγής. Έπειτα στρίβει κατά 90 μοίρες δεξιά ή αριστερά και συνεχίζει ευθεία. Κατά την πορεία του είναι πιθανόν να πέσει πάνω σε αντικείμενα ή τοίχους τους οποίους δεν μπορεί να ανιχνεύσει. Οι διακόπτες επαφής το βοηθούν ώστε να κάνει λίγο πίσω και μια μικρή στροφή αριστερά ή δεξιά για να τα/τους αποφύγει.


Συντάκτης: Βασιλάκης Μιχάλης
www.ardumotive.com Το μεγαλύτερο ελληνικό site για το Arduino