2015年12月25日 星期五

Arduino 超音波測距應用在聲音單元

就是這東西



除了可以應用在運動學上之外,在「聲音」課程中,提到關於「聲納」等超音波的應用時,這就是一個可以實際上讓學生看到的應用。

理論上如果把這玩意兒塞進一根密閉的管子裡面的一端,想辦法改變裡面的氣體組成(例如灌二氧化碳進去)或是改變溫度(同時加一根溫度計給arduino就好)應該可以進行影響聲速因素的一些探究課程。

下面的code可以顯示距離發射接收的時間,如果固定距離改變介質,測量時間,就可以測量介質對聲音速度的影響


code

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// HCSR04Ultrasonic/examples/UltrasonicDemo/UltrasonicDemo.pde
#include <Ultrasonic.h>


#define TRIGGER_PIN  12
#define ECHO_PIN     13

Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);

void setup()
{
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.backlight();
}

void loop()
{
  float cmMsec, inMsec;
  long microsec = ultrasonic.timing();

  cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); // 計算距離,單位: 公分
  inMsec = ultrasonic.convert(microsec, Ultrasonic::IN); // 計算距離,單位: 英吋
  Serial.print("E");
  Serial.print("   t=");
  Serial.print(microsec);
  Serial.print("ms   ");
  Serial.print("distance=");
  Serial.print(cmMsec);
  Serial.println("cm");
  delay(1000);
  lcd.clear();
  lcd.setCursor(0 ,0);
  lcd.print("t=");
  lcd.print(microsec);
  lcd.print("ms");
  lcd.setCursor(0, 1);
  lcd.print("D=");
  lcd.print(cmMsec);
  lcd.print("cm");
    delay(1000);
}
張貼留言