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

Arduinoで超音波距離センサーを精密制御:ステップバイステップガイド

Arduinoを用いた超音波距離測定プロジェクト

超音波距離測定は、近年様々なアプリケーションで有用なツールです。位置決め、位置特定、寸法測定、選別、レベル測定、制御、プロファイリングなどに使用可能。出力値を用いた数学的計算により、速度やその他の物理量測定も可能。ロボティクス分野でも応用されています。

こうした用途を念頭に、超音波センサーは物理的接触なしで短距離を測定する優れたツールです。エコー(反射波)の概念を利用して距離を測定します。本プロジェクトでは、HC-SR04センサーモジュールをArduinoとインターフェース接続し、距離を16×2 LCDに表示する方法を学びます。

距離測定プロジェクトの回路図

Arduinoで超音波距離センサーを精密制御:ステップバイステップガイド

インターフェース接続は非常にシンプル。回路図に従ってください。まず、超音波センサーのTrigとEchoピンをArduino UNOのA4とA5に、VCCとGNDをArduinoの5VとGNDに接続。

距離を16×2 LCDに表示します。LCDのRSとENピンをArduinoのデジタルピン12と11にそれぞれ接続。LCDのD4-D7をArduinoのデジタルピン5-2に接続。LCDコントラスト調整用の10kΩポテンショメーターも回路図通り接続。

必要部品

超音波センサーモジュール

使用センサーモジュールはHC-SR04で、非接触型超音波測定デバイスです。この小型モジュールは2cm〜400cmの範囲で距離測定可能。精度は3mmまで対応する高精度センサーです。

センサーは超音波送信機と超音波受信機で構成されます。動作原理はシンプル。まず、IOトリガーが10μsのハイレベル信号を送信。次にセンサーモジュールが40kHzの超音波を8サイクル送信し、パルス信号が返ってくるか検知。信号を受信すると、IOトリガーがハイレベルを維持する時間(送信から受信までの時間)で距離を算出。

距離 = (ハイレベル時間 × 空気中の音速 (340m/s)) ÷ 2

タイミング図

前述の通り、モジュールは音のエコーで動作。モジュール起動のため、約10μsのパルスを送信。その後、モジュールが40kHzの超音波8サイクルを送信し、反射をチェック。障害物があれば信号が衝突して受信機へ戻ります。距離は上記式で計算。総時間は障害物までの往復時間なので、障害物までの到達時間は総時間の半分になるため2で割ります。このセンサーのタイミング図は以下の通り:Arduinoで超音波距離センサーを精密制御:ステップバイステップガイド

技術仕様
HC-SR04 超音波センサー ピンアウト

前述の通り、モジュールは音のエコー原理で動作。マイクロコントローラーと接続時、まずTrigピンでモジュールを起動し、10μsのハイレベルパルスを送信。その後、エコー受信を待機。マイクロコントローラーで時間を計測し、上記式で距離を算出。

Arduino UNO

Arduinoは、小規模から大規模な組み込みプロジェクトで広く使用されるオープンソースマイクロコントローラーです。本プロジェクトで使用するのはArduino UNO。安価でインターフェース接続が容易なため選択。ボードは14個のデジタルI/Oピンと6個のアナログピンを提供。マイクロコントローラーはオープンソースなので、ユーザーのニーズに合わせてボードとソフトウェアを変更可能。

16×2 LCDモジュール

これらのモジュールは、安価でマイクロコントローラーとのインターフェース接続が容易なため、組み込みプロジェクトで広く使用されています。電卓やマルチメーターなどで見かけるタイプのディスプレイです。本プロジェクトで使用するLCDモジュールは、1行16文字表示、2行構成。つまり16列2行。表示される各文字は5×8ピクセル(ピクセルマトリックス)で構成。

全LCDの総ピクセル数を計算すると、5×8×16×2=1,280ピクセルとなり、かなりの数です。LCDに何か表示するには文字位置も指定する必要があり、これは非常に面倒。そこで、HD44780というICを使用して適切な動作を管理します。このICはマイクロコントローラーからデータとコマンドを取得し、処理して所望の出力をLCDに印刷。LCDインターフェースを非常に容易にします。センサーや他モジュールからの出力表示のため、多くのプロジェクトでLCDを使用できます。LCDモジュールの技術仕様を見てみましょう。

