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