INDEX(各項目ごとの目次)

[HOME]  [Processing関係]  [Arduino関係]  [マテリアル関係]  [秋葉原工作マップ]

2008年用ですが、部分的に内容を更新しています(2010/06/14)。
また、[建築農業工作ゼミ2009-2010]とも連動していますので、そちらにも幾つかサンプルがあります。
:

8/23/2008

Arduino 距離センサ/超音波レンジファインダー

今回は、Parallax社の超音波レンジファインダー「PING)))」で距離の計測実験を行います。距離センサとして、以前に赤外線で検出する「GP2Y0A21YK」を扱いましたが、「PING)))」は超音波を使って検出するタイプです。測定距離は3cm〜3.35mとなっているので、「GP2Y0A21YK」(測定距離10cm〜80cm)より測定範囲の幅はあります。「GP2Y0A21YK」は、信号端子をPWM端子に接続しanalogRead()によって簡単に読み込みが可能ですが、「PING)))」では1本の信号端子(SIG)に対してパルスを用いて測定します。まず「PING)))」から超音波を発します(5マイクロ秒間)。その超音波が物体に当たれば反射して戻ってくるので、戻ってくるまでの時間を計測し、音速と時間の関係から距離を導き出します。
サンプルソースがArduinoサイトのPlaygroundLearning>Examples>Complex Sensorsの中にあります。前者はpulseIn()を使って反射波の時間を計測しており、後者は変数を用いて時間をカウントしています。今回は前者のpulseIn()を用いた方法を参考にします。pulseIn()の場合は、unsigned long(正の整数値:0〜4,294,967,295までの値)の変数タイプを用います。尚、接続方法は以下の通りです。




//反射波の変数を用意
unsigned long echo = 0;
//信号ピンを9番ピンに設定
int signalPin = 9;

void setup(){
//出力用にシリアル通信開始
Serial.begin(9600);
}

void loop(){
//まず信号ピンを出力に設定(発信用)
pinMode(signalPin, OUTPUT);
//2マイクロ秒間LOWで出力
digitalWrite(signalPin, LOW);
delayMicroseconds(2);
//5マイクロ秒間HIGHで出力
digitalWrite(signalPin, HIGH);
delayMicroseconds(5);//超音波発信
//信号ピンをLOWに戻す
digitalWrite(signalPin, LOW);

//信号ピンを入力に設定(受信用)
pinMode(signalPin, INPUT);
//信号ピンをHIGHに設定
digitalWrite(signalPin, HIGH);
//反射波が戻ってくるまでの時間を計測し
//片道の時間(半分の値)にする
echo = pulseIn(signalPin, HIGH)/2;
//ミリメートル単位に変換
int distance = echo*0.34442;

//距離を出力
Serial.println(distance);
delay(250);
}


PING)))」では、ひとつの信号端子(SIG)だけで超音波の発信と受信を切り替えて制御する必要があります。まず最初に信号端子をLOWに設定(2マイクロ秒程度)しておき、その後5マイクロ秒間HIGHにすると、超音波が発信します。その後、物体に反射して戻ってくる超音波を感知させるために、信号端子を「デジタル出力」から「デジタル入力」に切り替えます。「デジタル入力」に切り替えられた信号端子は、反射波を受信するとHIGHになります。反射波がなくなればLOWになるので、それまでの継続時間をpulseIn()でカウントします。pulseIn()の括弧内には、ピン番号とHIGHかLOWの値を入れます。HIGHを入れれば、そのピンがHIGHになるまで待機し、HIGHになったときに時間(マイクロ秒単位)の計測を開始し、次にLOWになるときに時間の計測を終了します。今回の場合は、発信した超音波が反射して戻ってくるまでの時間を計測してくれることになります。計測した時間は超音波が往復して戻ってくるまでの時間なので、計測時間の半分が実際の距離に要した時間となります。音速は344.42m/secなので、1マイクロ秒で0.34442mmの距離を進むことになります。従って、pulseIn()で求めた時間(往復)を片道分の時間にするため2で割り、0.34442をかければミリメートル単位で出力することになります。

0 件のコメント:



[目次:Processing関係]  [HOMEへ戻る]  [目次:Arduino関係]