2015年9月7日月曜日

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



//********************************************************************
//超音波センサを2個同時に使って距離をserialとLCD表示するプログラム
//計算を早くするため、mm以下の精度は出さないとした。
//音波が戻ってこない場合、0mm と出力する。
//********************************************************************
#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7); //lcdタイプの変数を定義
const long serialBps = 115200; //シリアル通信レート
const int pinTrig[2] = {2,11}; //トリガーパルス出力用ピン番号 [x]要素番号がセンサー番号
const int pinEcho[2] = {3,12}; //エコーパルス入力用ピン番号 [x]要素番号がセンサー番号
long Duration[2] ; //測定したエコーパルス幅 usec [x]要素番号がセンサー番号
long Distance[2] ; //測定した距離 mm [x]要素番号がセンサー番号
//unsigned long startTime; //パルス長を測り始める時間

//SETUP*****************************
void setup() {

  // LCDの行と列を設定
  lcd.begin(16, 2);

  //シリアルポート使用開始
  Serial.begin(serialBps);
  
  //pin modeの設定
  pinMode( pinTrig[0], OUTPUT);
  pinMode( pinTrig[1], OUTPUT);
  pinMode( pinEcho[0], INPUT);
  pinMode( pinEcho[1], INPUT);
}

//MAIN LOOP*************************
void loop() {
  for (int i=0; i<2;i++){
    
    //超音波を出力(トリガーパルスの出力)
    digitalWrite( pinTrig[i], HIGH );     //HIGHを出す
    delayMicroseconds( 10 );           //10usec
    digitalWrite( pinTrig[i], LOW );      //LOWに戻す

    //時間を測定
    Duration[i] = pulseIn( pinEcho[i], HIGH ,40000);  //パルス幅測定 usec単位。タイムアウト=40ms
    Distance[i] = Duration[i]*340/2/1000;  //距離(単位mm)を求める。 音速を340m/sとする.往復距離を半分にする

    //2つ測定の間に時間を空ける
    delay(10);  
  }
  
  //シリアルに時間を出力
  Serial.print("Duration:");        
  Serial.print(Duration[0]);
  Serial.print("usec  ");
  Serial.print(Duration[1]);           
  Serial.print("usec  "); 
  
   //シリアルに距離を出力 
  Serial.print("Distance:");
  Serial.print(Distance[0]);
  Serial.print("mm  ");
  Serial.print(Distance[1]); 
  Serial.println("mm");

  //LCDへ時間を表示
  lcd.home();               // カーソル位置を1行目に設定
  lcd.print("T:");  
  lcd.setCursor(3,0);
  lcd.print("           us");
  lcd.setCursor(3,0);
  lcd.print(Duration[0]);
  lcd.setCursor(9,0);
  lcd.print(Duration[1]);
  
  //LCDへ距離を出力
  lcd.setCursor(0, 1);      // カーソル位置を2行目に設定 
  lcd.print("D:"); 
  lcd.setCursor(3,1);
  lcd.print("           mm");
  lcd.setCursor(3,1);
  lcd.print(Distance[0]);
  lcd.setCursor(9,1);
  lcd.print(Distance[1]);
  
  //0.5秒毎に計測
  //delay(500);    
}

0 件のコメント:

コメントを投稿