ラズパイを使えばさまざまな物を制御することができます。ここでは制御するものとして代表的なモーターの制御方法について解説します。
またこの記事を始まりとして、今後モーター制御を応用して、スマホ操作でレゴの車を走らせるところまで解説していきます。
- 【第1回】Raspberry Piでモーターを制御してみよう ← 今ココ
- 【第2回】Raspberry PiでPWM制御して、モーター回転数を制御しよう
- 【第3回】Raspberry Piでモータードライバーを制御して、モーターの回転方向を変えてみよう
- 【第4回】Raspberry Piでモーターを制御するサーバープログラム
- 【第5回】Raspberry Piでモーターを制御するクライアントアプリ(iOS)
準備するもの
今回のモーター制御では下記のものを使用します。
- 初期設定済みのラズパイ
- パソコン
- 380モーター
- モーター駆動用のバッテリー(7.2V)
- ブレッドボード
- MOSFET(Nch)
- 整流ダイオード
- 抵抗器
- ジャンパ線
- ハンダゴテ
ちなみに私が今回使った380モーターはこちら。
モーター制御用の回路作成
まずは今回使う380モーターの仕様を確認します。
使用電圧範囲 | 4.5〜9.6V |
---|---|
適正電圧 | 7.2V |
適正負荷 | 9.8mN·m (100gf·cm) |
無負荷回転数 | 15,100r/min |
適正電圧・負荷時の回転数 | 13,400r/min |
適正電圧・負荷時の消費電流 | 2.9A |
シャフト径 | 2.3mm |
重量 | 75g |
外観寸法 | 37.8×27.7mm |
ココで重要なのは、使用電圧範囲と消費電流です。
ラズパイのGPIOが出力する電圧は3.3V、電流は頑張っても30mAくらいです。したがって、このモーターを駆動させる条件を満たしていません。ラズパイのGPIOではモーター駆動できないのです。
では、どのようにしてラズパイがモーターを制御するのか?答えはモーターの電源を制御することです。今回でいえばモーター駆動に使うバッテリー電圧を、モーターに掛けたり掛けなかったりすると良いわけです。
じゃあ、どうやってモーターに掛かる電圧を制御するかというと、トランジスタを使います。モーターとバッテリーの間にトランジスタを挟んで、そのトランジスタをラズパイのGPIOでON/OFFさせることで制御できます。
今回はNチャネルのMOSFETを使うので回路図で見るとこんな感じになります。

これでモーターに掛かる電圧を制御できるようになりました。
回路図を見ると、モーターのところに並列でダイオードが付いています。これは何かというと、「フリーホイールダイオード(還流ダイオード)」というものになります。
モーター(コイル)というのは電流が流れていた状態から流れない状態に遷移した場合、そのまま電流を流し続けようとします。しかし、スイッチをOFF(つまり無限に近い抵抗)にしているため、高電圧が発生することになります。
これをフライバック電圧(逆起電力)と言います。フライバック電圧は瞬間的ではありますが高電圧(数百V)となるため、場合によってはMOSFETを破壊してしまう可能性もあるのです。
そのため、「フリーホイールダイオード」を入れることで電流の流れる道を用意してやり、フライバック電圧が発生しないようにしているというわけです。
では回路図に合わせて実際に回路を作ります。できあがるとこんな感じ。

回路を組む上で注意すべきところは、モーターというのは基本的に結構な量の電流が流れます。したがって、その電流に耐えられる電子パーツや導線を使って回路を作る必要があります。
たとえば、今回の380モーターでは最大2.9Aもの電流が流れることがあります。そのため、モーター駆動させる導線はAWG24以上にした方が良いですし、MOSFETも3Aまで耐えられるものを用意します。
MOSFETはゲート端子に電圧を掛けることでON/OFFを制御するわけですが、ゲート電圧にはONにするための閾値「ゲート閾値電圧」があります。この閾値を超えないとドレイン-ソース間が導通しません。
したがって、MOSFETを購入する時はゲートしきい値電圧に注意して購入しましょう。たとえば、今回のラズパイだとGPIOは3.3[V]なので、3.3[V]で駆動できるMOSFETを購入しなければなりません。
ちなみに、私が持っていたMOSFETの中で、下記の3つはラズパイで駆動することができました。ご参考までに。
- 2SK3134L-E
- EKI04036
- 2SK2796L
モーターの動かし方
では、実際にラズパイのGPIOを操作してモーターを制御してみます。ラズパイのGPIO制御方法については下記にまとめているので、こちらも参考にしてください。

今回使う380モーターはフルパワーで回すと相当な回転数になります。なので、まずはモーターを固定しておきます。本当は万力とかあると良いですが、ないのでペンチで挟んで固定します。

モーターを固定したらGPIOの設定を行います。今回はGPIO17をMOSFETのゲートに接続しているので、まずはGPIO17のmodeを出力に変えます。
gpio -g mode 17 out
出力に設定したら、GPIO 17の出力をHI(3.3V)出力します。
gpio -g write 17 1
するとモーターが回転し始めます。フルパワーで回るのでかなりの回転数になります。
モーターを止めるときは下記コマンドを入力して止めましょう。
gpio -g write 17 0
まとめ
このようにラズパイのGPIOを使ってモーターの駆動制御ができました。わかってしまえばとても簡単に制御できます。ただ、今回の制御では「0回転」or「フル回転」のどちらかしかできていません。
次回はモーターの回転数を制御する方法について紹介するので、モーター制御に興味ある方はぜひ一度見てみてくださいね。
コメント