HC-SR04 超音波距離測定モジュール。 超音波距離センサー Arduino HC-SR04 超音波センサー HC SR04 接続

HC-SR04 超音波距離測定モジュール。 超音波距離センサー Arduino HC-SR04 超音波センサー HC SR04 接続

入力電圧 5V 直流、センサーの Vcc ピンと GND ピンに供給されます。

センサーの詳細:

TRIG センサーの入力に 10 μs の持続時間で正のパルスを印加すると、センサーは音波 (周波数 40 kHz の 8 パルス - 超音波) を送信し、論理レベル「1」を設定します。エコー出力。 音波は障害物から反射してセンサー受信機に戻り、その後 ECHO 出力のレベルを論理「0」にリセットします (音波が 38 ミリ秒以内に戻らない場合、センサーは同じことを行います)。 ) 結果として、ECHO 出力に論理「1」が存在する時間はウルトラトランジットタイムと等しくなります。 音波センサーから障害物まで、そしてまた戻ってくるまで。 空気中の音波の伝播速度と ECHO ピンに論理「1」が存在する時間を知ることで、障害物までの距離を計算できます。


距離速度に時間をかけることで計算されます(この場合、音波の伝播速度) V、エコーを待っている間 エコー)。 しかし、音波はセンサーから物体までの距離を伝わり、また戻ってくるので、物体に到達するだけで十分なので、結果を 2 で割ります。

L = V * エコー / 2

  • L– 距離 (m);
  • V– 空気中の音速 (m/s);
  • エコー– エコー待機時間 (秒)。

空気中の音速、光の速度とは異なり、値は一定ではなく、温度に大きく依存します。

V 2 = γ R T / M

  • V– 空気中の音速 (m/s)
  • γ – 空気断熱指数 (単位) = 7/5
  • R– ユニバーサル気体定数 (J/mol*K) = 8,3144598(48)
  • T ° に) = t℃ + 273.15
  • M– 空気の分子量 (g/mol) = 28,98

既知の値を式に代入する γ , R, M、 我々が得る:

V ≈ 20.042 √T

あとは計算式を組み合わせるだけ Vそして L、そして翻訳します Lメートルからセンチメートルまで、 エコー sからμsまで、 T°K から °C にすると、次のようになります。

L ≈ エコー √(t+273.15) / 1000

  • L– 距離 (cm)
  • エコー– エコー待ち時間 (μs)
  • t– 気温 (°C)

iarduino_HC_SR04 と iarduino_HC_SR04_int 、両方のライブラリの構文は同じです。 すべての値を自分で計算し、cm 単位の距離のみを返します。デフォルトの温度は 23°C に設定されていますが、指定することもできます。 ライブラリとその機能の操作については以下で説明します。

センサーを操作するために、iarduino_HC_SR04 と iarduino_HC_SR04_int という 2 つのライブラリを開発しました。両方のライブラリの構文は同じです。

  • iarduino_HC_SR04 ライブラリの利点は、センサーを任意の Arduino ピンに接続できることですが、欠点は、ライブラリがセンサーからの応答を待機し、その応答が最大 38 ミリ秒続く可能性があることです。
  • iarduino_HC_SR04_int ライブラリの利点は、センサーからの応答を待たない (スケッチの実行を一時停止しない) ことですが、センサーの ECHO ピンは、外部割り込みを使用する Arduino ピンにのみ接続する必要があることです。

ライブラリのインストールについて詳しくは、こちらをご覧ください。

例:

iarduino_HC_SR04 ライブラリを使用して距離を決定します。

#含む // ライブラリ iarduino_HC_SR04 sensor(2,3) を接続します。 // センサーの TRIG ピンと ECHO ピンに接続されている Arduino 番号を示すセンサー オブジェクトを宣言します // 任意の Arduino ピンを使用できます void setup())( Serial.begin(9600); // シリアルへのデータ転送を初期化しますport Monitor ) void loop())( late(500); // 遅延 0.5 秒 Serial.println(sensor. distance()); // 気温、約 +23 °C での出力距離 (cm) Serial.println( sensor. distance(-20) ); // 気温、約 -20 °C での出力距離 (cm) Serial.println("===="); )

