人に優しい、環境に優しい、内容が易しい

やさしい電子工作

Maker Pi RP2040でサーボモーターを使う

被写体との距離に応じてサーボモーターの回転角度を変える

超音波センサー(ultrasonicsensor)を使って被写体との距離を測定し、サーボモータの角度を変える。 電子工作では、HC-SR04という超音波距離センサーを使うことが多い。

超音波距離センサー HC-SR04

超音波センサー 超音波距離センサー HC-SR04の仕様
測距範囲:2~400cm
(センサー基板正面を中心とした15度の範囲、分解能:0.3cm)
電源電圧:DC 5.0V
動作電流:15mA
動作周波数:40kHz
トリガ信号:10μS(TTLレベルのパルス波)
エコー出力信号:反射(往復)時間
サイズ:45×20×15mm

購入先:秋月電子通商

音波距離センサーで

超音波を発信し、被写体に跳ね返ってくる往復時間から距離が求められる。
                  距離((m)  = 音速x(往復時間(秒)/2)

             音速は、
                  音速(m/秒) = 331.5 + 0.61 X 温度(摂氏)

             従って距離は
                  距離(m)   = (331.5 + 0.61 X 温度(摂氏))x(往復時間(秒)/2)

超音波距離センサー HC-SR04の距離測定の仕組み

距離測定原理

           Triggerピンを10μ秒だけHighにすると、超音波が発信される
           ➀の発振が終わったタイミングでEchoピンがHighになる
           ➁跳ね返ってきたパルスを受信するとEchoピンがLowになる発振が終わったタイミングでEchoピンがHighになる
           ➂跳ね返ってきたパルスを受信するとEchoピンがLowになる

   

被写体との距離でサーボモーターの回転角度を変えるPythonプログラム

サーボモーターSG90をMakerPiRP2040のピン番号12に差し、HC-SR04のtriggerを3番、echoを2番ピンに差す

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)