Σε αυτό το σεμινάριο θα συζητήσουμε και θα σχεδιάσουμε ένα κύκλωμα για τη μέτρηση της απόστασης. Αυτό το κύκλωμα αναπτύσσεται με διασύνδεση του αισθητήρα υπερήχων "HC-SR04" με τον μικροελεγκτή AVR. Αυτός ο αισθητήρας χρησιμοποιεί μια τεχνική που ονομάζεται "ECHO", η οποία είναι κάτι που παίρνετε όταν ο ήχος αντανακλάται μετά την επίθεση με μια επιφάνεια.
Γνωρίζουμε ότι οι ηχητικές δονήσεις δεν μπορούν να διεισδύσουν μέσω στερεών. Αυτό που συμβαίνει είναι, όταν μια πηγή ήχου δημιουργεί δονήσεις, ταξιδεύουν στον αέρα με ταχύτητα 220 μέτρα ανά δευτερόλεπτο. Αυτές οι δονήσεις όταν συναντούν το αυτί μας τις περιγράφουμε ως ήχους. Όπως ειπώθηκε νωρίτερα, αυτές οι δονήσεις δεν μπορούν να περάσουν από συμπαγή, οπότε όταν χτυπούν με επιφάνεια σαν τοίχος, αντανακλούνται με την ίδια ταχύτητα στην πηγή, η οποία ονομάζεται ηχώ.
Ο αισθητήρας υπερήχων "HC-SR04" παρέχει σήμα εξόδου ανάλογο με την απόσταση με βάση την ηχώ. Ο αισθητήρας εδώ παράγει μια ηχητική δόνηση στην περιοχή υπερήχων όταν δίνει σκανδάλη, μετά από αυτό περιμένει την ηχητική δόνηση να επιστρέψει. Τώρα με βάση τις παραμέτρους, την ταχύτητα του ήχου (220m / s) και το χρόνο που απαιτείται για να φτάσει η ηχώ στην πηγή, παρέχει παλμό εξόδου ανάλογη με την απόσταση.
Όπως φαίνεται στο σχήμα, στην αρχή πρέπει να ξεκινήσουμε τον αισθητήρα για τη μέτρηση της απόστασης, δηλαδή ένα σήμα λογικής ΥΨΗΛΗΣ στο πείρο του αισθητήρα για περισσότερα από 10uS, μετά από αυτό στέλνεται μια δόνηση ήχου από τον αισθητήρα, μετά από ηχώ, ο αισθητήρας παρέχει ένα σήμα στον πείρο εξόδου του οποίου το πλάτος είναι ανάλογο με την απόσταση μεταξύ πηγής και εμποδίου.
Αυτή η απόσταση υπολογίζεται ως, απόσταση (σε cm) = πλάτος της εξόδου παλμού (σε uS) / 58.
Εδώ το πλάτος του σήματος πρέπει να ληφθεί σε πολλαπλάσια του uS (micro second ή 10 ^ -6).
Απαιτούμενα στοιχεία
Υλικό: ATMEGA32, Τροφοδοσία (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 1000uF πυκνωτής, 10KΩ αντίσταση (2 τεμάχια), αισθητήρας HC-SR04.
Λογισμικό: Atmel studio 6.1, progisp ή flash magic.
Διάγραμμα κυκλώματος και εξήγηση εργασίας
Εδώ χρησιμοποιούμε το PORTB για σύνδεση στη θύρα δεδομένων LCD (D0-D7). Όποιος δεν θέλει να εργαστεί με FUSE BITS του ATMEGA32A δεν μπορεί να χρησιμοποιήσει το PORTC, καθώς το PORTC περιέχει έναν ειδικό τύπο επικοινωνίας που μπορεί να απενεργοποιηθεί μόνο με την αλλαγή FUSEBITS.
Στο κύκλωμα, παρατηρείτε ότι έχω πάρει μόνο δύο ακίδες ελέγχου, κάτι που δίνει την ευελιξία της καλύτερης κατανόησης. Το bit αντίθεσης και το READ / WRITE δεν χρησιμοποιούνται συχνά, ώστε να μπορούν να βραχυκυκλωθούν στη γείωση. Αυτό θέτει την οθόνη LCD σε υψηλότερη αντίθεση και λειτουργία ανάγνωσης. Πρέπει απλώς να ελέγξουμε ENABLE και RS καρφίτσες για να στείλουμε ανάλογα χαρακτήρες και δεδομένα.
Οι συνδέσεις που γίνονται για LCD δίνονται παρακάτω:
PIN1 ή VSS στη γείωση
PIN2 ή VDD ή VCC σε ισχύ + 5v
PIN3 ή VEE στη γείωση (δίνει τη μέγιστη αντίθεση καλύτερα για έναν αρχάριο)
PIN4 ή RS (Επιλογή καταχώρησης) στο PD6 του uC
Το PIN5 ή το RW (Ανάγνωση / Εγγραφή) στη γείωση (θέτει την οθόνη LCD σε λειτουργία ανάγνωσης διευκολύνει την επικοινωνία για τον χρήστη)
PIN6 ή E (Ενεργοποίηση) σε PD5 του uC
PIN7 ή D0 έως PB0 του uC
PIN8 ή D1 έως PB1 του uC
PIN9 ή D2 έως PB2 του uC
PIN10 ή D3 έως PB3 του uC
PIN11 ή D4 έως PB4 του uC
PIN12 ή D5 έως PB5 του uC
PIN13 ή D6 έως PB6 του uC
PIN14 ή D7 έως PB7 του uC
Στο κύκλωμα μπορείτε να δείτε ότι χρησιμοποιήσαμε την επικοινωνία 8bit (D0-D7), ωστόσο αυτό δεν είναι υποχρεωτικό και μπορούμε να χρησιμοποιήσουμε την επικοινωνία 4bit (D4-D7), αλλά με το πρόγραμμα επικοινωνίας 4 bit γίνεται λίγο περίπλοκο. Έτσι, όπως φαίνεται στον παραπάνω πίνακα, συνδέουμε 10 ακίδες LCD με ελεγκτή, όπου 8 ακίδες είναι καρφίτσες δεδομένων και 2 ακίδες για έλεγχο.
Ο αισθητήρας υπερήχων είναι μια συσκευή τεσσάρων ακίδων, PIN1- VCC ή + 5V. PIN2-TRIGGER; PIN3- ECHO; PIN4- ΙΣΟΓΕΙΟ. Ο πείρος σκανδάλης είναι όπου δίνουμε σκανδάλη για να πούμε στον αισθητήρα να μετρήσει την απόσταση. Η ηχώ είναι ο ακροδέκτης εξόδου όπου παίρνουμε την απόσταση με τη μορφή πλάτους παλμού. Ο πείρος ηχούς εδώ είναι συνδεδεμένος με τον ελεγκτή ως εξωτερική πηγή διακοπής. Έτσι, για να αποκτήσετε το πλάτος της εξόδου σήματος, ο πείρος ηχούς του αισθητήρα συνδέεται με INT0 (διακοπή 0) ή PD2.
1. Ενεργοποίηση του αισθητήρα τραβώντας τον πείρο σκανδάλης για τουλάχιστον 12uS.
2. Μόλις η ηχώ φτάσει ψηλά παίρνουμε μια εξωτερική διακοπή και πρόκειται να ξεκινήσουμε έναν μετρητή (ενεργοποιώντας έναν μετρητή) στο ISR (Interrupt Service Routine) που εκτελείται αμέσως μετά από μια διακοπή που ενεργοποιείται.
3. Μόλις η ηχώ μειωθεί ξανά, δημιουργείται διακοπή, αυτή τη φορά θα σταματήσουμε τον μετρητή (απενεργοποίηση του μετρητή).
4. Έτσι, για έναν παλμό υψηλό σε χαμηλό σε πείρο ηχούς, ξεκινήσαμε έναν μετρητή και τον σταματήσαμε. Αυτή η μέτρηση ενημερώνεται στη μνήμη για να πάρει την απόσταση, καθώς έχουμε το πλάτος της ηχούς σε μετρήσεις τώρα.
5. Θα κάνουμε περαιτέρω υπολογισμούς στη μνήμη για να πάρουμε την απόσταση σε cm
6. Η απόσταση εμφανίζεται στην οθόνη LCD 16x2.
Για τη ρύθμιση των παραπάνω λειτουργιών πρόκειται να ορίσουμε τους ακόλουθους καταχωρητές:
Τα παραπάνω τρία μητρώα πρέπει να ρυθμιστούν ανάλογα για να λειτουργήσει η εγκατάσταση και θα τα συζητήσουμε εν συντομία, ΜΠΛΕ (INT0): αυτό το bit πρέπει να ρυθμιστεί ψηλά για να επιτρέψει την εξωτερική διακοπή0, μόλις ρυθμιστεί αυτή η καρφίτσα, καταλαβαίνουμε τις λογικές αλλαγές στο PIND2.
ΚΑΦΕ (ISC00, ISC01): αυτά τα δύο bit προσαρμόζονται για την κατάλληλη λογική αλλαγή στο PD2, η οποία πρέπει να θεωρηθεί διακοπή.
Έτσι, όπως είπαμε νωρίτερα, χρειαζόμαστε μια διακοπή για να ξεκινήσουμε μια μέτρηση και να την σταματήσουμε. Ορίσαμε λοιπόν το ISC00 ως ένα και λαμβάνουμε μια διακοπή όταν υπάρχει λογική LOW to HIGH στο INT0. μια άλλη διακοπή όταν υπάρχει λογική ΥΨΗΛΗ προς ΧΑΜΗΛΗ.
ΚΟΚΚΙΝΟ (CS10): Αυτό το bit είναι απλώς για ενεργοποίηση και απενεργοποίηση του μετρητή. Αν και λειτουργεί μαζί με άλλα κομμάτια CS10, CS12. Δεν κάνουμε προεγκαταστάσεις εδώ, οπότε δεν χρειάζεται να τους ανησυχούμε.
Μερικά σημαντικά πράγματα που πρέπει να θυμάστε εδώ είναι:
Χρησιμοποιούμε εσωτερικό ρολόι ATMEGA32A που είναι 1MHz. Δεν υπάρχει προεπιλογή εδώ, δεν κάνουμε σύγκριση αγώνα διακοπής δημιουργίας ρουτίνας, οπότε δεν υπάρχουν σύνθετες ρυθμίσεις μητρώου.
Η τιμή μέτρησης μετά την καταμέτρηση αποθηκεύεται σε καταχωρητή 16bit TCNT1.
Ελέγξτε επίσης αυτό το έργο με το arduino: Μέτρηση απόστασης χρησιμοποιώντας το Arduino
Επεξήγηση προγραμματισμού
Η λειτουργία του αισθητήρα μέτρησης απόστασης εξηγείται βήμα προς βήμα στο παρακάτω πρόγραμμα Γ.
#include // header για να ενεργοποιήσετε τον έλεγχο ροής δεδομένων πάνω από τις καρφίτσες #define F_CPU 1000000 // λέγοντας συνημμένη συχνότητα κρυστάλλου ελεγκτή