First commit
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import machine, time
|
||||
from machine import Pin
|
||||
|
||||
# From https://github.com/udacity/cd13765-deci-emb-sys-l4-term2-project.git
|
||||
|
||||
class HCSR04:
|
||||
# echo_timeout_us is based in chip range limit (400cm)
|
||||
def __init__(self, trigger_pin, echo_pin, echo_timeout_us=500*2*30):
|
||||
"""
|
||||
trigger_pin : Output pin to send pulses
|
||||
echo_pin : Readonly pin to measure the distance. The pin should be protected with 1k resistor
|
||||
echo_timeout_us : Timeout in microseconds to listen to echo pin.
|
||||
By default is based in sensor limit range (4m)
|
||||
"""
|
||||
self.echo_timeout_us = echo_timeout_us
|
||||
# Init trigger pin (out)
|
||||
self.trigger = Pin(trigger_pin, mode=Pin.OUT, pull=None)
|
||||
self.trigger.value(0)
|
||||
# Init echo pin (in)
|
||||
self.echo = Pin(echo_pin, mode=Pin.IN, pull=None)
|
||||
|
||||
def _send_pulse_and_wait(self):
|
||||
"""
|
||||
Send the pulse to trigger and listen on echo pin.
|
||||
We use the method `machine.time_pulse_us()` to get the microseconds until the echo is received.
|
||||
"""
|
||||
self.trigger.value(0) # Stabilize the sensor
|
||||
time.sleep_us(5)
|
||||
self.trigger.value(1)
|
||||
# Send a 10us pulse.
|
||||
time.sleep_us(10)
|
||||
self.trigger.value(0)
|
||||
try:
|
||||
pulse_time = machine.time_pulse_us(self.echo, 1, self.echo_timeout_us)
|
||||
return pulse_time
|
||||
except OSError as ex:
|
||||
if ex.args[0] == 110: # 110 = ETIMEDOUT
|
||||
raise OSError("Out of range")
|
||||
raise ex
|
||||
|
||||
def distance_cm(self):
|
||||
pulse_time = self._send_pulse_and_wait()
|
||||
# To calculate the distance we get the pulse_time and divide it by 2
|
||||
# (the pulse walk the distance twice) and by 29.1 becasue
|
||||
# the sound speed on air (343.2 m/s), that It's equivalent to
|
||||
# 0.034320 cm/us that is 1cm each 29.1us
|
||||
cms = int((pulse_time / 2) // 29.1)
|
||||
return cms
|
||||
Reference in New Issue
Block a user