SSブログ

TABシールド2機で音速を測定 [TABシールド]

以前、優秀な高校1年生が物理チャレンジ大会で、Arduinoを使って音速を計るもので、優秀賞を取ったのがあり、以前からTABシールドにある音センサを使えばできると分かっていて、やっと時間が持てたので、トライしてみた。

我が家の廊下に、2つのArduino+TABシールドを用意し、2つをPCに接続して、計測準備をした。

最初は、手拍子で音速を計ると、ばらつきがあり、もっと金属音が良いだろうと思って、スプーン2つを互いにたたきつけて計測したら、うまい具合に、秒速約342mあたりを出してくれるようになった。

実際は、写真のように、1m離した2つのArduino+TABシールドで、手前のは、単に音センサの値をアナログA2から取り出し、奥のもののアナログA5で読み込ませている。写真のさらに手前で、2つのスプーンを叩くことで、手前の音センサで取れたものから、つぎに奥の音センサで取れる時間差を表示させる簡単なスケッチ(プログラム)としている。

計測の結果での大方の値は、この1m間隔では、2912マイクロ秒、つまり0.002912秒掛かっている。逆算すると、音速で約342m/秒が出てくる。

作成したスケッチは、以下の通り。物理学の勉強にもまずまず使えるのでと感心した。

//本スケッチは、2台のArduino+TABシールドで
//音速を測定するもの
//奥のArduinoに本プログラムを書き込み
//奥のArduinoからシリアル画面に値を表示させる
void setup(){
pinMode(6,OUTPUT);
Serial.begin(9600);
}
void loop() {
static int val;
static unsigned long time;
val = analogRead(A5) - 512;//手前のTABシールドの音センサ値
val = val<0?-val:val;
time = micros();
if(val>300) {
do{
val=analogRead(A2) - 512;//奥のTABシールドの音センサ値
val = val<0?-val:val;
}while(val<300);
time = micros()- time;
Serial.println((long)time);
digitalWrite(6,HIGH);
delay(3000);
digitalWrite(6,LOW);
}
}

10245304_656462827803327_4366496434899135826_n.jpg


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。