iarduino_HC_SR04_int ライブラリを使用して距離を決定します。

#含む // ライブラリ iarduino_HC_SR04_int sensor(2,3) を接続します。 // センサーの TRIG ピンと ECHO ピンに接続されている Arduino 番号を示すセンサー オブジェクトを宣言します // (ECHO ピンは外部割り込みを使用して Arduino ピンに接続する必要があります) void setup())( Serial.begin(9600 ); // シリアル モニタ ポートへのデータ転送の初期化 ) void loop())( late(500); // 遅延 0.5 秒 Serial.println(sensor. distance()); // 気温での出力距離 (cm) 、約 +23 °C Serial.println( sensor. distance(-20)); // 気温、約 -20 °C での出力距離 (cm) Serial.println("====") ; )

両方の例の結果は次のようになります。


この例は、測定中に気温を考慮しない場合、高い誤差を伴う結果が得られる可能性があることを示しています。

距離計物体までの距離を測定するための装置です。 距離計はロボットを助ける さまざまな状況。 単純な車輪付きロボットは、このデバイスを使用して障害物を検出できます。 飛行するドローンは距離計を使用して、所定の高度で地上にホバリングします。 距離計を使用すると、特別な SLAM アルゴリズムを使用して部屋の地図を作成することもできます。

1. 動作原理

今回は、最も人気のあるセンサーの 1 つである超音波 (US) 距離計の動作を分析します。 沢山あります さまざまな変更同様のデバイスですが、それらはすべて反射音の伝播時間を測定するという原理に基づいて動作します。 つまり、センサーは所定の方向に音声信号を送信し、反射エコーを捕捉して、センサーから障害物までの音声の飛行時間を計算します。 学校の物理学の授業で、特定の媒質中の音速は一定ですが、媒質の密度に依存することがわかっています。 空気中の音速と目標までの音の飛行時間がわかれば、次の式を使用して音の移動距離を計算できます。 s = v*tここで、v は音速 (m/s)、t は時間 (秒) です。 ちなみに空気中の音速は340.29m/sです。 その任務に対処するために、距離計には 2 つの重要な機能があります。 デザインの特徴。 まず、音が障害物からよく反射されるように、センサーは周波数 40 kHz の超音波を放射します。 これを行うために、センサーにはそのような高周波音を生成できる圧電セラミックエミッターが搭載されています。 第二に、エミッターは、音が全方向に広がるのではなく(従来のスピーカーの場合)、狭い方向に広がるように設計されています。 この図は、典型的な超音波距離計の放射パターンを示しています。 図からわかるように、最も単純な超音波距離計の視野角は約 50 ~ 60 度です。 センサーが前方の障害物を検出する一般的な使用例では、この視野角が非常に適しています。 超音波は椅子の脚さえも検出できますが、レーザー距離計では気付かない可能性があります。 距離計をレーダーのように円を描くように回転させて周囲の空間をスキャンしようとすると、超音波距離計では非常に不正確でノイズの多い画像が得られます。 このような目的には、レーザー距離計を使用することをお勧めします。 超音波距離計の 2 つの重大な欠点にも注目する価値があります。 1 つ目は、多孔質構造の表面は超音波をよく吸収し、センサーはそこまでの距離を測定できないことです。 たとえば、マルチコプターからフィールドの表面までの距離を次のように測定するとします。 背の高い草そうすると、非常にあいまいなデータが得られる可能性が高くなります。 発泡ゴムで覆われた壁までの距離を測定する場合にも、同じ問題が待ち構えています。 2 番目の欠点は、音波の速度に関連しています。 この速度は、測定プロセスをより頻繁に行うほど高速ではありません。 ロボットの前方 4 メートルの距離に障害物があるとします。 音が往復するのに 24 ミリ秒もかかります。 飛行ロボットに超音波距離計を取り付ける前に、7 回測定する必要があります。

2.超音波距離計 HC-SR04

このチュートリアルでは、HC-SR04 センサーと Arduino Uno コントローラーを使用します。 この人気の距離計は、1 ~ 2 cm から 4 ~ 6 メートルまでの距離を測定できます。 同時に、測定精度は0.5〜1cmです。 異なるバージョン同じHC-SR04です。 より良く機能するものもあれば、より悪いものもあります。 基板の模様で見分けられます 裏側。 正常に動作するバージョンは次のようになります。

