ビットパック・ミニカー 製作記


2024年4月19日 

━━◆━━

1. ビットパック・ミニカーとは

名称:ビットパックミニカー

型名:SEDU-058285

企画:Switcheducation

販売:スイッチサイエンス

価格:4,950円(購入期日:2024年3月28)

■bitPak:Minicarの組立方法を紹介した動画 / 2019/11/16

 

■商品紹介ページ

https://sedu.link/bitpak-minicar

 

■仕様

micro:bit使用ピン番号

P0 :回転サーボモーターを接続(CCWで前進)

P8 :回転サーボモーターを接続(CWで前進)

角度 0~89 のとき:時計回り(CW;0に近いほど速い)

角度 90 のとき:停止します

角度 91~180 のとき:反時計回りに回転(CCW;180に近いほど速い)

P1 :予備IO

P2 :予備IO

 

━━◆━━

2. 回転サーボモーターとは

■主要部品

回転サーボモーターFS90R

(サーボホーンセット付き:ミニカーへの応用では使わない)

https://learn.switch-education.com/microbit-md-tutorial/10-servo.html

・回転サーボモーター

データーシート

360°連続回転可能なサーボです。ギヤードモーターとして使うことができます。

500円@秋月通商

仕様

・電源電圧min.:4.8V

・電源電圧max.:6V

・スピードmax.:130rpm

・トルクmax.[kgf・cm]:1.5kgf・cm

・無限回転:可能

・制御信号:PWMキャリア周波数=50Hz, 0度=500us, 90度=1.5ms, 180度=2.5ms

制御コマンド

・90度:停止(*)

(*)停止しない場合には本体の可変抵抗器を再度調整。停止コマンドを発行するプログラムを動作させた状態でサーボを外し、小型ドライバーで左右に回し、停止させる。停止範囲は広く無いので慎重に行う。温度依存性があるようなので気温の変化する時期には再調整が必要となるようだ。

・0度:CW最高速度、

・180度:CCW最高速度。

・CW(when 1500~700 µsec)90度~18度

・CCW(when 1500~2300 µsec)90度~162度

・外形寸法

・長辺:22.5mm

・短辺:12.1mm

・高さ:27.7mm

━━◆━━

3. 制御信号の生成

この回転サーボへの動作指令は、MS MakeCodeのblock「サーボ出力する端子P0角度180度」を用いて生成することができるようだ。

■MS MakeCodeで生成されて端子P0から出力される信号の波形

この関数は、ブロック表現のプログラムに示したように、最初に一度実行すると、P0から信号が出力され続けていると言う特徴がある。

 

P0端子から出力された信号の波形をオシロスコープで観測する。この関数は、PWM(pulse width moduration)信号を出力している。この信号のキャリア周波数は50Hz、周期は20msである。

 

出力角度が0度と180度の時の波形を比較すると、周期は20msと同じであるが、パルス幅は、0度のとき0.5ms、180度のとき2.5msというように、角度に比例してパルス幅が増えていて、これがPWM信号と呼ばれる所以である。

 

このパルス幅y[s]と角度[度]の関係式は、

  • y=(1/90000)x+0.0005 : 下図の橙色の線

ラジコン業界のデファクトスタンダードなのか、MS MakeCodeのblock「サーボ出力する端子P0角度180度」もこれに従っているので問題無く使える。

 

ただし、連続的ではなく、周期20msを1024分割した1.953E-05s刻みの階段状(下図の青線)の値をとる。

 

例えば、1024段階の128段階に位置する2.5ms(180度)は正確だが、0.5ms(0度)は、1つ下の段0.488msとなる。

 

 

━━ちょっと脇道だが━━

 

■デジタル出力ポートを用いて、「サーボ関数」と同様な信号が出せるか試してみよう。

 

「デジタル出力」を1、「一時停止関数」を0ms(最小値)とし、次に「デジタル出力」を0、最小の停止時間0msとしたうえ、その全体を「ずっと関数」で継続したときの波形である。「サーボ関数」のような50HzのPWM信号を作ることはできないことがわかった。

 

また、この観測によって、「一時停止関数」と「ずっと関数」の作動時間がそれぞれ、4ms、20ms程度であることがわかった。

━━◆━━

4. サンプル・プログラム

スイッチサイエンス社で公開しているサンプル・プログラムは以下のとおり。

■ラジコンカーのプログラム例

 

bitPak:Minicarでラジコン(車側)

https://makecode.microbit.org/S20530-97245-18768-90724

bitPak:Minicarでラジコン(コントローラー側)

 

https://makecode.microbit.org/S69684-77434-37510-38606

0度(最高速)と90度(停止)の2通りの値だけでミニカーを走らせている。

(=オン・オフ2値制御)

 

 

■課題の設定

  • ジョイスティック(の操作角度)により加速と減速を行いたい。

ジョイスティックとは、下図のようなもので、レバーの倒れ角でものを制御するものであるが、マイクロビットに簡単に取り付けて使えるものとして、スイッチサイエンスの企画したものを採用する。レバーはなく、黒いボタンが横ずれするようなものになっている。

━━◆━━

5. ジョイスティック・コントローラー

