microdev.gr




Περιγραφή-Σκοπός της εφαρμογής

Στα πρώτα βήματα, δοκιμάζουμε συνήθως ξεχωριστά κάθε εξάρτημα-στοιχείο προκειμένου να κατανοήσουμε τη λειτουργία του και το αντίστοιχο κύκλωμα. Πηγαίνοντας στην κατεύθυνση πιο πραγματικών εφαρμογών, απαιτείται η σύνθεση και ο συνδυασμός γνωστών πλέον κυκλωμάτων και εξαρτημάτων. Σε αυτή την εφαρμογή συνδυάζουμε τον αισθητήρα απόστασης με μια οθόνη LCD 2 γραμμών και 16 στηλών. Χρησιμοποιώντας την LCD οθόνη, ο υπολογιστής δεν είναι πλέον απαραίτητος (παρά μόνο για τη φάση της φόρτωσης του προγράμματος στον μικροελεγκτή) και η εφαρμογή με το Arduino μπορεί να λειτουργήσει αυτόνομα. Θα μπορούσε για παράδειγμα να τοποθετηθεί σε ένα όχημα (με χρήση μπαταρίας για τροφοδοσία) και να εμφανίζει την απόσταση από κάποιο εμπόδιο.

Βίντεο Εφαρμογής

Απαραίτητα Εξαρτήματα

1. Arduino UNO

2. Καλώδιο σύνδεσης USB (type-A to type-B)

3. Breadboard

4. 21 Καλώδια (αρσενικό-αρσενικό)

5. Ένα ποτενσιόμετρο 10Κ

6. Μία LCD οθόνη 16x02

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

Κύκλωμα


Η αντίσταση που φαίνεται στο κύκλωμα δεν χρειάζεται (έχει τοποθετηθεί λόγω του TinkerCAD)

Προσομοίωση χωρίς εξοπλισμό

T I N K E R C A D

Μελετήστε και δοκιμάστε το κύκλωμα στον προσομοιωτή TinkerCAD. Απαιτείται μόνο να έχετε δωρεάν λογαριασμό. Δεν χρειάζεται να έχετε εξοπλισμό, ενώ μπορείτε να κάνετε οποιαδήποτε αλλαγή στον αντίστοιχο κώδικα.
Προσομοιώστε την εφαρμογή >>

Συνδέσεις

Ακροδέκτης Arduino
HC-SR04
8
Echo
9
Trig
GND
GND
5V
Vcc
Ακροδέκτης Arduino
LCD Οθόνη
7
DB7
6
DB6
5
DB5
4
DB4
5V
(A) LED+
GND
(K) LED-
GND
RW
2
RS
5V
VCC
GND
GND
Ακροδέκτης LCD
Ποτενσιόμετρο
V0
Στο GND μέσω αντίστασης 1-1.5ΚΩ
ή στο μεσαίο ακροδέκτη του
ποτενσιόμετρου με τον άλλο ακριανό
στο GND

Κώδικας (χωρίς σχόλια) στο Arduino IDE

#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7);

int trig=9;
int echo=8;

void setup()
{
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);

lcd.begin(16, 2);
lcd.print("HC-SR04");
}

void loop()
{
long dur;
float cm;

digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
delayMicroseconds(2);
dur=pulseIn(echo,HIGH);

cm=micro2cm(dur);

lcd.setCursor(0, 1);
lcd.print("Distance:");
lcd.print(cm);

delay(1000);
}

float micro2cm(long microsec)
{
return (0.034*microsec/2);
}

Κώδικας (με σχόλια) στο Arduino IDE

//Ενσωμάτωση της βιβλιοθήκης για την LCD οθόνη
//Έτσι, θα έχουμε πρόσβαση στις αντίστοιχες συναρτήσεις
#include <LiquidCrystal.h>

//Δήλωση αντικειμένου lcd και ακροδεκτών
//Μέσω του lcd θα έχουμε πρόσβαση στις συναρτήσεις της οθόνης
LiquidCrystal lcd(2,3,4,5,6,7);

//Μέσω του ακροδέκτη 9 θα ενεργοποιούμε τον αισθητήρα
//για ανίχνευση εμποδίου
int trig=9;

//Μέσω του ακροδέκτη 8 θα λαμβάνουμε την έξοδο του αισθητήρα
int echo=8;

//Συνάρτηση που εκτελείται μια φορά (τροφοδοσία ή Reset)
void setup()
{
//Ο ακροδέκτης 9 καθορίζεται ως έξοδος (στέλνουμε στον αισθητήρα)
pinMode(trig,OUTPUT);

//Ο ακροδέκτης 8 καθορίζεται ως είσοδος (λαμβάνουμε από τον αισθητήρα)
pinMode(echo,INPUT);

//Εκκίνηση της οθόνης LCD
lcd.begin(16, 2);

//Εμφάνιση μηνύματος στην οθόνη LCD
lcd.print("HC-SR04");
}

//Συνάρτηση που εκτελείται πάντα void loop()
{
//Μεταβλητή που θα φιλοξενήσει την έξοδο από τον αισθητήρα
long dur;

//Μεταβλητή που θα φιλοξενήσει την υπολογισμένη απόσταση σε cm
//βάσει της μέτρησης από τον αισθητήρα
float cm;

//Δημιουργία παλμού ενεργοποίησης αισθητήρα digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
delayMicroseconds(2);


//Ανάγνωση εξόδου από τον αισθητήρα
//Η διάρκεια του θετικού μετώπου του παλμού εξόδου
//του αισθητήρα είναι ανάλογη της μετρούμενης απόστασης
dur=pulseIn(echo,HIGH);

//Κλήση συνάρτησης για μετατροπή διάρκειας παλμού εξόδου αισθητήρα σε απόσταση
cm=micro2cm(dur);

//Τοποθέτηση δρομέα στη δεύτερη γραμμή της οθόνης LCD
lcd.setCursor(0, 1);

//Εμφάνιση βοηθητικού μηνύματος πριν την εμφάνιση της απόστασης
lcd.print("Distance:");

//Εμφάνιση της απόστασης του εμποδίου στην LCD οθόνη
lcd.print(cm);

//Αναμονή 1 δευτερόλεπτο πριν την επόμενη μέτρηση
delay(1000);
}


//Συνάρτηση μετατροπής χρόνου σε απόσταση
float micro2cm(long microsec)
{

//0.034 ταχύτητα ήχου και διαίρεση με το 2, διότι το σήμα διανύει την απόσταση //από το εμπόδιο δύο φορές
return (0.034*microsec/2);
}