0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

micro:bitAdvent Calendar 2024

Day 15

micro:bitでラジコンは作った。コントローラーはどうする?

Last updated at Posted at 2024-12-18

ねえパパ、ラジコンつくりたい。

数年前のクリスマス少し前、息子(当時小1)のこの言葉からはじまったラジコン作り。前回、車体は作成できた。ではコントローラーはどうする?

コントローラーを作成する前に

車体の前輪・後輪がサーボモーターと組み合わせて正しく動作するか、チェックをしましょう。

前回説明しましたが、前輪と後輪のサーボモーターはどちらも、Yahboom社のSuper:bit Expansion Boardのサーボモーター端子に接続されています。micro:bitでSuper:Bitを利用するには、Yahboom社から提供されている、拡張機能を利用します。

MakeCodeのプロジェクトエディタで「拡張機能」の検索窓に以下のURLを入力します。すると「Extension for Yahboom SuperBit」が見つかるので、これをプロジェクトに追加してください。

実はSuper:Bitには、古いもの(無印)と新しいもの(V2)があります。今購入すると(たぶん)V2が届くと思いますが、持っているSuper:Bitに合わせて、適切な方を選択してください。

ふるいものhttps://github.com/lzty634158/SuperBit
新しいものhttps://github.com/YahboomTechnology/SuperBitLibV2

image.png

今回は「新しいもの」を追加した場合、以下のブロックが追加されます。

image.png

前輪の動作チェック

前輪は角度モーターです。GeekServeの角度モーターには180度のものと270度のものがあるようです。使用するモーターにあわせて適切なブロックを選択します。今回は180度モーターで説明します。

180度角度モーターの場合、指定できる範囲は0度~180度、中心は90度になります。以下のようなプログラムを作成し、前輪を一度、中心(90度)にします。前輪はS1端子に取り付けたので、「S1」を選択します。

image.png

おっと! Aボタンを押す前に、前輪のサーボモータの歯車を、ギヤラック(溝がついた部品)から外すのを忘れないように! そうでないと、歯車がギヤラックの限界を超えて回転し、「ガギガギ」と壊れそうな音で回るかもしれません!?前輪が中心(90度)になってから、車体が直進するように前輪の向きを調節して、歯車をギヤラックにセットしてください。

valueの値を変更し、以下のように前輪が動作すればOKです。ただし、角度をあまり大きく or 小さくすると、歯車がギヤラックの限界を超えて回転しようとします。私の場合、角度が「40度~140度」くらいが適切でしたので、この範囲で変更するようにします。

241211_142839_sh.gif

後輪の動作チェック

後輪は回転モーターです。以下のようなプログラムを作成して、動作確認をしましょう。S2端子に取り付けたので、「S2」を選択します。

image.png

回転モーターは、回転方向(forward」か「reverse」)と、速度を指定します。速度は0-100の間で指定するようです。速度と回転方向を色々と変更して、動作確認してみましょう。

241211_143024_sh.gif

コントローラーどうするか

スマホやタブレットのmicro:bitアプリの「モニター&コントロール」機能を利用する。

ネットで検索する限り、スマホやタブレットのmicro:bitアプリには、micro:bitをリモートで制御するための「モニター&コントロール」があるらしい。。。でも私のAndroidのmicro:bitアプリには、そんな機能ない。

monitor_control.png

娘を呼んで、娘のiPhoneとiPadにmicro:bitアプリをインストールしたところ、なんと、「モニター&コントロール」機能が、ちゃんとありました。なんでAndroidには無い・・・?
残念ながらこの方法は不採用となりました。

micro:bit対応のジョイスティックを購入する

micro:bitに対応したジョイスティックが、いくつかのメーカーから販売されています。

ただし、車体側のmicro:bitとは別に、ジョイスティック用にmicro:bitがもう1台必要!ジョイスティックとあわせてお金がかかる!。しかし、もっともラジコンらしい操作ができます。「micro:bitは2台あれば、連携して、いろいろ遊べるよ!」と自分に言い聞かせて、私は、2台目のmicro:bitと、スイッチサイエンスのジョイスティックを購入しました。

全体の構成

micro:bitはもともと、複数台で通信する仕組みが備わっています。これを利用して、コントローラーを作成します。
以後、ジョイスティック側のmicro:bitを①、車体側のmicro:bitを②とします。

  • [micro:bit①と②] 最初だけブロックで「無線グループを設定 0」を実行
  • [micro:bit①だけ] スティックの状態を読み取って、無線でmicro:bit②に送信
  • [micro:bit②だけ] 無線でデータを受け取ったら、サーボモーターを制御

最初だけブロックで「無線グループを設定」を実行

micro:bit①と②とも、「最初だけ」ブロックに「無線のグループを設定」を追加します。これで、micro:bit①⇔②間で、データのやり取りができるようになります。

image.png

[micro:bit①] スティックの情報を読み取って、無線でmicro:bit②に送信

スイッチサイエンスのジョイスティックは、P0,P1,P2端子を読み書きしてスティックの状態を読み取ります。

  • はじめにP2端子で、左右どちらのスティックの状態を読み取るか指定します。デジタル出力で0を書き込むと左スティック、1を書き込むと右スティックの状態が読み取れるようになります
  • 次に、P0端子のアナログ電圧を読み取ると、スティックの横方向(水平方向)の傾きを0~1023の範囲で読み取ることができます
  • 次に、P1端子のアナログ電圧を読み取ると、スティックの縦方向(垂直方向)の傾きを0~1023の範囲で読み取ることができます
  • 注意点として、P2端子にデジタル0か1出力後、少しだけ待つ必要があります

image.png

読み取ったスティックの状態は0~1023範囲となります。これを、サーボモーターの適切な範囲に変換するために、「数値をマップする」ブロックを使用します。

  • 左スティックはスティック状態の0~1023範囲を、角度モーターの40~140範囲にマップしています
  • 右スティックはスティック状態の0~1024範囲を、回転モーターの速度であるマイナス100からプラス100にマップしています

読み取った「ハンドル」「アクセル」の値は、「無線で送信」ブロックを使って、micro:bit②に送信します。

[micro:bit②] 無線でデータを受け取ったら、モーターを制御

今度は車体側です。

「無線で受信したとき」ブロックで、microbit①からのデータを受信します。受信したデータに従って、前輪や後輪を動かします。

image.png

ついにラジコンが完成した!

やったあ!ついにラジコンが完成した!パパやったよ。息子よ。
あれ?なんかそれほどうれしそうじゃなくない?そんなことないって?そうか。

WIN_20241218_11_42_35_Pro.gif

数か月後・・・

仕事から帰って机の上を見たら、そこには、魔改造されたラジコンの姿が!。サーボモーターSG90を結束バンドでくくりつけて、レゴで作ったプロペラをつけたらしい。もちろんプロペラは回転する。空を飛ばせたかったらしい。息子は息子なりに楽しんでいたようです。

image.png

スマホをコントローラー代わりにする。

🤔「でも、やっぱり、もう1つmicro:bitを購入するのは、ちょっと...」
😑「ジョイスティックなしで、なるべく安くコントローラーをつくりたいよ...」

そこで、次回、「スマホでコントローラーを作成する」を、お楽しみに!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?