New here and to robotics and have encountered my first 2 problems. Following instructions in a book, I have fitted 1 HR-SR04 ultra sound detector but could not get the code given to work, seems to get stuck in the first while loop, so never getting a return time :
import gpiozero import time TRIG = 23 ECHO = 24 trigger = gpiozero.OutputDevice(TRIG) echo = gpiozero.DigitalInputDevice(ECHO) robot = gpiozero.Robot(left=(17,18), right=(27,22)) def get_distance(trigger, echo): trigger.on() time.sleep(0.00001) trigger.off() while echo.is_active == False: pulse_start = time.time() while echo.is_active == True: pulse_end = time.time() pulse_duration = pulse_end - pulse_start distance = 34300 * (pulse_duration/2) round_distance = round(distance,1) return(round_distance) while True: dist = get_distance(trigger,echo) if dist <= 15: robot.right(0.3) time.sleep(0.25) else: robot.forward(0.3) time.sleep(0.1)
I then found some sample code using RPi.GPIO - which worked,returning values down to 3-4cm, so I know the sensor is ok. I also found the GPIOzero docs and tried the following code:
from gpiozero import DistanceSensor from time import sleep sensor = DistanceSensor(echo=18, trigger=17) while True: print('Distance: ', sensor.distance * 100) sleep(1)
This code worked in that it would detect an obstacle, but wouldn't return a value less than 10cm.
So my 2 questions (after 2 days of trying to figure this out myself!):
- Why does the first code not work? I have seen almost exactly the same code repeated elsewhere as how to use the sensor but I just cannot get it to work for me.
- Why does the second code, using gpiozero not return a value less than 10cm?
I know this is probably very basic stuff, but would greatly appreciate some advice/explanations/pointers.