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;
}
結果



















