Μέτρηση και αποτύπωση απόστασης
Στα πρώτα βήματα, δοκιμάζουμε συνήθως ξεχωριστά κάθε εξάρτημα-στοιχείο προκειμένου να κατανοήσουμε τη λειτουργία του και το αντίστοιχο κύκλωμα. Πηγαίνοντας στην κατεύθυνση πιο πραγματικών εφαρμογών, απαιτείται η σύνθεση και ο συνδυασμός γνωστών πλέον κυκλωμάτων και εξαρτημάτων. Σε αυτή την εφαρμογή συνδυάζουμε τον αισθητήρα απόστασης με μια οθόνη 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 |
Ακροδέκτης 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 |
#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); } |
//Ενσωμάτωση της βιβλιοθήκης για την 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); } |