装飾材料 超音波距離計 HC-SR04をArduinoに接続します。 Arduino: 超音波距離計 HC-SR04 Hc sr04 を atmega8 に接続

超音波距離計 HC-SR04をArduinoに接続します。 Arduino: 超音波距離計 HC-SR04 Hc sr04 を atmega8 に接続

  • ブレッドボード;
  • Arduino IDE開発環境を搭載したパソコン。
  • 1 動作原理超音波距離計 HC-SR04

    アクション 超音波距離計 HC-SR04はエコーロケーションの原理に基づいています。 音響パルスを空間に放射し、障害物から反射された信号を受信します。 伝播時間による 音波障害物までの距離が決まります。

    音波の発射はアプリケーションから始まります ポジティブな衝動片脚あたり少なくとも 10 マイクロ秒持続 トリガー距離計。 パルスが終了するとすぐに、距離計は周波数 40 kHz の音響パルスのパケットをその前の空間に放射します。 同時に脚にも エコーレンジファインダーは論理ユニットとして表示されます。 センサーが反射信号を検出するとすぐに、ECHO ピンに論理 0 が表示されます。 ECHO レッグ上の論理ユニットの継続時間 (図の「エコー遅延」) によって、障害物までの距離が決まります。

    HC-SR04 レンジファインダーの距離測定範囲は 0.3 cm の分解能で最大 4 メートルです。視野角は 30°、有効角度は 15°です。 スタンバイモードの消費電流は2mA、動作時は15mAです。

    2 接続図距離センサー

    超音波距離計には +5 V の電圧が供給されます。他の 2 つのピンは任意の Arduino デジタル ポートに接続されます。11 と 12 に接続します。



    3 オブジェクトまでの距離を取得するセンサーHC-SR04より

    次に、障害物までの距離を決定し、それをシリアル ポートに出力するスケッチを作成しましょう。 まず、TRIG ピンと ECHO ピンの番号を設定します。これらはピン 12 と 11 です。 次に、トリガーを出力として宣言し、エコーを入力として宣言します。 シリアル ポートを 9600 ボーで初期化します。 サイクルを繰り返すたびに ループ()距離を読み取り、ポートに出力します。

    Const int trigPin = 12; const int echoPin = 11; void setup() ( pinMode(trigPin, OUTPUT); // トリガー - 出力ピン pinMode(echoPin, INPUT); // エコー - 入力digitalWrite(trigPin, LOW); シリアル.begin(9600); // シーケンスの初期化 ポート } void ループ() (長距離 = getDistance(); // センサーからの距離を取得 Serial.println( distance); // シリアルポートへの出力遅延(100); } // オブジェクトまでの距離を cm 単位で決定します long getDistance() (長い距離_cm = getEchoTiming() * 1.7 * 0.01; distacne_cm を返します。 } // 遅延時間を決定する long getEchoTiming() ( digitalWrite(trigPin, HIGH); // 10 μs のトリガー パルスを生成しますlayMicroseconds(10); デジタル書き込み(trigPin, LOW); // echoPin ピンの HIGH レベルの持続時間を決定します、μs: long period =pulseIn(echoPin, HIGH); 返品期間。 }

    関数 getEchoTiming()トリガーパルスを生成します。 10 マイクロ秒のパルスを生成するだけで、これが距離計が音声パケットを宇宙に放射し始めるトリガーになります。 次に音波の送信開始からエコーの到達までの時間を記憶します。

    関数 getDistance()物体までの距離を計算します。 学校の物理の授業で、距離は速度と時間の積に等しいことを覚えています: S = V×t 空気中の音速は 340 m/秒で、時間はマイクロ秒 (変数) でわかります。 間隔)。 時間を得るために 間隔音はオブジェクトに到達してから戻ってくる距離の 2 倍になるため、結果を 1,000,000 で割る必要があります。 つまり、物体までの距離は S = 34000 cm/秒 × 持続時間 / 1,000,000 秒 / 2 = 1.7 cm/秒 / 100、それが私たちがスケッチに書いたことです。

    マイクロコントローラーは乗算演算を除算演算よりも高速に実行するため、 :100 同等品に交換しました ×0.01.

    4 仕事用の図書館エコーロケーター付き HC-SR04

    また、多くのライブラリは超音波距離計で動作するように作成されています。 たとえば、このライブラリ Ultrasonic です。 ライブラリは標準でインストールされます。ダウンロードしてディレクトリに解凍します。 /図書館/、Arduino IDEフォルダーにあります。 これ以降、ライブラリを使用できるようになります。

    ライブラリをインストールしたら、新しいスケッチを書いてみましょう。

    #含む // 超音波ライブラリ Ultrasonic(12, 11) を接続します。 // トリガー - 12、エコー - 11 void setup() (シリアル.begin(9600); // シーケンスの初期化 ポート } void ループ() ( float dist_cm = 超音波.レンジング(CM); // 距離(cm) Serial.println(dist_cm); // ポートまでの距離を出力します遅延(100); }

    その操作の結果は同じです。シリアルポートモニターにはオブジェクトまでの距離がセンチメートル単位で表示されます。

    スケッチに書くなら float dist_cm = 超音波.レンジング(INC);- 距離はインチで表​​示されます。

    5 研究から得た結論ソナー付き HC-SR04

    それで、私たちはに接続しました Arduino超音波距離計 HC-SR04 とそこからのデータを 2 つに分けて受信 違う方法: 特別なライブラリを使用する場合と使用しない場合。

    ライブラリを使用する利点は、コードの量が大幅に削減され、プログラムの可読性が向上することです。デバイスの複雑さを深く掘り下げる必要がなく、すぐに使用できることです。 しかし、そこには欠点があります。デバイスがどのように動作するのか、デバイス内でどのようなプロセスが行われるのかについての理解が深まりません。 いずれにしても、どの方法を使用するかはあなた次第です。

    超音波距離計がお得に買えます

    今回は超音波距離計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):出力信号出力(信号長は物体からセンサーまでの距離に依存します)

    グランド: "-" 力

    センサーを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 ミリ秒である必要があります。 */ }

    入力電圧は 5 V DC で、センサーの 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

    • T– 絶対気温 ( ° に) = t℃ + 273.15

    あとは計算式を組み合わせるだけ 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("========= ========);)

    両方の例の結果:


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

    新しい記事

    ● プロジェクト 23: 超音波距離センサー HC-SR04。 動作原理、接続例

    この実験では、距離を測定するための超音波センサーを調べ、センサーの読み取り値を WH1602 LCD 画面に表示するためのプロジェクトを作成します。

    必要なコンポーネント:

    超音波距離計 HC-SR04 (図 23.1) は、超音波信号の受信機と送信機が 1 つの基板上に配置されています。 エミッタは信号を生成し、その信号は障害物から反射されてレシーバに到達します。 信号が物体に到達してから戻ってくるまでの時間を測定することで、距離を推定できます。 受信機と送信機自体に加えて、ボードには、このセンサーの操作を簡単かつ便利にするために必要な配線も含まれています。

    超音波距離計 HC-SR04の特徴:

    測定範囲 - 2 ~ 500 cm。
    。 精度 - 0.3 cm;
    。 視野角 -< 15°;
    。 供給電圧 - 5 V。

    センサーには 4 つの 2.54 mm 標準ピンがあります。

    VCC - +5 V 電源;
    。 トリガー (T) - 入力信号出力。
    。 Echo (R) - 出力信号出力。
    。 GND - 接地。

    データを取得する一連のアクションは次のとおりです。

    10 µs パルスを Trig ピンに印加します。
    。 距離計の内部では、入力パルスは周波数 40 kHz の 8 つのパルスに変換され、エミッター T を通して前方に送信されます。
    。 障害物に到達すると、送信されたパルスが反射されて受信機 R で受信され、エコー ピンに出力信号が生成されます。
    。 コントローラー側で、次の式を使用して受信信号を距離に直接変換します。

    パルス幅 (μs) / 58 = 距離 (cm);
    -- パルス幅 (μs) / 148 = 距離 (インチ)。

    私たちの実験では、Arduino ボードに 1 m 未満の距離に近づくと鳴る音声アラームを作成します。センサーは回転サーボのブラケットに配置され、180° の視野角で空間を監視します。 。 センサーが半径1m以内の物体を検知すると、ピエゾエミッターに音声信号が送られ、サーボの回転が停止します。 要素の接続図を図に示します。 23.2.

    米。 23.2. 音声信号伝達のための要素の接続図

    スケッチを作成するときは、サーボ ドライブを操作するための Servo ライブラリと Ultrasonic ライブラリを使用します。
    HC-SR04センサーを備えたArduinoを操作するには、既製のライブラリであるUltrasonicがあります。
    Ultrasonic コンストラクターは、Trig ピンと Echo ピンがそれぞれ接続されているピンの番号という 2 つのパラメーターを取ります。

    超音波 超音波(12,13)​​;

    スケッチの内容をリスト 23.1 に示します。

    #含む // サーボライブラリを接続しますサーボ servo1; const int pinServo=8 ; // サーボドライブ接続用のピン int pos = 0 ; // サーボ位置を格納する変数 int dir =1 ; // サーボの動作方向 // HC-SR04 接続用ピン Trig - 12、Echo - 13超音波 超音波( 12 , 13 ) ; float dist_cm; // 距離の変数、cm // スピーカーをピン 9 に接続します int スピーカーピン = 9 ; void setup(){ // servo1 変数を pinServo1 ピンに接続します servo1.attach(ピンサーボ1); pinMode(スピーカーピン, 出力); ) ボイドループ()(servo1.write(pos); // サーボを結果の角度まで回転させます遅延(15); // 一時停止してサーボが回転するのを待ちます float dist_cm = 超音波.レンジング(CM); if (距離_cm<100 && dist_cm>20 ) トーン(スピーカーピン,); // ピエゾブザーを有効にする else (tone(speakerPin,0); // ピエゾブザーを無効にする pos=pos+dir; // サーボ位置変数を変更する if (pos==0 || pos==180 ) dir=dir*(-1 ); // 進行方向を変える } }
    接続順序:

    1. 距離センサー HC-SR04 をサーボドライブに取り付けます。
    2. 図の図に従って、HC-SR04センサー、ピエゾブザー、サーボドライブをArduinoボードに接続します。 23.2.
    3. リスト 23.1 のスケッチを Arduino ボードにロードします。
    4. サーボドライブの周期的な動きを観察します。物体が HC-SR04 センサーの視野に入ると、ピエゾブザーが信号を発し、サーボドライブが停止し、物体がセンサーの視野から消えると、センサーが反応すると、サーボドライブが動きを再開します。

    番組一覧

    こんにちは、親愛なるプログラマーの皆さん。 今日は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度。
    • 3 mmの分解能で0.03~0.6 msの距離を測定します。
    • 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);
    }

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

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



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

    サイトの新着情報

    >

    最も人気のある