Heute, 10.10.2021 den Ultraschallsensor für die Hindernissteuerung eingebaut. Die Python Ansteuerung wurde objektorientiert programmiert.
import time
import RPi.GPIO as gpio
class UltraschallHCRSR04:
def __init__(self, Trigger, Echo):
self._gpio = {}
self._gpio["TRIGGER"] = Trigger
self._gpio["ECHO"] = Echo
gpio.setmode(gpio.BCM)
gpio.setup(self._gpio["TRIGGER"], gpio.OUT)
gpio.setup(self._gpio["ECHO"], gpio.IN)
def entfernung(self):
# Trig High setzen
gpio.output(self._gpio["TRIGGER"], True)
# Trig Low setzen (nach 0.01ms)
time.sleep(0.00001)
gpio.output(self._gpio["TRIGGER"], False)
Startzeit = time.time()
Endzeit = time.time()
# Start/Stop Zeit ermitteln
while gpio.input(self._gpio["ECHO"]) == 0:
Startzeit = time.time()
while gpio.input(self._gpio["ECHO"]) == 1:
Endzeit = time.time()
# Vergangene Zeit
Zeitdifferenz = Endzeit - Startzeit
# Schallgeschwindigkeit (34300 cm/s) einbeziehen
entfernung = (Zeitdifferenz * 34300) / 2
return entfernung
Der einzelne Sensor kann sodann von einer Sensoren Klasse geladen werden, die mehrere Sensoren unterstützen soll:
class Sensors:
def __init__(self):
self._sensoren = {}
def add_sensor(self, name, sensor):
self._sensoren[name] = sensor
def get_sensor(self, name):
return self._sensoren[name]
def has_sensor(self, name):
return name in self._sensoren
Im Jupyter Notebook noch einen Test geschrieben:
from Sensoren.Ultraschall.hcrsr04 import UltraschallHCRSR04
from Sensoren.sensors import Sensors
import time
sensoren = Sensors()
hcrsr04_sensor1 = UltraschallHCRSR04(5, 6)
sensoren.add_sensor("HCRSR04", hcrsr04_sensor1)
# Neue Zelle
HCR = sensoren.get_sensor("HCRSR04")
# Neue Zelle
while True:
distanz = round(HCR.entfernung(), 2)
print (f"Distanz = {distanz} cm")
time.sleep(1)
Beobachtung: Interessant – sieht so aus als ob man nicht jedem Wert sofort glauben schenken sollte.
Bei dem Ultraschall Sensor: HC-SR04 muss man außerdem beachten, dass er mit einer Spannung von 5 V arbeitet. Daher sollte man bei Verwendung der GPIO Pins des Raspberry Pi einen Spannungsteiler realisieren:
Quelltext und Schaltplan habe ich mir bei: https://www.einplatinencomputer.com/raspberry-pi-ultraschallsensor-hc-sr04-ansteuern-entfernung-messen/ abgeschaut und in einer Klasse eingebettet.