失敗する可能性があるバージョンは次のとおりです。

3. HC-SR04の接続

HC-SR04 センサーには 4 つの出力があります。 グランド (Gnd) と電源 (Vcc) に加えて、Trig と Echo もあります。 これらのピンは両方ともデジタルなので、Arduino Uno の任意のピンに接続します。
HC-SR04 GND VCC トリガー エコー
Arduino Uno GND +5V 3 2
装置の概略図 レイアウトの外観

4. プログラム

そこで、センサーにプローブ超音波パルスを送信するように命令し、その戻りを記録してみましょう。 HC-SR04のタイミング図がどのようになるかを見てみましょう。
この図は、測定を開始するには出力で生成する必要があることを示しています。 トリガー正パルスの長さは 10 μs。 これに続いて、センサーは一連の 8 パルスを放出し、出力のレベルを上げます。 エコー、反射信号を待つモードに切り替わります。 距離計が音が戻ってきたことを感知すると、正のパルスが完了します。 エコー。 必要なことは 2 つだけであることがわかりました。Trig でパルスを作成して測定を開始し、Echo でパルスの長さを測定することで、簡単な式を使用して距離を計算できます。 やりましょう。 int echoPin = 2; int trigPin = 3; void setup() ( Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); ) void loop() ( int 継続時間, cm;digitalWrite(trigPin, LOW);遅延マイクロ秒(2);digitalWrite (trigPin, HIGH); 遅延マイクロ秒(10);digitalWrite(trigPin, LOW); 継続時間 = パルスIn(echoPin, HIGH); cm = 継続時間 / 58; Serial.print(cm); Serial.println(" cm"); 遅延(100); ) 関数 パルスイン長さを測ります ポジティブな衝動脚のechoPinをマイクロ秒単位で実行します。 プログラムでは、サウンドの飛行時間をduration変数に記録します。 前にわかったように、時間に音速を掛ける必要があります。 s = 持続時間 * v = 持続時間 * 340 m/s音速を m/s から cm/μs に変換します。 s = 持続時間 * 0.034 m/μs便宜上、変換します 10進数普通に: s = 継続時間 * 1/29 = 継続時間 / 29ここで、音が目標に到達するまでと目標に戻るという 2 つの必要な距離を伝わったことを思い出してください。 すべてを 2 で割ってみましょう: s = 期間 / 58これで、プログラムの 58 という数字の由来がわかりました。 プログラムを Arduino Uno にロードし、シリアル ポート モニターを開きます。 センサーを次の場所に向けてみましょう さまざまなアイテム計算された距離をモニターで確認します。

タスク

距離計を使用して距離を計算できるようになったので、いくつかの便利なデバイスを作成します。
  1. 建設用距離計。 プログラムは距離計を使用して 100 ミリ秒ごとに距離を測定し、結果を象徴的な LCD ディスプレイに表示します。 便宜上、得られたデバイスは小さなケースに入れて電池で駆動することができます。
  2. 超音波杖。 測定された距離に応じて、さまざまな周波数でブザーを「鳴らす」プログラムを書いてみましょう。 たとえば、障害物までの距離が 3 メートルを超える場合、0.5 秒に 1 回ブザーが鳴ります。 1 メートルの距離では、100 ミリ秒に 1 回。 10cm未満 - ビープ音が絶えず鳴ります。

結論

超音波距離計は、使いやすく、低コストで正確なセンサーであり、何千ものロボットでその機能を十分に発揮しています。 レッスンで学んだように、センサーにはロボットを構築する際に考慮すべき欠点があります。 英断共有になるかもしれない 超音波距離計レーザーと組み合わせました。 この場合、お互いの欠点を補い合います。

今回は超音波距離計HC-SR04の動作原理を見ていきます。

超音波距離計の動作原理は、超音波の放射と前方の物体からの反射に基づいています。 音の戻り時間に基づいて、簡単な計算式を使用して、物体までの距離を計算できます。 HC-SR04距離計はホビー用としては最も安価な距離計です。 低価格でありながら、 良い特性、2〜450cmの範囲の距離を測定できます。

