Sie sind auf Seite 1von 18

Projektdokumentation

Grundpraktikum II

Abstandsmessung

Mónica Sofía Grijalva de León


Matrikelnummer: 7211948
Fachhochschule Dortmund
Inhalt

1. Beschreibung ..................................................................................................................... 3
2. Bauelemente ..................................................................................................................... 4
3. Schaltbild ........................................................................................................................... 5
4. Ultrasonic Distance Sensor HC-SR04 ................................................................................. 6
Beschreibung ......................................................................................................................... 6
Pinbeschreibung .................................................................................................................... 6
Anwendung ........................................................................................................................... 6
5. Ablauf des Messvorgangs .................................................................................................. 7
Bedienung ............................................................................................................................... 12
6. Literaturverzeichnis ......................................................................................................... 13
7. Anhang A – Quellcode ..................................................................................................... 14
7.1 Headers ......................................................................................................................... 14
7.2 CPP-Dateiern ................................................................................................................. 16
1. Beschreibung

Das Ziel des Projekts ist die genaue Messung von Entfernungen mithilfe eines
Ultraschallsensors. Durch die Integration des Sensors soll eine bequeme und zuverlässige
Methode zur Bestimmung von Entfernungen zwischen Objekten oder Oberflächen
bereitgestellt werden. Ein Display wird verwendet, um die gemessene Entfernung in
einem klaren und leicht lesbaren Format anzuzeigen. Das Display ermöglicht es dem
Benutzer, die Entfernung sofort zu visualisieren und zu interpretieren, ohne komplexe
Berechnungen oder Sensor-Rohdaten zu verwenden.

Es liefert Echtzeit-Updates und informiert den Benutzer über Änderungen der


gemessenen Entfernung. Dies ist besonders nützlich in Anwendungen, bei denen präzise
Entfernungsmessungen erforderlich sind, z. B. in der Robotik oder der Objekterkennung.
Die Anzeige bietet auch Transparenz, da der Benutzer die Genauigkeit und
Zuverlässigkeit der Messwerte überprüfen kann. Zusammenfassend verbessert die
Einbindung eines Displays die Benutzerfreundlichkeit, ermöglicht eine fundierte
Entscheidungsfindung und gewährleistet die Transparenz und Vertrauenswürdigkeit der
gemessenen Entfernungswerte.
2. Bauelemente

Für das Projekt wurden die folgenden Komponenten verwendet:

• Arduino-Board (Arduino-Platine)
• Ein Breadboard und Überbrückungsdrähte (Jumper)
• Ein Potentiometer: Ein variabler Widerstand, der die Steuerung des Stromflusses
ermöglicht. In diesem Projekt wurde es verwendet, um die Helligkeit und den
Kontrast des LCD-Displays einzustellen.
• Ein HD44780 LCD (Flüssigkristallanzeige): Dies ist ein Anzeigemodul, das
üblicherweise zur Darstellung alphanumerischer Zeichen und grafischer
Informationen verwendet wird. Liefert die visuelle Ausgabe der
Abstandsmessung.
• Ein Ultraschallsensor HC-SR04: Dies ist ein Sensor, der Schallwellen zur
Abstandsmessung verwendet. Er sendet Ultraschallimpulse aus und misst die
Zeit, die die Impulse brauchen, um nach dem Auftreffen auf ein Objekt
zurückzuprallen. In diesem Projekt wurde er verwendet, um Abstand zu
erkennen und zu messen.
3. Schaltbild

Das folgende Diagramm zeigt die elektrische Schaltung, die das LCD, den HC-SR04-
Sensor, das Potentiometer und die digitalen Pins des Arduino-Boards verbindet.

Abbildung 1 - Schaltbild
4. Ultrasonic Distance Sensor HC-SR04
Beschreibung
Das HC-SR04 Ultraschallmodul eignet sich für die Messung von Entfernungen im Bereich
von 2 cm bis ungefähr 3 m. Es bietet eine Auflösung von 3 mm. Das Modul benötigt
lediglich eine einfache 5V Versorgungsspannung und verbraucht weniger als 2 mA Strom.
Nachdem es mit einer fallenden Flanke (TTL-Pegel) ausgelöst wurde, führt das Modul
automatisch eine Entfernungsmessung durch und wandelt sie in ein PWM-Signal um, das
am Ausgang verfügbar ist. Ein Messintervall dauert 20 ms, was bedeutet, dass bis zu 50
Messungen pro Sekunde möglich sind.

