
Ziel des Projekts
Ein Ultraschallsensor misst die Entfernung zu einem Objekt und zeigt die Entfernung auf einem LCD an.

Das Programm
Im Programm sendet der Befehl pulseIn() ein HIGH-Signal, startet einen Timer und wartet anschließend auf das zurückkommende Signal (den Wert LOW hat). Daraufhin wird der Timer gestoppt und die Zeitspanne zwischen dem Senden des Signal (Trigger) und seiner Rückkehr (Echo) wird in Mikrosekunden ermittelt.
| Umrechnung in cm | 343,2 m • 100 = 34.320 cm |
| Strecke pro ms (Millisekunde) | 34.320 : 1.000 = 34,32 cm/ms |
| Strecke pro µs (Mikrosekunde) | 34,32 : 1.000 = 0,03432 cm/µs |

Sender und Empfänger müssen nach vorn zeigen, damit das Signal ungehindert gesendet und empfangen werden kann. Die Leitungsdrähte werden auf der Rückseite eingesteckt.
Benötigte Bauteile
- ⇒Ultraschallsensor HC-SR04
- ⇒4-zeiliges LCD-Display mit I²C-Schnittstelle
- Leitungsdrähte
Der Schaltplan
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Benötigte Bibliothek

Das Programm



|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
// Pins für Senden/Empfangen definieren #define SENDEN 9 #define ECHO 8 // Variable für Zeit und Entfernung initialisieren long Zeit; long Entfernung; void setup() { Serial.begin(9600); pinMode(SENDEN, OUTPUT); pinMode(ECHO, INPUT); } void loop() { // Sender kurz ausschalten um Störungen des Signals zu vermeiden digitalWrite(SENDEN, LOW); delay(10); // Signal für 10 Mikrosekunden senden digitalWrite(SENDEN, HIGH); delayMicroseconds(10); // Sender ausschalten digitalWrite(SENDEN, LOW); // pulseIn -> Zeit messen, bis das Signal zurückkommt Zeit = pulseIn(ECHO, HIGH); /* Entfernung in cm berechnen Zeit/2 -> nur eine Strecke soll berechnet werden Umrechnung in cm */ Entfernung = (Zeit / 2) * 0.03432; // 400 cm ist die maximal messbare Entfernung if (Entfernung < 400) { // Titel im Plotter, darf keine Leerzeichen enthalten Serial.print("Entfernung:"); Serial.print(Entfernung); Serial.println(","); delay(500); } } |
Ergänze das Programm für die Ausgabe auf dem LCD:
Im Kopf des Programms wird das LCD definiert:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include "LCDIC2.h" // 4-zeiliges Display LCDIC2 lcd(0x27, 20, 4); // 2-zeiliges Display // LCDIC2 lcd(0x3f, 16, 2); // Pins für Senden/Empfangen definieren #define SENDEN 9 #define ECHO 8 // Variable für Zeit und Entfernung initialisieren long Zeit; long Entfernung; |
Im setup-Teil wird das LCD gestartet …
|
1 2 3 4 5 6 7 8 9 10 11 |
void setup() { pinMode(SENDEN, OUTPUT); pinMode(ECHO, INPUT); // LCD starten lcd.begin(); // Cursor "verstecken" lcd.setCursor(false); } |
… und der loop-Teil wird durch die Ausgabe auf dem LCD ergänzt.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
void loop() { // Sender kurz ausschalten um Störungen des Signals zu vermeiden digitalWrite(SENDEN, LOW); delay(10); // Signal für 10 Mikrosekunden senden digitalWrite(SENDEN, HIGH); delayMicroseconds(10); // Sender ausschalten digitalWrite(SENDEN, LOW); // pulseIn ⇒ Zeit messen, bis das Signal zurückkommt Zeit = pulseIn(ECHO, HIGH); /* Entfernung in cm berechnen Zeit/2 ⇒ nur eine Strecke soll berechnet werden Umrechnung in cm */ Entfernung = (Zeit / 2) * 0.03432; // 200 cm ist die maximal messbare Entfernung if (Entfernung < 200) { /* 2-zeiliges LCD lcd.setCursor(0, 0); lcd.print("Entfernung: "); lcd.print(String(Entfernung)); lcd.print(" cm "); */ // 4-zeiliges LCD lcd.setCursor(0, 0); lcd.print("Entfernung messen"); lcd.setCursor(0, 1); lcd.print("--------------------"); lcd.setCursor(0, 2); lcd.print("Entfernung: "); lcd.print(String(Entfernung)); lcd.print(" cm "); delay(1000); } } |

Für den Entfernungsmesser ist auch eine Bibliothek verfügbar:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include "NewPing.h" #define SENDEN 9 #define ECHO 8 #define MAX_ENTFERNUNG 200 NewPing sonar(SENDEN, ECHO, MAX_ENTFERNUNG); void setup() { Serial.begin(9600); // auf serielle Verbindung warten while (!Serial); } void loop() { delay(50); Serial.print("Entfernung: "); Serial.print(sonar.ping_cm()); Serial.println(" cm"); delay(1000); } |
Abgewandeltes Beispiel aus: ?https://playground.arduino.cc/Code/NewPing
Ähnliche Projekte
Letzte Aktualisierung:

