Arduino(17) 超音波センサーによる距離の測定 VER.2

ブログランキング・にほんブログ村へ

Arduino(16)の記事の距離の測定をバージョンアップしました。変更のポイントは、

  • 距離をLCDに表示する
  • ボタンを押したときに測定する
  • 温度を測定し、音速を決定する

以上の3点です。

ボタンを押したときに、測定した距離をLCDに表示するようにします。また、音速を決定するために室温を測定します。

 

 

 

スケッチ

 

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // LCDのアドレス 0x27 LCD 16×2

int LM35_SOCKET = 0;
int TRIG = 3;
int ECHO = 2;
int SWITCH_SOCKET = 7;

double duration = 0;
double distance = 0;

void setup() {
  lcd.init();
  Serial.begin( 9600 );
  pinMode(ECHO, INPUT );
  pinMode(TRIG, OUTPUT );
  pinMode( SWITCH_SOCKET,INPUT);
}

void loop() {
  if (digitalRead(SWITCH_SOCKET)==1){
    lcd.backlight();
    lcd.setCursor(0,0);
    digitalWrite(TRIG, LOW); 
    delayMicroseconds(2); 
    digitalWrite( TRIG, HIGH );
    delayMicroseconds( 10 ); 
    digitalWrite( TRIG, LOW );
    duration = pulseIn( ECHO, HIGH ); // 往復にかかった時間が返される[マイクロ秒]

    if (duration > 0) {
      duration = duration / 2; // 往路にかかった時間
      distance = duration * speed_of_sound() * 100 / 1000000;
      Serial.print("Distance:");
      Serial.print(distance,1);
      Serial.print(" cm");
      Serial.println(speed_of_sound());
      //lcd.clear();
      lcd.print("Distance:");
      lcd.setCursor(0,1);
      lcd.print(distance,1);
      lcd.print(" cm");
    }
  } 
  delay(1000);
  lcd.clear();
  //lcd.backlight();
}

double speed_of_sound(){
  int analog_val;
  float input_volt;
  float speed;
  analog_val = analogRead(LM35_SOCKET);
  input_volt = float(analog_val)*(5.0/1023.0);
  speed=331.5 + 0.6 * input_volt/0.01;
  return speed;
}
結果

ブログランキング・にほんブログ村へ

コメントを残す

メールアドレスが公開されることはありません。