Raspberry Pi Pico でサーボモーター SG-90 を制御する

Raspberry Pi Pico でサーボモーター SG-90 のドライバーを開発した。

仕様

  • 動作電圧:3.3 ~ 6 V
  • 動作速度:0.12 秒 / 60 度
  • 回転範囲:約 -90 ~ 90 度
  • 温度範囲:0 ºC – 55 ºC

回路接続

SG-90 Raspberry Pi Pico
オレンジ色線 GP0 (コードによって)
赤い色線 VBUS(5V)
茶色線 GND

PWM制御

角度 パルス幅 デューティー比(パルス幅 / 周期)
-90°(左) 0.5ms 0.5ms / 20ms
0°(中央) 1.45ms 1.45ms / 20ms
90°(右) 2.4ms 2.4ms / 20ms

コード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from machine import Pin, PWM
import time

duty_max = 65025
deg_min = 0.025 # -90
deg_middle = 0.0725 # 0
deg_max = 0.12 # 90

# init
def init(pin_pwm = 0, freq = 50):
    global servo
    servo = PWM(Pin(pin_pwm))
    servo.freq(freq)

# example function
def example(interval = 3):
    servo.duty_u16(round(duty_max * deg_min))
    time.sleep(interval)
        
    servo.duty_u16(round(duty_max * deg_middle))
    time.sleep(interval)
        
    servo.duty_u16(round(duty_max * deg_max))
    time.sleep(interval)

パラメータ

duty_max

最大のデューティ値(100%)である。

最大値 65025 についてこちらを参考してください。

deg_min

-90° ときのデューティー比である。

deg_middle

0° ときのデューティー比である。

deg_max

90° ときのデューティー比である。

関数

init(pin_pwm = 0, freq = 50)

ピンと周波数を配置するための初期化関数である。

  • pin_pwm:PWM 信号線と繋がっているのピンである。
  • freq:周波数、ここにはデータシートによって 50Hz に設定する。

example(interval = 3)

テスト関数である。-90° -> 0° -> 90° の間にループ制御する。

  • interval:回転間隔。

リポジトリ

GitHub

Hugo で構築されています。
テーマ StackJimmy によって設計されています。