使用されているコンポーネント (中国で購入):

センサーの動作原理は 4 つの段階に分けられます。

1. 持続時間 10 μs のパルスを Trig ピンに印加します。

2. 距離計内で、入力パルスは 40KHz の 8 パルスに変換され、「T アイ」を通して前方に送信されます。

3. 障害物に到達すると、送信された衝撃は反射され、「R アイ」で受信されます。 Echo ピンで出力信号を取得します。

4. コントローラー側で、次の式を使用して受信信号を距離に直接変換します。

パルス幅 (μs) / 58 = 距離 (cm)

パルス幅 (μs) / 148 = 距離 (インチ)

Arduinoに接続する

モジュールには 4 ピン 2.54mm コネクタが装備されています

VCC:「+」パワー

トリガー(T): 入力信号出力

エコー(R):出力信号出力(信号長はセンサーまでの物体の距離に依存します)

GND: "-" 力

センサーをArduinoに接続したら、あとは作業用のスケッチを記入するだけです。 以下のスケッチでは、距離に関する情報がコンピューターのポートに送信され、距離が 30 センチメートル未満になると、ピン 13 に接続された LED が点灯します。

プログラムコードの例:

#トリガー 9 を定義 #エコー 8 を定義 #LEDPin 13 を定義 void 設定 // 出力として開始 pinMode(エコー、入力); //入力として開始 pinMode(ledピン, 出力); シリアル.begin(9600); /* 通信速度を設定します。 私たちの場合はコンピューターを使用しています */) unsigned int impulseTime=0; unsigned int distance_sm=0; 空所 ループ() (digitalWrite(Trig, HIGH); /* 距離計のトリガー入力にパルスを適用します */遅延マイクロ秒(10); // 10 マイクロ秒に等しい digitalWrite(Trig, LOW); // impulseTime=pulseIn (Echo, HIGH ) を無効にします。 // パルス長を測定する距離_sm=インパルス時間/58; シリアル.println(距離_sm); // ポートに出力 if (距離_sm<30) // 距離が 30 センチメートル未満の場合(digitalWrite(ledPin, HIGH); // LEDが点灯する) else (digitalWrite (ledPin, LOW ); // それ以外の場合はオフ ) 遅延 (100); /* 0.1 秒待ちます。次のパルスは、前のパルスからのエコーが消えた後にのみ送信できます。 この時間をサイクル周期と呼びます。 パルス間の推奨期間は少なくとも 50 ミリ秒である必要があります。 */ }

追加の実例:

距離計とサーボドライブ間の相互作用。 距離計で測定した距離はサーボドライブの回転角に変換されます。

サンプルコード

//Arduino IDE 1.0.1でテスト済み#含む #coef 10 を定義します //(対応係数1cmあたり10度)#define Dead_zone 4 #define max_value 22 #define Trig 9 #define Echo 8 #define LEDPin 13 #define servoPin 11 サーボ myservo; 空所 設定() (pinMode(Trig, OUTPUT); // 出力として開始 pinMode(エコー、入力); //入力として開始 pinMode(ledピン, 出力); myservo.attach(サーボピン); myservo.write(0); ) unsigned int impulseTime=0; unsigned int distance_sm=0; 空所 ループ() (digitalWrite(Trig, HIGH); /* 入力にパルスを適用しますレンジファインダー トリガー */ 遅延マイクロ秒 (10); // 10 マイクロ秒に等しい digitalWrite(Trig, LOW); // 無効 impulseTime =pulseIn (Echo, HIGH ); // パルス長を測定する距離_sm = インパルス時間/58; // センチメートルに変換します if (距離_sm >= デッドゾーン && 距離_sm<= max_value) { myservo.write (coef * (distance_sm - dead_zone)); } else if (distance_sm < dead_zone)// 距離が 4 cm 未満の場合、サーボは 0 度になります( myservo.write (0); ) else ( myservo.write (180); ) 遅延 (100); /* 0.1 秒待ち、 次のパルスは、前のパルスからのエコーが消えた後にのみ送信できます。 この時間をサイクル周期と呼びます。 パルス間の推奨期間は少なくとも 50 ミリ秒である必要があります。 */ }