LCDのピン構成を見てみましょう。

16×2 LCD ピンアウトと説明

ピン番号 名称 説明
1 VSS グラウンド、回路のグラウンドに接続
2 VDD LCD電源(4.7V〜5.3V)、通常5V
3 VE LCDコントラスト調整用ピン。ポテンショメーターを接続し、ツマミ調整でコントラスト変更可能
4 RS レジスタセレクト。コマンドレジスタとデータレジスタの切り替え用。マイクロコントローラーに接続
5 RW 読み書き制御。データ書き込み時は一般的にグラウンド接続
6 EN イネーブルピン。マイクロコントローラーに接続、1/0でデータ確認
7 データピン (0-7) マイクロコントローラーからLCDへ8ビットデータ送信用。4ビットモードでも使用可能(データピン4本のみ接続)
8 A アノード。LCDバックライト用正極ピン。使用は完全に任意。バックライト不要なら未接続で消費電流を大幅削減可能(仕様参照)
9 K カソード。LCDバックライト用負極ピン

ArduinoとLCDの基本インターフェースを見てみましょう。シンプルなコードでLCDにテキストを表示。まず、RSとENピンをArduinoのデジタルピン12と11に接続。D4-D7ピンをArduinoのデジタルピン5-2に接続。RW、VSS、Kをグラウンド、VDDとAをArduinoの5Vに接続。回路図通り、ポテンショメーターをVEに接続してコントラスト調整。

コーディング部分へ。まず、LCD用のLiquidCrystal.hライブラリをインクルード。

#include <LiquidCrystal.h>

次の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);

setup関数で、lcd.begin()関数でLCDを初期化。16と2を渡すのは、使用LCDが16列2行で全面使用するため。LCDの一部分のみ使用する場合は引数を適宜調整。

次行で'Hello, World!'を表示。任意のメッセージ表示可能だが、表示サイズ超過分は次行へ折り返すため注意。

lcd.begin(16, 2);

lcd.print("Hello, World!");

loop関数で、lcd.setCursor()関数でカーソル位置(0,1)に設定。その後、メッセージ表示経過時間を表示。

lcd.setCursor(0, 1);

lcd.print(millis() / 1000);

コード作成後、Arduinoボードへアップロードするとディスプレイにメッセージ表示。ポテンショメーターツマミ回転でコントラスト調整可能。

超音波センサー距離測定用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;

setup関数へ。最初にlcd.begin()でLCD初期化、次の2行でトリガーとエコーピンのピンモードを出力と入力に設定。

void setup() {
  lcd.begin(16,2);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

loop関数へ。まずlcd.clear()でLCDクリア(ループ毎の前回出力影響を防止)。次の6行で、超音波センサーを初期化:10μsのハイレベルパルス送信。その後、センサーが自動的に40kHz超音波8サイクル送信し反射チェック。次の行でセンサーから時間を取得。距離計算。速度がm/s単位なので、cm単位に変換するため10000で割る(※コード内では0.0340/2および0.01330/2で計算)。

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のハイレベルパルス送信でセンサー初期化すると、センサーが40kHz超音波8サイクルを送信。障害物で反射すれば受信機へ戻ります。センサーは、送信機から障害物、障害物から受信機までの超音波信号移動時間を出力。この時間を用いてセンサーと障害物の距離を計算します。

Arduinoで超音波距離センサーを精密制御:ステップバイステップガイド

産業技術

  1. Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
  2. Arduinoで超音波レベーション(浮遊)装置を自作:ステップバイステップガイド
  3. Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
  4. ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
  5. Arduino UNOで周波数とデューティサイクルを高精度測定
  6. Arduino NanoとRDA5807Mで作るコンパクトFMラジオ
  7. コンパクトなArduinoレーダーシステム – HC-SR04超音波センサー & 1.8インチST7735ディスプレイ搭載
  8. Arduino UNOで作る静電容量式タッチLEDスイッチ - 簡単DIY
  9. 距離センサーの仕組みと主要アプリケーション
  10. Arduinoセンサー:種類、応用、実世界プロジェクト
  11. PIRセンサー回路の仕組み:設計、動作、実世界の応用