Yoda – Abstandsmessung

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.

Diese Seite verwendet Cookies, um die Nutzerfreundlichkeit zu verbessern. Mit der weiteren Verwendung stimmen Sie dem zu.

Datenschutzerklärung