スイッチサイエンスの企画したジョイスティックには、レバーではなく、黒いボタンが横ずれするようなものになっている。それが、左右に配置されている。それぞれが上下左右にスライド操作が可能である。

 

■仕様(ここで使うmicro:bitのピン)

  • P0:スティック横方向の動きの検出、アナログ値を読み取るピン、アナログ値の範囲は0~1023。スティックが左側に近づくほど、0に近い値となります。
  • P1:スティック縦方向の動きの検出、アナログ値を読み取るピン、アナログ値の範囲は0~1023。スティックが下側に近づくほど、0に近い値となります。
  • P2:アナログ値を読み取るスティックの指定、デジタル出力「0」のとき、左スティック、デジタル出力「1」のとき、右スティックのアナログ値を読み取れます

以下に特性を示す。ボタンの横ずらし操作であるが、ここでは「レバー角度」と記している。

量子化の様子を図示している。実際には0度前後で細かな操作はできない。

 

■ジョイスティックコントローラーの読み取りプログラム

 

Joy-Tx-number-dsp / 2024年4月21日澤田昌宏

https://makecode.microbit.org/S50134-14202-97660-11293

 

このプログラムは、左右のジョイスティックの縦方向の操作量を読み込み表示する。仕様では、0~1023とされているが、実測する必要がある。

  • アナログ値範囲:0~1018
  • 中立点の値:490~530(操作方法によりばらつく)

 

━━◆━━

6. 送信機のプログラム

 

■ジョイスティックコントローラーの送信側プログラム

Joy-Tx-Min-R2 / 2024年4月21日澤田昌宏

https://makecode.microbit.org/S42380-40602-03918-98383

 

左右のジョイスティックの(縦方向)指示値を読み込み、送信する。ジョイスティック出力仕様は、0~1023。観測では、0~1018、中立点の値は、490~530であった。中立点で停車するには、受信側に不感帯を設ける必要がある。

 

 

━━◆━━

7. 受信機のプログラム

 

■ビットパックミニカー自動車側の受信プログラム

Joy-Rx-Mini-R2 / 2024年4月21日澤田昌宏

https://makecode.microbit.org/S53300-37324-98033-42023

 

受信されたジョイスティック値に応じて、サーボモジュールへ指令値を出力する。

  • 左側のサーボ・モジュールへの指令値 = ( JL / 1023 ) * 180 [度]、JL : 左側ジョイスティックの出力値
  • 右側のサーボ・モジュールへの指令値 = ( 1 - JR / 1023 ) * 180 [度]、JR : 右側ジョイスティックの出力値

ただし、ジョイスティックの中立値に変動があるので、不感帯(6度)を設ける。上記計算値が、90度±6度の範囲では、指令値としては90度を与える。

サーボモーターの回転数に左右の差がある場合は、この角度計算の際に使う量子化数の項に調整代を加えると良いだろう。 

 

 

━━◆━━

 

8. 加速度計*で操縦

加速度Y軸を計測して数値を表示するプログラムを実行して、その値を観測する。

▲加速度Y軸(正立:+1023)

▲加速度Y軸(水平:0)

▲加速度Y軸(倒立:-1023)

このような静止画では、LEDマトリックスのダイナミック点灯表示される数値を読み取ることができない。倒立-1023、水平0、正立1023(公称値)。これをグラフで現わすと下図のようになる。

▲加速度Y軸信号 vs X軸周り回転角

スイッチサイエンス社の公開しているサンプルプログラム

コントローラー側

車側

このようなon/off制御から、アナログ的な多段階の制御としたい。なかなか考えにくいので、例えば、加速度xyを左右のサーボへ割付たらどうだろう。(下図)

やってみると、操作し難いが、一応、操作可能であった。

 

━━◆━━

 

9. 制御器を切り替える

 

スイッチサイエンス社の企画したビットパックミニカーを題材に、その概要と2通りの制御器の作り方を検討してきた。そこで、それらを統合して、切り替えて利用できるようにしたプログラムを制作してまとめとする。

 

自動車側のプログラム

Rx-Acc&Joy-mini #2

https://makecode.microbit.org/S51776-05309-39263-09272

 

コントローラー側プログラム

Tx-Acc&Joy-mini

https://makecode.microbit.org/S63695-58027-65821-84195

 

■制御器の切り替え方

プッシュボタンスイッチBを押しながら電源をonにしたときに、ジョイスティックコントローラーモードとなる。そうではないときには、加速度計により操作するものとなる。無意識に基板が傾いたために走り出すことのないように、プッシュボタンスイッチAを押しているときだけ動くようにした。

  • ジョイスティックコントローラーモード:プッシュボタンスイッチBを押しながら電源をon

こちらは、左右のサーボを左右のジョイスティックへ割り当ててある

  • 加速度計コントロールモード:プッシュボタンスイッチBを押さないで電源をonしたうえ、プッシュボタンスイッチAを押しながら操作する

こちらは、P0(左側サーボ)に加速度計X軸を割り当て、P8(右側サーボ)に加速度計Y軸を割り当ててある。斜め右上を下方へ傾けると前進する。後退はその逆方向を下げる。それと直交する方向の傾斜で方向も選べるが、操作性は低い。

…ゲームとしては楽しめるかな?

 

 

 

━━━この項の記述はこれでおしまいです━━━

 


コメント: 0