ラップタイム計測機

ラジコンの周回タイムを計測するために、ラップタイム計測機を作ってみました。
IMG_1122

先ずはプロトタイプを作って動作を確認しました。黄色いブレッドボード上に12V関連の回路が載っています(光電管からの信号でリレーをドライブしています)。
IMG_1023

その上で、以下の機能を実装することなどを目標としました。
・一台のラジコンの通過時間(周回時間)を計測する
・レース開始時の演出として、カウントダウンを行う
・1/1000単位で計測する
・一秒以下で周回することはないと仮定する
・計測結果をPCに対して送り、記録できるようにする
・各モジュールの取り外しは簡単に出来るようにする

それぞれの項目について検討・実装した内容をメモしておきます。

・一台のラジコンの通過時間(周回時間)を計測する
一台のラジコンと限定することで、複数台のラジコンを識別する必要が無くなり、製作がぐっと楽になりました。実際のレースなどでちゃんと計測したい場合は、RFIDなどの技術で各車両を個別に認識する必要があるのですが、さすがにそこまでは今回やらないことにしました(片手間でできる範囲を越える)。

・レース開始時の演出として、カウントダウンを行う
これは単に「盛り上がるから」実装しようと思いました。シグナルタワーと圧電ブザーを装備して実現しています。シグナルタワーは本来であれば24Vで駆動される電球が入っていたのですが、光電管で使う12Vを標準にしようと考えたので、24Vの電球を外して、同じ電球ソケットに抵抗とLEDを付け直して12Vで光るようにして使っています。

・1/1000秒単位で計測する
最初はオーバースペックかな、とも思ったのですが、実際に試してみるとかなり僅差で勝負が決まることもあり、1/1000秒単位での計測は必須でした。ですが、実は今回RTCを積んでいません。内蔵のクロックを使っていますので、他の市販の機械と比べると誤差は出ているかも知れないです。実際の検知にあたっては、光電管からの信号を割り込み処理で受け取ってmillis()で時間を確定しています。ですので、他の処理に余り影響されない時間が取れているかと思います。(他の機械と比べると誤差は出るかも知れないが、この機械で計測している範囲での優劣は多分正しい、ってレベルです。)

・一秒以下で周回することはないと仮定する
もしかすると一秒以下で周回してしまう場合があるかも知れないのですが、変な角度からラジコンが進入してきたり、センサーがチャタリングや軽い誤動作をしたときの対応として、この仮定をおいて進めました。

・計測結果をPCに対して送り、記録できるようにする
LEDに計測時間は表示されるのですが、いちいち手で書き写すのは結構大変です。ですので、今回はArduino LeonardoにキーボードのフリをさせてPCで記録する方式を採用しました。具体的には、周回ごとに時間を「キーボードで打ったかのように」PC側に送り、時間を書き終わったらReturnをPC側に送る、という動作をします。なので、EXCELを開いていればセルに次々時間が記録されますし、メモ帳を開いていれば、時間を一行ごとに書き込んでくれます。OSはWinでもMacでもどちらでも大丈夫です。

とはいえ、つないでいるときは常に数字を送ってきてしまうので、普通のPCの操作時には邪魔です。そのため、キー送出を停止・再開するための機能とボタンを実装しました。一時的に送出を止めたいときはそのボタンを押すとシグナルタワーの黄色が瞬いてサイレントモードに入ります。もう一度ボタンを押すと送出を再開します。

・各モジュールの取り外しは簡単に出来るようにする
自分以外の人が使うことも考えてケースに入れて各インターフェースはプラグで取り外せるようにしました。

使った部品は以下の通りです。
Arduino Leonardo (ソケット・ヘッダ付き)
・シグナルタワー
・スイッチ(リセット用)
・スイッチ(キー送出停止・開始用)
SPI(3線式)LED Module 8 Digital
・光電管(キーエンス PZ-61)
・圧電ブザー

今後の機能拡張としては赤外線リモコンによる操作を考えています。でも、現状無くても特に問題はないのでこのままかも。

シールドの下にびんぼうでいいのが写っていますが、実際にはArduino Leonardoを使用しています。
IMG_1106

シグナルタワーが光るとこんな感じ。
IMG_1126

コメントは受け付けていません。