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

やさしい電子工作

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

サーボモーターを使う

サーボモーター(Servomotor)は、指示を出した角度を回って止まるモーター。電子工作では、小型のサーボモーター、SG90が良く使われています。
購入先:秋月電子通商    
SG90
SG90の仕様
PWMサイクル:20mS
制御パルス:0.5ms~2.4ms
制御角:±約90°(180°)
配線:茶=GND、赤=電源[+]、橙=制御信号 [JRタイプ]
トルク:1.8kgf・cm
動作速度:0.1秒/60度
動作電圧:4.8V(~5V)
温度範囲:0℃~55℃
外形寸法:22.2x11.8x31mm
重量:9g
 
SG90

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

Maker Pi RP2040には最大4個のサーボーモータを接続できる(GP12,GP13,GP14,GP15)
MakerPiRP2040_servo

サーボモーターの回転角度はPWMで決める

SG90のPWM制御
SG90のPWM制御
SG90では20ms(50Hz)の周期のパルス入力信号を入れると動く。 周期に対するONのときの長さ(デューティー比)によって角度が決まる。
SG901周期20msに対してONが0.5〜2.4msで0°〜180°の角度が決まるが、
                           0.5msのとき0°
                           1.45msのとき90°
                           2.4msのとき180°である

周期の時間に対するONの時間の比をデューティー比(%)と呼ぶ。
                 周期20msに対する0.5ms(角度0°)は、0.5/20x100=2.5%、
                         1.45ms(角度90°) 1.45/20X100=7.25%
                         2.4msは(角度180°)2.4/20x100=12%

角度1°のデューティー比は、(12-2.5)/180=9.5/180
角度(degree)に対するデューティー比は、(degreex9.5/180)に基準の2.5を足して(degreex9.5/180 + 2.5)

Raspberry Pi Picoはデューティー比(%)を0〜65535(16進法の0からFFFF)までの数値として扱い、この値をduty_u16()関数で求める
                   入力値 =(デューティー比/100)x65535
                      = (degreex9.5/180+2.5)/100x65535

サーボモーターのPythonプログラム

サーボモーターSG90をMakerPiRP2040のピン番号12に差して0°、90°、180°を繰り返す
from machine import Pin,PWM
import utime

servo = PWM(Pin(12))
servo.freq(50)

#角度(degree)からデュティー比を0〜65535 の範囲の値として返す関数
def servo_value(degree):
   return int((degree * 9.5 / 180 + 2.5) * 65535 / 100)       

while True:
   servo.duty_u16(servo_value(0))
   utime.sleep(1)
   servo.duty_u16(servo_value(90))
   utime.sleep(1)
   servo.duty_u16(servo_value(180))
   utime.sleep(1)