こんにちは、親愛なるプログラマーの皆さん。 今日は3回目のレッスンに進みます。 超音波距離計 HC-SR04 を Arduino に接続する方法を学びます。。 整理しましょう 距離計の動作原理、このデバイスの特性とプログラミング。

さあ、始めましょう! まずは距離計の特徴から見ていきましょう。

超音波センサー HC-SR04の特徴

このような超音波センサーの赤外線センサーに対する大きな利点は、超音波センサーが光源や色の障害物の影響を受けないことです。 薄い物体や毛むくじゃらの物体までの距離を測定するのが難しい場合があります。 空気中の音速は温度に依存すると言いたいのです。 したがって、測定誤差は温度の上昇または下降に応じて変化します。

  • 動作電圧 4.8V ~ 5.5V (最大±0.2V)。
  • 測定範囲:2cm~400cm。
  • 動作温度範囲: 0°C ~ 60°C (±10%)。
  • スタンバイモードでの消費電流は最大2mAです。
  • 動作モードでの消費電流は 15 mA です。
  • 超音波の動作範囲は周波数 40 kHz です。
  • 視野角15度。
  • 0.03 ~ 0.6 ms の距離を 3 mm の分解能で測定します。
  • 0.6 から 5 まで誤差は増加します。

センサーには 4 つの出力があります。

  • VCC:「+」電源
  • TRIG (T): 入力信号出力
  • ECHO(R):出力信号出力
  • GND:「-」電源

超音波距離計接続に必要な部品

  • Arduino (私たちの場合 - UNO)
  • ブレッドボード (デバイスを Arduino に簡単に接続するためのブレッドボード)
  • ワイヤー
  • 超音波センサー HC-SR04

超音波距離計 HC-SR04 の動作原理


  1. 持続時間 10 μs のパルスを Trig ピンに適用します。
  2. 距離計の内部では、入力パルスは 40 kHz の 8 パルスに変換され、「T アイ」を通して前方に送信されます。
  3. 障害物に到達した衝撃は反射して「Rアイ」で受信されます。 Echo ピンで出力信号を取得します。
  4. コントローラー側で直接、受信信号を距離に変換します。

距離計をArduinoに接続するための図

超音波センサーを Arduino に接続する図が表示されます。 ご覧のとおり、非常にシンプルで非常に興味深いものです。 ただし、正しい接続を忘れないでください。 私のアドバイス: 接続エラーの検索により多くの時間を費やすことになるため、決して急いでデバイスを接続しないでください。


次のステップは、プログラムのスケッチを検討することです

プログラミング超音波センサー HC-SR04

#定義する Trig 8 /* パルス供給ピンを指定*/
#define Echo 9 /* パルス受信端子を指定*/
void setup() (
ピンモード (トリガー、出力); /*終了として開始 */
ピンモード (エコー、入力); /*入力として開始 */
シリアルの開始 (9600); /* ポート速度を設定します */
}
unsigned int impulseTime=0;
unsigned int distance_sm=0;
void ループ() (
digitalWrite(Trig, HIGH); /* 距離計のトリガー入力にパルスを適用します */
遅延マイクロ秒(10); /* パルスは 10 マイクロ秒続きます */
digitalWrite(Trig, LOW); // パルスをオフにする
impulseTime=pulseIn(エコー、HIGH);
/*インパルスを受信し、その長さを計算します*/
距離_sm =インパルス時間/58; /* 値をセンチメートルに変換します */
Serial.println(距離_sm); /* 値をプログラムポートに出力します */
遅延(200);
}

このコードを貼り付けたら、それをプログラムにロードし、「ポート モニター」を有効にします。 そこにはセンサーから障害物までの距離が表示されるので、物体の距離を変更して試してください。

これはあなたが手に入れるべきものです!



すべてうまくいったことを願っています! ご質問がございましたら、次のアドレスまでご連絡ください。

