//********************************************************************
//超音波センサを使って距離をserial表示するプログラム
//計算を早くするため、mm以下の精度は出さないとした。
//音波が戻ってこない場合、0mm と出力する。
//********************************************************************
#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7); //lcdタイプの変数を定義
const int pinTrig = 2; //トリガーパルス出力用ピン番号
const int pinEcho = 3; //エコーパルス入力用ピン番号
const long serialBps = 115200; //シリアル通信レート
long Duration = 0; //測定したエコーパルス幅 usec
long Distance = 0; //物体までの距離 mm
//SETUP*****************************
void setup() {
lcd.begin(16, 2); // LCDの行と列を設定
Serial.begin(serialBps);
pinMode( pinTrig, OUTPUT );
pinMode( pinEcho, INPUT );
}
//MAIN LOOP*************************
void loop() {
//トリガーパルスの発生
digitalWrite( pinTrig, HIGH ); //超音波を出力(トリガーパルスの出力)
delayMicroseconds( 10 ); //10usecのHIGHパルス
digitalWrite( pinTrig, LOW ); //LOWに戻す
//パルス幅測定
Duration = pulseIn( pinEcho, HIGH ,40000); //パルス幅測定 usec単位。タイムアウト=40ms
Distance = Duration*340/2/1000; //距離(単位mm)を求める。 音速を340m/sとする.往復距離を半分にする
//シリアルへのパルス幅時間の送信
Serial.print("Duration:");
Serial.print(Duration);
Serial.print(" ");
//シリアルへの距離を送信
Serial.print("Distance:");
Serial.print(Distance);
Serial.println(" mm");
//LCDへのパルス幅時間の表示
lcd.home(); // カーソル位置を1行目に設定
lcd.print("Duration=");
lcd.setCursor(9,0);
lcd.print(" us");
lcd.setCursor(9,0);
lcd.print(Duration);
//LCDへの距離の表示
lcd.setCursor(0, 1); // カーソル位置を2行目に設定
lcd.print("Distance=");
lcd.setCursor(9,1);
lcd.print(" mm");
lcd.setCursor(9,1);
lcd.print(Distance);
//計測間隔の設定
delay(100); //1秒毎に計測
}
0 件のコメント:
コメントを投稿