工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

超音波センサーHC-SR04およびArduino–完全ガイド

このチュートリアルでは、HC-SR04超音波センサーの方法を学習します 動作とArduinoでの使用方法 。これは、Arduinoを使用して距離を測定し、障害物回避ロボットを作成するための最も一般的なセンサーです。

私はすでにいくつかのクールなArduinoプロジェクトを構築するためにHC-SR04超音波センサーを使用しました、そしてあなたはここでそれらをチェックすることができます:

  • Arduinoレーダー(ソナー)
  • 範囲測定器とデジタル水準器
  • セキュリティおよび警報システムプロジェクト
  • ArduinoAntヘキサポッドロボット

次のビデオを見るか、以下のチュートリアルを読むことができます。仕様、ピン配置、配線図、コードなど、センサーに関する追加情報と例が含まれています。

HC-SR04ハードウェアの概要

HC-SR04は、2cmから400cm(約1インチから13フィート)の範囲の手頃な価格で使いやすい距離測定センサーです。

センサーは2つの超音波トランスデューサーで構成されています。 1つは超音波パルスを出力する送信機で、もう1つは反射波を聞く受信機です。これは基本的に、潜水艦で水中物体を検出するために使用されるSONARです。

主な仕様は次のとおりです。

動作電圧 5V DC
現在の運用 15mA
動作周波数 40KHz
最小範囲 2cm/1インチ
最大範囲 400cm/13フィート
精度 3mm
角度の測定 <15°
ディメンション 45 x 20 x 15mm

HC-SR04超音波センサーのピン配列

センサーのピン配置は次のとおりです。

センサーには4つのピンがあります。 VCC およびGND 5Vに移動します およびGND Arduinoのピン、および Trig およびエコー 任意のデジタルArduinoピンに移動します。 Trigを使用する ピン送信機から超音波を送信し、 Echo 反射信号をリッスンするピン。

HC-SR04超音波距離センサーはどのように機能しますか?

40 000 Hzで超音波を放射し、空中を移動します。その経路に物体や障害物がある場合は、モジュールに跳ね返ります。移動時間と音速を考慮して、距離を計算できます。

超音波を生成するには、Trigピンを10 µsの間High状態に設定する必要があります。それは音速で移動する8サイクルの超音波バーストを送信します。エコーピンは、その8サイクルの超音波バーストが送信された直後にハイになり、その波がオブジェクトから反射されるのをリッスンまたは待機し始めます。

オブジェクトまたは反射パルスがない場合、エコーピンは38ms後にタイムアウトになり、ロー状態に戻ります。

反射パルスを受信すると、エコーピンはそれらの38msよりも早くダウンします。エコーピンがHIGHであった時間に応じて、音波が移動した距離、つまりセンサーから物体までの距離を判断できます。

そのために、距離を計算するために次の基本的な式を使用しています。

距離=速度x時間

私たちは実際に速度と時間の両方の値を知っています。時間はエコーピンがHIGHだった時間で、速度は音速340m/sです。実行する必要のある追加の手順が1つあります。これは、最終結果を2で除算します。これは、音波がオブジェクトに到達して跳ね返るのに必要な時間を測定しているためです。

エコーピンが2msの間HIGHだったとしましょう。距離の結果をcmで取得したい場合は、音速の値を340m/sから34cm/msに変換できます。

距離=(速度x時間)/ 2 =(34cm / ms x 1.5ms)/ 2=25.5cm。

したがって、エコーピンが2msの間HIGHであった場合( pulseIn()を使用して測定します 機能)、センサーから物体までの距離は34cmです。

HC-SR04超音波センサーをArduinoに接続する方法

HC-SR04センサーをArduinoボードに接続する方法は次のとおりです。

モジュールのグラウンドピンとVCCピンはそれぞれArduinoボードのグラウンドピンと5ボルトピンに接続し、トリガーピンとエコーピンはArduinoボードのデジタルI/Oピンに接続する必要があります。

このチュートリアルに必要なこれらのコンポーネントは、以下のいずれかのサイトから入手できます。

  • 超音波センサーHC-SR04…………
  • Arduinoボード……………………………
  • ブレッドボードとジャンパー線………

HC-SR04超音波センサーArduinoコード

HC-SR04超音波センサーとArduinoを使用して距離を測定するためのコードは次のとおりです。



