距離センサーのためのスケッチ(プログラム)です。
正確な値を得るために、出来る限りのスピードで繰り返し電圧を読み取り、
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