こんにちは、Sharp GP2D120モデル(4〜40 cm)を例として使用して、Sharp赤外線距離計を操作する方法を共有したいと思います。
処理関数のコンパイルについて詳しく説明し、アプリケーションの例を示します。 この機能の利点は、距離計の作動範囲全体を使用できることです。
ロボットが障害物を失うことはもうありません。
1-ドキュメントを読む
各センサーには、測定された電流-電圧特性が既にあり、モデルの名前で特定されます。 センサーの仕様を考慮して、製造業者は出力電圧に応じて障害物までの距離を設定しました。

グラフから各距離に対応する電圧を決定し、2つの配列に書き込みます。
float voltage[] = {2.7, 2.34, 2.00, 1.78, 1.56, 1.4, 1.265, 1.06, 0.92, 0.8, 0.74, 0.66, 0.52, 0.42, 0.36, 0.32}; float distanse[] = {4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0, 25.0, 30.0, 35.0, 40.0}; int len = 16;
2-補間を実装する
まず、センサーに数回問い合わせ(10)、ランダムノイズを回避するために平均値を取得します。
int senPin = 0;
Arduin
analogRead()で0〜1023の値、および0〜5ボルトのSharpセンサーが得られることを認識し、ボルトに変換
して、
電圧アレイでこの値の位置を見つけます。
int pos = 0; float volt_read = out * 0.00488758553;
最後から2番目のステップ。
グラフを補間することにより、出力電圧に対応する距離を計算します。

float y1 = voltage[pos]; float x1 = distance[pos]; float y2 = voltage[pos + 1]; float x2 = distance[pos + 1]; float distance_out = (x2 - x1)*(y1 - volt_read)/(y1 - y2) + x1;
3-関数をまとめる
float getDistance(int senPin){ float voltage[] = {2.7, 2.34, 2.00, 1.78, 1.56, 1.4, 1.265, 1.06, 0.92, 0.8, 0.74, 0.66, 0.52, 0.42, 0.36, 0.32}; float distanse[] = {4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0, 25.0, 30.0, 35.0, 40.0}; int len = 16; int out = 0; int pos = 0; for (int i = 0; i < 10; i++){ out += analogRead(senPin); delay(8); } out = out/10; float volt_read = out * 0.00488758553;
4-正しく使用する
経験的に、任意の数のレンジファインダーで15ミリ秒の間隔で実行すると、この機能が最適に機能することに気付きました。
void updateDistance{ float D1 = getDistance(0); delay(15);
DIYを愛する人のために、このようなインストールでコードがテストされたことに注意します。

ご清聴ありがとうございました。