micro:bit ゴム銃射撃競技用タイマー作成・その5
今週のお題「自由研究」
お盆+コロナ対応により出張もなく通勤時間も0なので、micro:bit V2にゴム銃タイマープログラムを書き込んでみました。
V2にはオンボードスピーカがあるので、電源以外の外付け回路を使わずにゴム銃射撃競技用タイマーの要件を満たします。
昨年末に1度試したときは、音の出方がV1.5と違う(サウンド発生が中断される)感じなのと、多々フリーズして安定稼働しないので、放置していました。
それから半年以上になりますが、いろいろ不具合が解消されたランタイム(CODAL)が7月に公式リリースされていたようです。
MakeCodeからプログラムをmicro:bitに送り込む際に、ランタイムも更新されるようです。(初回だけフラッシュ時のデータ転送時間が長かったので、必要に応じて?)
ファームは変更なしなので、そちらの入替作業(ちょっとだけ面倒)は発生しません。
今のところ動作は良好です。
ゴム銃タイマープログラムのオマケとして設けてあるラーメンタイマー機能で、5分計測を繰り返してみましたが、フリーズはまったく発生しません。
音の出方がV1.5と違うのは変わっていませんので、そのあたりはプログラムの方で調整するしかないようです。
micro:bit ゴム銃射撃競技用タイマー作成・その4
一旦昨年に完成はしたのですが、サウンドパターンと計測秒数の設定を不揮発メモリ上に格納させたかったので、作り直しました。
プログラムは不揮発メモリ上のファイル操作をするためにmicro-Pythonへ変更、P0はサウンド出力専用とし、P1を外部スイッチ入力に割り当てました。
P2が不使用となったうえにスイッチや抵抗も減って基盤に余裕ができましたので、micro:bitとの連結には、銅板でエッジを挟み込む方式を採用。
端子の加工やはんだ付け位置の調整などは、Ringに端子を通す方式よりずっと楽です。
そのかわり、micro:bit本体の位置がずれないようにガイドが必要となりました。
というわけで改めてDATケースを加工し直して、ベースの基盤もユニバーサル基盤を切るところから再作成。
基盤上の部品は、電源スイッチ、サウンダ、外部スイッチ用のジャック、保護用のダイオードと抵抗。前よりかなりシンプルになりました。
続々々々・阪本さん置時計
多分、前回の電池交換から4年たちました。そろそろ電池交換します。
誤差の方は、前回の電池交換で実施した時刻合わせ以来、全く触らずでたった3秒の遅れ。
季節によって進んだり遅れたりはしたと思いますが、プラマイほぼ帳消しとは…
あらためてSIIのVT-200-Fってすごいと思う。
VAIOモバイルPC用マウスVGP-BMS11の掃除
出張では、SonyのBluetoothマウス、VGP-BMS11を愛用しています。
7年前にVAIO-DUO11(先日、冷却ファン故障でお亡くなりなった)とセットで購入したちょっと古いものなのですが、心配性が携帯するには好都合なマウス。
上面シャッターを閉じるとボタン類が隠れ、カバンに押し込んでもボタンが押しっぱなしになる恐れがなく、シャッター開閉に電源On/Offが連動するため電源操作でマウスをひっくり返すようなことは不要だし、Onのままカバンに放り込む事故もまず起きません。
最近ちょっとホイールの調子が悪くなったので、掃除のために分解しようとしたのですが、これが非常に難儀しました。
構造的には、底面の電池ボックスを開けて2つあるネジを取り、取り付けツメを外すようにして上面シャッター部分をはがすことで、ボディ内部にアクセスできるようになるはずです。
しかし、この2つあるネジ、よくあるプラスネジとかではなく「六角穴いじり止め付き」という曲者で、穴の中央に突き出た「いじり止めポッチ」が邪魔をして普通の六角レンチが使えない構造。
しかもどうやら対辺幅1.5mmと度を越した小ささで、手持ちの工具でいじり止めポッチに対応した一番細いもの(対辺幅2mm)が嵌らないし、ネットで市販工具を探しても合うものが見つかりません。
技適遵守で無線回りの改造防止のためとはいえ、清掃もままならないのは厳しい。
このモデルはもう売ってないし。
仕方がないので、トラスコ中山の「六角棒レンチ両端いじり止め穴付き・対辺2mm」(ビックカメラで税込み217円)を買って、レンチ先端が対辺1.5mmになるまで周囲6面を慎重に削り、専用レンチを作りました。
無事2本とも外せたのですが、2条タイプのネジでした。どこまで特殊なのか…
micro:bit ゴム銃射撃競技用タイマー作成・その3
とりあえず出来上がりました。
DATケースに単4電池2本とmicro:bit本体がぴったり収まるので、ユニバーサル基盤をDATケース内側いっぱいのサイズに切ってベースとし、その上にスイッチ類や圧電サウンダをのせました。
micro:bitとベースの接続はエッジ端子を銅板で挟む方法を考えていたのですが、スイッチ類のスペースが足りなくなったので、古いICソケットのばね端子を加工して基盤に取り付け、Ring内側からバナナクリップのように刺すようにしました。
簡単にmicro:bitが脱着できます。
スイッチは、電源、サウンドパターン、計測秒数指定の3個。いずれも小型のスライドスイッチです。
計測秒数指定は、電源On時に一度読み込むだけなので音を出す前のP0から読みこませるようにしました。P0が入出力兼用になので、サウンダには1KΩ、スイッチには4.7KΩの抵抗を介して接続し、ポートに付加がかからないようにしました。
micro:bit側のプログラムも拡張し、30秒・60秒の競技用タイマーの他、3分・4分・5分のラーメンタイマーモードも付けました。Bボタンを押して計測開始待ちに入った後、Bボタンを押したままAボタンを押すことで、分単位で計測時間を選択できます。
分単位の計測値残は、隅のLEDを使って表示するようにしました。
左上が残が1分以上あると点滅、左下は残2分以上、右下は残3分以上、右上は残4分以上で点滅します。
単4乾電池2本だとちょっと重くなりますが、2日間電源を入れっぱなしでも十分持ちますので、競技大会で使うことがあっても電源の心配がいらないです。
micro:bitが不揮発性の内蔵メモリにプログラムを載せているので、計測秒数やサウンドパターンの設定もメモリに格納したいところですが、JavaScriptでは直接の操作はできないようです。
micro-Pythonなら不揮発メモリ上でファイルシステムが使えるらしいので、そっちに乗り換えるかも。
micro:bit ゴム銃射撃競技用タイマー作成・その2
ディスプレイ表示について検討。
makecodeで show leds ブロックをポチポチしながら、表示パターンを考えていきます。
show ledsは表示後にデフォルト400msecのWaitがかかり、Waitを取るにはJavascriptエディタで0msecを指定する必要があるのですが、その指定をつけたshow ledsはブロックエディタではパターン編集ができなくなってしまいます。ちょっと残念。
スタンバイ中の表示は、計測モードを示します。(◎点灯、・消灯)
60秒
◎ | ◎ | ・ | ・ | ・ |
◎ | ・ | ・ | ・ | ・ |
◎ | ◎ | ・ | ◎ | ◎ |
◎ | ◎ | ・ | ◎ | ◎ |
◎ | ◎ | ・ | ◎ | ◎ |
30秒
◎ | ◎ | ・ | ・ | ・ |
・ | ◎ | ・ | ・ | ・ |
◎ | ◎ | ・ | ◎ | ◎ |
・ | ◎ | ・ | ◎ | ◎ |
◎ | ◎ | ・ | ◎ | ◎ |
むりやり60,30と読む! 読めるっ!
タイマー動作中の表示は、アナログ時計の文字盤をイメージしたものにします。
(砂時計イメージも考えたのですが、無理がありました)
1分間の表現には、外周12個のLEDを使用(丸囲み数字部分)。
秒の進みの表現には、中央の5個のLEDを割り当てます(A~E部分)
・ | ⑪ | ⑫ | ① | ・ |
⑩ | ・ | D | ・ | ② |
⑨ | C | E | A | ③ |
⑧ | ・ | B | ・ | ④ |
・ | ⑦ | ⑥ | ⑤ | ・ |
計測開始ボタンを押すと以下の表示になります。
60秒
・ | ◎ | ◎ | ◎ | ・ |
◎ | ・ | ◎ | ・ | ◎ |
◎ | ◎ | ◎ | ◎ | ◎ |
◎ | ・ | ◎ | ・ | ◎ |
・ | ◎ | ◎ | ◎ | ・ |
30秒
・ | ◎ | ◎ | ・ | ・ |
◎ | ・ | ◎ | ・ | ・ |
◎ | ◎ | ◎ | ◎ | ・ |
◎ | ・ | ◎ | ・ | ・ |
・ | ◎ | ・ | ・ | ・ |
30秒は外周①~⑥がすでに半分消灯している状態。
60秒計測では①から点滅開始、時計回りでそれぞれ5秒間点滅した後に順次消灯。30秒計測では⑦から点滅開始します。
5秒中の進行はA~Dの順に、それぞれ1秒かけて減光した後、順次消灯。
タイムアップの場合は、丸に斜線が入ったイメージで、アラーム鳴動に合わせて点滅させます。
・ | ★ | ★ | ★ | ・ |
★ | ★ | ・ | ・ | ★ |
★ | ・ | ★ | ・ | ★ |
★ | ・ | ・ | ★ | ★ |
・ | ★ | ★ | ★ | ・ |
計測中にAボタンで押した場合は強制停止。ボタンを押している間「×」を表示。
◎ | ・ | ・ | ・ | ◎ |
・ | ◎ | ・ | ◎ | ・ |
・ | ・ | ◎ | ・ | ・ |
・ | ◎ | ・ | ◎ | ・ |
◎ | ・ | ・ | ・ | ◎ |
Aボタンを放したらスタンバイに戻します。
micro:bit ゴム銃射撃競技用タイマー作成・その1
射撃大会にも対応できる仕様とします。
計測時間は、フライシュート(FS)用の30秒とコインペンドラム(CP)用の60秒。
輪ゴム銃射撃競技の公式ルールで定められている1セットの競技時間は、FS:30秒、CP:60秒、MB(マッチボックス):5分ですが、事実上MBで5分使うこともないので、FSとCPに対応していれば十分です。
操作性のポイントとして、計測開始ボタンを押している間は残り秒数を初期値のままホールドし、放したら計測開始させること。また、計測開始してからでもボタン押し直しで初期値から再スタートできるようにします。
計測終了時にアラーム音を流します。計測開始ボタンを押した時・放した時のそれぞれで、アラーム音と同じフレーズを1度流します。
以上を踏まえて、micro:bitで作る際のボタン/リングの機能割付けを考えます。
Bボタン:Start/Restart 押して放すと計測スタート。(押し直しによる再スタート可)
Aボタン:Stop/Mode 強制ストップ。押しながらBボタン操作で計測時間30/60切替
P0:<Output> アラーム出力(デフォルト)
P1:<タッチ入力> アラーム音パターン切替。
P2:<タッチ入力> 外付けスタートボタン用。Start/Restart
アラーム音の出力は外付けスピーカー接続が前提。デフォルトで使えるP0のBEEP出力にします。
隣り合った競技スペースで区別できるようアラームは2パターン用意し、鳴動の都度P1の状態を見て切替えます。
競技では計測開始ボタンをゴム銃の先端で押すことは禁止されていないので、外付けボタンをつなげられるようにします。(Micro:bitのタクトスイッチのままでは何かと難あり)
Bボタンの回路が出ているP11は取扱いにエッジコネクタが必要となるため、P2に割り当てます。
あと、計測時間30/60の切替えについては、起動時の初期値を外付けスイッチで決められるようにもしたいです。競技現場では誰もが操作方法を知っているとは限らず、万一電源断などがあった場合に設定操作が必要だと不都合なので。
ただ、すでにリングP0,P1,P2の用途が決まっていて、ほかの端子も使いたくはないので工夫が必要です。起動後1度だけ情報取得できればよいので、音を出す前のP0からデジタルReadでできそうな感じ
表示については、5x5マトリックスLEDでは数字で残り時間を示すことが難しいため、時計の文字盤を模した表現で検討します。