Ultrasonic Sensor

From BITPlan Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

see also

Wiring

hc-sr04_Steckplatine-762x1024.jpg raspberry-pi-15b.jpg Ultrasonic IMG 3078.JPG

Python Source Code

Please note that the source code is using GPIO 14/15 which is different from the wiring above ...

# WF 2019-06-11
# Distance Measuring with HC-SR04 Ultrasonic Sensor
#
# You need to modify the GPIO_TRIGGER and GPIO_ECHO settings
# according to your setup for this code to work properly.

# Needed Libraries
import RPi.GPIO as GPIO
import time

#GPIO Modus (BOARD / BCM)
GPIO.setmode(GPIO.BCM)
      
#GPIO Pins to be used 
GPIO_TRIGGER = 15 
GPIO_ECHO = 14 
       
# set direction of GPIO pins (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)
        
def distance():
  # set Trigger to HIGH
  GPIO.output(GPIO_TRIGGER, True)

  # set Trigger to Low after 0.01ms 
  time.sleep(0.00001)
  GPIO.output(GPIO_TRIGGER, False)
                                  
  InitTime = time.time() 
  TriggerTime = time.time()
  # Sound travels 6 m in 1/40 of a second the 
  # HC-SR04 can measure up to some 3m only so 6m is the maximum echo 
  # travel distance
  MaxTime = 1/40.0;
  EchoTime = time.time()
         
  # wait for trigger and set time 
  while GPIO.input(GPIO_ECHO) == 0:
    TriggerTime = time.time()
    if TriggerTime-InitTime > MaxTime:
      break;
                                                                
  # wait for echo and set time
  while GPIO.input(GPIO_ECHO) == 1:
    EchoTime = time.time()
    if EchoTime-TriggerTime > MaxTime:
      break;
                                                          
  # calc time difference between trigger and echo
  TimeElapsed = EchoTime - TriggerTime
  # multiply by speed fo sound (34300 cm/s)
  # and divide by two (sound went back and forth) 
  distance = (TimeElapsed * 34300) / 2
     
  return distance
                                                                                   
if __name__ == '__main__':
    try:
        print("Starting ultrasound distance measurement ...")
        while True:
            dist = distance()
            if dist <-300:
                print ("GPIO_ECHO %d does not go low" %GPIO_ECHO)
            else:
                if dist <= 300:
                    print ("distance = %.1f cm" % dist)
                else:
                    print ("distance = ?");
            time.sleep(1)

    # on CTRL-C reset GPIO
    except KeyboardInterrupt:
        print("Aborted ultrasound distance measurement by User ... cleaning up GPIO")
        GPIO.cleanup()