/*
  Ultrasonic Sensor HC-SR04 and Arduino Tutorial

  by Dejan Nedelkovski,
  www.HowToMechatronics.com

*/
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;
void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600); // Starts the serial communication
}
void loop() {
  // Clears the trigPin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Reads the echoPin, returns the sound wave travel time in microseconds
  duration = pulseIn(echoPin, HIGH);
  // Calculating the distance
  distance = duration * 0.034 / 2;
  // Prints the distance on the Serial Monitor
  Serial.print("Distance: ");
  Serial.println(distance);
}Code language: Arduino (arduino)

コードの説明

まず、TrigピンとEchoピンを定義する必要があります。この場合、それらはArduinoボードのピン番号9と10であり、trigPinとechoPinという名前が付けられています。次に、センサーから取得する移動時間の「duration」という名前のLong変数と、距離の整数変数が必要です。

// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;

// defines variables
long duration;
int distance;Code language: Arduino (arduino)

セットアップでは、trigPinを出力として、echoPinを入力として定義し、シリアルモニターに結果を表示するためのシリアル通信を開始する必要があります。

void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600); // Starts the serial communication
}Code language: Arduino (arduino)

最初のループでは、trigPinがクリアされていることを確認する必要があるため、そのピンをわずか2 µsの間LOW状態に設定する必要があります。次に、超音波を生成するために、trigPinをHIGH状態に10 µs設定する必要があります。

// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);Code language: Arduino (arduino)

pulseIn()の使用 関数は、移動時間を読み取り、その値を変数「duration」に入れます。この関数には2つのパラメーターがあります。1つ目はエコーピンの名前で、2つ目は読み取り中のパルスの状態(HighまたはLow)です。

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);Code language: Arduino (arduino)

この場合、送信機から8サイクルの超音波バーストを送信した後、HC-SR04センサーがエコーピンをHighに設定するため、これをHIGHに設定する必要があります。これにより実際にタイミングが開始され、反射された音波を受信すると、エコーピンがLowになり、タイミングが停止します。最後に、関数はマイクロ秒単位でパルスの長さを返します。

距離を取得するには、この式を前に説明したように、期間に0.034を掛け、2で割ります。

// Calculating the distance
distance= duration*0.034/2;

// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);Code language: Arduino (arduino)

最後に、距離の値をシリアルモニターに出力します。

Arduino超音波センサーとLCDディスプレイの例

Arduinoで超音波センサーを使用して結果をLCDに表示する別の例を次に示します。

超音波センサーとLDCは次のように接続できます:

距離を測定するコードは、基本的な例とほとんど同じです。ここでは、結果をシリアルモニターに印刷する代わりに、LCDに印刷します。 LCDの使用方法とArduinoとの接続方法の詳細が必要な場合は、私の特定のチュートリアルを確認してください。

/*
  Ultrasonic Sensor HC-SR04 and Arduino Tutorial

  by Dejan Nedelkovski,
  www.HowToMechatronics.com

*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceCm, distanceInch;
void setup() {
  lcd.begin(16, 2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distanceCm = duration * 0.034 / 2;
  distanceInch = duration * 0.0133 / 2;
  lcd.setCursor(0, 0); // Sets the location at which subsequent text written to the LCD will be displayed
  lcd.print("Distance: "); // Prints string "Distance" on the LCD
  lcd.print(distanceCm); // Prints the distance value from the sensor
  lcd.print(" cm");
  delay(10);
  lcd.setCursor(0, 1);
  lcd.print("Distance: ");
  lcd.print(distanceInch);
  lcd.print(" inch");
  delay(10);
}Code language: Arduino (arduino)

NewPingライブラリを使用したサンプルコード

実際には、HC-SR04超音波センサーを使用して距離を測定するようにArduinoをプログラムするためのより簡単で優れた方法があり、それはNewPingライブラリを使用しています。

前に説明したコードでは、センサーを手動でトリガーし、受信信号のパルス幅を測定しました。次に、それらの結果に従って、それに基づいて距離を計算しました。 NewPingライブラリを使用すると、1行のコードで距離を取得できます。

コードの例を次に示します。

#include <NewPing.h>

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 400 // Maximum distance we want to measure (in centimeters).


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(50);                    // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.

  int distance = sonar.ping_cm(); // Send ping, get distance in cm and print result (0 = outside set distance range)

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");
}Code language: Arduino (arduino)

前の例よりもはるかに簡単です。 ping_cm()の呼び出しを使用するだけです NewPingソナーオブジェクトのメソッドで、距離をセンチメートルで取得します。インチ単位の距離が必要な場合は、 ping_in()を使用できます。 代わりに。

ライブラリには、他にもいくつかの便利な機能があります。たとえば、 ping_median(iterations [、max_cm_distance]) メソッドでは、中央値、またはいくつかの測定値からの中間値を返すため、より正確な結果を得ることができます。 反復を使用 パラメータは、プログラムが中間値を計算するために取るサンプルの数を設定します。デフォルト値は5回の反復です。 ping_median() 受信したパルス幅をマイクロ秒単位で返します。

それでも、詳細と詳細については、NewPingwikiページを確認してください。

DHT22温度センサーによるHC-SR04距離センサーの精度の向上

HC-SR04センサーはかなり正確ですが、動作は音速に依存するため、より正確な結果を得るには、気温も考慮する必要があります。気温が変化すると、音速が大幅に変化する可能性があります。たとえば、20°Cでは音速は約340m / sですが、-20°Cでは音速は約315m/sです。相対湿度も速度に影響します。

したがって、このセンサーを使用してさまざまな温度で距離を測定する場合は、温度補正を実装する必要があります。これは、次の式で実行できます。

速度=331.4+0.6x温度+0.0124x相対湿度

次に例を示します:

HC-SR04超音波センサーに沿って、DHT11 / DHT22センサーを使用して環境の温度と湿度を測定し、それに応じて音速値を調整します。

Arduinoコード

/*
  Example made by Dejan, How To Mechatronics,
  https://howtomechatronics.com/

*/

