Arduino UNOとHC-SR04超音波センサーで距離測定:Adafruit OLED表示
部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | |
| 超音波センサー HC-SR04 | 1 | |
| Adafruit 128×64 OLEDディスプレイ(SSD1306) | 1 | I2C接続 |
使用アプリとオンラインサービス
- Arduino IDE
プロジェクト概要

OLEDディスプレイ(SSD1306)の使い方
必要なライブラリと初期化:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4 // リセットピン(未使用)
Adafruit_SSD1306 display(OLED_RESET);
setup()内で初期化:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // I2Cアドレス0x3C(128x64)
display.clearDisplay();
loop()内で表示更新:
display.setCursor(22, 20);
display.setTextSize(3);
display.setTextColor(WHITE);
display.println(distance);
display.setCursor(85, 20);
display.setTextSize(3);
#ifdef CommonSenseMetricSystem
display.println("cm");
#endif
#ifdef ImperialNonsenseSystem
display.println("in");
#endif
display.display();
delay(500);
display.clearDisplay();
HC-SR04超音波距離センサーの使い方
HC-SR04はパルスバーストを送信し、超音波のエコーが戻るまでの時間を測定します。
トリガーパルス生成:
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pulseIn()でエコーパルスの長さを測定:
duration = pulseIn(echoPin, HIGH);
#ifdef CommonSenseMetricSystem
distance = (duration/2) / 29.1; // cm
#endif
#ifdef ImperialNonsenseSystem
distance = (duration/2) / 73.914; // inch
#endif
デバッグ用にシリアル出力も可能:
Serial.println(distance);
完全なスケッチ
// CODE BY Javier Muñoz Sáez, 05/11/2016
// questions to javimusama@gmail.com
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define CommonSenseMetricSystem
//#define ImperialNonsenseSystem
#define trigPin 13
#define echoPin 12
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
}
void loop() {
long duration, distance;
// トリガーパルス送信
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// エコー受信
duration = pulseIn(echoPin, HIGH);
// 距離計算
#ifdef CommonSenseMetricSystem
distance = (duration/2) / 29.1;
#endif
#ifdef ImperialNonsenseSystem
distance = (duration/2) / 73.914;
#endif
// OLED表示
display.setCursor(22, 20);
display.setTextSize(3);
display.setTextColor(WHITE);
display.println(distance);
display.setCursor(85, 20);
display.setTextSize(3);
#ifdef CommonSenseMetricSystem
display.println("cm");
#endif
#ifdef ImperialNonsenseSystem
display.println("in");
#endif
display.display();
delay(500);
display.clearDisplay();
Serial.println(distance); // デバッグ用
}
回路図

接続まとめ:
- HC-SR04 VCC → 5V、GND → GND、Trig → Pin 13、Echo → Pin 12
- OLED:VCC → 3.3V/5V、GND → GND、SDA → A4、SCL → A5(Arduino Unoの場合)
- 必要ライブラリ:Adafruit_GFX, Adafruit_SSD1306, Wire, SPI
製造プロセス
- Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
- Raspberry PiとDS18B20でマルチセンサー温度・光監視システムを構築
- Raspberry Piでセンサーとアクチュエータを制御:加速度計、サーボ、データストリーミング
- Raspberry Piと湿度センサーで作る自動エアロポニックスシステム
- 湿度センサーの検証とキャリブレーションで精密測定を実現
- Windows 10 IoT CoreとSHT15センサーで高精度な温湿度モニタリング
- Arduino Nanoと128x64 OLEDで実行するセルラーオートマトン「ライフゲーム」
- 距離センサーの仕組みと主要アプリケーション
- Arduinoセンサー:種類、応用、実世界プロジェクト
- 指紋センサー技術:動作原理、アプリケーション、Arduino統合
- 振動センサー:原理、種類、産業アプリケーション