import machine, time
from machine import Pin, PWM
servo=PWM(Pin(14, Pin.OUT))
servo.freq(50)
led=Pin(26, Pin.OUT)
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):
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):
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()
cms = (pulse_time / 2) / 29.1
return cms
hcsr=HCSR04(trigger_pin=18 , echo_pin=19 , echo_timeout_us=500*2*30)
while True:
d=hcsr.distance_cm()
print(d)
if d<300 :
led.value(1)
servo.duty(100)
time.sleep(1)
else:
servo.duty(75)
led.value(0)
time.sleep(1)