Arduino κατασκευή: σύστημα παρκαρίσματος

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

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

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

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

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

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

  1. Arduino (οποιαδήποτε έκδοση – θα χρησιμοποιήσω το mega 2560 γιατί αυτό έχω διαθέσιμο αυτή τη στιγμή)
  2. Αισθητήρας υπερήχου HC0SR4
  3. Οθόνη LCD 16×2
  4. Ράστερ (bread board)
  5. Καλώδια σύνδεσης
  6. 3 Led διαφορετικού χρώματος
  7. 1 Αντίσταση 330Ω
  8. Μπαταρία 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 οθόνη 16×2 (2 γραμμές επί 16 χαρακτήρες για κάθε γραμμή) όπου θα απεικονίζουμε εκεί την απόσταση.

Η οθόνη LCD 16×2

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

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

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

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

Το κύκλωμα

Παρακάτω είναι το κύκλωμα το οποίο υλοποιήσαμε στο Fritzing. Τα καλώδια με πράσινο χρώμα αφορούν την οθόνη 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);
}

Αφήσαμε το βίντεο για το τέλος!

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

Οκτώβριος 15, 2018

5 Απαντήσεις στο "Arduino κατασκευή: σύστημα παρκαρίσματος"

  1. θα ηθελα να προσθεσω και ηχητικη πρειδοποιηση η οποια αναλογα με την αποσταση θα αυξανεται μαζι με την εναλλαγη των led.Θα μπορουσατε να μου προτεινεται καποιο υλικο ωστε να το τοποθετησω και τι κωδικα θα χρειαστει στο arduino? Ευχαριστω για τον χρονο σας!!!

  2. Για ηχητική ειδοποίηση μπορείτε να χρησιμοποιήσετε ένα piezo buzzer
    https://www.adafruit.com/product/160
    Το ένα άκρο από το buzzer θα συνδεθεί στο GND ενώ το άλλο θα πρέπει να κουμπώσει σε μία PWM έξοδο του arduino (αυτές που έχουν το ~ μπροστά).
    Όσον αφορά τον κώδικα, υπάρχει η εντολή tone
    π.χ. An συνδέσετε το buzzer στο 13 pin
    ο κώδικας θα ήταν:
    tone(13, distanceCM*X); (θα βάλετε την γραμμή αυτή αν θέλετε να ακούτε πάντα το buzzer πάνω από την πρώτη if. Αν θέλετε να ακούγεται μόνο όταν πλησιάσετε πολύ, μέσα στην πρώτη IF.

    Το Χ θα το μεταβάλετε έως ότου είστε ικανοποιημένος με τον ήχο. Τα δύο ορίσματα που παίρνει η εντολή tone είναι 1) το Pin Που είναι κουμπωμένο το piezobuzzer και 2) η συχνότητα που θέλετε να ακουστεί. Χαμηλές τιμές σημαίνει θα έχετε χαμηλής συχνότητας ήχο, ενώ υψηλές τιμές το αντίθετο.

    tone(speakerPin, tones[i]);

  3. εγω θα ηθελα το buzzer να αυξανει τον ηχο του οσο πιο πολυ πλησιαζω στο εμποδιο.Oσο πιο κοντα βρισκομαι τοσο μικροτερη συχνοτητα να εχει το buzzer!!τι εντολη πρεπει να χρησιμοποιησω στον κωδικα και σε πιο σημειο του κωδικα θα επρεπε να την τοποθετησω? Xρειαζεται να εχω την ιδια εντολη σε καθε IF?

  4. Όχι, τότε έξω από την πρώτη IF θα βάλεις

    generateTone = map(distanceCM,1,100,500,100);
    tone(13, generateTone);

    Το buzzer θα συνδεθεί το ένα άκρο στο GND και το άλλο στο pin 13 από το Arduino.
    Σου παραθέτω και την χρήση της map ώστε να μπορείς να κάνεις μετατροπές και να καταλάβεις πως ακριβώς λειτουργεί.

    https://www.arduino.cc/reference/en/language/functions/math/map/

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

Αφήστε ένα μήνυμα

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *

Σχεδιασμός © GetCert. Με επιφύλαξη παντός δικαιώματος.

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