拡大 全体
書式 | 引数 | 説明 |
SR04::SR04(int echoPin, int triggerPin) | echoPin:超音波を受信 triggerPin:超音波を送信 |
SR04にピンに割り当てる |
long SR04::Distance() | 対象物までの距離を測る(cm) | |
long SR04::DistanceAvg(int wait, int count) | wait :待機遅延 [ms] count:計測回数 [回] |
指定計測回数分計数を行い、 平均を計算する(cm) |
HR-SR04ライブラリを使用しない場合は《測距の流れ》に従って
①直接Trigピンから10μs間超音波を出力し
②PulseIn関数でechoピンのHIGH→LOWのパルスの長さ(パルス送受信時間)を受信して
③測距の計算を行う
《測距の計算》片道の距離(cm)=パルス送受信時間[μs] ÷ 59[cm/μs]
/*************************************************/ /* 音階(NOTE_B0 - DS8)の周波数(Hz)を定義 */ /* https://www.arduino.cc/en/Tutorial/ToneMelody */ /*************************************************/ #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 … #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
/**********************************************/ /* 【 Elegoo:10 】超音波センサモジュール */ /* 超音波センサモジュールで */ /* 楽器のテルミンを作る */ /* ※※ 音階の周波数と間隔距離(cm)を任意で設定 */ /**********************************************/ /*--------------------------------------------*/ /* SR04ライブラリの作成 */ /*--------------------------------------------*/ #include <SR04.h> #define PIN_TRIG 12 // D12 : 超音波スピーカー #define PIN_ECHO 11 // D11 : 超音波マイク // SR04オブジェクトの作成 SR04 objSr04 = SR04( PIN_ECHO, PIN_TRIG ); /*-------------------------------------------*/ /* ブザーと音階 */ /*-------------------------------------------*/ #define PIN_BUZZER 13 // D13 : ブザー // 音階(ドレミ)の周波数(Hz):NOTE_B0 - DS8 ※※ #include "pitches.h" int aryNote[] = { NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5 }; #define NOTE_STEP 3 // 音階の間隔距離(cm) ※※ int intNoteCM; // 音階全長(cm) /*********/ /* setup */ /*********/ void setup() { // -------------------------------------------------- // ブザーpinの設定 // -------------------------------------------------- pinMode( PIN_BUZZER, OUTPUT ); // -------------------------------------------------- // 音階の数と間隔距離から音階全長を設定 // -------------------------------------------------- intNoteCM = ( sizeof(aryNote) / sizeof(aryNote[0]) ) * NOTE_STEP; // -------------------------------------------------- // シリアルモニタ開始 // -------------------------------------------------- Serial.begin( 9600 ); delay( 1000 ); } /********/ /* loop */ /********/ void loop() { // 対象物までの距離を測る(cm) // 不安定解消のため、計数後(ms, 回数)平均を算出 long lngDistance = objSr04.DistanceAvg( 10, 10 ); // -------------------------------------------------- // 測定可能距離の範囲内:2~400cm(精度3mm) // -------------------------------------------------- if( 2 <= lngDistance && lngDistance <= 402 ){ // 対象物までの距離 - 測定可能開始距離(2cm) lngDistance -= 2; // -------------------------------------------------- // 対象物までの距離別にブザーから音(周波数)を出力 // -------------------------------------------------- // 音階全長(cm)以内 if( lngDistance < intNoteCM ) { // 出力する音の決定 int intCnt = lngDistance / NOTE_STEP; // シリアルモニタに表示 Serial.print( lngDistance ); Serial.print("cm : "); Serial.println( intCnt ); // 音の周波数を出力 tone( PIN_BUZZER, aryNote[intCnt] ); // 音階全長(cm)以外 } else { // 周波数の出力を停止 noTone( PIN_BUZZER ); } // -------------------------------------------------- // 測定可能距離の範囲外 // -------------------------------------------------- }else{ // 周波数の出力を停止 noTone( PIN_BUZZER ); } delay( 100 ); }