【マイクロビット応用】[1] モーターを動かしてみよう。

マイクロビット

 前回はマイクロビットの機能をいくつか使ってみた。

 可愛い蛇さんも出てきましたね。

 今回から、プラモの飛行機のプロペラをカッコよく回してみようと思う。そのために、前回試した「入出力端子」の機能を利用してモーターを動かしてみるよ。

 エンジン始動の雰囲気で回り始めるようにしたいですね。

 それが狙いだ!では、始めよ~ぅ!

モーターを動かすにはどうすればよい?

 早速だが赤トマト君、マイクロビットでモーターを動かすには、どうすればよいと思う?

 いきなり来ましたね。うーん・・・

 「display.scroll」を使って、LEDの部分に「Mortor san Ugoite」と表示してみるとか・・・

 今日も飛ばしているな。おまじないではモーターは動かないぞ。

 ですよね~。モーターを動かすには、電気を流すんですよね。

 その通りだ。なんだ、分かっているじゃないか。

 さっき、「入出力端子」の機能を使うと言ってましたが・・・

 (むむむ、やるな、赤トマト君)

 「pin0.write_digital(1)」で「ピン0」から電圧を出して、これでモーターを回せばよいのでは?

モーターをマイクロビットの「ピン0」と「GND」に直接接続。

 では、やってみるか!

 やってみましょう!・・・アレ?動かないですね。

 実は、マイクロビットのポートには、モーターを回すだけの力がないのだ。

 LEDは光りましたね。

 LEDは消費電力が小さいからね。

 では、どうすればよいのですか?

 モータードライバ回路(モーター駆動回路ともいう)というものを使うのだ。

 なんか、難しそうですね・・・

 いやいや、モータードライバ回路の原理は、そんなに難しくないのだよ。下の絵を見てくれたまえ。

 マイコン君だ!

 モーターがスイッチと電池につながっている。

 そして、マイコン君の指がマイクロビットの出力端子に相当する。

 出力端子から1を出力すると、マイコン君がスイッチを押して、0を出力すると、スイッチを離すのだ。

 な~るほど!

 これがモータードライバ回路の原理だ。

回路を作るのは大変なので・・・

 それでは、モータードライバ回路を作るのですか???

 それは大変なので、今回はこれを使うのだ。ガッホーン!!

 な、なんすか、コレ?

 コイツは、マイクロビット用のモータードライバ拡張ボード「KS0308」だ!

 おぉ~ぅ

 このようにして、マイクロビットをはめ込む!

 おっひょ~

 モーターと電池をつないだら、準備完了でぇ~ス!

  • モーターの+(赤の電線)を「KS0308」の「A2」に接続
  • モーターのー(黒の電線)を「KS0308」の「A1」に接続
  • 電池の+(緑の電線)を「KS0308」の「VM」に接続
  • 電池のー(白の電線)を「KS0308」の「G」に接続

 「KS0308」は、マイクロビット・バージョン2でも使えるのだ。(マイクロビット・バージョン2については、以下をご覧ください。新しいタブで開きます。)

【プログラミング】マイクロビット・バージョン2を買ってみた。

 似たようなボードで、センサー シールド 拡張ボード「KS0360」というのもありますね。

 「KS0360」ではモーターを動かせないので、購入する際は気を付けてね。

マイクロビットの出力端子と「KS0308」の接続について調べよう。

 準備もできたし、さっそく動かしましょうよ!って、どうすればよいのでしょうか?

 「KS0308」の使い方を調べないといけないネ。以下に説明があるのだ。

KS0308 Keyestudio Motor Drive Breakout Board for micro bit.pdf

 英語ですね・・・頑張って調べてみましょう。

 モーターはAとBの2つつなげるのだ。

 今回はAだけをつなげてみるのですね。

 今回使用する「KS0308」では、マイクロビットの入出力端子を出力として使用する。これによると、12ピンをLOWとし、13ピンをHIGHとすればモーターAが回るようだね。

 12ピン? 13ピン? マイクロビットには0ピン、1ピン、2ピンしかないのでは?

 実は、マイクロビットの0ピン、1ピンなどの間にある細い金色の部分にも機能が割り当てられており、その一部が入出力端子になっているのだ。

 詳しくは、「BBC micro:bit MicroPython documentation」に書かれているのだ。

