【PR】この記事には広告が含まれています。

ラズベリーパイでサーボモーターを制御する方法について解説します。

サーボモーターは所定の角度まで回転できるモーターです。
今回使用したFEETECHサーボ FS90 は秋月電子で450円です。
接続方法

サーボモーターのコネクタはこのようになっており、ラズパイのGPIOに接続するために、ジャンパワイヤを取り付けます。


このように、3本のジャンパワイヤをコネクタに差し込みます。色が合っていないのはご容赦ください(笑)
下記のようにラズパイのGPIOピンに接続します。

赤線を②5Vピンに接続
茶線を⑥GNDピンに接続
オレンジ線を⑫GPIO18ピンに接続します。


Pythonプログラミング
「pigpio」という、GPIO制御のためのライブラリーを利用します。
最近のイメージにはデフォルトでインストールされています。
ただし、pigpioを使う場合は、事前にpigpiodというデーモンを立ち上げる必要があります。
$ sudo pigpiod
ターミナルで上記のコマンドを実行します。

特に何も表示されませんが、これでpigpioを使う準備ができました。
サーボモーターを動かすためのソースコードはこちらです。
import pigpio
import time
SERVO_PIN = 18
# pigpioを初期化
pi = pigpio.pi()
# サーボモーターを特定の角度に設定する関数
def set_angle(angle):
assert 0 <= angle <= 180, '角度は0から180の間でなければなりません'
# 角度を500から2500のパルス幅にマッピングする
pulse_width = (angle / 180) * (2500 - 500) + 500
# パルス幅を設定してサーボを回転させる
pi.set_servo_pulsewidth(SERVO_PIN, pulse_width)
# 使用例
while True:
set_angle(90) # サーボを90度に設定
time.sleep(1)
set_angle(0) # サーボを0度に設定
time.sleep(1)
set_angle(90) # サーボを90度に設定
time.sleep(1)
set_angle(180) # サーボを180度に設定
time.sleep(1)
このPythonのコードは、Raspberry PiのGPIOピン18に接続されたサーボモータを制御します。サーボモータの角度を設定する関数「set_angle(angle)」
が定義されており、この関数内では引数である「angle」
をパルス幅に変換し、それを「set_servo_pulsewidth」
関数でGPIOピンに送信します。パルス幅は500から2500の範囲で、0から180度の角度に対応しています。
最後の無限ループ内では、1秒ごとにサーボモータを0度、90度、180度の順に回転させています。
これを応用して、こんなことができます。
サーボモーターは両面テープで固定しています。
また、サーボモーターを利用して「アナログメーター」を作ることもできます。