Arduino 超音波距離センサーは、比較的シンプルで、十分な精度と可用性があるため、ロボット工学プロジェクトで非常に人気があります。 これらは、障害物を回避したり、物体の寸法を取得したり、部屋の地図をシミュレートしたり、物体の接近や除去を知らせたりするのに役立つデバイスとして使用できます。 このようなデバイスの一般的なオプションの 1 つは距離センサーで、その設計には超音波距離計 HC SR04 が含まれています。 この記事では、距離センサーの動作原理について説明し、Arduino ボードに接続するためのいくつかのオプション、相互作用図、スケッチ例を検討します。

超音波センサーが物体までの距離を測定する機能は、ソナーの原理に基づいています。超音波ビームを送信し、その反射を遅延して受信することで、デバイスは物体の存在と物体までの距離を測定します。 受信機によって生成された超音波信号は障害物に反射され、一定時間後に障害物に戻ってきます。 この時間間隔が、物体までの距離を決定するのに役立つ特性となります。

注意! 動作原理は超音波に基づいているため、このようなセンサーは吸音物体までの距離を測定するのには適していません。 表面が平らで滑らかな物体は測定に最適です。

HC SR04センサーの説明

Arduino距離センサーは非接触型のデバイスであり、高精度な測定と安定性を実現します。 測定範囲は 2 ~ 400 cm で、動作は電磁放射や太陽エネルギーの影響をほとんど受けません。 HC SR04 Arduino を備えたモジュールキットには、受信機と送信機も含まれています。

超音波距離計 HC SR04 には次の技術パラメータがあります。

  • 供給電圧5V;
  • 動作電流パラメータは 15 mA です。
  • パッシブ状態での現在の強さ< 2 мА;
  • 視野角 – 15°;
  • タッチ解像度 - 0.3 cm。
  • 測定角度 – 30°;
  • パルス幅 – 10 -6 秒。

センサーには 4 つのリード (標準 2.54 mm) が装備されています。

  • ポジティブタイプの電源接点 – +5V;
  • トリガー (T) – 入力信号出力。
  • Echo (R) – 出力信号出力。
  • GND – 「グランド」ピン。

Arduino用SR04モジュールはどこで購入できますか

距離センサーはかなり一般的なコンポーネントであり、オンライン ストアで簡単に見つけることができます。 最も安いオプション(1個あたり40〜60ルーブル)は、伝統的に有名なウェブサイトにあります。

HC-SR04 Arduino用距離センサーモジュール 信頼できるサプライヤーからの HC-SR04 超音波センサーのもう 1 つのオプション
近接センサー SR05 超音波式 HC-SR05(性能向上) 信頼できるサプライヤーからの UNO R3 MEGA2560 DUE 用モジュール HC-SR05 HY-SRF05

Arduinoとの連携スキーム

データを取得するには、次の一連のアクションを実行する必要があります。

  • 10 マイクロ秒のパルスを Trig 出力に適用します。
  • Arduino に接続された hc sr04 超音波距離計では、信号は周波数 40 kHz の 8 つのパルスに変換され、エミッターを介して前方に送信されます。
  • パルスが障害物に到達すると、障害物から反射され、R レシーバーによって受信され、Echo 出力に入力信号が提供されます。
  • コントローラー側では、受信信号を数式を使用して距離に変換する必要があります。

パルス幅を 58.2 で割るとセンチメートル単位のデータが得られ、148 で割るとインチ単位でデータが得られます。

HC SR04をArduinoに接続する

超音波距離センサーを Arduino ボードに接続するのは非常に簡単です。 接続図を図に示します。

グランドピンをArduinoボードのGNDピンに接続し、電源出力を5Vに接続します。 Trig 出力と Echo 出力をデジタル ピンを介して Arduino に接続します。 ブレッドボードを使用した接続オプション:

HC SR04を使用するためのライブラリ

Arduino 上で HC SR04 距離センサーを操作しやすくするために、NewPing ライブラリを使用できます。 ping の問題はなく、いくつかの新機能が追加されています。

ライブラリの機能は次のとおりです。

  • さまざまな超音波センサーを操作する機能。
  • 1 本のピンだけで距離センサーを使用できます。
  • エコー ping がない場合でも 1 秒の遅延はありません。
  • 簡単なエラー修正のためのデジタル フィルターが内蔵されています。
  • 最も正確な距離計算。

NewPingライブラリをダウンロードできます

HC SR04センサーによる距離測定の精度

