モーターのシャフトの回転角度を正確に制御したい場合には、サーボモーターも使用できます。
サーボモーターは電子制御回路とシャフトの位置を検出するための部品が内蔵されており、どの位置にいても間違いなく目的の位置に移動させることができます。モーターが自分で基準点を持っているので、基準点のスイッチや外付けのセンサーがなくても位置を判断できます。
サーボモーターの原理
サーボモーターはここまでで紹介したモーター(ブラシ付き/ブラシレスモータ、ステッピングモータ)とは異なり、連続回転させることができません。
多くのサーボモーターはシャフトを0~180°の範囲で回転させる仕様になっています。
(一部、図1のSG90-HVのように連続回転させられるサーボモーターもあります。)
メーターの針や自動車のワイパー、踏切の遮断機のように、同じ範囲を行ったり来たりする、といえば想像しやすいでしょうか。
サーボモーターという名称は、本来特定のモーターを指し示すものではなく、このような制御方式をとっているモーター全般を指すものです。また、モーターのシャフトに歯車を取り付けてトルクを得るということも行われます。
サーボモーターは位置決めの精度が高く、過負荷などで位置がずれてしまっても問題なく目的の位置に動かすことができるというメリットがあるので、産業機械などの制御によく利用されています。小型のサーボモーターであれば、追加の部品なしにRaspberry Piに直接つないで動作させられます。
サーボモータの接続とプログラミング
サーボモーターには3本の電源線があります。
赤と黒は電源ですのでそれぞれ3.3V(または5V)ピンとGNDピンに接続します。
黄色などの信号線にはPWM信号を入力するので、GPIO18ピンに接続します。
以下のpythonプログラムで、サーボモーターを動作させることができます。
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) servo = GPIO.PWM(18, 50) servo.start(7.5) servo.ChangeDutyCycle(5) time.sleep(1) servo.ChangeDutyCycle(10) time.sleep(1) servo.ChangeDutyCycle(5) time.sleep(1) servo.ChangeDutyCycle(10) time.sleep(1) servo.ChangeDutyCycle(5) time.sleep(1) GPIO.cleanup()
PWM信号の周波数と、デューティ比(ON時間とOFF時間の比率)と回転角度との対応はサーボモーターのデータシートを確認します。
ここでは、1パルスの長さは20ミリ秒、つまり50HzのPWM信号としました。
シャフトの位置は1パルス中のON時間の長さによって決まります。今回の例では1ミリ秒とすると左端、2ミリ秒とすると右端になりました。
デューティ比で言うと、5%で左側、10%で右端となります。
例えば中間位置に止めたい場合には、ON時間を7.5%の1.5ミリ秒とすればよいということになります。
サーボモーターをRaspberry Piに直接接続した状態で、シャフトに過負荷をかけるなどすると大きな電流が流れてRaspberry Piがダメージを受けることがあります。
大きなサーボモーターは直接接続せず、別に電源を用意して実験を行ってください。
コメントを残す