2015年9月7日月曜日

超音波センサーのサンプルスケッチ






//********************************************************************
//超音波センサを使って距離を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 件のコメント:

コメントを投稿