Guten Morgen Forum,
ich habe nach wie vor einige Probleme mit einem Ultraschallmodul.
Ich verwende ein HC-SR04 Ultrasonic Modul und bin mit meinem Latein am Ende. Ich hoffe ihr habt noch ein paar Ideen oder Ansätze.
Was soll passieren?
Das Modul steht im freien Raum, zum nächsten Gegenstand sind ca. 3-5m abstand.
Sobald der Ultraschallsensor zwischen 0m und 1,5m unterbrochen wird. Soll ein LED Signal erleuchten für 2 Sekunden und danach der ganze Prozess von vorne starten.
Die Software läuft soweit. Der Hardware Aufbau steht und ist funktionsfähig.
Das ganze sieht etwa so aus:
Ihr fragt euch jetzt wohl, wo mein Problem liegt:
Mein Problem liegt darin das wenn ich mit einem Skript einfach nur die Entfernungen ausgebe, erhalte ich 98% richtige Werte. Sprich wenn niemand durchläuft oder nichts dazwischen steht eine Zahl zwischen 400cm und 500cm. Aber die andere 2 % sind enorme Abweichung (z.B. Werte zwischen 10cm und 300cm).
#!/usr/bin/python
import time
import RPi.GPIO as GPIO
import subprocess
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
TRIGGER = 17
ECHO = 18
Schallgeschwindigkeit = 331 #in m/s
print "Ultraschall Entfernungsmessung"
while True:
GPIO.setup(TRIGGER,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.output(TRIGGER, False)
time.sleep(0.025)
GPIO.output(TRIGGER, True)
time.sleep(0.0001)
GPIO.output(TRIGGER, False)
while GPIO.input(ECHO) == 0:
pass
Start = time.time()
while GPIO.input(ECHO) == 1:
pass
Stop = time.time()
Zeit = Stop - Start
Entfernung = Zeit * (Schallgeschwindigkeit/2)
Entfernung = Entfernung * 100
Entfernung = round(Entfernung, 1)
print "Abstand: ", Entfernung, " cm"
time.sleep(0.05)
GPIO.cleanup()
Display More
Okay dachte ich mir, so viele "falsche" Unterbrechungen wird es nicht geben, ich möchte ja eh nur ein Signal wenn eine Unterbrechung unter 150cm erfolgt. Also Skript dementsprechend angepasst.
#!/usr/bin/python
import time
import RPi.GPIO as GPIO
import subprocess
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
TRIGGER = 17
ECHO = 18
Schallgeschwindigkeit = 331 #in m/s
print "Ultraschall Entfernungsmessung"
while True:
GPIO.setup(TRIGGER,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.output(TRIGGER, False)
time.sleep(0.025)
GPIO.output(TRIGGER, True)
time.sleep(0.0001)
GPIO.output(TRIGGER, False)
while GPIO.input(ECHO) == 0:
pass
Start = time.time()
while GPIO.input(ECHO) == 1:
pass
Stop = time.time()
Zeit = Stop - Start
Entfernung = Zeit * (Schallgeschwindigkeit/2)
Entfernung = Entfernung * 100
Entfernung = round(Entfernung, 1)
if Entfernung < 100:
print "Ausgeloest: ", Entfernung
time.sleep(1)
time.sleep(0.05)
GPIO.cleanup()
Display More
Das Ergebnis ist nur leider nicht zufriedenstellend. Es gibt durch das so schnelle durchlaufen der Schleife alle 1-2 Minuten "falsch" Auslöser. Die Zeitwerte müssen so kurz sein, sonst würde die Genauigkeit der Anlage darunter leiden.
Am Ende soll jemand durch den Sensor rennen können und das LED Signal erscheinen.
Den Sensor habe ich schon ausgetauscht, mit anderen HC-SR04 Modulen habe ich das selbe Problem.
Hat jemand eine Idee oder einen Vorschlag wie ich das Problem in den Griff bekommen kann? Bzw. denkt ihr ein teuerer und hochwertiger Ultraschallsensor bringt hier Verbesserung oder würdet ihr in diesem Fall komplett von Ultraschall abraten?
Schon mal danke, an alle die bis hier her gelesen haben.