Pinbeschreibung
- VCC, Versorgungsspannung 5V
- Triggereingang, TTL-Pegel
- Echo, Ausgang Messergebnis, TTL-Pegel
- GND, 0V

Anwendung
Das HC-SR04 Ultraschallmodul wird durch eine fallende Flanke am Triggereingang (Pin 2)
ausgelöst, die mindestens 10 µs dauert. Das Modul sendet dann nach etwa 250 µs ein
40 kHz Burst-Signal für 200 µs aus. Der Ausgang (Echo, Pin 3) wird sofort auf einen hohen
Pegel gesetzt, und das Modul wartet auf den Empfang des Echos. Wenn das Echo erkannt
wird, fällt der Ausgang auf einen niedrigen Pegel. Nach 20 ms kann eine weitere Messung
durchgeführt werden. Wenn kein Echo erkannt wird, bleibt der Ausgang für insgesamt
200 ms auf einem hohen Pegel, um eine erfolglose Messung anzuzeigen. Danach wartet
das Modul auf die nächste fallende Flanke am Triggereingang, und die Messung beginnt
von vorne.Das Modul liefert die besten Messergebnisse, wenn es an glatten, ebenen
Oberflächen reflektiert wird. Das Material der Oberfläche ist bis zu einer Entfernung von
1 m nicht besonders wichtig. Der Winkel zum Objekt kann bei kurzen Entfernungen von
weniger als 1 m bis etwa 45° betragen. Auch dünnere Objekte werden zuverlässig
erkannt. Zum Beispiel kann ein normaler Kugelschreiber in einer Entfernung von etwa 30
cm sicher erfasst werden. Bei der maximalen Entfernung von 3 m muss präzise gezielt
werden, und es sollten keine anderen Objekte in ähnlicher Entfernung innerhalb des 15°-
Sendekegels vorhanden sein. (KT-elektronic, 2012)
5. Ablauf des Messvorgangs
Der HC-SR04 Ultraschall-Distanzsensor sendet einen Ultraschall mit einer Frequenz von
40.000 Hz aus, der sich durch die Luft ausbreitet. Wenn der Ultraschall auf ein Objekt
oder ein Hindernis in seinem Weg trifft, wird er zum Sensormodul zurückreflektiert.
Durch Messung der Zeit, die der Ultraschall für den Weg zum Objekt und zurück benötigt,
und unter Berücksichtigung der Schallgeschwindigkeit lässt sich die Entfernung zum
Objekt berechnen.

Zur Erzeugung des Ultraschalls wird der Trig-Pin des Sensors für die Dauer von 10 µs auf
einen hohen Wert gesetzt. Dies löst die Emission eines 8-Zyklen-Ultraschallbursts aus,
der sich mit Schallgeschwindigkeit ausbreitet. Der Echo-Pin wird sofort nach dem
Aussenden des Bursts auf High gesetzt, was anzeigt, dass das Modul nun auf die
reflektierte Welle wartet. Dies ist setzt das Event zu 0.

Wird ein reflektierter Impuls empfangen, geht der Echo-Pin vor der Timeout-Periode auf
Low. Dies ist setzt das Event zu 2. Die Differenz zwischen T2 und T1 bestimmt die Dauer.
Die Dauer, für die der Echo-Pin auf "high" bleibt, kann zur Bestimmung der von der
Schallwelle zurückgelegten Strecke verwendet werden und liefert die Entfernung
zwischen Sensor und Objekt.
Um das Zeitintervall in Mikrosekunden in die Entfernung in Zentimetern umzurechnen,
wird im Code folgende Formel verwendet:

distance = ((T2 - T1) / 2) / 29;

1. (T2 - T1) / 2": Damit wird die Hälfte des Zeitintervalls zwischen der steigenden
und der fallenden Flanke des von der Interrupt-Service-Routine (ISR) erfassten
Signals berechnet. Da die Schallgeschwindigkeit der Hin- und Rückreise
entspricht, ergibt die Division der Zeit durch 2 die Zeit, die der Schall für die
einfache Strecke von der Quelle zum Objekt oder Hindernis benötigt.
2. `/ 29`: Dies ist der Umrechnungsfaktor, mit dem die Einwegzeit in die Entfernung
umgerechnet wird. Der Wert 29 basiert auf der ungefähren Geschwindigkeit des
Schalls in Zentimetern pro Mikrosekunde. Die tatsächliche Schallgeschwindigkeit
kann je nach Umgebungsbedingungen variieren, aber 29 wird im Allgemeinen als
Schätzwert verwendet.
Dividiert man das halbe Zeitintervall durch 29, erhält man die vom Schall
zurückgelegte Entfernung in Zentimetern. Der sich daraus ergebende Wert in der
Variablen `Distanz` stellt also die geschätzte Entfernung vom Sensor zum Objekt
oder Hindernis in Zentimetern dar.

