Arduinoと超音波センサーを使用した距離測定
Arduinoを使用した超音波距離測定プロジェクト
超音波距離測定は、最近さまざまなアプリケーションで役立つツールです。測位、位置決め、寸法記入、選択、レベル測定、制御、プロファイリングなどのさまざまなアプリケーションで使用できます。出力値を使用していくつかの数学的計算を行うことにより、速度やその他のさまざまな物理的寸法を測定することもできます。このデバイスには、ロボット工学の分野でもアプリケーションがあります。
したがって、これらのアプリケーションを念頭に置いて、超音波センサーは、短い距離で物理的に接触することなく距離を測定するための優れたツールです。彼らはECHOの概念を使用して距離を測定します。このプロジェクトでは、HC-SR04センサーモジュールをArduinoに接続して距離を測定し、16×2LCDに距離を表示する方法を学習します。
- 関連記事:Arduino UNOを使用した可変電源–回路とコード
距離測定プロジェクトの回路図
インターフェースは本当にシンプルです。回路図に従う必要があります。そのため、まず、超音波センサーのTrigピンとEchoピンをArduino UNOのA4とA5に接続し、VCCとGNDをArduinoの5VとGNDに接続します。
次に、Arduinoに接続されている16×2LCDに距離を表示します。 RSピンとENピンをそれぞれArduinoのデジタルピン12とデジタルピン11に接続します。次に、LCDのD4-D7をArduinoのデジタルピン5-2に接続します。また、回路図に示すように、LCDのコントラストを制御するために10K電位差計を接続しました。
- 関連記事:Arduinoによるオブジェクト検出機能付き自動ドアベル
必要なコンポーネント
- HC-SR04超音波センサーモジュール
- Arduino UNO
- 16×2LCD
- ポテンショメータ
- ジャンパーケーブルと接続ワイヤー
超音波センサーモジュール
ここで使用されているセンサーモジュールは HC-SR04 、非接触超音波測定装置です。この小さなモジュールは、2cm〜400cmの範囲の距離を測定することができます。非常に正確なセンサーで、最大3mmまで測定できます。
センサーは超音波送信機と超音波受信機で構成されています。動作原理は本当に簡単です。まず、IOトリガーが10μsの高レベル信号を送信します。次に、センサーモジュールは40 kHzサイクルの超音波音を8回送信し、パルス信号が受信されたかどうかを検出します。また、信号がハイレベルで受信された場合、IOトリガーがハイのままである時間は、信号の送信から受信までの時間です。
距離=(高レベルの時間x空気中の音の速度(340M / s))/ 2
- 関連記事:Arduinoを使用した自動常夜灯
タイミング図
上記のように、モジュールはサウンドのECHOで動作します。モジュールのトリガーには、約10μsのパルスが送信されます。このプロセスの後、モジュールは8つの40 kHzサイクルの超音波音を送信し、その反射をチェックします。したがって、障害物がある場合、信号は障害物にぶつかり、受信機に戻ります。そして今、距離は上で議論された簡単な公式によって計算されます。この時間は障害物に到達してレシーバーに戻るまでの合計時間であり、障害物に到達するのにかかる時間は合計時間の半分であるため、2で割っています。このセンサーのタイミング図を以下に示します。
技術仕様
- 動作電圧:5V
- 動作電流:15mA
- 動作周波数:40Hz
- 測定角度:15°
- 範囲:2cmから400cm
超音波センサーHC-SR04のピン配列
- VCC:モジュールの電源(通常は+ 5V)
- Trig:モジュールをトリガーするために使用されます。
- エコー:o/pピンです。信号が送信機から障害物に到達し、その後受信機に戻る間、信号はハイのままです。
- GND:主回路のアースに接続されています。
上記のように、モジュールはサウンドのエコーの原理に基づいて動作します。したがって、モジュールをマイクロコントローラーに接続すると、最初にモジュールがTrigピンを介してトリガーされ、高レベルのパルスが10μs送信されます。その後、ECHOの受信を待ちます。マイクロコントローラは時間を計算できます。そして、距離は上記の式で計算されます。
- 関連記事:クローバー回路とは何ですか?設計と運用
Arduino UNO
Arduinoは、多くの小規模および大規模の組み込みプロジェクトで広く使用されているオープンソースのマイクロコントローラーです。このプロジェクトで使用されているArduinoはArduino-UNOです。このArduinoを使用する理由は、安価でインターフェースが簡単だからです。ボードには、14個のデジタルI/Oピンと6個のアナログピンがあります。マイクロコントローラはオープンソースであるため、どのように使用するかはユーザー次第です。必要に応じてボードとソフトウェアを変更できます。
- 関連記事:ツェナーダイオードを使用した単純な過電圧保護回路
16×2LCDモジュール
これらのモジュールは、静かで安価でマイクロコントローラーとのインターフェースが簡単なため、組み込みプロジェクトの多くの場所で一般的に使用されています。このタイプのディスプレイは、電卓やムスティメーターなどで見たことがあるかもしれません。ここで使用されているLCDモジュールは、16文字を連続して表示でき、2行あります。つまり、基本的には16列と2行です。表示される各文字は、5×8ピクセル(ピクセルマトリックス)で構成されています。
LCD全体の合計ピクセルを計算すると、5x8x16x2=1280ピクセルになります。これは多数です。 LCDに何かを表示するには、文字の位置も指定する必要があります。ですから、それは本当に難しいことです。そのため、適切な動作を管理するために、HD44780という名前のICが使用されます。このICは、マイクロコントローラーからデータとコマンドをフェッチし、必要な出力をLCDに印刷できるように、いくつかの処理を実行します。このICにより、LCDのインターフェースが非常に簡単になります。多くのプロジェクトでLCDを使用して、センサーまたは他のモジュールからの出力を表示する場合があります。 LCDモジュールの技術仕様のいくつかを見てみましょう。
- 関連記事:12Vから5Vへのコンバータ回路
- 動作電圧:4.7V〜5.3V
- 消費電流:バックライトを使用せずに1mA
- 各行に16文字の2行。
- 各文字は5×8ピクセルのマトリックスで構成されています。
- ディスプレイは英数字なので、数字だけでなく、アルファベットや特殊文字も表示できます。
- 緑/青のバックライトのバリエーションがあります。
LCDのピン構成を見てみましょう。
16×2LCDのピン配置と説明
ピン番号 | 名前 | 説明 |
1 | VSS | これはアースであり、回路のアースに接続されています。 |
2 | VDD | LCD用の電源(4.7V〜5.3V)、通常は5V |
3 | VE | このピンは、LCDのコントラストを操作するために使用されます。そのためには、ポテンショメータをこのピンに接続する必要があります。したがって、ポテンショメータのノブを調整することで、ディスプレイにさまざまなコントラストレベルを表示できます。 |
4 | RS | 登録選択。このピンは、コマンドレジスタとデータレジスタを切り替えるために使用されます。このピンはマイクロコントローラーに接続されています |
5 | RW | 読み取り/書き込み。このピンは、LCDの読み取りまたは書き込みに使用されます。通常、データの書き込みは根拠があります。 |
6 | EN | ピンを有効にします。このピンはマイクロコントローラーに接続されており、データを確認するために1または0が与えられます。 |
7 | データピン(0〜7) | これらのピンは、マイクロコントローラーからLCDに8ビットデータを送信するために使用されます。このLCDは4ビットモードでも使用できます。このために必要なのは、4つのデータピンを接続することだけです。 |
8 | A | アノード。このピンは、LCDバックライトのプラスピンです。このピンの使用は完全にオプションです。バックライトが必要な場合に使用します。技術仕様に示されているようにバックライトを使用しない場合、消費電流は非常に少なくなります。 |
9 | K | カソード。このピンはLCDバックライトのマイナスピンです。 |
LCDとArduinoの基本的なインターフェースを見てみましょう。簡単なコードを記述して、LCDにテキストを印刷します。まず、RSピンとENピンをArduinoのデジタルピン12と11に接続します。次に、LCDのD4-D7ピンをArduinoのデジタルピン5-2に接続します。次に、RW、VSS、Kをグランドに接続し、VDDとAを5VのArduinoに接続します。回路図に示すように、ポテンショメータをVEに接続して、LCDのコントラストを制御します。
- 関連記事:IC4017および555タイマーを使用した信号機制御電子プロジェクト
次に、コーディングの部分に進みます。まず、LCD用のライブラリLiquidCrystal.hを含める必要があります。
#include
次の2行で、Arduinoに接続されたLCDのデータピンの変数を定義し、それらをlcd関数の引数として渡して、 ArduinoからLCDへ。
const int rs =12、en =11、d4 =5、d5 =4、d6 =3、d7 =2;
LiquidCrystal lcd(rs、en、d4、d5、d6、d7);
セットアップ関数では、lcd.begin()関数を使用してLCDを初期化しました。使用しているLCDは16列2行で、LCD全体を使用しているため、16と2を通過しました。 LCDの一部のみが必要な場合は、それに応じて引数を渡すことができます。
次に、次の行に「Hello、World!」と出力します。印刷したいカスタマイズされたメッセージを印刷できますが、ディスプレイのサイズを超えるメッセージは次の行に印刷されることに注意してください。したがって、それに応じてメッセージを操作してください。
lcd.begin(16、2);
lcd.print( "Hello、World!");
ループ関数では、関数lcd.setCursor()を使用して、カーソルを位置(0,1)に設定しました。この後、メッセージが印刷されている時間を印刷します。
lcd.setCursor(0、1);
lcd.print(millis()/ 1000);
コードを書き込んだ後、コードをArduinoボードにアップロードすると、メッセージがディスプレイに印刷されます。接続されているポテンショメータのノブを回してコントラストを変えることができます。
- 関連記事:IC555タイマーを使用した場合とタイマーを使用しない場合のクラップスイッチ回路
超音波センサー距離測定用のArduinoのプログラミング
このプロジェクトのコーディング部分は非常に簡単です。 LCD用のヘッダーファイルをインクルードすることから始めます。
#include <LiquidCrystal.h>
次の2行では、ArduinoのピンA4(ピン18)とA5(ピン19)のマクロを定義して、ピンを使用する代わりにこれらの名前を使用できるようにしました。数字。
#define trig 18
#define echo 19
次の行では、Arduinoに接続されたLCDのさまざまなピンの変数を定義し、LCDを初期化できるようにそれらをlcd関数に渡しました。
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
これで、距離変数「d」と時間変数「t」を定義し、それらを0で初期化しました。
float t=0,d=0;
次に、セットアップ機能を実行します。最初の行では、lcd.begin()を使用してLCDを初期化し、次の2行では、トリガーピンとエコーピンのピンモードをそれぞれ出力と入力として定義しました。
void setup()
{
lcd.begin(16,2);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
}
次に、ループ関数について説明します。まず、関数lcd.clear()によってLCDをクリアして、ループを繰り返すたびに前の出力が現在の出力に影響を与えないようにしました。次の6行では、10μsの高レベルパルスを送信して超音波センサーを初期化します。そして、この後、センサーは自動的に40kHzサイクルの超音波音を8回送信し、その反射をチェックします。次の行では、センサーから時間を取得しました。次に、距離を計算しています。速度がメートル/秒であるため、10000で割ったので、センチメートルで変換する必要があります。
void loop()
{
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
t = pulseIn(echo, HIGH);
d = t * 0.0340 / 2;
d = t * 0.01330 / 2;
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(d);
lcd.print(" cm");
delay(1000);
}
- 関連記事:自動バスルームライトスイッチの回路図と操作
距離測定回路の動作
コードを記述したら、Arduinoにアップロードすると、準備が整います。次に、センサーの前に物体または手を持ってきます。 LCDで距離を確認してください。センサーからのオブジェクトの距離を変更し続けると、正確な距離が得られます。
10μsの高レベルパルスを送信してセンサーを初期化すると、センサーは8つの40kHz超音波サイクルを送信し、これらのサイクルが障害物によって反射されると、反射されて受信機。これで、センサーは、超音波信号を送信機から障害物へ、および障害物から受信機へ移動するのにかかる時間を示します。そのため、今回はセンサーと障害物の間の距離を計算するために使用します。
産業技術