モータとロボット

モータとロボット

モータの基礎

この講義では、DCモータとサーボモータという2種類のモータを使います。

DCモータ

家庭にある電源コンセントを、AC100Vと呼ぶことは知っていると思います。このACとは Alternating Current の略で、1秒間に50回などの短い周期で電流の向きが変わることを意味しています。日本語では、交流あるいは交流電流と言います。

一方、乾電池やUSB電源などは、直流あるいは直流電流と呼ばれます。DCというのは、 Direct Current の略で、直流電流を意味します。直流の場合、マイコンや部品で変えない限りは電流の向きは一定です。

DCモータは、直流電流で動くモータです。模型でよく使用するマブチモータは、皆さんも一度は見たことがあると思います。

乾電池でDCモータを動かすのは簡単です。DCモータの端子に、乾電池の+極と-極をつなげばOKです

しかしモータを、マイコンに繋いで制御するとなると、ちょっと難しいです。まず、DCモータに限らずモータというものは、少なくとも数百mA、多ければ数Aの電流を必要とします。マイコンのピンから供給できる電流は5mAくらいなので、マイコンのデジタル出力を使い直接DCモータを駆動することはできません。使用するモータによって、別途、適した外部電源を用意する必要があります。また、正転、逆転、停止、回転速度などの制御を行う必要もあります。

そこで、それらのことを簡単に解決するための、モータドライバというデバイスが存在します。この講義では、TA7291Pというモータドライバを使います。

TA7291Pは、最大2AまでのDCモータが制御できます。マブチモータFA-130は、通常の回し方だと数百mAですので、TA7291Pで制御することは可能です。

モータドライバ

それでは、TA7291Pを使ってDCモータを回してみましょう。TA7291Pの各ピンは、以下のように番号が振られています。

それぞれのピンの役割は以下の通りです。

書いていないピンには何も接続しなくてよいです。8番のモータ側電源というのは、モータを駆動するために必要な電源です。TA7291Pは4.5Vから20Vまで対応しています。今回の実験では単3電池4本の6Vを使います。

4番のPWMでモータに実際にかける電圧をコントロールします。TA7291Pではモータ側電源の電圧がそのままモータにかかるわけではなく、4番に入力されたPWMのデューティ比を乗じた電圧がかかります。したがって、デューティ比を変化させると、モータにかける電圧も変わり、モータの回転速度が変わります。間違ってはいけないのは、4番ピンからモータにそのまま電圧がかかるわけではなく、4番ピンにかける電圧は、単なる電圧の指示であるということです。モータにかかる電圧は、外部電源から供給されます。

5番ピンと6番ピンは、モータの正転や逆転、停止を指示するピンです。以下のように設定します。

ただし、ブレーキとストップは、あまり違いがないと思ってください。通常は、ストップを使います。

マブチモーターFA-130は0Vから3.0Vまでで動きます。3.0V以上の電圧をかけてはいけません。外部電源の電圧に応じてPWMでデューティ比をコントロールする必要があります。今回のように外部電源6Vの場合には、デューティ比は50%までにする必要があります。

単3電池4本を使うときには、下の写真のような電池ボックスを使います。

電池ボックスのマイナス側は、 Raspberry Pi のGNDにつなぎます。このように、外部電源を併用する際には必ずGNDを共通にします。これは、とても大切なことですから、忘れないようにしてください。

サーボモータ

サーボモータは、モータとコントローラを一体化したモータで、回転角度を指定できます。多くの場合、DCモータと角度を計測できるセンサ(エンコーダ)、およびセンサーからの値によってDCモータの動きを制御するコントローラから構成されています。つまり、モータの中にマイコンがあるようなものです。

サーボモータのインターフェイスは、Vcc、GND、信号線の3つです。VCCには、外部電源を使うのが無難です。 Raspberry Pi の5V端子からでも供給できる可能性はありますが、電力不足になる可能性があります。製品によって異なりますが、多くの場合、4.8Vから6Vの間の電圧を必要とします。外部電源のGNDは、マイコンのGNDと接続します。信号線に、PWMOutputDeviceを使ってパルス波を与えると、デューティ比に応じて角度が変わります。可動域は、180°のものが多いようです。

サーボモータはピンキリで、物によってはあまり正確に指定した角度になりません。0度から180度まで指定できるとは言っても、実際にはそれよりも狭い範囲しか動かないものもあります。実際に使用する際には、そのことも考慮に入れてプログラムを調整してください。

それでは、早速使ってみましょう。以下のような回路を作ります。

ポイントは、外部電源(6V)のGNDを Raspberry Pi のGNDと接続すること、外部電源のプラスは Rasbperry Pi の5Vや3.3Vとつながないことです。外部電源を使う時には、常にこの2つを守ります。

プログラムは以下のようになります。

from gpiozero import PWMOutputDevice

from time import sleep

 

motor_pin = 17

 

motor_pwm = PWMOutputDevice(motor_pin)

 

def main_loop():

    while True:

        led_pwm.value = 0.8  # デューティ比80%

        sleep(2)

        led_pwm.value = 0.1  # デューティ比10%

        sleep(2)

 

if __name__ == '__main__':

    main_loop()

ロボット

(編集中)