投稿

2月, 2022の投稿を表示しています

ArduinoでIRセンサの処理の高速化

イメージ
  こんにちはbee(ビー)です 今回は16個のIRセンサ(ボールセンサ)を読み取ることにめちゃくちゃ苦労したので記事にしました。前まではダイセンさんのボールセンサを4つ使ってボールを追いかけていましたが、それをうまく使いこなせず、今年の京奈滋大会ではうまくボールを追いかけることができずになかなか良い順位が取れませんでした。そこで僕はIRセンサを16方位につけることでボールの位置を正確に把握し、きれいにボールに追従できるようにしようと考えました。一応僕はarduinoを使っているのでこの記事の実験はその言語で書いてやってます。 まずボールのパルスの周期を見てみました。オシロスコープで見てみると、、、 写真の真ん中の下を見てもらうと、"250 µs "と書いてありますこれはオシロの画面に見える横軸のマス目一つ分の大きさを表しています。これによると、ボールの周期は850 µs です。(ボールの情報によると正確には833 µs らしいです) (あまり周波数について知らないので、時間を比較してこれから検証していきます <実験1> pluseInで見る! 最初に試したことはpluseInです。これはIRをデジタルで読んだ時などにボールがない時を1とすると、0になった瞬間に計測を初めて、1に戻るまでの時間を測り、その長さを数字にするといったものでした。まず一旦これを実装してみました。コードはこんな感じです。(実際のコードは長くて見にくいのでIRセンサ一個だけのverを載せます) すると、シリアルで見たとき、なかなか値が表示されず、使い物に一切なりませんでした。一応オシロスコープで見てみると、赤色の線がプログラムが動いている時間を表していて、 HIGHになっているときがボール処理をしている時間 で、LOWになっている時間は関係ないので、気にしないでください。(以降、すべてHIGHになっている時がボールの処理をしている時間です) 写真の真ん中の下を見てもらうと、"5.0ms"と書いてありますこれはオシロの画面に見える横軸のマス目一つ分の大きさを表しています。そして僕はhighのときがボールの処理をしている時間にしているので、これによると、 pluseInで読むと、約22.0ms(22000 µs )かかる ということに...