Es ist zu beachten, dass diese Umrechnung von der Schallgeschwindigkeit in der Luft
ausgeht und nicht in allen Szenarien sehr genau ist. Faktoren wie Temperatur,
Feuchtigkeit und Luftdichte können die Schallgeschwindigkeit beeinflussen. Außerdem
geht der Code von einer direkten Sichtlinie zwischen dem Sensor und dem Objekt aus.

(Dejan, 2015)
6. Software
6.1 Syncloop

Die Dateien `syncloop.h` und `syncloop.cpp` implementieren zusammen einen


Synchronisationsschleifenmechanismus für zeitbasierte Operationen in einem Arduino-
Programm.

Die Datei `syncloop.h` dient als Header-Datei und bietet mehrere Systemkonstanten und
Definitionen. Sie enthält die notwendigen Bibliotheken und definiert Konstanten wie
Systemzeitintervalle, verfügbare Zeitschlitze und Systemlastüberwachung. Außerdem
werden die Funktionsprototypen für die Initialisierung des Timers und der
Synchronisationsschleife deklariert.

Die Datei `syncloop.cpp` enthält die eigentliche Implementierung des


Synchronisationsschleifenmechanismus. Sie beginnt mit der Definition einer flüchtigen
booleschen Variable namens "sysint". Diese Variable wird verwendet, um den Überlauf-
Interrupt von Timer 1 zu signalisieren, einem Hardware-Timer, der auf Arduino-Boards
verfügbar ist.

Die Datei verfolgt dann die Systemauslastung, indem sie die Variable `idlecnt`
inkrementiert und Systemüberlastungen erkennt. Die `ISR` (Interrupt Service Routine)
für den Timer 1 Compare A Interrupt ist implementiert, die das `sysint` Flag auf true
setzt, wenn der Interrupt auftritt.

Die Funktion `initTimer1()` initialisiert den Timer 1 mit einem Systeminterrupt von 62,5
ms. Sie richtet die notwendigen Register und Einstellungen für Timer 1 ein, um Interrupts
im gewünschten Intervall zu erzeugen.

Die wichtigste Funktion in `syncloop.cpp` ist `syncloop()`. Diese Funktion ist für die
Synchronisation der Programmausführung mit den Systeminterrupts verantwortlich. Sie
überprüft das `sysint`-Flag, um festzustellen, ob ein Interrupt aufgetreten ist. Wenn keine
Unterbrechung aufgetreten ist, erhöht sie die Variable `idlecnt` und zeigt damit an, dass
das System im Leerlauf ist. Wenn eine Unterbrechung aufgetreten ist, wird das `sysint`-
Flag zurückgesetzt, die Systemuhr aktualisiert und das System auf Überlastungen
überprüft.
6.2 Mainprogramm

Die Datei `gp2_P.h` dient als Header-Datei und definiert verschiedene Konstanten und
enthält notwendige Bibliotheken. Sie enthält Informationen über die Software, wie die
Version und das Erstellungsdatum. Außerdem definiert sie Konstanten im
Zusammenhang mit der Hauptschleife, einschließlich der maximalen Zählung und der
sekundären Zählwerte, die für zeitbasierte Operationen verwendet werden.

In der Datei `gp2_P.h` sind auch Pin-Definitionen für den GP2-Sensor enthalten. Die
Konstante "ECHO" steht für den Pin, der mit dem Echosignal des Sensors verbunden ist,
das für externe Unterbrechungen verwendet werden kann. Die Konstante `TRIG` steht
für den Pin, der mit dem Triggersignal des Sensors verbunden ist.

Die Datei "gp2_P.cpp" enthält die Implementierung der wichtigsten Funktionen des GP2-
Sensors. Sie beginnt mit der Einbindung der notwendigen Bibliotheken, wie z.B. der
LiquidCrystal-Bibliothek, die für die LCD-Anbindung verwendet wird. Die Datei
initialisiert eine Instanz der LiquidCrystal-Klasse und konfiguriert die LCD-Pins
entsprechend. Außerdem werden mehrere globale Variablen deklariert, darunter eine
"Event"-Variable zur Verfolgung von Sensorereignissen, eine "Distance"-Variable zur
Speicherung des gemessenen Abstands sowie "T1" und "T2" für Timing-Zwecke.

