6.1 Abstandsmessung¶
Das Ultraschallsensormodul funktioniert nach dem Prinzip von Sonar- und Radarsystemen, um die Entfernung zu einem Objekt zu ermitteln.
Benötigte Komponenten
Für dieses Projekt werden die folgenden Komponenten benötigt.
Ein Komplettset zu kaufen ist definitiv praktisch, hier ist der Link:
Name |
ARTIKEL IN DIESEM SET |
LINK |
---|---|---|
Kepler-Set |
450+ |
Sie können die Teile auch einzeln über die untenstehenden Links erwerben.
SN |
KOMPONENTE |
ANZAHL |
LINK |
---|---|---|---|
1 |
1 |
||
2 |
Micro-USB-Kabel |
1 |
|
3 |
1 |
||
4 |
Mehrere |
||
5 |
1 |
Schaltplan
Verdrahtung
Code
Bemerkung
Öffnen Sie die Datei
6.1_measuring_distance.py
im Verzeichniskepler-kit-main/micropython
oder kopieren Sie diesen Code in Thonny. Klicken Sie dann auf „Aktuelles Skript ausführen“ oder drücken Sie einfach F5.Vergessen Sie nicht, den „MicroPython (Raspberry Pi Pico)“-Interpreter in der rechten unteren Ecke auszuwählen.
Für detaillierte Anleitungen verweisen wir auf Code direkt öffnen und ausführen.
import machine
import time
TRIG = machine.Pin(17,machine.Pin.OUT)
ECHO = machine.Pin(16,machine.Pin.IN)
def distance():
TRIG.low()
time.sleep_us(2)
TRIG.high()
time.sleep_us(10)
TRIG.low()
while not ECHO.value():
pass
time1 = time.ticks_us()
while ECHO.value():
pass
time2 = time.ticks_us()
during = time.ticks_diff(time2,time1)
return during * 340 / 2 / 10000
while True:
dis = distance()
print ('Distance: %.2f' % dis)
time.sleep_ms(300)
Sobald das Programm läuft, wird die Shell den Abstand des Ultraschallsensors zum Hindernis vor ihm ausgeben.
Funktionsweise
Ultraschallsensoren erzeugen hochfrequente Schallwellen (Ultraschallwellen), die von der Sendesonde ausgesendet werden. Trifft diese Ultraschallwelle auf ein Objekt, wird sie als Echo reflektiert und von der Empfangssonde detektiert. Durch die Berechnung der Zeit von der Aussendung bis zum Empfang lässt sich die Entfernung ermitteln. Auf diesem Prinzip basiert die Funktion distance()
.
def distance():
TRIG.low()
time.sleep_us(2)
TRIG.high()
time.sleep_us(10)
TRIG.low()
while not ECHO.value():
pass
time1 = time.ticks_us()
while ECHO.value():
pass
time2 = time.ticks_us()
during = time.ticks_diff(time2,time1)
return during * 340 / 2 / 10000
Dabei dienen die ersten paar Zeilen dazu, eine 10µs Ultraschallwelle auszusenden.
TRIG.low()
time.sleep_us(2)
TRIG.high()
time.sleep_us(10)
TRIG.low()
Anschließend wird das Programm angehalten und die aktuelle Zeit erfasst, sobald die Ultraschallwelle ausgesendet wurde.
while not ECHO.value():
pass
time1 = time.ticks_us()
Daraufhin wird das Programm erneut pausiert. Nachdem das Echo empfangen wurde, wird die aktuelle Zeit erneut erfasst.
while ECHO.value():
pass
time2 = time.ticks_us()
Abschließend wird anhand der Zeitdifferenz zwischen den beiden Erfassungen die Schallgeschwindigkeit (340 m/s) mit der Zeit multipliziert, um die doppelte Entfernung zwischen dem Ultraschallmodul und dem Hindernis zu erhalten (also einen Rundflug der Ultraschallwellen vom Modul zum Hindernis). Die Umrechnung in Zentimeter liefert den benötigten Rückgabewert.
during = time.ticks_diff(time2,time1)
return during * 340 / 2 / 10000
Beachten Sie, dass der Ultraschallsensor das Programm anhält, wenn er arbeitet, was zu Verzögerungen bei der Entwicklung komplexer Projekte führen kann.