はじめに
ESP32は小型のIoTデバイスで、価格が安く(約500円~)、WiFiやBluetoothなどの通信機能が利用でき、GPIOピンを使用してセンサー類と共に活用できます。Avintonでは、屋外に設置したグリーンハウス内のIoTプロジェクトにて、ESP32のテストと運用を行ってきました。
実際の例として、ESP32と超音波センサー HC-SR04 を利用し、屋外の水タンクの残り水位をモニタリングしました。
Prometheus、Grafanaと接続し、水位をリアルタイムで監視できます。
このページではESP32と超音波センサーを利用して、物体の距離を計測して表示するシステムを作成します。
超音波センサーの仕組みと距離の算出方法
HC-SR04は超音波波を用いて物体までの距離を測定するセンサーです。
HC-SR04から送信された超音波は、物体に衝突すると反射し、HC-SR04の受信センサーが反応します。その間の時間を計測することで超音波の往復時間 d (μs)
を求めます。
音速は20度のとき340m/sであることから、これをcmとμs単位に変換します。
- 340m = 340 * 100 cm
- 1s = 100000 μs
1 |
音速 340 (cm/μs) = 340 * 100 (cm) / 100000 (μs) = 0.034 (cm/μs) |
d (μs)
と音速を乗算することで超音波の往復距離を算出できます。 また、往復時間を2で割ることで片道の時間、つまり物体までの距離を算出できます。
1 |
物体までの距離 D (cm) = d (μs) x 0.034 (cm/μs) / 2 |
上記の計算式を用いてプログラミングを行います。
ハードウェア構成
以下の手順はこちらのWebサイトを参考に作成しています。
1.以下のパーツを準備します。
- ESP32
- 超音波センサー: HC-SR04
- ジャンパーワイヤ: 4本
- USB Type C ケーブル: ESP32の電源用、またコードアップロード時のPCとの接続用
ESP32とHC-SR04を接続します。使用するデバイスに合わせてピンの接続位置を調節してください。
- GND: GND
- Trig: D4
- Echo: D16
- VCC: 3V3
ソフトウェア構成
1.今回は開発環境にVSCode + Platform IOを使用します。セットアップ方法については、こちらの記事を確認してください。
Arduino IDEでもほぼ同じ手順とコードで実行できます。お好みの開発環境でお試しください。
2.Platform IOで新規のプロジェクトを開きます。
以下のコードをmain.cpp
に貼り付けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#include <Arduino.h> const int trigPin = 4; const int echoPin = 16; // 音波の速度(音速)の値を定義します // 340m/s = 340m / 1s = 340 x 100 cm / 1000000 μs = 0.034cm/μs #define SOUND_SPEED 0.034 long duration; float distanceCm; void setup() { Serial.begin(115200); // pinを初期化します pinMode(trigPin, OUTPUT); // trigPinが超音波を出力先です pinMode(echoPin, INPUT); // echoPinが超音波の入力先(つまり受信側)です }; void loop() { // trigPinをオフ(LOW)にします digitalWrite(trigPin, LOW); delayMicroseconds(2); // trigPinを10μs間オン(HIGH)にします digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // echoPinを読み取り、音波の発信から受信までの往復時間をμsで取得します // pulseIn関数がHIGHのパルスを受信して、その長さをμsで返します duration = pulseIn(echoPin, HIGH); // 距離を計算します distanceCm = duration * SOUND_SPEED/2; Serial.println(distanceCm); // 1秒ごとに値を出力します delay(1000); }; |
3.ESP32と開発用のPCを接続します。
- BOARDS: ESP32-WROOM-DA Module
- PORTS: COM4 (接続したPCのポートによって異なります)
4.コードをESP32ボードにデプロイします。シリアルコンソールで以下のように距離が出力されます。
センサーに手を近づけてみたり、物体を置いたりすると距離が変化します。それらしい距離の値を表示できています。
まとめ
ESP32と超音波センサーHC-SR04を使用して、距離センサーを作成しました。ESP32を利用することで、手軽にIoTプロジェクトを開始できます。また、超音波センサーでは音の速度から物体の距離を算出できます。水位センサーや物体との距離を計測するシステムなどの開発に応用できます。