英語版:https://microbit-micropython.readthedocs.io/en/latest/

日本語版:https://microbit-micropython.readthedocs.io/ja/latest/index.html

 「API REFERENCE」の「Input/Output pins」を参照してくれたまえ。

 そうだったんですね。この金色の部分は、ただの模様ではなかったのですね。

 「KS0308」の説明書によると、モーターを回すには、以下のようにすればよいと書いてある。

モーターAモーターB
順方向に回転13ピンをHIGH(1)
12ピンをLOW(0)
1ピンで回転数を変える。
15ピンをHIGH(1)
16ピンをLOW(0)
2ピンで回転数を変える。
逆方向に回転13ピンをHIGH(0)
12ピンをLOW(1)
1ピンで回転数を変える。
15ピンをHIGH(0)
16ピンをLOW(1)
2ピンで回転数を変える。

 1ピン、2ピンを使うことで、回転数も変えられるようだね。

 いろいろ応用が利きそうですね。

 HIGHとLOWは、Trueすなわち1とFalseすなわち0に相当する。TrueとFalseについては、「プログラミング入門 第5回 それって本当?それとも嘘?」を参照してくれたまえ。

 そして、ここで気を付けないといけないのが14ピンの使い方についてだ。

 ふむふむ。

 最初に14ピンをHIGH(1)としておかないとモーターが回らないのだ。

 なんてこった!

 説明書の本文には書いてないが、Test Codeの中に書いてあるので、要注意なのだ。

 分かりました!気を付けます!!

モーターを動かすプログラムを作ろう。

 マイクロビットで何かをするためには、必ずプログラムを作らないといけないのは覚えているね。

 今回は、モーターを動かすためのプログラムを作るのですね。

 イエ~ス。今回は次のようなプログラムを作るのだ。

  1. 「Aボタン」を押すと、モーターが動く。(LED表示部に「A」を表示する。)
  2. 「Bボタン」を押すと、モーターが止まる。(LED表示部に「B」を表示する。)

 LED表示部に文字を表示するのですか?

 絶対に必要、という訳ではないけど、どのボタンを押したか分かりやすくなるのだよ。

 なるほど、なるほど。プログラムはこんな感じですね。

  • 1行目 from microbit import *
  • 2行目 
  • 3行目 pin14.write_digital(1)
  • 4行目 pin1.write_analog(900)
  • 5行目 pin12.write_digital(0)
  • 6行目 
  • 行目 while True:
  • 8行目  if button_a.get_presses():
  • 9行目   pin13.write_digital(1)
  • 10行目   display.show(‘A’)
  • 11行目  if button_b.get_presses():
  • 12行目   pin13.write_digital(1)
  • 13行目   display.show(‘B’)

 「Aボタン」を押すと・・・モーターが動いた!

 「Bボタン」を押すと、止まった。よし。

 4行目の「900」を変えるとモーターの回転速度を変えることができるのだ。

 「50」だと、唸るだけで回らないですね。

 あまり小さい数字だと回らないし、大きすぎるとエラーになる。いろいろ試してみよう。

 例えば、「400」だと、ゆっくりになりましたね。

 うまくいったようだね。

今回のまとめ

 今回のまとめだよ~

  1. マイクロビットでモーターを回すには、モータードライバ回路が必要。
  2. 市販の拡張ボードを使うと手軽に試せる。
  3. プログラムでモーターの動きを制御できる。

 「KS0308」については、こちらを見てね。

商品説明:Ks0308 keyestudio Motor Drive Breakout Board for micro bit – Keyestudio Wiki

データシート:https://drive.google.com/file/d/10yAp5k0kpxSHo4FJDGvVAk-by5IlVe47/view

 今回のプログラムだよ~

  • 1行目 from microbit import *
  • 2行目 
  • 3行目 pin14.write_digital(1)
  • 4行目 pin1.write_analog(900)
  • 5行目 pin12.write_digital(0)
  • 6行目 
  • 行目 while True:
  • 8行目  if button_a.get_presses():
  • 9行目   pin13.write_digital(1)
  • 10行目   display.show(‘A’)
  • 11行目  if button_b.get_presses():
  • 12行目   pin13.write_digital(1)
  • 13行目   display.show(‘B’)

 次回は飛行機のプロペラだよ~

つづく

コメント

タイトルとURLをコピーしました