Python Distanzmessung zwei Sensoren HC-SR 04

Der Jockel

Ensign
Registriert
Nov. 2016
Beiträge
150
Ich will mit zwei HC-SR-04 Ultraschallsensoren und einem Raspi die Entfernung Messen (soll später autonomen Roboter steuern) ich habe mich an diesen Guide gehalten https://tutorials-raspberrypi.de/entfernung-messen-mit-ultraschallsensor-hc-sr04/
Ich will beide Trigger mit nur einem GPIO ansteuern ist das möglich? Und kann ich später dieses programm als Modul in das Programm des Roboters einbinden und dann die Werte d1() und d2() verwenden.
Ich bin jedoch noch blutiger Anfänger und kann das deshalb schwer einschätzen! In dem Fall das man zwei Trigger mit einem Gpio verbinden kann würde mein abgeänderter Code Funktionieren?

Python Code:
PHP:
#Bibliotheken einbinden
import RPi.GPIO as GPIO
import time
 
#GPIO Modus (BOARD / BCM)
GPIO.setmode(GPIO.BCM)
 
#GPIO Pins zuweisen
GPIO_TRIGGER = 14
GPIO_ECHO1 = 15
GPIO_ECHO2 = 18 

#Richtung der GPIO-Pins festlegen (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO1, GPIO.IN)
GPIO.setup(GPIO_ECHO2, GPIO.IN)
 
def d1() , def d2():
    # setze Trigger auf HIGH
    GPIO.output(GPIO_TRIGGER, True)
 
    # setze Trigger nach 0.01ms auf LOW
    time.sleep(0.00001)
    GPIO.output(GPIO_TRIGGER, False)
 
    StartZeit = time.time() #Wieso ist Zeile 26 und 27 notwendig
    StopZeit = time.time()
 
    # speichere Startzeit
    while GPIO.input(GPIO_ECHO1) == 0:
        StartZeit1 = time.time()
	
	while GPIO.input(GPIO_ECHO2) == 0:
        StartZeit2 = time.time()
 
    # speichere Ankunftszeit
    while GPIO.input(GPIO_ECHO1) == 1:
        StopZeit1 = time.time()
	
	while GPIO.input(GPIO_ECHO2) == 1:
        StopZeit2 = time.time()
 
    # Zeit Differenz zwischen Start und Ankunft
    TimeElapsed1 = StopZeit1 - StartZeit1
	TimeElapsed2 = StopZeit2 - StartZeit2
    # mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
    # und durch 2 teilen, da hin und zurueck
    d1 = (TimeElapsed1 * 34300) / 2
	d2 = (TimeElapsed2 * 34300) / 2
 
    return d1 , d2
 
if __name__ == '__main__':
    try:
        while True:
            a1 = d1()
			a2 = d2()
            print ("Distanz1 = a1.1f cm Distanz2 = a2.1f cm")
            time.sleep(1)
 
        # Beim Abbruch durch STRG+C resetten
    except KeyboardInterrupt:
        print("Messung vom User gestoppt")
        GPIO.cleanup()
 
Wer hat den Code denn geschrieben?
Gibt time() nicht Sekunden nach 01.01.1970 mit einer Genauigkeit von 1s ?
Das Ergebnis wäre dann ein Vielfaches von 343/2 m, was ja nicht Sinn der Sache ist.
 
Also der Code ist größtenteils von der Seite oben. Ich habe/will ihn so ergänzen dass er mit zwei Sensoren arbeitet
Ergänzung ()

Die Stopzeit wird doch von der Startzeit abgezogen deshalb müsste es gehen, aber ich verstehe nicht für was Zeile 26 und 27 gut sind
Ergänzung ()

...bei denen habe ich auch vergessen zwei daraus zu machen merke ich gerade.
 
Um deine Frage zu beantworten, ob es möglich ist an einem GPIO Pin zwei Sensoren auszulesen ist die Antwort, dass es je nach Anwendungsfall möglich ist z.B. über dem i2c Protokoll.

Jedoch habe ich mir gerade deinen Code durchgeschaut und würde dir empfehlen vorher zu versuchen einen Sensor auszusteuern. Dazu würde ich dir raten ein paar Python Tutorials durchzuarbeiten.
Versuch zu verstehen wie Methoden und eventuell Klassen in Python funktionieren. Danach arbeite dich in das GPIO Package ein. Lies deinen Code durch und gucke in der Dokumentation des Package nach was dieser eine Befehl macht.

Einen verhanden Code zu nehmen und abzuwandeln ohne zu verstehen was genau geschieht, bereit einem meistens mehr Kopfschmerzen im nachhinein ;)

Ich hoffe dir hilft meine Antwort und viel Erfolg mein ausprobieren
 
Zurück
Oben