電気と照明 超音波距離計 HC-SR04をArduinoに接続する方法。 超音波距離計 HC-SR04 を Arduino に接続する 超音波距離測定センサー HC sr04

超音波距離計 HC-SR04をArduinoに接続する方法。 超音波距離計 HC-SR04 を Arduino に接続する 超音波距離測定センサー HC sr04

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
近接センサー 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 マイクロ秒続く短いパルスを生成します。 上級信号を受信したら、約 10 マイクロ秒待ちます。 この時点で、センサーは 40 KHz の周波数で信号を送信します。 遅延マイクロ秒(10); デジタル書き込み(PIN_TRIG, LOW); // エコーロケーター上の音響信号の遅延時間。 持続時間 = パルスイン(PIN_ECHO, HIGH); // あとは時間を距離に変換する作業が残っています cm = (duration / 2) / 29.1; Serial.print("オブジェクトまでの距離: "); シリアルプリント(cm); Serial.println(「参照してください。」); // スケッチを正しく動作させるための測定間の遅延遅延(250); )

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

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

#含む #define PIN_TRIG 12 #define PIN_ECHO 11 #define MAX_DISTANCE 200 // 正しいとみなされる最大距離を決定する定数。 // 距離を取得するためにそのメソッドを使用するオブジェクトを作成します。 // パラメータとして、センサーの ECHO 出力と TRIG 出力が接続されているピン番号を渡します。 NewPing sonar(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(距離Sm / US_ROUNDTRIP_CM); // 時間パラメータを距離値に変換し、結果を表示します (0 は距離を超えることに対応します) 許容限界) Serial.println("cm"); )

簡単な結論

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

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

この記事では動作原理を見ていきます 超音波距離計 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 ミリ秒である必要があります。 */ }

物体までの距離を測定するには、コウモリのようなロケーターの原理で動作する超音波距離計 HC-SR04 を使用できます。 このようなセンサーを使用すると、障害物を回避するさまざまなロボットを設計したり、照明やその他の負荷を自動的にオンにする回路を組み立てたり、超音波セキュリティ システムを組み立てたりすることができます。 HC-SR04 レンジファインダーは、さまざまなマイクロコントローラーに接続できる既製のモジュールです。Arduino UNO の中国版と組み合わせて例を実行します。

センサーの前面には、送信 (T) と受信 (R) の 2 つのセンサーがあります。 送信センサーは、周波数 40 kHz の音響パルスを生成します。 障害物に到達すると、その衝撃は反射され、受信センサーによって捕捉されます。 かなり高い精度で、2 cm から 4 m の範囲の物体までの距離を測定できます。センサーの動作は太陽光や物体の色の影響を受けません。

電子機器はセンサーの背面にあります。 MAX3232チップは送信センサーを制御します。 LM324 オペアンプは、受信センサーから受信した信号を増幅します。

マイクロコントローラーに接続するには、4 つのピンが使用されます。

Vcc– Arduino の 5V ピンに接続します。
トリガー– デジタル入力には、10 μs の持続時間を持つ論理ユニットが供給されます。 次に、センサーは 40 kHz の周波数で 8 サイクルの超音波信号を送信します。 反射信号を受信すると、物体までの距離が計算されます。
エコー– デジタル出力。 計算が完了すると、論理ユニットが適用されます。 論理ユニットをファイルする時間は、測定された距離に比例します。
Trig と Echo は、スケッチで指定されている Arduino のデジタル ピンに接続されています。
グランド– Arduino ボードの対応するピンに接続します。

Unoの中国製アナログの例を使用した、HC-SR04とArduinoの接続図。

Arduinoで書いてみよう スケッチNo.1、オブジェクトまでの距離が変わります。 例では、「」をピン留めします。 トリガー" は Uno のピン 2 に接続されており、ピン " エコー"を3ピンにします。

int TrigPin = 2; // Trig ピンは Arduino の 2 番ピンに接続されます。
int EchoPin = 3; // エコーピンはArduinoの3番ピンに接続されています。

