【ラズベリーパイ入門】サーボモーターを制御する方法

【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度の順に回転させています。

これを応用して、こんなことができます。

https://twitter.com/sozoraemon/status/1395997282512769025

サーボモーターは両面テープで固定しています。

また、サーボモーターを利用して「アナログメーター」を作ることもできます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です