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

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

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

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

サーボモーターは一般的なモーターとは異なり、あらかじめ指定した角度まで回転できるモーターです。

今回使用するマイクロサーボ9g SG-90は秋月電子で購入できます。小型・軽量ながら約180度の回転が可能で、電子工作やロボット制御によく使われている定番のサーボモーターです。

サーボモーターとラズパイの接続には、ジャンパーワイヤーを3本使用します。片端がオス(サーボモーター側)、もう片端がメス(Raspberry Pi GPIOピン側)のタイプを3本使用します。

接続方法

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

下記のようにラズパイのGPIOピンに接続します。

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

サーボモーターを指定した角度に動かすコード

以下のコードはRaspberry PiのGPIO18番ピンに接続されたサーボモーターを90度の位置に動かすものです。

from gpiozero import Servo
import time
import warnings

warnings.filterwarnings("ignore")

servo = Servo(18, min_pulse_width=0.5/1000, max_pulse_width=2.4/1000)

def move_servo(angle, hold_time=0.5):
    if angle < -90 or angle > 90:
        raise ValueError("Angle must be between -90 and 90")
    servo.value = angle / 90.0
    time.sleep(hold_time)
    servo.detach()
    
move_servo(90)

SG90はパルス幅によって角度を制御します。データシートによると、パルス幅が約0.5ミリ秒のときは左端(-90度)、約2.4ミリ秒のときは右端(+90度)に動きます。この範囲内でPWM信号の長さを変えることで、おおよそ180度の範囲を動かすことができます。

「Servo(18, min_pulse_width=0.5/1000, max_pulse_width=2.4/1000) 」はサーボモーターの設定を行うコードです。GPIOピンとサーボモーターに送るパルスの長さの範囲(パルス幅)を指定しています。min_pulse_width は最小角度(-90度)に対応するパルスの長さで0.5ミリ秒、max_pulse_width は最大角度(90度)に対応する長さで2.4ミリ秒に設定しています。

move_servo 関数では、角度を -90 から 90 の範囲で指定できるようになっており、範囲外の数値を入力した際にメッセージを出力します。

servo.value = angle / 90.0 は、サーボモーターを動かす命令です。入力された角度を -1.0 から 1.0 の範囲に変換し、その値を Servo クラスに渡すことでモーターの位置を指定しています。

sleep(hold_time)の部分は、モーターが目標の角度まで動き終わるのを待つために、0.5秒の待機時間を入れています。その後、 detach() を呼び出し、サーボへの信号出力を止めます。これは動作後に起こる細かな振動やノイズを防ぐためです。

最後の行のmove_servo(90)でmove_servo 関数を実行します。

そぞら
そぞら

カッコの中の数値を変えると、動かす角度を自由に指定できます。

サーボモーターの活用

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

コメントを残す

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