void setup() (
Serial.begin (9600);//COM ポートの速度を設定します。
pinMode(TrigPin, OUTPUT);//Trig ピンを出力として設定します。
pinMode(EchoPin, INPUT);//Echo ピンを入力として設定します。
}
void ループ() (
int 距離、期間;
.
.
.
.
Serial.print(duration);//ディスプレイに距離値を表示します。
Serial.println("cm");
late(1000);//1000ミリ秒待ちます。
}

ライン " 期間 = 期間/29/2;" の距離を計算します。" cm"、インチ単位で計算する必要がある場合、行は次のようになります。" 期間 = 期間/74/2;».

スケッチの結果はシリアル ポート モニター ウィンドウに表示されます。

スケッチその2物体までの距離が 50 cm 未満の場合、Uno ボードに組み込まれた LED が点灯します。LED はピン 13 にぶら下がっています。

int トリガピン = 2;
int EchoPin = 3;
int LedPin = 13;

void setup() (
シリアル.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(LedPin, OUTPUT);
}
void ループ() (
int 距離、期間;
digitalWrite(TrigPin, HIGH);//論理 1 が Trig ピンに適用されます。
遅延マイクロ秒(10);//この状態は 10 マイクロ秒間保持されます
digitalWrite(TrigPin, LOW);//この状態は削除されます
duration =pulseIn(EchoPin, HIGH);//Echo ピンからの値。継続時間値に読み書きされます。
継続時間 = 継続時間/29/2;//距離の計算。 音速 340 m/s または 1 センチメートルあたり 29 マイクロ秒
Serial.print(期間);
Serial.println("cm");
if (期間<50) // Если расстояние менее 50 сантиметром
{
digitalWrite(LedPin、HIGH); // LEDが点灯する
}
それ以外
{
デジタル書き込み(LedPin、LOW); // そうしないと点灯しません
}
遅延(1000);
}

記事「」で説明したように、LED の代わりに白熱灯を接続すると、シンプルな自動照明システムが完成します。 このような構造物を部屋のどこかに置くと、訪問者が距離計の範囲に入ると自動的に部屋の照明が点灯します。 距離計の静止電流は 2 mA 未満です。

スケッチ #3 LEDを圧電素子(スクイーカー、ブザー)に置き換えてみましょう。物体までの距離が50 cm未満の場合に音を発します。これにより、単純な音響レーダーまたは音響アラームが得られます。

同様のブザーは、コンピュータで BIOS を通知するために使用されたり、子供用のおもちゃでも音を鳴らして使用されます。

接続図はシンプルで、ブザーの黒い線をArduinoのGNDピンに接続し、赤い線を任意の空いているデジタルピンに接続します。PWM機能(3、5、6、9、10、11、13)を使用します。 。 この例では、これはピン 5 です。関数を使用してピエゾ エミッタを接続します。 アナログ書き込み()。 この機能では音のピッチを変更することはできません。音は常に約 980 Hz の周波数になります。

int トリガピン = 2;
int EchoPin = 3;
int BeepPin = 5;

void setup() (
シリアル.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(BeepPin, OUTPUT);
}
void ループ() (
int 距離、期間;
digitalWrite(TrigPin, HIGH);//論理 1 が Trig ピンに適用されます。
遅延マイクロ秒(10);//この状態は 10 マイクロ秒間保持されます
digitalWrite(TrigPin, LOW);//この状態は削除されます
duration =pulseIn(EchoPin, HIGH);//Echo ピンからの値。継続時間値に読み書きされます。
継続時間 = 継続時間/29/2;//距離の計算。 音速 340 m/s または 1 センチメートルあたり 29 マイクロ秒
Serial.print(期間);
Serial.println("cm");
if (期間<50) // Если расстояние менее 50 сантиметром
{
アナログ書き込み(ビープピン, 50); // ピエゾエミッタをオンにする
}
それ以外
{
アナログ書き込み(ビープピン, 0); // ピエゾエミッターをオフにする
}
遅延(1000);
}

対象物までの距離が50cm未満になるとブザーが鳴ります。

