こんにちは、nomuraです。
先週はマウスじゃなくCatに夢中で更新をさぼってしまいました。
気を取り直して、今週は受光素子の出力を計測してみましょう。
今回の研修で作成するマウスは、緑色のLEDを可視光用の受光素子TEPT5600で受けて距離を計測しようとしています。カエル色にしたいからという見た目重視の動機ですが、良い特徴になると思うので頑張っていきます。
さて、緑色で発光=>受光できるように部品を選んでみましたが、性能的にマウスの要求を満たせるのか判らずに買っています。多分イケると思うんですよ…?
わからないのであれば調べるしかありませんね!
というわけで、こんな感じでLEDを発光させて、壁との距離でどのような受光結果が得られるのかを調査してみました。
壁が緑色に染まっていてイイ感じです。マイクロマウスでは壁から反射した光の強さを観測することで、そこに壁があるのか、壁に接触せずに走れるかを判断します。
回路図も見てみましょう。
LEDには5Vの電流をたくさん流したいので、STM32からはFETを介して発光のON-OFF制御を行っています。AD変換の設定はとりあえず凄く速く変換するようにSTM32CubeMXの画面で設定しました。便利です。
計算すると、8bit分解能にすると約1.57μsec毎にAD変換結果が得られるようです。これだけ早ければ受光素子の反応もバッチリ観測出来そうですね。
というわけで、1cm毎に壁をズズズ…と寄せて計った結果がこちらです。
横軸が発光開始からの秒数[μsec]、縦軸がAD変換結果(最大255)です。それぞれの距離でグラフの傾きが異なります。値を何点か取って求めた傾きから壁との距離を判断すれば良いそうです。本当はこの後値が寝ていくのですが、そこまで待たないのが普通?なのだとか。
2cmより近くは値があふれてしまったので取っていません。ここは回路を見直しですかね。
距離が近づくほど値が勢いよく増えているのが見て取れます。
この値には対数(log)で表すと直線になる特徴があります。グラフを見てみましょう。
横軸は距離[cm]、左縦軸は29.86[μsec]時点でのAD変換結果、右縦軸は対数に直した値です。
ほぼ直線の値になっていますね。データが綺麗なグラフになると嬉しいです。
何か高度な処理を行う時に使えそうなのですが…。うーん、まだちょっと理解が足りないです。
値をグラフにしてみた結果、20[μsec]もかければ距離を求めるのに十分な数の観測結果が得られそうだとわかりました。
仮に4方向につけたセンサーを順番に観測すると、20[usec]×4箇所=80[μsec]、このままの設定なら12.5KHzで距離を観測出来そうです。ただしLEDの電流特性的にアウトなので、実際にはこの2.5倍ぐらい長い周期が限界です…。まぁこれだけ早ければ十分マイクロマウスにも使用できるだろう、という結論が得られて良かったです。
今回はこのあたりで。
次回はプレッシャーが高まってきたので気分を変えて回路図の作成に挑戦してみます。