距離センサーのためのスケッチ(プログラム)です。 正確な値を得るために、出来る限りのスピードで繰り返し電圧を読み取り、 MeasN回測定し、その都度平均値を求めています。距離への換算までは Arduinoにて行っています。


//Distance1 meter by Toda Yorozu Kenkyujyo
#define analogPin1 1      // To define analog 1 pin as input from GP2Y0A210K0F 10-80 cm
unsigned long IntInputV1=0;      //integrated InputV, Ch1
unsigned long Vave1=0;      // averaged volt, Ch1
unsigned long MeasN=0;     //読み取った電圧を平均化する回数

float Distance1=0;      // Distance1の変数
float Coeff1=0.004883;      // 係数C1, 10 bit=1024 / 5 Volts, L=20/(V-0.3)
float Coeff2=20.0;      // 係数C2, 10 bit=1024 / 5 Volts, L=150/(V-0.3)
float Coeff3=0.30;     // 係数C3

void setup(){     // setupプログラム。最初に1回だけ実行。
Serial.begin(19200);      // Serial communication begins at a speed of 19200
MeasN=200;      // 200回測定して平均をとる。
}

void loop(){      //繰り返しプログラム
Vave1=0;      //rest the sum of voltage
IntInputV1=0;

for(int i=0; i < MeasN; i++){      // repeat MeasN times for averaging, MeasNの回数だけ繰り返し測定する
IntInputV1=IntInputV1+analogRead(analogPin1);      // Sum of the voltage,Direct measurement of analog 1 pin
}

Vave1=IntInputV1/MeasN;      //読み取りの平均値を求める。
Distance1=Coeff2/(Coeff1*(float)Vave1-Coeff3);      //読み取った電圧から距離を求める

if(Distance1< 7){Distance1=0;}      //7 cm以下は測定できない。
if(Distance1> 90){Distance1=0;}      //90 cm以上は測定できない。

Serial.print(Distance1);Serial.print("C");     //距離のデータをシリアル通信で送る。
// 距離の数値の後に"C"の文字が来てデータ終わり。
}

戸田よろず研究所トップページへ

ここで公開するアイデア/装置は安全性を保障しておりません。 用途に応じた設計を行い、十分な安全検査を行ってからご利用ください。 本サイトの情報の営利目的での利用はご遠慮ください。 本サイトの内容の無断転載を禁じます。© 2011 TYK