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.