Ein Ultraschallsensor misst die Entfernung zu einem Objekt und zeigt die Entfernung auf einem LCD an.
So sieht es aus:
Schließe das LCD an:
➨LCD
Normalerweise wäre eine komplexe Verkabelung zum Betrieb eines LCDs nötig. Der ➨I2C-Bus regelt über einen eigenen Mikroprozessor die Kommunikation der Datenleitungen untereinander. Es werden deshalb nur vier Anschlüsse benötigt.
Die Helligkeit kann mit einem Potentiometer auf der Rückseite des LCDs eingestellt werden.
Der Ultraschallsensor arbeitet nach einem einfachen Prinzip:
„Der Ultraschallsensor strahlt zyklisch einen kurzen, hochfrequenten Schallimpuls aus. Dieser pflanzt sich mit Schallgeschwindigkeit in der Luft fort.
Trifft er auf ein Objekt, wird er dort reflektiert und gelangt als Echo zurück zum Ultraschallsensor. Aus der Zeitspanne zwischen dem Aussenden des Schallimpulses und dem Empfang des Echosignals berechnet der Ultraschallsensor intern die Entfernung zum Objekt.“
Quelle: 🔗https://www.microsonic.de/de/service/ultraschallsensoren/prinzip.htm (externer Link abgerufen am 23.02.23)
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
- LCD-Display I2C 1602
- Leitungsdrähte
Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Das Beispielprogramm zeigt die Entfernung im Seriellen Plotter an.
Den Seriellen Plotter findest du unter Werkzeuge → Serieller Plotter ...
... oder als Symbol in der Statusleiste.
// 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);
}
}
Benötigte Bibliothek:
Für die Verwendung des LCDs benötigst du eine Bibliothek:
Ergänze das Programm für die Ausgabe auf dem LCD:
Im Kopf des Programms wird das LCD definiert:
#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 ...
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.
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:
# 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 (externer Link abgerufen am 22.05.24)
Verwandte Anleitungen:
Letzte Aktualisierung: