電気と照明 HC-SR04 超音波距離測定モジュール。 距離計 HC-SR04 の Arduino への接続 超音波距離計 HC-SR04 プログラム

HC-SR04 超音波距離測定モジュール。 距離計 HC-SR04 の Arduino への接続 超音波距離計 HC-SR04 プログラム

こんにちは、みんな。
このミニレビューでは、超音波距離測定モジュールを使用して独自に作成します。

誠に申し訳ございませんが、梱包・開梱はございません。 私自身、他のレビューでは気に入らないので、自分のレビューを台無しにするつもりはありません。 注文した商品が異常な梱包や非常に卑劣な形態で到着しない限り...
トイレに行くと自動的に照明が点灯し、トイレを出ると自動的に消灯するというアイデアが生まれました。 これらの目的のために、pir スイッチを注文しました。また、念のため、pir センサーも別途注文しました。



スイッチは、家族全員が個別に訪れる部屋に設置されていました。
そして、トイレに行くときに典型的な手順を実行しながらレズギンカを踊ることができる人は誰もおらず、通常の姿勢でフリーズするのは誰にとっても典型的なことであることが判明しました。 ここでビャカが待ち構えていた。 良いこと、永遠のことを考えているだけで、電気がバタンと消えたり、とても迷惑です。
スイッチを調整するあらゆる方法が試みられましたが、望ましい結果は得られませんでした。
私たちは、必要な存在センサーを検出センサーに置き換えることによって、自分自身と物理学を欺くことに失敗しました。
そのため、スイッチと未使用の PIR センサーは次の場所に送られました。 長期保存庫良い時代が来て、彼らの地位が奪われるまで...
ゲートシステム用の複合レーダーですが、まだどこにも取り付けられていません。


電子レンジの電源は当然オフになっているのに、なぜ頭のてっぺんを電子レンジにさらす必要があるのでしょうか。 IR マトリックスだけが残ります。
事はかなり具体的です。 その最小ゾーンは部屋のサイズです。 訪問時にバタンとライトがついたり消えたりします。 しかし、欠点が 1 つあります。 センサーは非常に細心の注意を払っており、すべてが所定の位置に収まることを好みます。 ロール紙を動かしたり、便座を下げたり上げたりした場合は、リセットが必要です。 そして、彼の価格は異常ではありません。
そこで、解決策の模索が続きました。
インターネット上で、簡単なトピックを扱っているサイトを見つけました。 サーキットブレーカー超音波センサーに光が当たります。
このトピックは興味深いものに思えました。特にファームウェアで車輪を再発明する必要がないため、著者は私たちのために最善を尽くしてくれました。彼に感謝します。
図があり、ファームウェアがあります。 残っているのは、シグネットを作成し、出力に本格的な存在センサーを取得することだけです。 それとも理解できないのか...見てみましょう...
センサーはbanggoodで注文しました。配送時間が安定しているため、このストアが気に入っています。トラックなしで28〜30日で注文できます。
トラックなしで時間通りに到着しました。 Banggood のトラックなしの小包の梱包は標準で、ゴミ袋だけです...
センサーは帯電防止素材で梱包されていたため、郵便トラブルを免れたのではないかと思います。 :0)
残念ながら帰りにゴミ袋を捨ててしまい、帯電防止剤はすでに家にあるのでセンサー以外は見せるものがなく、センサー自体もすでに製造時に擦り切れてしまっています(足はまっすぐになっています)デバイスのプロセス。
TTXセンサー:
- 45*20*23mm。 LxWxD (D - 脚を伸ばした状態)
- 重量 - 8.28グラム
- 電源電圧 - DC 5V
- 消費電流 - 15mA
- 最小作動距離 - 2 cm。
- 最大作動距離 - 4メートル
- 検出ゾーン角度 - 15 度
簡単に言うと。
センサーはエコー原理に基づいて動作します。 センサーの 1 つのピエゾが周波数 40 kHz のパルスのパケットを放射し、信号がセンサーの前の表面で反射され、反射された信号が別のピエゾで受信され、処理ユニットが受信したデータを処理してパルスを出力します。その長さは超音波信号の距離に比例します。
それらの。 出力にはインパルスがあり、その持続時間は私たちにとって重要です。
当社が製造する自動スイッチ/スイッチでは、マイクロコントローラーのメモリに保存されているパルスの持続時間と、新たに反射されたパルスの持続時間とを比較します。 新しいパルスの持続時間がメモリ内の持続時間より短い場合、マイクロコントローラーは検出ゾーン内に物体があり、ロードをオンにする必要があると判断します。パルスの長さが長い場合は、何もしません。ロードがオンになっている場合はオフにしてください。
さらに遠く:
センサーそのもの。


マイクロ回路上のマーキングは消去されています。


早速描き直しましょう 既製の図 Diptrace では、実験用に印を描いてスカーフを作ります。

製造工程はもう飽きた方も多いと思うのでネタバレで隠しました。
スカーフの作り方を一度ご紹介しました。 今回は写真を何枚か撮ったので、捨てるのはもったいないです。
私はもうプロセスで人々を苦しめるつもりはありません。ボードについて質問がある場合は、個人メッセージを書いてください。
このトピックに関して私が収集したものと、Diptrace の図と印刷可能なスカーフをダウンロードするためのリンク。
写真を数枚。
スカーフと型紙を用意します。 フォトレジストが塗布されます。


私たちは照らし、洗い、エッチングします。


フォトレジストをエッチングして洗い流します。


マスクを適用し、テンプレートを照明します。


スカーフをカットして穴を開けます。



スカーフそのもの。
回路はATtiny13で組み立てました。
なぜテストではこんなに美しいのでしょうか? それは、el の下で別のボードと同時に行われただけです。 負荷。
なぜラジオ要素はこれほど愚かに配置されているのでしょうか? テストだから。 デバイスが組み立てられ、動作しているかどうかを確認します。 育てて組み立てても意味がありませんでした。


センサーをスカーフにはんだ付けします。


私たちはプログラムします。


その結果、30mA を消費し、5 ボルトの電源を備えた既製のパッケージ化されていない存在センサーを入手できます。 異物角度 15 度、距離 2 センチメートルから 3.5 メートルの事前にプログラムされた検出ゾーン内で。 検出するとLEDが点灯します。
動作原理は簡単です。 必要な場所にセンサーを向けます。 ボタンを押します。
設定LED(私の場合は赤)が点滅を始めます。
3 つのモードで点滅します。
10% LED 点灯 - 物体が範囲外、負荷オフ。
90% LED が点灯 - 物体が範囲内にあり、負荷がオンになっています。
50% LED が点灯 - 検出ゾーンは空いており、カウントダウンはファームウェアに応じて 60 秒または 10 秒、または 1 秒で、オフになるまでランプが点灯します。
その後、10 秒以内に検知ゾーンから離れる必要があります。
エリアを制限することができます。 これを行うには、設定を記憶する時点でゾーンの境界に立っている必要があります。これにより、ゾーンが制限されます。
パスポート最小2センチを確認します。 写真のように範囲を限定すると、ボックスとセンサーの間に指を入れるとLEDが点灯し、指を離すと消灯します。
ボックスを0.5センチメートル近づけると、LEDが点灯し、デバイスは同調を拒否します。


最大4メートルは確認できなかった。 最大距離これは確認されており、デバイスは3.5メートルの距離にいる人物を自信を持って記録します。 の上 3メートル自信を持って15×15センチメートルの箱で私の手を固定します。 負荷をオンにしますが、ボックスを取り外すまでオフになりません。
結論。
- 出来上がった存在センサーが気に入りました。
- 最もシンプルで便利なセットアップ。
- それは実際に動作します。
- 安くて陽気です。
一般に、これは超音波距離測定モジュール HY-SRF05 に基づく適切なデバイスです。
近い将来、場所に合わせて調整します。ボックスを選択するだけです。
ライトを消すことを恐れることなく、希望の位置でフリーズできるようになりました。
興味のある方は、さらに多くの使用方法を考えることができます。 特にこのセンサーは基本的に Arduino エンジニア向けに設計されています。 あるいは、彼らにとってはそうではないかもしれません... +41を購入する予定です お気に入りに追加 レビューが気に入りました +41 +81

アルドゥイーノ - ユニークなシステムこれはエンジニアの手の中にある粘土であり、そこから好きなものを何でも成形できます。 これは、さまざまな方向の多種多様なセンサーとモジュールによって可能になります。 単純な電流検出チップから Arduino hc hc sr04 のようなものまで。

これは、超音波を使用して、照射された対象物までの距離を測定できる特別なセンサーです。 これを使用する最も簡単な方法は、単純な距離計を作成することであることは容易に推測できます。 プロジェクトの組み立てを開始する前に、Arduino hc sr04 と、それを使用する際にどのようなニュアンスを考慮する必要があるかを見てみましょう。

1. HC SR04センサーを使用してArduinoで距離計を組み立てる基本

Arduino で距離計を構築する場合、HC SR04 なしでは実現できません。 結局のところ、このモジュールは、操作の容易さ、可用性、低コストにより需要が高いため、このようなシステムで最もよく使用されます。 同時に、測定値の精度は高いままであり、これはこのようなシステムでは非常に重要です。 このチップから、Arduino 上の距離計だけでなく、物体までの距離を感知して障害物を回避する本格的なロボットも組み立てることができます。

ただし、今日は Arduino の距離計を使用したオプションを見ていきます。これは、基本にまだあまり精通していないこの分野の初心者にとって理想的であるためです。 その後、発明を修正したい場合は、部屋の本格的な 3 次元マップをシミュレートするように教えることができます。これは、家具や建物を設計および構築する人にとって便利です。 しかし、最初にそれが一般的にどのように機能するかを検討する価値があります この装置また、Arduino でレーザー距離計を自分の手で作成する前に学ぶべき組み立ての基礎についても説明します。

Arduino 上の距離計は、イルカが自然界で物体までの距離を測定し、障害物を冷静に回避するために使用するソナーをベースにしています。 これは次を使用して行われます 物理的特性固形物に衝突すると反射してセンサーに戻ってくる超音波。

次に、メッセージが送信されてから波が戻ってくるまでの経過時間を計算し、それを 2 で割って、数式と音速を使用して、物体までの平均距離を計算するプログラム コードが機能します。

なぜ平均的なのでしょうか?

ポイントは誰でも 超音波センサーそれでも 10 分の 1 メートル単位で間違えられることはありますが、これは次のような事実によるものです。 さまざまな素材、環境やその他の変数は、音の表面からの動きや反射の速度に影響を与える可能性があります。 そしてこのプロジェクトでは、 理想的なシステム、現実世界では機能しません。

これらすべての要素を考慮に入れることはできますが、それでもすべての変数をプログラムすることはできません。そのため、Arduino 距離測定器はプロ用機器の測定値からはまだ遠く離れているため、私たちの仕事は専門機器の測定値にできるだけ近いデータを取得することです。正確さにおいて。

収集するときに事前に考慮する必要があるもう 1 つのニュアンスがあります。 超音波距離計 Arduino - すべての表面が測定に適しているわけではありません。 実際のところ、黒いシャツが電磁波を吸収するのと同じように、一部の素材は音を吸収したり、その動きを過度に歪めたりする可能性があります。

したがって、衝撃波の動きを妨げない滑らかで平らな表面でデバイスを使用するのが最善であり、機能も制限されます。 しかし、その低価格と使いやすさのおかげで、このセンサーは依然として非常に人気があります。

2. レッスンでは何が行われますか?

次の原理に従って動作する距離計を組み立てます。物体が 4 センチメートル未満の距離に近づくと赤色の LED が点灯し、そうでない場合は緑色の LED が点灯します。

hc-sr04 距離計を使用して距離測定の精度を確認する非常に単純な例です。 精度をチェックするための基礎となるのは、単純な定規です:)

3. ツール

システムの組み立てプロセスの途中で再び店舗に駆け込むことを避けるために、便利なツールをすべて事前に準備しておくことをお勧めします。 したがって、次のものが手元にあることを確認する必要があります。

  1. はんだごて。 良い選択調整可能な電力を備えたデバイスは、あらゆる状況に適応できるようになります。
  2. 指揮者。 当然のことながら、センサーを MK に接続する必要がありますが、標準のピンが常にこれに適しているとは限りません。
  3. USBポート用のアダプターです。 マイクロコントローラーにポートが内蔵されていない場合は、別の方法で PC に接続できることを確認してください。 結局のところ、追加のライブラリと新しいファームウェアをプロジェクトにロードする必要があります。
  4. はんだ、松脂、その他の小物(独立した作業スペースを含む)。
  5. チップ自体とMK、および必要に応じて将来のデバイスのハウジング。 最も経験豊富なエンジニアは、プロジェクトのシェルを 3D プリンターで印刷することを好みますが、大都市に住んでいる場合は、お金をかける必要はありません。 プリンターをレンタルしている会社を探すことができます。

それを理解する価値はある Arduino距離計非接触型の装置を指し、正確な測定が可能です。 しかし、それでも、プロ用のデバイスはまったく異なるテクノロジーを使用し、すべての素材に対して長時間の校正を経ているため、いずれの場合でもより優れていることを忘れてはなりません。 また、私たちのプロジェクトの距離測定範囲は 0.03 ~ 4 メートルと限られており、すべての場合に適しているわけではありません。

しかし、良いことに、デバイスの動作は電磁放射や電磁波の影響をまったく受けません。 太陽光エネルギー。 センサーキットにはすでに含まれています 必要な受信機 Arduino 超音波距離計を組み立てるときに便利な送信機も含まれています。

