Σύστημα παρκαρίσματος με Arduino

Σύστημα παρκαρίσματος με Arduino

  • Βαθμός δυσκολίας: Μέτριο

Το παρκάρισμα θέλει τέχνη. Με την κατασκευή arduino που ετοιμάσαμε δεν υπάρχει πρόβλημα. Θα έχετε δει ή ακούσει τους αισθητήρες παρκαρίσματος που διαθέτουν τα σύγχρονα αυτοκίνητα όπου

εντοπίζουν την απόσταση που βρίσκεται το εμπόδιο και παράγουν ηχητικό σήμα.

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

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

Θα φτιάξουμε το δικό μας σύστημα παρκαρίσματος με arduino, το οποίο στη συνέχεια θα προγραμματίσουμε και θα δοκιμάσουμε με ένα αυτοκίνητο μινιατούρα.

Πριν όμως περάσουμε στην υλοποίηση και σας παρουσιάσουμε το project να πούμε ότι το συγκεκριμένο project έχει εκπαιδευτικό χαρακτήρα και δεν αποτελεί λύση την οποία θα χρησιμοποιούσαμε σε κανονικές συνθήκες.

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

Τα υλικά που θα χρειαστούμε:

  • Arduino (οποιαδήποτε έκδοση - θα χρησιμοποιήσω το mega 2560 γιατί αυτό έχω διαθέσιμο αυτή τη στιγμή)
  • Αισθητήρας υπερήχου HC0SR4
  • Οθόνη LCD 16x2
  • Ράστερ (bread board)
  • Καλώδια σύνδεσης
  • 3 Led διαφορετικού χρώματος
  • 1 Αντίσταση 330Ω
  • Μπαταρία 9V και καλώδιο με βύσμα σύνδεσης για το Arduino

Πως λειτουργεί ένα σύστημα παρκαρίσματος με αισθητήρες;

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

Ο υπέρηχος εκπέμπει στα 40Khz που είναι πολύ περισσότερο από το φάσμα που μπορεί να συλλάβει το ανθρώπινο αυτί (20hz - 20Khz).

Ο αισθητήρας έχει έναν πομπό και έναν δέκτη. Ο πομπός στέλνει έναν υπέρηχο, ο οποίος με την σειρά του αντανακλάται στο εμπόδιο (το ήδη σταθμευμένο όχημα ή κάποιος τοίχος) και επιστρέφει πίσω στον αισθητήρα όπου διαβάζεται από τον δέκτη.

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

Στην παρακάτω εικόνα φαίνεται το σχέδιο λειτουργίας του αισθητήρα.

Αισθητήρας απόστασης

Ο αισθητήρας απόστασης έχει έναν πομπό και έναν δέκτη. o χρόνος t1 είναι ο χρόνος που θα κάνει το σήμα να χτυπήσει σε ένα εμπόδιο και ο χρόνος t2 είναι ο χρόνος που θα χρειαστεί το σήμα για να επιστρέψει στον δέκτη.

Στο εξάρτημα ο πομπός και ο δέκτης είναι σαν μικρά τύμπανα όπως θα δείτε και στην παρακάτω φωτογραφία. Οι ακροδέκτες που χρησιμοποιεί είναι 4. 2 είναι για την τροφοδοσία 5v (VCC,GND) και 2 για τον πομπό και δέκτη αντίστοιχα. Trig είναι ο πομπός και echo είναι δέκτης ή η 'απάντηση' που περιμένει το arduino.

αισθητήρας απόστασης HC-SR04

Όταν συνδέουμε το arduino με τον αισθητήρα απόστασης, το arduino στέλνει ένα παλμό στο trig. Ο αισθητήρας στέλνει υπέρηχο και το εμπόδιο αντανακλά το σήμα.

Στην επιστροφή του σήματος ο δέκτης (echo) διαβάζει το σήμα και το arduino λαμβάνει έναν παλμό από το pin echo. Το arduino μεταφράζει την χρονική διαφορά των παλμών μεταξύ trig και echo σε απόσταση.

Συγκεκριμένα:

Για να δημιουργήσουμε έναν υπέρηχο, πρέπει να θέσουμε το pin trig σε κατάσταση HIGH για 10ms. Αυτό θα προκαλέσει την αποστολή 8 παλμών οι οποίοι θα ταξιδέψουν με την ταχύτητα του ήχου και θα ληφθούν στη συνέχεια από το pin echo.

Ταχύτητα του ήχου:

Ο ήχος ταξιδεύει με 340m/sec ή 0,034cm/μs (αυτό χρειαζόμαστε για τον κώδικα)

Παράδειγμα:

έστω ότι στέλνουμε έναν υπέρηχο και συναντά ένα εμπόδιο στα δέκα εκατοστά.

Απόσταση = 10cm

ταχύτητα ήχου = 320m/s ή 0,034cm/μS

χρόνος = απόσταση / ταχύτητα = 294μS

Απόσταση = χρόνος * (0,034/2)

Ο λόγος που γίνεται η διαίρεση είναι επειδή για να ληφθεί το σήμα στο echo σημαίνει ότι έκανε την απόσταση 2 φόρες. Μία να φτάσει μέχρι το εμπόδιο και μία να γυρίσει πίσω.

Προϋποθέσεις για σωστή χρήση

