• #by-own #raspberrypi #developRobot

Kapitel 08: Abstandssensor

Hinweis: Wie die einzelnen Hardware Komponenten so wie die benötigten evtl. weiteren elektronischen Zusatzteile (Widerstände, Transistoren, Stromversorgung) angeschlossen werden, ist in der Rubrik Elektronik nachzuschlagen. In dieser Rubrik wird ausschließlich die Software-Entwicklung betrachtet.

Mit dem Ultraschallsensor HC-SR04 können Abstände gemessen werden. Dieses Modul reicht für die meisten DIY Projekte aus und kostet grob 1-2€ pro Stück.

Technische Details:

  • kleinster Abstand: ca. 3-4 cm
  • maximaler Abstand: ca. 3-4 meter
  • Genauigkeit: ca. 4-5 mm

Funktionsweise

Der Sensor sendet ein Ultraschallsignal aus und der Ausgang des Sensors wird auf 0/false gesetzt. Nun wartet der Sensor bis er das echo des Signals wieder empfängt. Sobald das Signal erkannt wurde wird der Ausgang des Sensors auf 1/true gesetzt. Dies bedeutet, dass der Sensor letzendlich nicht direkt die Entfernung misst, sondern lediglich ein Signal aussendet und wieder das Echo empfangen kann.

Was muss gemacht werden

  1. Der Sensor muss getriggert werden wann er ein Signal aussenden soll
  2. Es muss die Zeit zwischen senden des Signals (Trigger) und dem Empfang des Echos gemessen werden.
  3. Berechnung von Zeit zu Abstand gemäß der alten Schulformeln (die ja alle Wissen ;-))

 

Der Sensor wird wie folgt an den RaspberryPi angeschlossen:

  • TRIGGER an GPIO23
  • ECHO an GPIO 24

Hinweis: In diesen Code-Beispiel wird der hintere Abstandssensor implementiert. Analog muss auch der vordere Abstandssensor implementiert werden. Der Unterschied sind lediglich andere GPIO Pins sowie ein andere Name im Websocket Client.

#Bibliotheken einbinden
import RPi.GPIO as GPIO
import time

#GPIO Modus (BOARD / BCM)
GPIO.setmode(GPIO.BCM)

#GPIO Pins zuweisen
GPIO_TRIGGER = 23
GPIO_ECHO = 24

#Richtung der GPIO-Pins festlegen (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)

def distanz():
    # setze Trigger auf HIGH
    GPIO.output(GPIO_TRIGGER, True)

    # setze Trigger nach 0.01ms aus LOW
    time.sleep(0.00001)
    GPIO.output(GPIO_TRIGGER, False)

    StartZeit = time.time()
    StopZeit = time.time()

    # speichere Startzeit
    while GPIO.input(GPIO_ECHO) == 0:
        StartZeit = time.time()

    # speichere Ankunftszeit
    while GPIO.input(GPIO_ECHO) == 1:
        StopZeit = time.time()

    # Zeit Differenz zwischen Start und Ankunft
    TimeElapsed = StopZeit - StartZeit
    # mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
    # und durch 2 teilen, da hin und zurueck
    distanz = (TimeElapsed * 34300) / 2

    return round(distanz, 2)

if __name__ == '__main__':
    try:
        while True:
            abstand = distanz()
            print ("Gemessene Entfernung = %.3f cm" % abstand)
            time.sleep(1)

        # Beim Abbruch durch STRG+C resetten
    except KeyboardInterrupt:
        print("Messung vom User gestoppt")
        GPIO.cleanup()

Auch für den Sensor muss ein Websocket Client geschrieben werden. Dieser soll zyklisch (jede 0.5 sec.) den gemessenen Wert an die Java-Applikation senden. Auch hier muss der Sensor sich zu Beginn mit seinem Namen beim Websocker-Server melden, so dass später eine Zuodnung der Sensorwerte zu dem Sensor möglich ist.

import asyncio
import websockets
import ultrasonic
import time

async def wsclient():
	async with websockets.connect('ws://localhost:9000') as websocket:
        #FirstMessaging - Name
		await websocket.send('Name:'+'ultrasonicBack')
		while True:
			dis = ultrasonic.distanz()
			#dis=1234

			await websocket.send('ultrasonicBack:'+str(dis))
			#print ('sending')
			time.sleep(0.5)


#This have to be the last line!
asyncio.get_event_loop().run_until_complete(wsclient())
© 2019 by-own
Wir benutzen Cookies

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.