ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
必要な部品と用品
| Arduino UNO | ×1 |
| HC-SR04 超音波距離センサー | ×1 |
| ブレッドボード(汎用) | ×1 |
| 1kΩ 抵抗 | ×4 |
| ESP8266 ESP-01 モジュール | ×1 |
| ジャンパーワイヤー(汎用) | ×15 |
アプリとオンラインサービス
- Arduino IDE
プロジェクトについて
キッチンのジャー(瓶)の中身量を超音波センサーで測定し、ESP8266経由でWi-Fi送信、ローカルサーバー(PHP+MySQL)に蓄積・Web表示するIoTプロトタイプです。お母さんの秘密のレシピ材料の残量をリアルタイムで把握できます。
ステップ1: 構成要素
ハードウェア: Arduino UNO、HC-SR04、空きジャー(透明推奨)、ブレッドボード、ESP-01、ジャンパーワイヤー、1kΩ抵抗×2(ESP-01のTX/RXレベルシフト用)、USBケーブル。
ソフトウェア: Arduino IDE、テキストエディタ(Notepad++等)、Apacheサーバー(XAMPP等)、MySQLデータベース。
ステップ2: 配線
- 超音波センサー: VCC→5V, Trig→D9, Echo→D10, GND→GND
- ESP-01: VCC/CH_PD→3.3V(Arduino 3.3Vピンまたはレギュレーター)、GND→GND、TX→Arduino D2(SoftwareSerial RX)、RX→1kΩ/2kΩ分圧→Arduino D3(SoftwareSerial TX)。
※ ESP-01は3.3V動作、Arduino UNOは5Vロジックのため、RXラインは必ず分圧して3.3Vレベルにすること。
ステップ3: Arduinoスケッチ(要点)
#include <SoftwareSerial.h>
SoftwareSerial esp(2, 3); // RX, TX
long duration;
int distance;
void setup() {
Serial.begin(9600);
esp.begin(9600);
// ATコマンドでESP初期化
sendAT("AT", 3000);
sendAT("AT+CIOBAUD=9600", 1000);
sendAT("AT+CWMODE=1", 2000); // Stationモード
sendAT("AT+CWJAP=\"SSID\",\"PASSWORD\"", 10000); // Wi-Fi接続
pinMode(9, OUTPUT); // Trig
pinMode(10, INPUT); // Echo
}
void loop() {
// 超音波測定
digitalWrite(9, LOW); delayMicroseconds(2);
digitalWrite(9, HIGH); delayMicroseconds(10);
digitalWrite(9, LOW);
duration = pulseIn(10, HIGH);
distance = duration * 0.034 / 2; // cm
// ESP経由でHTTP GET送信
sendAT("AT+CIPSTART=\"TCP\",\"YOUR_SERVER_IP\",80", 5000);
sendAT("AT+CIPSEND=80", 2000);
esp.print("GET /your_php_script.php?distance=");
esp.print(distance);
esp.println(" HTTP/1.1\r\nHost: YOUR_SERVER_IP\r\n\r\n");
delay(5000); // 送信間隔
}
void sendAT(String cmd, int wait) {
esp.println(cmd);
long t = millis();
while (millis() - t < wait) {
if (esp.available()) Serial.write(esp.read());
}
}
ステップ4: サーバー側 - データベース挿入PHP
<?php
// insert.php
$conn = new mysqli("localhost", "user", "pass", "smartjar");
$dist = $_GET['distance'];
$stmt = $conn->prepare("INSERT INTO measurements (distance_cm, created_at) VALUES (?, NOW())");
$stmt->bind_param("i", $dist);
$stmt->execute();
$stmt->close();
$conn->close();
?>
ステップ5: サーバー側 - データ表示PHP
<?php
// display.php
$conn = new mysqli("localhost", "user", "pass", "smartjar");
$result = $conn->query("SELECT * FROM measurements ORDER BY created_at DESC LIMIT 20");
echo "<table><tr><th>Time</th><th>Distance (cm)</th></tr>";
while ($row = $result->fetch_assoc()) {
echo "<tr><td>{$row['created_at']}</td><td>{$row['distance_cm']}</td></tr>";
}
echo "</table>";
$conn->close();
?>
ステップ6: データベース設定 (phpMyAdmin)
CREATE DATABASE smartjar;
USE smartjar;
CREATE TABLE measurements (
id INT AUTO_INCREMENT PRIMARY KEY,
distance_cm INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ステップ7: テストとトラブルシューティング
- ボーレートは全て9600bpsで統一(ESP-01出荷時デフォルトが異なる場合は
AT+UART_DEF=9600,8,1,0,0で変更)。 - ESP-01の電源はArduino 3.3Vピンでは電流不足の可能性大。別途3.3Vレギュレーター(AMS1117-3.3等)推奨。
- ATコマンド応答をシリアルモニターで確認し、Wi-Fi接続成功(
WIFI CONNECTED/WIFI GOT IP)を確認してから本番ループへ。 - 将来的にはAndroidアプリやWebグラフUIでの可視化も予定。
GitHubリポジトリ
完全なコードとREADME: https://github.com/santynaren/iotsmartjar
回路図
ブレッドボード配線図を参照。ESP-01のレベルシフト(1k/2kΩ分圧)と電源安定化(コンデンサ追加推奨)が重要ポイント。
製造プロセス
- Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
- Windows 10 IoT CoreとSHT15センサーで高精度な温湿度モニタリング
- DHT11温湿度センサーで作る温度アラート – LEDとピエゾブザーで視覚/聴覚通知
- Arduinoで超音波レベーション(浮遊)装置を自作:ステップバイステップガイド
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
- DFRobot静電容量式指紋センサーをArduino/ESP8266で使う – 登録・認証・削除の完全ガイド
- 1Sheeldで作るスマートホーム自動化&セキュリティシステム
- Arduino超音波センサーとProcessingで作るリアルタイム距離測定ソナー
- スマートなArduino制御ロボットアームの製作:簡単DIYチュートリアル
- ArduinoとESP8266で作るWi-Fi対応スマートドアロック — スマホで解錠