Good to Know Database

Raspbian Wheezy: Entfernungsmessung am Raspberry Pi mit einem HC-SR04 Ultraschallmodul


Der Ultraschall Distanz Sensor HC-SR04 ist ein günstig erhältlicher Entfernungssensor mit einem Messbereich von 2 cm bis 4 m und einer maximalen Genauigkeit von 3 mm. Der Öffnungswinkel des Ultraschallsensors beträgt 15°. Das Modul benötigt eine Versorgungsspannung von 5 V und hat im Betrieb eine Stromaufnahme von 15 mA. Die folgende Anleitung soll Ihnen zeigen wie Sie das HC-SR04 Modul mit Ihrem Raspberry Pi verbinden und mit einem Python-Skript die Entfernung zwischen dem Sensor und einem Gegenstand messen können.

HC-SR04 Ultraschall Sensor mit dem Raspberry Pi verbinden

Das HC-SR04 Ultraschallmodul besitzt vier Anschlüsse. Diese sind mit VCC für die Versorgungsspannung und mit GND für die gemeinsame Masse gekennzeichnet. An den Eingangspin TRIG muss ein 10 µs Impuls angelegt werden, damit die Messung gestartet wird. Während der Entfernungsmessung werden acht 40 kHz Impulse ausgesendet und auf ein Echo gewartet. Das Ergebnis der Messung wird anschließend als Impuls über den Ausgang ECHO zurückgeliefert.

HC-SR04 Ultraschall Sensor - Vorderansicht  HC-SR04 Ultraschall Sensor - Rückansicht

Das HC-SR04 Modul sollten Sie wie folgt an Ihren Raspberry Pi anschließen. Da das Ultraschallmodul mit einer Versorgungsspannung von 5 V arbeitet, wird am Ausgang ECHO ein Spannungsteiler benötigt um den GPIO-Eingang des Raspberry Pi's nicht zu zerstören.

HC-SR04 Ultraschall Sensor - Schaltplan

Ergebnis auswerten

Am Ausgang ECHO des HC-SR04 Moduls wird ein Impuls generiert, dessen Impulsdauer proportional zur zurückgelegten Entfernung des Ultraschallimpulses ist. Aus der Impulsdauer kann man somit die doppelte Entfernung zwischen Sensor und Gegenstand errechnen. Legt man der Berechnung die Schallgeschwindigkeit bei 20 °C und trockener Luft von 343 m/s zugrunde, ergibt sich ein Umrechnungsfaktor von 29,15 µs/cm. Das bedeutet, wenn man die Impulsdauer am ECHO Ausgang durch 29,15 µs/cm dividiert, erhält man die doppelte Entfernung zwischen Sensor und Gegenstand in cm. Man muss das Ergebnis also noch halbieren um die tatsächliche Entfernung zwischen Sensor und Gegenstand zu erhalten.

Alternativ kann man die Impulsdauer in Sekunden mit 343 m/s beziehungsweise 34300 cm/s multiplizieren und anschließend halbieren damit man die Entfernung zwischen Sensor und Gegenstand erhält.

Entfernung messen mit Python

Erstellen Sie für das Python-Skript eine neue Datei und öffnen diese mit einem Editor.

pi@raspberrypi ~ $ vi ultrasonic.py

Fügen Sie den folgenden Python-Code in die Datei ein. Über die beiden Variablen GPIOTrigger und GPIOEcho können Sie festlegen an welchen GPIO-Pins das HC-SR04 Ultraschallmodul angeschlossen ist. Sobald das Python-Skript ausgeführt wird, werden die GPIO-Pins konfiguriert und die Entfernung zwischen Sensor und Gegenstand gemessen. Die Abstandsmessung wird kontinuierlich nach einer Sekunde wiederholt.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#
# Creation:    03.08.2013
# Last Update: 07.04.2015
#
# Copyright (c) 2013-2015 by Georg Kainzbauer <http://www.gtkdb.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#

# import required modules
import time
import RPi.GPIO as GPIO

# define GPIO pins
GPIOTrigger = 18
GPIOEcho    = 17

# function to measure the distance
def MeasureDistance():
  # set trigger to high
  GPIO.output(GPIOTrigger, True)

  # set trigger after 10µs to low
  time.sleep(0.00001)
  GPIO.output(GPIOTrigger, False)

  # store initial start time
  StartTime = time.time()

  # store start time
  while GPIO.input(GPIOEcho) == 0:
    StartTime = time.time()

  # store stop time
  while GPIO.input(GPIOEcho) == 1:
    StopTime = time.time()

  # calculate distance
  TimeElapsed = StopTime - StartTime
  Distance = (TimeElapsed * 34300) / 2

  return Distance

# main function
def main():
  try:
    while True:
      Distance = MeasureDistance()
      print("Measured Distance = %.1f cm" % Distance)
      time.sleep(1)

  # reset GPIO settings if user pressed Ctrl+C
  except KeyboardInterrupt:
    print("Measurement stopped by user")
    GPIO.cleanup()

if __name__ == '__main__':
  # use GPIO pin numbering convention
  GPIO.setmode(GPIO.BCM)

  # set up GPIO pins
  GPIO.setup(GPIOTrigger, GPIO.OUT)
  GPIO.setup(GPIOEcho, GPIO.IN)

  # set trigger to false
  GPIO.output(GPIOTrigger, False)

  # call main function
  main()

Nachdem Sie den Python-Code in die Datei eingefügt haben, müssen Sie das Skript noch ausführbar machen. Ändern Sie dazu die Zugriffsrechte mit folgendem Befehl.

pi@raspberrypi ~ $ chmod 0755 ultrasonic.py

Mit dem folgenden Befehl können Sie jetzt das Python-Skript ausführen. Zum Beenden des Skripts verwenden Sie die Tastenkombination Strg+C.

pi@raspberrypi ~ $ sudo ./ultrasonic.py
Measured Distance = 175.8 cm
Measured Distance = 170.0 cm
Measured Distance = 153.2 cm
Measured Distance = 114.7 cm
Measured Distance = 91.9 cm
Measured Distance = 77.4 cm
Measured Distance = 50.1 cm
[...]
^CMeasurement stopped by user


Dieser Eintrag wurde am 03.08.2013 erstellt und zuletzt am 25.09.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_36_2272.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2016 by Georg Kainzbauer