ArduinoでHC-SR04を使って距離を計測する方法

  • URLをコピーしました!

※本ページはアフィリエイト広告を利用しています

Arduino Uno R4 Minimaを使用したプロジェクトでは、超音波センサーHC-SR04とLCD1602ディスプレイを組み合わせて、物体までの距離をリアルタイムで計測し表示する方法を学びます。

超音波センサーは、トリガーパルスを送信し、反射して戻ってくるまでの時間を計測することで距離を算出します。

このプロジェクトでは、I2Cインターフェースを使用してLCDに距離を表示するための手順を説明します。以下の内容に従って、センサーの接続方法やコードの詳細について理解を深めましょう。

本記事は製品をSunFounder様よりご提供頂き作成しています。

目次

SunFounder Ultimate Sensor Kit with Original Arduino Uno R4 Minimaとは?

SunFounder Ultimate Sensor Kit with Original Arduino Uno R4 Minimaは、電子工作に興味を持つ初心者からプロフェッショナルまで様々なアプリケーションの作成に必要なハードウェアがパッケージ化されたスターターキットです。

このキットには、マイコンボードArduino Uno R4 Minima本体をはじめ、様々なセンサーアクチュエータが含まれており、幅広いプロジェクトに対応できます。

キット内容

キットには以下のようなセンサーアクチュエータが多数含まれています。

Arduino Uno R4 Minima

Arduino UNO R4 Minimaは、Renesas製RA4M1マイクロコントローラを搭載した32ビットマイコンボードです。

このボードは、クロック速度48 MHz、256 kBのフラッシュメモリ、32 kBのSRAMを提供します。また、内蔵の12ビットDAC、CANバス、リアルタイムクロック(RTC)、HIDサポートを備え、USB-Cポートも搭載しています。

動作電圧は5Vですが、入力電圧範囲は6〜24Vに対応しています。従来のUNOボードと同じフォームファクタとピン配置を維持し、既存のシールドとの互換性を保ちつつ、高い性能を発揮します

センサーモジュール

キットには以下のようなセンサモジュールが含まれています。

  1. 超音波センサーモジュール(HC-SR04)
  2. ガス/煙センサーモジュール(MQ2)
  3. 炎センサーモジュール
  4. 振動センサーモジュール(SW-420)
  5. 加速度センサー & ジャイロスコープモジュール(MPU6050)
  6. フォトレジスタモジュール
  7. IR 赤外線障害物回避センサーモジュール
  8. 容量性土壌湿度モジュール
  9. 雨滴検出モジュール
  10. 温度と湿度センサーモジュール(DHT11)
  11. PIRモーションモジュール(HC-SR501)
  12. 温度、湿度、気圧センサー(BMP280)
  13. 脈拍酸素計および心拍数センサー(MAX30102)
  14. リアルタイムクロックモジュール(DS1302)
  15. タッチセンサモジュール
  16. 赤外線速度センサモジュール(LM393)
  17. 飛行時間(ToF)マイクロLiDAR距離センサ(VL53L0X)

アクチュエータ

キットには以下のようなアクチュエータモジュールが含まれています。

  1. サーボモータ(SG90)
  2. 遠心ポンプ
  3. TTモーター
  4. 5V リレーモジュール
  5. パッシブブザーモジュール

ユーザーインタフェース

キットには以下のようなUIモジュールが含まれています。

  1. ボタンモジュール
  2. ポテンショメータモジュール
  3. ジョイスティックモジュール
  4. I2C LCD 1602
  5. OLEDディスプレイモジュール
  6. 信号機モジュール
  7. RGB モジュール

通信モジュール

キットには以下のような通信モジュールが含まれています。

  1. ESP8266モジュール
  2. JDY-31 Bluetooth モジュール

日本国内で技適を取得していないモジュールは使用できませんのでご注意ください。

Ultimate Sensor Kit with Original Arduino Uno R4 Minimaの特徴
  • 多様なプロジェクトに対応: 多数のセンサーとモジュールを使用することで、環境モニタリング、ホームオートメーション、ロボット工学など、さまざまなプロジェクトに対応可能です。
  • 教育向けに最適: 詳細なプロジェクトガイドと豊富なドキュメントが提供されており、教育機関や個人の学習に最適です。(日本語ドキュメント完備)
  • 高い互換性: Arduino Uno R4 Minimaを中心に設計されているため、既存のArduinoプロジェクトやライブラリと高い互換性があります。

Ultimate Sensor Kit with Original Arduino Uno R4 Minimaの入手先

Ultimate Sensor Kit with Original Arduino Uno R4 MinimaはAmazonSunfounder公式サイトで入手可能です。

Amazon

Amazonの以下のページから購入することができます。

SunFounder公式サイト

SunFounder公式サイトから購入できます。(日本にも発送してもらえます)
公式サイトでは頻繁にセールが行われており安く入手できることがありますので、チェックしてみてください。

超音波センサーHC-SR04とは

超音波センサーHC-SR04は、物体までの距離を測定するための一般的なセンサーです。

このセンサーは、超音波を発信し、その音波が物体に反射して戻ってくるまでの時間を計測することで距離を算出します。

HC-SR04には4つのピンがあり、VCCとGNDは電源供給用、Trigはトリガー信号を送信するため、Echoは反射信号を受信するために使用されます。

計測は、トリガーピンに短い高電圧パルスを送ることで開始され、エコーピンで受信されたパルスの時間を基に距離を計算します。