スケッチ #4ブザーも使用しますが、機能のみを使用します トーン()を使用すると、さまざまな状況でサウンドのトーンを変更できます。

int トリガピン = 2;
int EchoPin = 3;
int BeepPin = 5;

void setup() (
シリアル.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(BeepPin, OUTPUT);
}
void ループ() (
int 距離、期間;
digitalWrite(TrigPin, HIGH);//論理 1 が Trig ピンに適用されます。
遅延マイクロ秒(10);//この状態は 10 マイクロ秒間保持されます
digitalWrite(TrigPin, LOW);//この状態は削除されます
duration =pulseIn(EchoPin, HIGH);//Echo ピンからの値。継続時間値に読み書きされます。
継続時間 = 継続時間/29/2;//距離の計算。 音速 340 m/s または 1 センチメートルあたり 29 マイクロ秒
Serial.print(期間);
Serial.println("cm");
if (期間<50) // Если расстояние менее 50 сантиметром
{
}
それ以外
{
noTone(ビープピン); // ピエゾエミッターをオフにする
}
遅延(1000);
}

列をなして " トーン(ビープピン、500);「パラメータ」 500 「音の周波数は 500 Hz に設定されています。このパラメータは 31 Hz から、ピエゾ エミッタと人間の聴覚のパラメータによって制限される限界まで設定できます。このスケッチは、スケッチ No. 3 の実験を繰り返しますが、 tone() 関数。サウンドの周波数を設定します。

スケッチ #5音の音色を変えてみましょう。 50cm以上離れると周波数1000Hzの音が出ます。 物体までの距離が 50 cm 未満になると、音の周波数が 500 Hz に変わります。

int トリガピン = 2;
int EchoPin = 3;
int BeepPin = 5;

void setup() (
シリアル.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(BeepPin, OUTPUT);
}
void ループ() (
int 距離、期間;
digitalWrite(TrigPin, HIGH);//論理 1 が Trig ピンに適用されます。
遅延マイクロ秒(10);//この状態は 10 マイクロ秒間保持されます
digitalWrite(TrigPin, LOW);//この状態は削除されます
duration =pulseIn(EchoPin, HIGH);//Echo ピンからの値。継続時間値に読み書きされます。
継続時間 = 継続時間/29/2;//距離の計算。 音速 340 m/s または 1 センチメートルあたり 29 マイクロ秒
Serial.print(期間);
Serial.println("cm");
if (期間<50) // Если расстояние менее 50 сантиметром
{
トーン(ビープピン、500); // 周波数 500 Hz のピエゾ エミッタをオンにします
}
それ以外
{
トーン(ビープピン、1000); // 1000 Hz の周波数でピエゾ エミッターをオンにします
}

機能の使用 トーン() Arduino のピン 3 と 11 での PWM の使用が妨げられるという事実に注意する必要があります (これは Mega プラットフォームには当てはまりません)。 私の例で関数を言ってみましょう トーン()はピン 5 で呼び出されますが、ピン 3 と 11 での PWM の動作に干渉する可能性があります。これは、さらにデバイスを構築するときに考慮する必要があります。 もうひとつ、機能について トーン()複数のピエゾ エミッターを同時に使用することはできません。 2 番目のピエゾ エミッターのサウンドをオンにするには、関数を使用して最初のピエゾ エミッターをオフにする必要があります。 ない1().

これらの実験の過程で、距離のより正確な測定は最大 2 m の距離で行われることがわかりました。また、効果的な視野を確保するには、距離計を対象物に対して直角に配置する必要があります。角度は約15°です。

  • ブレッドボード;
  • 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 のトリガー パルスを生成します lateMicroseconds(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

    そこで、超音波距離計 HC-SR04 を Arduino に接続し、特別なライブラリを使用する場合と使用しない場合の 2 つの異なる方法でデータを受信しました。

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

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

    こんにちは、親愛なるプログラマーの皆さん。 今日は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);
    }

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

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



    すべてうまくいったことを願っています! ご質問がございましたら、下記までご連絡ください。

    サイトの新着情報

    >

    最も人気のある