- Erforderliche Materialien:
- Wie funktioniert ein Ultraschallsensor?
- Programmieren Ihres PIC-Mikrocontrollers:
Damit ein Projekt zum Leben erweckt werden kann, müssen Sensoren verwendet werden. Sensoren fungieren als Augen und Ohren für alle eingebetteten Anwendungen und helfen dem digitalen Mikrocontroller zu verstehen, was in dieser realen analogen Welt tatsächlich passiert. In diesem Tutorial lernen wir, wie man den Ultraschallsensor HC-SR04 mit dem PIC-Mikrocontroller verbindet.
Der HC-SR04 ist ein Ultraschallsensor, mit dem (theoretisch) Entfernungen zwischen 2 cm und 450 cm gemessen werden können. Dieser Sensor hat sich in vielen Projekten bewährt, die die Erkennung von Hindernissen, Entfernungsmessung, Umgebungskartierung usw. umfassen. Am Ende dieses Artikels erfahren Sie, wie dieser Sensor funktioniert und wie er mit dem Mikrocontroller PIC16F877A verbunden wird, um die Entfernung und Anzeige zu messen es auf dem LCD-Bildschirm. Klingt interessant, oder !! Also lasst uns anfangen…
Erforderliche Materialien:
- PIC16F877A MCU mit Programmieraufbau
- LCD 16 * 2 Anzeige
- Ultraschallsensor (HC-SR04)
- Kabel anschließen
Wie funktioniert ein Ultraschallsensor?
Bevor wir weiter kommen, sollten wir wissen, wie ein Ultraschallsensor funktioniert, damit wir dieses Tutorial viel besser verstehen können. Der in diesem Projekt verwendete Ultraschallsensor ist unten dargestellt.
Wie Sie sehen können, hat es zwei kreisförmige Augen wie Vorsprünge und vier Stifte, die herauskommen. Die zwei augenähnlichen Projektionen sind die Ultraschallwelle (im Folgenden als US-Welle bezeichnet), Sender und Empfänger. Der Sender sendet eine US-Welle mit einer Frequenz von 40 Hz aus. Diese Welle bewegt sich durch die Luft und wird zurückreflektiert, wenn sie ein Objekt erfasst. Die zurückkehrenden Wellen werden vom Empfänger beobachtet. Jetzt wissen wir, wie lange es dauert, bis diese Welle reflektiert wird und zurückkehrt, und die Geschwindigkeit der US-Welle ist ebenfalls universell (3400 cm / s). Mit diesen Informationen und den folgenden Schulformeln können wir die zurückgelegte Strecke berechnen.
Entfernung = Geschwindigkeit × Zeit
Nachdem wir nun wissen, wie ein US-Sensor funktioniert, lassen Sie uns wissen, wie er über die vier Pins mit jeder MCU / CPU verbunden werden kann. Diese vier Pins sind Vcc, Trigger, Echo und Ground. Das Modul arbeitet mit +5 V und daher werden der Vcc und der Erdungsstift zur Stromversorgung des Moduls verwendet. Die anderen beiden Pins sind die E / A-Pins, über die wir mit unserer MCU kommunizieren. Der Trigger-Pin sollte als Ausgangs-Pin deklariert und für 10 us hoch gemacht werden. Dadurch wird die US-Welle als 8-Takt-Schallstoß in die Luft übertragen. Sobald die Welle beobachtet wird, geht der Echo-Pin für das genaue Zeitintervall hoch, das die US-Welle benötigt hat, um zum Sensormodul zurückzukehren. Daher wird dieser Echo-Pin als Eingang deklariertund ein Timer wird verwendet, um zu messen, wie lange der Stift hoch war. Dies könnte weiter durch das folgende Zeitdiagramm verstanden werden.
Ich hoffe, Sie haben einen vorläufigen Weg gefunden, um diesen Sensor mit PIC zu verbinden. In diesem Tutorial werden wir das Timer-Modul und das LCD-Modul verwenden. Ich gehe davon aus, dass Sie mit beiden vertraut sind. Wenn nicht, greifen Sie bitte auf das entsprechende Tutorial zurück, da ich die meisten diesbezüglichen Informationen überspringen werde.
- LCD-Schnittstelle mit PIC-Mikrocontroller
- Grundlegendes zu Timern im PIC-Mikrocontroller
Schaltplan:
Das vollständige Schaltbild für die Verbindung des Ultraschallsensors mit dem PIC16F877A ist nachstehend aufgeführt:
Wie gezeigt, besteht die Schaltung nur aus einem LCD-Display und dem Ultraschallsensor selbst. Der US-Sensor kann mit +5 V betrieben werden und wird daher direkt vom Spannungsregler 7805 mit Strom versorgt. Der Sensor hat einen Ausgangspin (Trigger-Pin), der mit Pin 34 (RB1) verbunden ist, und der Eingangspin (Echo-Pin) ist mit Pin 35 (RB2) verbunden. Die vollständige Stiftverbindung ist in der folgenden Tabelle dargestellt.
S.No: |
PIC-Pin-Nummer |
Pin Name |
Verbunden |
1 |
21 |
RD2 |
RS des LCD |
2 |
22 |
RD3 |
E des LCD |
3 |
27 |
RD4 |
D4 des LCD |
4 |
28 |
RD5 |
D5 des LCD |
5 |
29 |
RD6 |
D6 des LCD |
6 |
30 |
RD7 |
D7 des LCD |
7 |
34 |
RB1 |
Auslöser von US |
8 |
35 |
RB2 |
Echo der USA |
Programmieren Ihres PIC-Mikrocontrollers:
Das vollständige Programm für dieses Tutorial finden Sie am Ende dieser Seite. Weiter unten habe ich den Code in kleinen, vollständigen Abschnitten erklärt, damit Sie ihn verstehen können. Wie bereits erwähnt, beinhaltet das Programm das Konzept der LCD-Schnittstelle und des Timers, das in diesem Lernprogramm nicht im Detail erläutert wird, da wir sie bereits in den vorherigen Lernprogrammen behandelt haben.
Im Inneren der Hauptfunktion beginnen wir mit der Initialisierung der IO-Pins und anderer Register wie gewohnt. Wir definieren die E / A-Pins für LCD- und US-Sensor und initiieren auch das Timer 1-Register, indem wir es so einstellen, dass es mit 1: 4-Vorskalar arbeitet und die interne Uhr (Fosc / 4) verwendet.
TRISD = 0x00; // PORTD als Ausgang für die Schnittstelle zum LCD deklariert TRISB0 = 1; // Definiere den RB0 Pin als Eingang zur Verwendung als Interrupt Pin TRISB1 = 0; // Der Trigger-Pin des US-Sensors wird als Ausgangs-Pin gesendet. TRISB2 = 1; // Der Echo-Pin des US-Sensors wird als Eingangspin gesetzt. TRISB3 = 0; // RB3 ist Ausgangspin für LED T1CON = 0x20; // 4 Vorskalare und interne Uhr
Der Timer 1 ist ein 16-Bit-Timer, der in PIC16F877A verwendet wird. Das T1CON-Register steuert die Parameter des Timer-Moduls und das Ergebnis wird in TMR1H und TMR1L gespeichert, da es sich um ein 16-Bit-Ergebnis handelt, werden die ersten 8 in TMR1H und dem gespeichert nächste 8 in TMR1L. Dieser Timer kann mit TMR1ON = 0 bzw. TMR1ON = 1 ein- oder ausgeschaltet werden.
Jetzt ist der Timer einsatzbereit, aber wir müssen die US-Wellen aus dem Sensor senden. Dazu müssen wir den Trigger-Pin für 10 us hoch halten. Dies geschieht mit dem folgenden Code.
Trigger = 1; __delay_us (10); Trigger = 0;
Wie im obigen Zeitdiagramm gezeigt, bleibt der Echo-Pin niedrig, bis die Welle zurückkehrt, und geht dann hoch und bleibt hoch für die genaue Zeit, die die Wellen benötigen, um zurückzukehren. Diese Zeit muss vom Timer 1-Modul gemessen werden. Dies kann über die folgende Zeile erfolgen
while (Echo == 0); TMR1ON = 1; while (Echo == 1); TMR1ON = 0;
Sobald die Zeit gemessen ist, wird der resultierende Wert in den Registern TMR1H und TMR1L gespeichert. Diese Register müssen zusammengelegt werden, um den 16-Bit-Wert zu erhalten. Dies erfolgt über die folgende Zeile
time_taken = (TMR1L - (TMR1H << 8));
Diese Zeit wird in Form von Bytes angegeben. Um den tatsächlichen Zeitwert zu erhalten, müssen wir die folgende Formel verwenden.
Zeit = (16-Bit-Registerwert) * (1 / Interner Takt) * ( Vorskala) Interner Takt = Fosc / 4 In unserem Fall ist Fosc = 20000000 MHz und Vorskala = 4. Daher ist der Wert des Internen Takts 5000000 MHz und der Wert der Zeit ist Zeit = (16-Bit-Registerwert) * (1/5000000) * (4) = (16-Bit-Registerwert) * (4/5000000) = (16-Bit-Registerwert) * 0,0000008 Sekunden (ODER) Zeit = (16-Bit-Registerwert) * 0,8 Mikrosekunden
In unserem Programm wird der Wert des 16-Bit-Registers in der Variablen time_taken gespeichert und daher wird die folgende Zeile verwendet, um die time_taken in Mikrosekunden zu berechnen
time_taken = time_taken * 0,8;
Als nächstes müssen wir herausfinden, wie man die Entfernung berechnet. Wie wir wissen, Entfernung = Geschwindigkeit * Zeit. Hier sollte das Ergebnis jedoch durch 2 geteilt werden, da die Welle sowohl die Sende- als auch die Empfangsentfernung abdeckt. Die Geschwindigkeit der Welle (Schall) beträgt 34000 cm / s.
Entfernung = (Geschwindigkeit * Zeit) / 2 = (34000 * (16-Bit-Registerwert) * 0,0000008) / 2 Entfernung = (0,0272 * 16-Bit-Registerwert) / 2
Der Abstand kann also wie folgt in Zentimetern berechnet werden:
Entfernung = (0,0272 * Zeitaufwand) / 2;
Nachdem wir den Wert der Entfernung und der Zeit berechnet haben, müssen wir sie einfach auf dem LCD-Bildschirm anzeigen.
Entfernungsmessung mit PIC und Ultraschallsensor:
Nachdem Sie die Verbindungen hergestellt und den Code hochgeladen haben, sollte Ihr Versuchsaufbau ungefähr so aussehen (siehe Abbildung unten).
Das in diesem Bild gezeigte PIC Perf-Board wurde für unsere PIC-Lernserie erstellt, in der wir den Umgang mit PIC-Mikrocontrollern gelernt haben. Wenn Sie nicht wissen, wie Sie ein Programm mit Pickit 3 brennen, können Sie zu diesen PIC Microcontroller-Tutorials mit MPLABX und XC8 zurückkehren, da ich all diese grundlegenden Informationen überspringen werde.
Platzieren Sie nun ein Objekt vor dem Sensor und es sollte anzeigen, wie weit das Objekt vom Sensor entfernt ist. Sie können auch feststellen, wie lange es dauert, bis die Welle in Mikrosekunden gesendet und zurückgesendet wird.
Sie können das Objekt in Ihrer bevorzugten Entfernung bewegen und den auf dem LCD angezeigten Wert überprüfen. Ich konnte den Abstand von 2 cm bis 350 cm mit einer Genauigkeit von 0,5 cm messen. Dies ist ein recht zufriedenstellendes Ergebnis! Ich hoffe, Ihnen hat das Tutorial gefallen und Sie haben gelernt, wie man etwas selbst macht. Wenn Sie irgendwelche Zweifel haben, lassen Sie sie im Kommentarbereich unten fallen oder nutzen Sie die Foren.
Überprüfen Sie auch die Schnittstelle des Ultraschallsensors mit anderen Mikrocontrollern:
- Entfernungsmessung auf Basis von Arduino- und Ultraschallsensoren
- Messen Sie die Entfernung mit dem Ultraschallsensor Raspberry Pi und HCSR04
- Entfernungsmessung mit HC-SR04 und AVR Microcontroller