計算式は、音速を用いて時間から距離を導出します。HC-SR04は高精度かつ手頃な価格で、多くのロボティクスやDIYプロジェクトで広く利用されています。

ハードウェアの接続

各ハードウェア間の接続は以下の通りです。

Arduino ピンHC-SR04LCD1602 (I2C)
5VVCCVCC
GNDGNDGND
デジタルピン 4Trig
デジタルピン 3Echo
A4 (SDA)SDA
A5 (SCL)SCL
ハードウェアの接続

作成したArduinoスケッチ

このプロジェクトは、Arduino Uno R4 Minimaを使用して超音波センサーHC-SR04で距離を計測し、I2C接続のLCD1602ディスプレイにリアルタイムで表示します。

セットアップでは、センサーとLCDの初期化およびシリアル通信を行い、ループ内で距離を測定して表示します。

距離計測は、トリガーパルスを送信し、エコーパルスの長さを測定することで行います。計測結果はLCDとシリアルモニタに出力されます。

コード解説

ライブラリのインクルード

  • このプロジェクトでは、I2C通信をサポートするためにWireライブラリを使用し、I2C接続のLCDディスプレイを制御するためにhd44780ライブラリを使用します。

ピン定義

  • 超音波センサーHC-SR04のエコーピンとトリガーピンを設定します。エコーピンはデジタルピン3、トリガーピンはデジタルピン4に接続されます。

LCDオブジェクトの宣言

  • hd44780_I2Cexpクラスのオブジェクトを作成し、I2Cインターフェースを使用するLCDディスプレイを制御します。

セットアップ関数

  • LCDディスプレイを16×2のサイズで初期化し、バックライトをオンにします。
  • 初期メッセージとして「Distance:」をLCDに表示します。
  • 超音波センサーのエコーピンを入力モード、トリガーピンを出力モードに設定します。
  • デバッグ用にシリアル通信を9600bpsで開始し、シリアルモニタに初期メッセージを表示します。

ループ関数

  • readDistance関数を呼び出して距離を計測し、その値を変数に格納します。
  • LCDの2行目の先頭にカーソルを設定し、前の表示をクリアします。
  • 計測した距離をLCDに表示し、単位「cm」を付加します。
  • 同じ距離の値をシリアルモニタにも出力します。
  • ループの繰り返しの前に400ミリ秒の遅延を挿入します。

距離計測関数

  • トリガーピンをLOWに設定し、2マイクロ秒待機します。
  • 次に、トリガーピンをHIGHに設定して10マイクロ秒のパルスを送信し、その後LOWに戻します。
  • エコーピンのパルス幅を測定し、その値を58.00で割ることで距離を計算します。この計算は、音速が340m/sであることを前提としています。

作成した全体のソースコード

#include <Wire.h>
#include <hd44780.h>  // メインのhd44780ヘッダー
#include <hd44780ioClass/hd44780_I2Cexp.h> // I2CエキスパンダーI/Oクラスのヘッダー

#define ECHO_PIN 3
#define TRIG_PIN 4

hd44780_I2Cexp lcd; // LCDオブジェクトを宣言: エキスパンダーチップの自動検出と自動設定

void setup() {
  // LCDを初期化
  lcd.begin(16, 2);
  lcd.backlight();
  lcd.print("Distance:");

  // HC-SR04センサーを初期化
  pinMode(ECHO_PIN, INPUT);
  pinMode(TRIG_PIN, OUTPUT);

  // デバッグ用シリアル通信を初期化
  Serial.begin(9600);
  Serial.println("Ultrasonic sensor:");
}

void loop() {
  float distance = readDistance();  // センサーデータを読み取って距離を取得する関数を呼び出し
  lcd.setCursor(0, 1);
  lcd.print("                "); // 前の値をクリア
  lcd.setCursor(0, 1);
  lcd.print(distance);
  lcd.print(" cm");

  // デバッグ用シリアル出力
  Serial.print(distance);           
  Serial.println(" cm");            

  delay(400);  // ループを繰り返す前に400ミリ秒待つ
}

// センサーデータを読み取って距離を計算する関数
float readDistance() {
  digitalWrite(TRIG_PIN, LOW);   // クリーンなパルスを確保するためにTRIGピンをLOWに設定
  delayMicroseconds(2);         // 2マイクロ秒待つ
  digitalWrite(TRIG_PIN, HIGH);  // TRIGピンをHIGHにして10マイクロ秒のパルスを送信
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);  // TRIGピンを再びLOWに設定

  // エコーピンのパルス幅を測定し、距離値を計算
  float distance = pulseIn(ECHO_PIN, HIGH) / 58.00;  // 式: (340m/s * 1us) / 2
  return distance;
}

実行結果

上記のスケッチをコンパイルしてArduinoに転送すると以下のように手の距離を計測して表示することができます。

まとめ

このプロジェクトを通じて、Arduino Uno R4 Minimaを用いた超音波距離計測の基本を理解できたと思います。

HC-SR04センサーのトリガーパルスとエコーパルスを使用して距離を計算し、I2C接続のLCD1602ディスプレイにリアルタイムで表示する方法を学びました。

今回の経験は、他のセンサーやディスプレイを使用するプロジェクトにも応用できるでしょう。Arduinoを活用したさらなるプロジェクトに挑戦し、電子工作のスキルを高めていってください。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次