超音波距離センサー HC-SR04の仕様 測距範囲:2~400cm (センサー基板正面を中心とした15度の範囲、分解能:0.3cm) 電源電圧:DC 5.0V 動作電流:15mA 動作周波数:40kHz トリガ信号:10μS(TTLレベルのパルス波) エコー出力信号:反射(往復)時間 サイズ:45×20×15mm |
➀ Triggerピンを10μ秒だけHighにすると、超音波が発信される
➁ ➀の発振が終わったタイミングでEchoピンがHighになる
➂ ➁跳ね返ってきたパルスを受信するとEchoピンがLowになる発振が終わったタイミングでEchoピンがHighになる
④ ➂跳ね返ってきたパルスを受信するとEchoピンがLowになる
from machine import Pin, PWM import utime # 超音波センサーのGPIO設定 trigger = Pin(3, machine.Pin.OUT) echo = Pin(2, machine.Pin.IN) t = 20 #温度20℃ #サーボモーターSG90をMakerPiRP2040のピン番号12に差しておく pwm = PWM(Pin(12)) pwm.freq(50) def servo_value(degree): def read_distance(): trigger.low() utime.sleep_us(2) trigger.high() utime.sleep_us(10) #trigerを10マイクロ秒発射trigger.low() #print(echo.value(),"/",trigger.value()) while echo.value() == 0: signaloff = utime.ticks_us() #マイクロ秒while echo.value() == 1: signalon = utime.ticks_us() timepassed = (signalon - signaloff) #マイクロ秒timepassed = timepassed*10**(-6) #秒に換算distance = (331.5 + 0.61*t)*timepassed/2 print("dinstance: ",distance,"m") if distance > 2: pwm.duty_u16(servo_value(0)) #距離が2m以内に近づいたらサーボモーターの角度を90°にする elif distance <= 2 and distance > 0.5: pwm.duty_u16(servo_value(90)) #距離が50cm以内に近づいたらサーボモーターの角度を180°にする elif distance <= 0.5: pwm.duty_u16(servo_value(180)) while True: read_distance() utime.sleep(0.1) |