センサーの精度は、いくつかの要因によって決まります。

  • 気温と湿度。
  • 物体までの距離。
  • センサーに対する相対的な位置(放射図による)。
  • センサーモジュール要素の性能の質。

超音波センサーの動作原理は、空気中を伝播する音波の反射現象に基づいています。 しかし、物理学の授業でご存知のように、空気中の音の伝播速度は、その空気自体の特性 (主に温度) に依存します。 センサーは波を発し、波が戻ってくるまでの時間を測定しますが、波がどのような媒体で伝播するかは分からず、計算には特定の平均値が使用されます。 実際の条件では、気温の影響により、HC-SR04 には 1 ~ 3 ~ 5 cm の誤差が生じる場合があります。

オブジェクト要素までの距離は重要です。なぜなら... 近隣の物体からの反射の確率が増加し、信号自体は距離とともに減衰します。

また、精度を高めるには、センサーを正しく向ける必要があります。物体が放射パターンの円錐内にあることを確認してください。 簡単に言えば、HC-SR04の「目」は被写体をまっすぐに見る必要があります。

誤差と測定の不確実性を減らすために、通常は次のアクションが実行されます。

  • 値は平均化されます(数回測定し、スパイクを除去してから平均を求めます)。
  • センサー (たとえば、) を使用して温度が測定され、補正係数が適用されます。
  • センサーはサーボモーターに取り付けられており、これを使って「頭を回転」させ、放射パターンを左または右に動かします。

距離センサーの使用例

Arduino Uno ボードと HC SR04 距離センサーを使用した単純なプロジェクトの例を見てみましょう。 スケッチでは、オブジェクトまでの距離の値を受け取り、Arduino IDE のポート モニターに出力します。 スケッチと接続図を簡単に変更して、物体が近づいたり離れたりしたときにセンサーが信号を送るようにすることができます。

センサーをArduinoに接続する

スケッチを作成するとき、センサーを接続するための次のピン配置オプションが使用されました。

  • VCC:+5V
  • トリガー – 12ピン
  • エコー – 11ピン
  • アース (GND) – アース (GND)

スケッチ例

外部ライブラリを使用せずに、比較的複雑なバージョンでセンサーの操作をすぐに始めてみましょう。

このスケッチでは、次の一連のアクションを実行します。

  • 短いパルス (2 ~ 5 マイクロ秒) で、距離センサーをエコーロケーション モードに切り替えます。このモードでは、周波数 40 KHz の超音波が周囲の空間に送信されます。
  • センサーが反射信号を分析し、遅延に基づいて距離を決定するのを待ちます。
  • 距離の値を取得します。 これを行うには、HC SR04 が ECHO 入力で距離に比例したパルスを生成するまで待ちます。 パルス持続時間は、pulseIn 関数を使用して決定します。この関数は、信号レベルが変化するまでの経過時間を返します (この場合、パルスの立ち下がりエッジが現れるまで)。
  • 時間を受信したら、その値を定数で割ってセンチメートル単位の距離に変換します (SR04 センサーの場合、「そこ」信号では 29.1、「後方」信号では同じで、合計は 58.2 になります) )。

距離センサーが信号を読み取らない場合、出力信号の変換では短いパルスの値 (LOW) が取得されることはありません。 一部のセンサーの遅延時間はメーカーによって異なるため、上記のスケッチを使用するときはその値を手動で設定することをお勧めします (サイクルの開始時にこれを行います)。

距離が 3 メートルを超えると、HC SR04 の動作が低下し始めるため、遅延時間を 20 ms 以上に設定することをお勧めします。 25または30ミリ秒。

#define PIN_TRIG 12 #define PIN_ECHO 11 長時間、cm; void setup() ( // シリアル ポート経由の通信を初期化する Serial.begin (9600); // 入出力を定義 pinMode(PIN_TRIG, OUTPUT); pinMode(PIN_ECHO, INPUT); ) void loop() ( // First 2 ~ 5 マイクロ秒続く短いパルスを生成しますdigitalWrite(PIN_TRIG, LOW);layMicroseconds(5);di​​gitalWrite(PIN_TRIG, HIGH); // 信号レベルを高く設定し、約 10 マイクロ秒待ちますこの時点で、センサーは信号を送信します周波数 40 KHz の遅延マイクロ秒(10);digitalWrite(PIN_TRIG, LOW); // エコーロケーター上の音響信号の遅延時間duration =pulseIn(PIN_ECHO, HIGH); // ここで、時間を次のように変換する必要があります。 distance cm = (duration / 2) / 29.1; Serial.print("Distance to object: "); Serial.print(cm); Serial.println(" cm."); // が正しく動作するための測定間の遅延スケッチ遅延(250); )

