Raspberry Piでサーボモーターを回す


このエントリは「Raspberry Piでスマートロックつくった」の解説2つめになります。
サムターンを回してカギを開閉するためにサーボモーターSG92Rを使います。Pythonでサーボを簡単に扱うライブラリはいくつかありますが、今回はRaspbianに最初から入っているRPi.GPIOを使って動かします。

GPIOピンに接続

秋月電子通商の商品紹介ページによると、
動作電圧:4.8~6V、
配線:茶=GND、赤=電源[+]、橙=制御信号
だそうです。

なので茶色をGND、赤を5V、黄色を4番あたりに繋いで制御パルス用に用います。

プログラム

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

#GPIO4を制御パルスの出力に設定
gp_out = 4
GPIO.setup(gp_out, GPIO.OUT)

#「GPIO4出力」でPWMインスタンスを作成する。
#GPIO.PWM( [ピン番号] , [周波数Hz] )
#SG92RはPWMサイクル:20ms(=50Hz), 制御パルス:0.5ms〜2.4ms, (=2.5%〜12%)。
servo = GPIO.PWM(gp_out, 50)

#パルス出力開始。 servo.start( [デューティサイクル 0~100%] )
#とりあえずゼロ指定だとサイクルが生まれないので特に動かないっぽい?
servo.start(0)
#time.sleep(1)

for i in range(3):
    #デューティサイクルの値を変更することでサーボが回って角度が変わる。
    servo.ChangeDutyCycle(2.5)
    time.sleep(0.5)

    servo.ChangeDutyCycle(7.25)
    time.sleep(0.5)

    servo.ChangeDutyCycle(12)
    time.sleep(0.5)

    servo.ChangeDutyCycle(7.25)
    time.sleep(0.5)

servo.stop()
GPIO.cleanup()

実行結果

ちなみに

ラズパイでサーボっていうとよくSG90が紹介されていますが今回はSG92Rを使っています。カギを回すために一応トルクがちょっと強めなSG92Rを採用したのが理由ですが、結果としては十分すぎるくらい強かったのでSG90でも問題なく回せると思います。サイズ感で好みの方を使えば良いでしょう。
Next:Raspberry PiにNFCリーダを接続してSuicaを読み取る