Die Datei definiert eine Interrupt-Service-Routine (`ISR`) für den externen Interrupt INT0.
Diese Routine behandelt den vom GP2-Sensor ausgelösten Interrupt, und zwar für den
INT0-Pin (PD2 oder Digitalpin 2). In dieser ISR wird der "Ereignis"-Zähler erhöht und die
Zeitwerte "T1" und "T2" auf der Grundlage der Anzahl der Ereignisse aufgezeichnet.

In der Funktion `setup()` initialisiert das Programm verschiedene Komponenten und


Konfigurationen. Es beinhaltet die Initialisierung der Interrupt-Synchronisation mit
`SYNCINIT`, richtet den externen Interrupt INT0 so ein, dass er sowohl bei steigenden als
auch bei fallenden Flanken ausgelöst wird, und aktiviert die Interrupts. Darüber hinaus
werden die Pin-Modi für die ECHO- und TRIG-Pins eingestellt und die serielle
Kommunikation initialisiert.
Die Hauptschleife, die in der Funktion `loop()` definiert ist, besteht aus mehreren
logischen Abschnitten. Sie beginnt mit der Ausführung von unsynchronisiertem Code,
bevor sie mit `SYNCLOOP` in die synchronisierte Schleife eintritt. Innerhalb der
synchronisierten Schleife führt das Programm bestimmte Operationen in einem Intervall
von 62,5 ms aus.

Das Triggersignal an den GP2-Sensor wird gesendet, wenn `count` gleich 1 ist. Wenn
`count` gleich 2 ist, wird die gemessene Entfernung auf der Grundlage der von der
Unterbrechungsroutine aufgezeichneten Zeitwerte berechnet. Die Entfernung wird dann
auf einer LCD-Anzeige angezeigt und über die serielle Kommunikation ausgedruckt.

Die Variable `count` wird als Schleifenzähler verwendet, der bei jeder Iteration der
Hauptschleife inkrementiert wird. Wenn sie den Wert `SEC_COUNT` erreicht (in diesem
Fall 15), wird sie auf 0 zurückgesetzt.

Auf diese Weise ist das Programm in der Lage, in der Summe verschiedene andere
Aktivitäten auszuführen und wird während des Prozesses nicht gesperrt.
7. Bedienung

Um den mitgelieferten Code und die Schaltung zu verwenden, sollten die folgenden
Schritte befolgt werden:

- Für das LCD-Display sollten die vorgesehenen Pins (12, 11, 5, 4, 3, 2) mit den
entsprechenden Pins des LCDs verbunden werden. Der Trigger-Pin des
Abstandssensors sollte mit dem Pin 3 verbunden werden, der Echo-Pin mit dem
Pin 2.
- Ein Ende des Potentiometer sollte mit GND, das andere Ende mit 5V und der
mittlere Pin mit dem PIN V0 des LCDs.
- Nachdem der Code hochgeladen und die Schaltung mit Strom versorgt wurde,
kann das Potentiometer eingestellt werden, um die Helligkeit und den Kontrast
der LCD-Anzeige zu regeln.Sobald die Helligkeit und der Kontrast eingestellt sind,
beginnt das LCD mit der Anzeige der Entfernungsmessungen.
- Die gemessene Entfernung in Zentimetern wird auf dem LCD-Bildschirm
angezeigt, und die entsprechenden Werte werden über die serielle Schnittstelle
mit einer Baudrate von 9600 ausgedruckt.
- Es ist wichtig, sicherzustellen, dass sich ein Objekt oder Hindernis innerhalb des
Erfassungsbereichs des Sensors vor dem Sensor befindet.

Die folgende Abbildung zeigt, wie die Schaltung am Ende dieser Schritte aussieht.
8. Literaturverzeichnis

Dejan. (2015). How to Mechatronics. Von Ultrasonic Sensor HC-SR04 and Arduino –
Complete Guide: https://howtomechatronics.com/tutorials/arduino/ultrasonic-
sensor-hc-sr04/?utm_content=cmp-true abgerufen

KT-elektronic. (2012). Ultraschall Messmodul HC-SR04. Von


https://www.mikrocontroller.net/attachment/218122/HC-
SR04_ultraschallmodul_beschreibung_3.pdf abgerufen
9. Anhang A – Quellcode

7.1 Headers
7.2 CPP-Dateiern

Das könnte Ihnen auch gefallen