ビュー: 164 著者: グレース 公開時間: 2021-07-26 起源: サイト
の HC-SR04 超音波センサーは、Arduino プロジェクトで最も人気のある距離測定モジュールの 1 つです。障害物回避ロボット、駐車センサー、レベル検出、スマートゴミ箱、距離計、その他の非接触センシングアプリケーションで広く使用されています。
モジュールは送信機を通じて 40kHz の超音波を放射します。音波が物体に当たると、反射して受信機に戻ります。エコー時間を測定し、音速を使用することで、Arduino はセンサーと物体の間の距離を計算できます。
| パラメータ | 価値 |
| 代表的な動作電圧 | DC5V |
| 静的動作電流 | 一部のモジュールバージョンでは5mA未満 |
| 動作周波数 | 40kHzの超音波 |
| 検出距離 | 一般的な範囲: 2cm ~ 400cm。ゲイン調整されたバージョンによっては、より長い範囲をサポートする場合があります。 |
| 検出角度 | 通常15度以内。より高いゲインを備えた一部のバージョンでは、約 30 度に達する場合があります。 |
| 精度 | 適切な試験条件下で最大約0.3cm |
| ブラインドゾーン | 最小測定距離 約2cm |
HC-SR04 超音波モジュールには、VCC、TRIG、ECHO、GND の 4 つのピンがあります。 Arduinoは短いトリガーパルスをTRIGピンに送信し、ECHOピンからリターンパルスを読み取ります。
| HC-SR04ピン | Arduino接続 | 関数 |
| VCC | 5V | 超音波モジュール用の電源です。 |
| トリガー | デジタルピン9 | トリガー入力。 Arduino は 10us パルスを印加して測距を開始します。 |
| エコー | デジタルピン10 | エコー出力。 Arduinoはパルス幅を読み取り、距離を計算します。 |
| GND | GND | アース接続。 |
HC-SR04は飛行時間測定によって動作します。 Arduino は、少なくとも 10 マイクロ秒のハイレベルのトリガー信号を TRIG ピンに送信します。次に、モジュールは 8 つの 40kHz 超音波パルスを自動的に送信し、反射エコーを待ちます。
反射された超音波信号が検出されると、ECHO 端子は High レベルのパルスを出力します。このパルスの持続時間は超音波の往復移動時間です。
距離 = エコー高レベル時間 × 音速 / 2
Arduino コードでは、一般的な簡略化された式は次のとおりです。
距離 (cm) = 期間 × 0.0343 / 2
タイミングプロセスは単純です。Arduino は TRIG を短時間 Low に保ち、10us の High パルスを送信してから TRIG を Low に戻します。 HC-SR04 は超音波バーストを送信し、反射信号が戻るか測定がタイムアウトになるまで ECHO を High に設定します。
測定値が不安定になるのを避けるため、測定間に短い遅延を設けてください。一般に約 60 ミリ秒の測定サイクルが使用されるため、次のトリガーまでに前の超音波エコーが消えるまでの時間がかかります。
Arduinoの pulseIn() 関数は、デジタルピンがHIGHまたはLOWに留まる時間を測定するために使用されます。 HC-SR04の場合、Arduinoは pulseIn(echoPin, HIGH)を使用して ECHOピンからハイレベルのパルス幅を読み取ります。
| 構文 | 意味 |
| パルス入力(ピン、値) | HIGH または LOW パルスの持続時間を読み取ります。 |
| パルスイン(ピン、値、タイムアウト) | マイクロ秒単位のタイムアウト値を使用してパルスを読み取ります。 |
タイムアウトを使用することをお勧めします。エコーが返されない場合、関数はプログラムを長時間ブロックする代わりに、待機を停止して 0 を返すことができます。
配線は素直です。 VCCを5Vに、GNDをGNDに、TRIGをArduinoデジタル出力ピンに、ECHOをArduinoデジタル入力ピンに接続します。次の例では、Arduino Uno、ピン 9 の TRIG、ピン 10 の ECHO を使用します。
次の典型的な Arduino プログラムは、10us のトリガー パルスを送信し、ECHO パルス幅を読み取り、距離をセンチメートル単位で計算し、結果をシリアル モニターに出力します。
const int trigPin = 9; const int echoPin = 10;長期間;浮動小数点距離 Cm; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); シリアル.begin(9600); void ループ() {digitalWrite(trigPin, LOW); 遅延マイクロ秒(2); digitalWrite(trigPin, HIGH); 遅延マイクロ秒(10); デジタル書き込み(trigPin, LOW); 継続時間 = パルスIn(echoPin, HIGH, 30000); if (duration == 0) { Serial.println('範囲外'); } else { 距離 Cm = 期間 * 0.0343 / 2; Serial.print('距離: '); Serial.print(距離Cm); Serial.println(' cm'); 遅延(60); }
シリアル モニターに距離の値が表示される場合、HC-SR04 超音波センサーと Arduino の配線は正しく動作しています。その後、距離データを障害物の検出、ロボットの動作制御、自動ドア、駐車リマインダー、または液面プロジェクトに使用できます。
測定対象物は推奨距離範囲内、かつ 2cm の死角の外側に置いてください。
超音波の反射を良くするには、平らで硬いターゲット表面を使用してください。
柔らかい素材、角のある素材、多孔質素材、吸音性のある素材の測定は避けてください。
安定した 5V 電源を使用し、配線は短く確実に行ってください。
エコーが返されない場合に長時間ブロックされることを防ぐために、pulseIn() にタイムアウトを追加します。
ノイズを減らすために、いくつかの測定値を平均または中央値フィルターします。
音速は気温によって変化するため、精度を高めるには温度を補正してください。
| 応用 | HC-SR04の使い方 |
| 障害物回避ロボット | 近くの物体を検出し、ロボットの方向転換を支援します。 |
| 駐車距離センサー | 車両と障害物との距離を測定します。 |
| 液面検知 | センサーから液面までの距離を非接触で測定します。 |
| スマートゴミ箱 | 近くにある手や物体を検知し、自動的に蓋が開きます。 |
Arduino で HC-SR04 超音波センサーを使用するには、VCC を 5V に、GND を GND に、TRIG をデジタル出力ピンに、ECHO をデジタル入力ピンに接続します。 10us のトリガー パルスを送信し、pulseIn() でエコー継続時間を読み取り、飛行時間式で距離を計算します。
HC-SR04 は安価で使いやすく、多くの Arduino 距離測定プロジェクトに適しています。最良の結果を得るには、ターゲット表面、測定角度、ブラインドゾーン、安定した出力、タイムアウト処理、および温度の影響に注意してください。
Arduino は 10us パルスを TRIG ピンに送信します。 HC-SR04 は 40kHz の超音波パルスを 8 回発し、反射音が戻ってくるまで ECHO ピンを High に設定します。 Arduino はこのパルス時間を測定し、距離を計算します。
式は、距離 = 継続時間 × 音速 / 2 です。センチメートル単位の一般的な Arduino の公式は、 distanceCm = 継続時間 × 0.0343 / 2 で、継続時間はマイクロ秒で測定されます。
測定されたエコー時間は、センサーから物体まで、そしてセンサーに戻るまでの往復時間です。 2 で割ると、センサーと物体間の片道の距離が求められます。
ほとんどの Arduino デジタル ピンを使用できます。多くの例では、TRIG はデジタル ピン 9 に接続され、ECHO はデジタル ピン 10 に接続されます。コードは配線で使用されるピンと一致する必要があります。
一般的な原因には、配線の緩み、不安定な 5V 電源、間違った TRIG または ECHO ピン番号、範囲内に物体がない、角度のあるターゲット表面、柔らかい素材、センサー ヘッドのブロック、またはpulseIn() 関数のタイムアウトなしなどが含まれます。
ブラインド ゾーンは、モジュールが確実に測定できない最小距離です。 HC-SR04の場合、ブラインドゾーンは通常約2cmです。これより近くにある物体では、測定値が不安定になる可能性があります。
はい、HC-SR04 は、センサーが湿気から保護され、液面上に取り付けられている場合、単純な非接触水位プロジェクトに使用できます。湿気の多いタンク、屋外タンク、または工業用タンクの場合は、防水型超音波センサーをお勧めします。
安定した電源を使用し、センサーをターゲットに対して垂直に保ち、柔らかい表面や角度のある表面を避け、pulseIn タイムアウトを追加し、複数の読み取り値を取得し、中央値フィルタリングを使用し、測定間隔を約 60ms 空けます。