Η γωνία θέασης είναι πολύ σημαντική. Αν ο αισθητήρας στείλει έναν παλμό ο οποίος είναι πολύ κοντά στο άκρο ενός εμποδίου τότε ο παλμός δεν θα επιστρέψει ποτέ στο echo, οπότε δεν θα έχουμε μέτρηση απόστασης.

Η απόσταση από το εμπόδιο. Οι αισθητήρες έχουν προδιαγραφές και μπορούν να μετρήσουν μία μέγιστη απόσταση. Συνήθως κυμαίνονται από 1,5m έως και 4m. Έχει και αισθητήρες που μπορούν να μετρήσουν μέχρι και 10 μέτρα αλλά είναι ακριβότεροι.

Το project

Θα τοποθετήσουμε τον αισθητήρα απόστασης στο πίσω μέρος του μοντέλου αυτοκινήτου που έχουμε σε τέτοια θέση ώστε να είμαστε βέβαιοι ότι ο υπέρηχος θα αντανακλάται και δεν θα βρίσκει 'αέρα'. δείτε την παρακάτω φωτογραφία με την σωστή θέση.

Η θέση Α δείχνει ότι αν βάλουμε πολύ χαμηλά τον αισθητήρα υπάρχει κίνδυνος να βρίσκεται πίσω μας ένα εμπόδιο που είναι ψηλό και να έχουμε λάθος ή καθόλου ένδειξη για το εμπόδιο. Επίσης υπάρχει πιθανότητα λόγω της γωνίας (30-40 μοίρες) που έχει ο αισθητήρας να 'βρίσκει ο παλμός στο έδαφος και να επιστρέφει.

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

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

Θα συνδέσουμε το κύκλωμα με μία μπαταρία ώστε να μην χρειάζεται να είναι συνδεδεμένο το καλώδιο USB στο arduino. Για να βλέπουμε όμως και την απόσταση που έχει το όχημα από το εμπόδιο θα χρησιμοποιήσουμε μία LCD οθόνη 16x2 (2 γραμμές επί 16 χαρακτήρες για κάθε γραμμή) όπου θα απεικονίζουμε εκεί την απόσταση.

Η οθόνη LCD 16x2

H Οθόνη διαθέτει 16 pin όπου μεταξύ άλλων, χρειάζεται 2 τροφοδοσίες. Μία για την απεικόνιση των χαρακτήρων και μία για τον φωτισμό (back light).

Θα χρειαστούμε ένα ποτενσιόμετρο 10KΩ καθώς θα πρέπει να δημιουργήσουμε έναν διαιρέτη τάσης ο οποίος βοηθάει στην αντίθεση των χαρακτήρων με τον φωτισμό.

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

Παρακάτω η εικόνα με το διάγραμμα εξόδων της οθόνης LCD 16x2

Οθονη LCD 16X2

Υπάρχουν και οθόνες που έχουν ενσωματωμένο το πρωτόκολλο επικοινωνίας IIC (I2C) όπου μειώνονται δραματικά τα PIN και το κύκλωμα απλοποιείται σημαντικά.

Το κύκλωμα

Παρακάτω είναι το κύκλωμα το οποίο υλοποιήσαμε στο <a href="http://fritzing.org/home/" target="_blank" rel="noopener">Fritzing</a>. Τα καλώδια με πράσινο χρώμα αφορούν την οθόνη LCD και την σύνδεσή της με το arduino. Τα μπλε καλώδια αφορούν τον αισθητήρα απόστασης και τα καλώδια με τις άσπρες ρίγες αφορούν τα LED. Όπου υπάρχει κόκκινο καλώδιο είναι 5V ενώ τα μαύρα καλώδια είναι τα 0V (GND)

Κύκλωμα συστήματος παρκαρίσματος

Ο κώδικας

Ο κώδικας που υλοποιεί το project είναι παρακάτω:

include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); 
const int red=10;
const int orange=9;
const int green=8;
const int trigPin = 7;
const int echoPin = 6;
long duration;
int distanceCm;
void setup() {
lcd.begin(16,2);
pinMode(trigPin, OUTPUT);
pinMode(red, OUTPUT);
pinMode(orange, OUTPUT);
pinMode(green, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm= duration*0.034/2;
lcd.setCursor(0,0);
lcd.print("Distance: ");
lcd.print(distanceCm);
lcd.print(" cm ");
delay(10);
lcd.setCursor(0,1);
if (distanceCm<10) {
lcd.print("OPA KALA EISAI!");
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
digitalWrite(orange, LOW);
}
else if (distanceCm<30) {
lcd.print("PLISIAZEIS.....");
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(orange, HIGH);
}
else {
lcd.print("EXEIS AKOMA....");
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
digitalWrite(orange, LOW);
}
delay(30);
}

Το βίντεο

Απολαύστε και το βίντεο που εξηγεί όλη τη διαδικασία. Θα χαρούμε να σχολιάσετε και να μοιραστείτε το βίντεο με τους φίλους και φίλες σας και να ακούσουμε τι θα θέλατε να δείτε από το κανάλι μας στη συνέχεια.

Σας άρεσε; δείτε και τα υπόλοιπα tutorial της ενότητας Arduino

Σχετικά άρθρα

Arduino πληκτρολόγιο 4x4

Arduino πληκτρολόγιο 4x4

Συναγερμός με Arduino

Συναγερμός με Arduino