NewPingライブラリを使用してスケッチする

次に、NewPing ライブラリを使用したスケッチを見てみましょう。 コードは大幅に簡素化されます。 前述のすべてのアクションはライブラリ内に隠されています。 必要なのは、NewPing クラスのオブジェクトを作成し、距離センサーを接続するピンを指定し、オブジェクトのメソッドを使用することだけです。 この例では、距離をセンチメートル単位で取得するには、ping_cm() を使用する必要があります。

#含む #define PIN_TRIG 12 #define PIN_ECHO 11 #define MAX_DISTANCE 200 // 正しいとみなされる最大距離を決定する定数。 // 距離を取得するためにそのメソッドを使用するオブジェクトを作成します。 // NewPing ソナー センサーの ECHO 出力と TRIG 出力が接続されているピン番号をパラメーターとして渡します (PIN_TRIG、PIN_ECHO、MAX_DISTANCE)。 void setup() ( // シリアルポート経由の通信を 9600 の速度で初期化します Serial.begin(9600); ) void loop() ( // 正しい動作には開始遅延が必要です。delay(50); // 値を取得します距離センサーから取得し、それを変数に保存します。 unsigned int distance = sonar.ping_cm(); // ポート モニターに距離を出力します。 Serial.print( distance); Serial.println("cm"); )

超音波距離計 HC SR04を1ピンで接続した例

HC-SR04とArduinoの接続は1本のピンで行えます。 このオプションは、大規模なプロジェクトに取り組んでいて、十分な空きピンがない場合に便利です。 接続するには、TRIG ピンと ECHO ピンの間に 2.2K の抵抗を取り付け、TRIG ピンを Arduino に接続するだけです。

#含む #define PIN_PING 12 // Arduino ピンは距離センサーのトリガー ピンとエコー ピンに接続されます。 #define MAX_DISTANCE 200 // 制御できる最大距離 (400 ~ 500cm)。 NewPing ソナー(PIN_PING、PIN_PING、MAX_DISTANCE); // ピンと最大距離を調整 void setup() ( Serial.begin(9600); // データと 115200 bps の送信周波数でプロトコルを開きます。 ) void loop() ( late(50); // 遅延 50生成された波間のミリ秒。29 ミリ秒が最小許容値です。 unsigned int distanceSm = sonar.ping(); // 信号を作成し、その継続時間パラメーターを µs (uS) で取得します。 Serial.print("Ping: "); Serial.print("Ping: "); Serial. print( distanceSm / US_ROUNDTRIP_CM); // 時間パラメータを距離値に変換し、結果を表示します (0 は許容限界を超えていることに対応します) Serial.println("cm"); )

簡単な結論

超音波距離センサーは汎用性があり、ほとんどの趣味のプロジェクトに使用できるほど正確です。 この記事では、Arduino ボードに簡単に接続できる、非常に人気のある HC SR04 センサーについて説明します (このためには、すぐに 2 つの空きピンを用意する必要がありますが、1 つのピンを使用する接続オプションもあります)。 センサーを操作するための無料のライブラリがいくつかあります (この記事ではそのうちの 1 つである NewPing のみが説明されています) が、これらを使用しなくても問題ありません。センサーの内部コントローラーと対話するためのアルゴリズムは非常に単純であり、それを示しました。記事上で。

私自身の経験によると、HC-SR04 センサーの精度は 10 cm から 2 m までの距離で 1 cm 以内ですが、これより短い距離や長い距離では強い干渉が発生する可能性があり、これは周囲の物体や使用方法に大きく依存します。 しかし、ほとんどの場合、HC-SR04は素晴らしい仕事をしてくれました。



サイトの新着情報

>

最も人気のある