#include <NewPing.h>  // https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home
#include "dht.h"      // https://github.com/RobTillaart/DHTlib

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 400
#define dht22 5 // DHT22 temperature and humidity sensor

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
dht DHT; // Creats a DHT object

int readDHT, temp, hum;
float speedOfSound, distance, duration;

void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(100);

  // Read temperature and humidity from DHT22 sensor
  readDHT = DHT.read22(dht22); // Reads the data from the sensor
  temp = DHT.temperature; // Gets the values of the temperature
  hum = DHT.humidity; // Gets the values of the humidity


  speedOfSound = 331.4 + (0.6 * temp) + (0.0124 * hum); // Calculate speed of sound in m/s

  duration = sonar.ping_median(10); // 10 interations - returns duration in microseconds
  duration = duration/1000000; // Convert mircroseconds to seconds
  distance = (speedOfSound * duration)/2;
  distance = distance * 100; // meters to centimeters

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");

}Code language: Arduino (arduino)

したがって、最初にDHT22センサーから温度と湿度の値を読み取り、次にそれらの値を使用して音速を計算します。次に、音波がマイクロ秒単位で移動する時間を取得し、それらを秒単位に変換して、センサーからオブジェクトまでの距離をセンチメートル単位で計算します。

HC-SR04の寸法と3Dモデル

次のプロジェクトで必要になる場合に備えて、HC-SR04超音波センサーの3Dモデルを作成しました。以下のリンクからダウンロードできます。

この3Dモデルは、Thangsで見つけてダウンロードできます。

HC-SR04センサーの寸法は次のとおりです。

メーカーによって多少異なる場合がありますのでご注意ください。

結論

そのため、ArduinoでHC-SR04超音波センサーを使用する際に知っておく必要のあるほとんどすべてをカバーしました。これは、非接触距離の測定、存在や物体の検出、何かのレベルや位置などが必要な多くのDIY電子機器プロジェクトに最適なセンサーです。

投稿の冒頭で、このセンサーを使用して行ったプロジェクトについてはすでに説明しました。 HC-SR04センサーとArduinoを使用したその他のクールなプロジェクトは次のとおりです。

  • タッチレス自動モーションセンサーのゴミ箱
  • ハンドジェスチャスマートライトコントロール
  • ミニアコースティックレビテーション
  • 障害物回避ロボット

このチュートリアルを楽しんで、何か新しいことを学んだことを願っています。以下のコメントセクションでお気軽に質問してください。30以上のArduinoプロジェクトの完全なコレクションをチェックすることを忘れないでください。


製造プロセス

  1. HC-SR04超音波センサーとは:動作とその応用
  2. Arduinoセンサー–タイプとアプリケーション
  3. 超音波センサー(HC-SR04)+ Raspberry Pi
  4. RaspberryPiのHC-SR04超音波距離センサー
  5. LEDとピエゾスピーカーを備えたDHT11センサー
  6. FlickMote
  7. IOT-ESP8266、Arduino、超音波センサーを使用したスマートジャー
  8. Arduinoを搭載したミニレーダー
  9. Arduinoを備えた超音波距離検出器
  10. アラーム、LCD、温度を備えた超音波センサー
  11. MKR1000温度および湿度センサー