Hi, I’m considering replacing the current pair of analog Sharp Analog Distance Sensors (#2474) I’m using as they’ve been discontinued.
I was wondering if anyone had found any CPython support code or library for converting the output from the Distance Sensors with Pulse Width Output (e.g., #4064, #4071 and #4079) into a numeric value. I understand that an MCU may be more suitable than a Raspberry Pi but I’d rather prefer the latter if possible since that’s what is running my robot OS.
Thanks!
Hello.
Unfortunately, I do not have a CPython example program that will run on a Raspberry Pi computer, but here is a MicroPython example (which we know works on a Raspberry Pi Pico) written earlier this year by one of our summer interns:
# Example MicroPython program for reading the
# Pololu Distance Sensors with Pulse Width Output
import time
import machine
from machine import Pin
# Change the '17' to the digital pin number connected to the sensor's OUT pin.
sensorPin = Pin(17, Pin.IN)
while True:
# Measure the pulse width.
t = machine.time_pulse_us(sensorPin, 1)
if t == 0:
# time_pulse_us() did not detect the start of a pulse within 1 second.
print("timeout")
elif t > 1850:
# No detection.
print("Out of range")
else:
# Valid pulse width reading. Converts pulse width in microseconds to
# distance in millimeters.
# Uncomment the appropriate line for your sensor.
d = (t - 1000) * 3 / 4 #4064 - 50 cm max sensor
#d = (t - 1000) * 2 #4071 - 130 cm max sensor
#d = (t - 1000) * 4 #4079 - 300 cm max sensor
# Limit minimum distance to zero.
if d < 0:
d = 0
print(str(d) + " mm")
If you make a CPython example, please consider posting it here since that might be a useful resource for others.
- Patrick
Thanks very much! I don’t have the hardware in stock but am considering an order, so if I do end up with one to try I’ll certainly post any code I create here.
I think the tricky part in CPython (that’s clearly simple in MicroPython) would be that first line:
t = machine.time_pulse_us(sensorPin, 1)
But I’ve written a handler for motor encoders in CPython so it’s not exactly rocket science. Thanks for the basic algorithm, it’s a good guide.
1 Like