In diesem Tutorial werden wir eine Schaltung zur Entfernungsmessung diskutieren und entwerfen. Diese Schaltung wird durch die Verbindung des Ultraschallsensors „HC-SR04“ mit dem AVR-Mikrocontroller entwickelt. Dieser Sensor verwendet eine Technik namens „ECHO“, die Sie erhalten, wenn der Schall nach dem Auftreffen auf eine Oberfläche zurückreflektiert wird.
Wir wissen, dass Schallschwingungen nicht durch Feststoffe dringen können. Wenn also eine Schallquelle Vibrationen erzeugt, bewegen sie sich mit einer Geschwindigkeit von 220 Metern pro Sekunde durch die Luft. Diese Schwingungen, wenn sie auf unser Ohr treffen, beschreiben wir sie als Schall. Wie bereits erwähnt, können diese Schwingungen nicht durch Festkörper gehen. Wenn sie also auf eine Oberfläche wie eine Wand treffen, werden sie mit der gleichen Geschwindigkeit zur Quelle zurückreflektiert, was als Echo bezeichnet wird.
Der Ultraschallsensor „HC-SR04“ liefert ein Ausgangssignal proportional zur Entfernung basierend auf dem Echo. Der Sensor erzeugt hier beim Auslösen eine Schallschwingung im Ultraschallbereich, danach wartet er auf die Rückkehr der Schallschwingung. Basierend auf den Parametern, der Schallgeschwindigkeit (220 m / s) und der Zeit, die das Echo benötigt, um die Quelle zu erreichen, liefert es einen Ausgangsimpuls proportional zur Entfernung.
Wie in der Abbildung gezeigt, müssen wir zuerst den Sensor für die Entfernungsmessung einleiten, dh ein HIGH-Logiksignal am Triggerstift des Sensors für mehr als 10 us. Danach wird vom Sensor eine Schallschwingung gesendet, nachdem ein Echo vom Sensor bereitgestellt wird ein Signal am Ausgangspin, dessen Breite proportional zum Abstand zwischen Quelle und Hindernis ist.
Dieser Abstand wird berechnet als Abstand (in cm) = Breite des Impulsausgangs (in US) / 58.
Hier muss die Breite des Signals in Vielfachen von US (Mikrosekunde oder 10 ^ -6) genommen werden.
Erforderliche Komponenten
Hardware: ATMEGA32, Stromversorgung (5 V), AVR-ISP-PROGRAMMER, JHD_162ALCD (16x2LCD), 1000 uF Kondensator, 10 kΩ Widerstand (2 Stück), HC-SR04 Sensor.
Software: Atmel Studio 6.1, Progisp oder Flash Magic.
Schaltplan und Arbeitserklärung
Hier verwenden wir PORTB, um eine Verbindung zum LCD-Datenport (D0-D7) herzustellen. Jeder, der nicht mit FUSE BITS von ATMEGA32A arbeiten möchte, kann PORTC nicht verwenden, da PORTC eine spezielle Art der Kommunikation enthält, die nur durch Ändern von FUSEBITS deaktiviert werden kann.
Sie beobachten, dass ich in der Schaltung nur zwei Steuerstifte genommen habe, was die Flexibilität eines besseren Verständnisses bietet. Das Kontrastbit und READ / WRITE werden nicht oft verwendet, so dass sie gegen Masse kurzgeschlossen werden können. Dies versetzt das LCD in den höchsten Kontrast- und Lesemodus. Wir müssen nur die ENABLE- und RS-Pins steuern, um Zeichen und Daten entsprechend zu senden.
Die Verbindungen, die für LCD hergestellt werden, sind unten angegeben:
PIN1 oder VSS gegen Masse
PIN2 oder VDD oder VCC auf +5V
PIN3 oder VEE gegen Masse (bietet maximalen Kontrast am besten für Anfänger)
PIN4 oder RS (Registerauswahl) an PD6 von uC
PIN5 oder RW (Lesen / Schreiben) nach Masse (versetzt das LCD in den Lesemodus, erleichtert die Kommunikation für den Benutzer)
PIN6 oder E (Aktivieren) zu PD5 von uC
PIN7 oder D0 bis PB0 von uC
PIN8 oder D1 bis PB1 von uC
PIN9 oder D2 bis PB2 von uC
PIN10 oder D3 bis PB3 von uC
PIN11 oder D4 bis PB4 von uC
PIN12 oder D5 bis PB5 von uC
PIN13 oder D6 bis PB6 von uC
PIN14 oder D7 bis PB7 von uC
In der Schaltung sehen Sie, dass wir 8-Bit-Kommunikation (D0-D7) verwendet haben, dies ist jedoch nicht obligatorisch und wir können 4-Bit-Kommunikation (D4-D7) verwenden, aber mit 4-Bit-Kommunikationsprogramm wird ein bisschen komplex. Wie in der obigen Tabelle gezeigt, verbinden wir 10 Pins des LCD mit dem Controller, wobei 8 Pins Datenpins und 2 Pins zur Steuerung sind.
Der Ultraschallsensor ist ein vierpoliges Gerät, PIN1-VCC oder + 5V; PIN2-TRIGGER; PIN3-ECHO; PIN4-BODEN. Am Trigger-Pin geben wir den Trigger, um den Sensor anzuweisen, die Entfernung zu messen. Das Echo ist der Ausgangspin, an dem wir den Abstand in Form der Impulsbreite erhalten. Der Echo-Pin ist hier als externe Interrupt-Quelle mit dem Controller verbunden. Um die Breite des Signalausgangs zu erhalten, ist der Echo-Pin des Sensors mit INT0 (Interrupt 0) oder PD2 verbunden.
1. Auslösen des Sensors durch Hochziehen des Auslösestifts für mindestens 12 us.
2. Sobald das Echo hoch geht, erhalten wir einen externen Interrupt und starten einen Zähler (der einen Zähler aktiviert) in der ISR (Interrupt Service Routine), der direkt nach dem Auslösen eines Interrupts ausgeführt wird.
3. Sobald das Echo wieder niedrig wird, wird ein Interrupt generiert. Dieses Mal stoppen wir den Zähler (Deaktivieren des Zählers).
4. Für einen Impuls von hoch nach niedrig am Echo-Pin haben wir einen Zähler gestartet und gestoppt. Diese Anzahl wird in den Speicher aktualisiert, um die Entfernung zu ermitteln, da jetzt die Breite des Echos gezählt wird.
5. Wir werden weitere Berechnungen im Speicher durchführen, um den Abstand in cm zu ermitteln
6. Der Abstand wird auf dem 16x2 LCD-Display angezeigt.
Zum Einrichten der oben genannten Funktionen werden die folgenden Register eingestellt:
Die obigen drei Register müssen entsprechend eingestellt werden, damit das Setup funktioniert, und wir werden sie kurz diskutieren.
BLAU (INT0): Dieses Bit muss hoch gesetzt werden, um den externen Interrupt0 zu aktivieren. Sobald dieser Pin gesetzt ist, können wir die logischen Änderungen am PIND2-Pin erfassen.
BRAUN (ISC00, ISC01): Diese beiden Bits werden für die entsprechende Logikänderung an PD2 angepasst, die als Interrupt betrachtet werden soll.
Wie bereits erwähnt, benötigen wir eine Unterbrechung, um eine Zählung zu starten und zu stoppen. Also setzen wir ISC00 als eins und erhalten einen Interrupt, wenn bei INT0 eine logische LOW to HIGH vorliegt; ein weiterer Interrupt, wenn eine logische HIGH to LOW vorliegt.
ROT (CS10): Dieses Bit dient lediglich zum Aktivieren und Deaktivieren des Zählers. Obwohl es zusammen mit anderen Bits CS10, CS12 funktioniert. Wir führen hier keine Vorskalierung durch, daher brauchen wir uns keine Sorgen zu machen.
Einige wichtige Dinge, an die Sie sich erinnern sollten, sind:
Wir verwenden den internen Takt von ATMEGA32A, der 1 MHz beträgt. Keine Vorskalierung hier, wir führen keine Routine zum Generieren von Vergleichsinterrupts durch, also keine komplexen Registereinstellungen.
Der Zählwert nach dem Zählen wird im 16-Bit-TCNT1-Register gespeichert.
Überprüfen Sie dieses Projekt auch mit Arduino: Entfernungsmessung mit Arduino
Programmiererklärung
Die Arbeitsweise des Entfernungsmesssensors wird im folgenden C-Programm Schritt für Schritt erläutert.
#include // Header zum Aktivieren der Datenflusssteuerung über Pins #define F_CPU 1000000 // Angabe der angehängten Controller-Kristallfrequenz #include