重要! このレッスンでは何もはんだ付けする必要はありません。 ブレッドボードとジャンパー線を使用します。 ただし、最終的に完全なデバイスを組み立てたい場合は、上で示したすべてのことが役に立ちます。

4. 付属品

まだ何もはんだ付けしないことにしたため、最適な部品セットは次のようになります。

  • 1 - Arduino UNO R3 (または同等のもの)
  • 1 - 超音波距離センサー HC-SR04
  • 1 - 赤色LED
  • 1 - 緑色の LED
  • 2 - 抵抗 560 オーム
  • 1- 開発ボード
  • 8 - ジャンパー線 (オス-オス)
  • 1 - 距離を測定するための定規

5. HC SR04センサーの接続

センサーの接続に問題はないはずです。 導体を使用して電源ピンをソースまたは MK に接続し、入力と出力をそれぞれ MK に直接接続するだけで十分です。 以下の図を使用して回路を組み立てます。

SR04 センサー自体には、考慮すべき次の特性があります。

  1. 電源電圧 – 5V。
  2. 電流15mAの回路で動作します。
  3. センサーを使用しない場合でも、センサーを受動的状態に維持するために最大 2 mA が必要です。
  4. モジュールの視野角は小さく、わずか 15 度です。
  5. センサー解像度 – 10分の3cm。
  6. しかし、測定角度はすでに快適な 30 度です。

センサーには 2.54 mm 規格に準拠した 4 つのピンもあります。 +5V の正電圧を供給する電源用の接点、信号入出力用のピン、および接地が含まれます。

最終バージョンでは、デバイスは次のようになります。

6. コード

私たちのデバイスのコードは以下のとおりです。 距離が 4 cm 未満になると赤色 LED が点灯することに注意してください。

/* Arduino HC-SR04 超音波距離センサー VCC を 5v に接続、GND を GND に接続 エコーを Arduino のピン 13 に接続、トリガーを Arduino のピン 12 に接続 赤色 LED のプラス側を Arduino のピン 11 に接続 緑色 LED のプラス側を Arduino のピン 10 に接続 */ #define trigPin 13 #define echoPin 12 #define LED 11 #define LED2 10 void setup() ( Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(led, OUTPUT); pinMode (led2, OUTPUT); ) void loop() ( 長い継続時間、距離;digitalWrite(trigPin, LOW);layMicroseconds(2);digitalWrite(trigPin, HIGH);layMicroseconds(10);digitalWrite(trigPin, LOW);duration =パルスイン(エコーピン、HIGH); 距離 = (期間/2) / 29.1;< 4) { // На этом этапе происходит вкл/выкл светодиода digitalWrite(led,HIGH); // когда загорается красный, зеленый обязан выключится digitalWrite(led2,LOW); } else { digitalWrite(led,LOW); digitalWrite(led2,HIGH); } if (distance >= 200 || 距離<= 0){ Serial.println("Out of range"); // Вне диапазона } else { Serial.print(distance); Serial.println(" cm"); // тут тоже можно указать " см" } delay(500); }

唯一覚えておくべきことは、すべての関数やライブラリが専門家によって書かれているわけではないということです。 それらの多くはあなたのような初心者によって作成されているため、センサーが機能していないか、間違ったデータを生成していると結論付ける前に、コードを確認してください。

しかし、将来自分で多くのものを書くためには、プログラミングと C++ の基礎を学んだ方がはるかに良いでしょう。

7. 起動とセットアップ

デバイスを初めて起動すると、次のことが起こります。

  1. パルスが Trig 入力に送信されます。
  2. センサー自体では、信号は 8 つのパルスに変換され、その周波数は 40 kHz に達し、それに応じてパルスを前方に送信します。
  3. 障害物に到達すると、パルスは反射されて受信機に戻り、マイクロコントローラーで瞬時に計算が行われ、すべての情報が出力デバイスに送信されます。 今回はPCコンソールですが、将来的にはLEDスクリーンにデータを表示するレッスンも行う予定です。

最初に開始するときは、測定の精度を比較できる定規を使用します。 デバイスの起動後、コンソールに表示されるデータを確認します。

このセンサーは非常に人気があり、センサーを使用する独自のソリューションを作成する人が増えています。

今回は超音波距離計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("========= ========);)

両方の例の結果:


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

物体までの距離を測定するには、コウモリのようなロケーターの原理で動作する超音波距離計 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;».

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

スケッチNo.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(LEDピン, 出力);
}
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°です。



サイトの新着情報

>

最も人気のある