Arduino衝突警告システム – 超音波センサーで視覚・聴覚アラート
必要な部品と材料
| Arduino UNO × 1 |
| HR-SC04 (HC-SR04互換) 超音波距離センサー × 1 |
| LED (赤) × 1 (危険ゾーン用) |
| LED (青) × 1 (注意ゾーン用) |
| ピエゾブザー (アクティブ/パッシブ) × 1 |
| 抵抗 10kΩ × 2 (LED電流制限用、実際は 220〜330Ω推奨) |
| ジャンパーワイヤー (各種) × 1式 |
必要な工具・ソフトウェア
- PC (Arduino IDE インストール済み)
- USBケーブル (Arduino書き込み用)
プロジェクト概要
自動車の衝突被害軽減ブレーキ (AEB) システムの原理を学ぶための、Arduinoベースの衝突警告システムです。超音波センサーで前方障害物までの距離を測定し、3段階のゾーンに分けて視覚 (LED) と聴覚 (ブザー) で警告します。ハードウェア接続からプログラムまでステップバイステップで解説しています。
3段階警告ゾーン
| ゾーン | 距離 | 警告内容 | ドライバーアクション |
|---|---|---|---|
| ゾーン1: 安全 | > 50 cm | なし | 通常走行 |
| ゾーン2: 注意 | 20〜50 cm | 青LED点灯 (視覚警告) | 注意深く運転、減速準備 |
| ゾーン3: 危険 | ≤ 20 cm | 赤LED点灯 + ブザー断続音 (視覚+聴覚) | 即座に回避操作 (ブレーキ/ハンドル) |
ハードウェア接続
| コンポーネント | ピン | Arduinoピン |
|---|---|---|
| HC-SR04 VCC | VCC | 5V |
| HC-SR04 GND | GND | GND |
| HC-SR04 Trig | Trig | D7 |
| HC-SR04 Echo | Echo | D4 |
| ブザー + | - | D10 (PWM) |
| ブザー - | - | GND |
| 赤LED アノード | - | D2 (10kΩ経由 → GND) |
| 青LED アノード | - | D13 (オンボードLED兼用、10kΩ経由 → GND) |
注意: LED電流制限抵抗
記事では 10kΩ とされていますが、これは高すぎます (約0.3mAしか流れず暗い)。一般的なLED (VF≈2V, IF=20mA) には 220Ω〜330Ω (5V駆動時) を推奨します。オンボードLED (D13) は基板上に制限抵抗内蔵済みです。
Arduino IDE 設定
- ツール → ボード → Arduino UNO
- ツール → シリアルポート → 対応するCOMポート選択
- シリアルモニター (9600bps) で距離デバッグ確認可能
スケッチ (完全版)
//// Collision Warning System ////
// Year 2017
// Vijendra Kumar
const int trigPin = 7;
const int echoPin = 4;
const int buzzPin = 10;
const int blueLedPin = 13; // 注意ゾーン
const int redLedPin = 2; // 危険ゾーン
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(blueLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
pinMode(buzzPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// 超音波パルス送信 (10μs)
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Echoパルス幅測定 (μs)
duration = pulseIn(echoPin, HIGH);
// 距離計算: 音速 340m/s = 0.034cm/μs、往復なので /2
distance = duration * 0.034 / 2;
// シリアルモニター出力 (デバッグ用)
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// ゾーン2: 20-50cm → 青LED点灯
if (distance <= 50 && distance >= 20) {
digitalWrite(blueLedPin, HIGH);
} else {
digitalWrite(blueLedPin, LOW);
}
// ゾーン3: 20cm以下 → 赤LED + ブザー断続音
if (distance <= 20) {
digitalWrite(redLedPin, HIGH);
// ブザー: 2kHz, 100ms ON / 100ms OFF を5回
for (int i = 0; i < 5; i++) {
tone(buzzPin, 2000);
delay(100);
noTone(buzzPin);
delay(100);
}
} else {
digitalWrite(redLedPin, LOW);
noTone(buzzPin);
}
delay(100); // 測定間隔
}
動作原理の詳細
超音波距離測定
- Trigピンに 10μs 以上の HIGH パルスを出力
- センサー内部で 40kHz 超音波バースト (8サイクル) を自動送信
- 反射波を受信すると Echoピンが HIGH になる
- Echoパルス幅 = 音波の往復時間 (μs)
- 距離 (cm) = 時間 (μs) × 0.034 / 2
測定精度と限界
- 測定範囲: 2cm 〜 400cm (理論値)
- 分解能: 約 0.3cm
- 指向角: 約 15° (コーン状)
- 障害物の材質・形状・角度で反射率変動 → 誤差要因
- 温度補正: 音速は温度依存 (v = 331.5 + 0.6×T m/s)。高精度化には温度センサー併用
テスト手順
- 配線完了後、スケッチ書き込み
- シリアルモニター開き、距離値が正常に変化するか確認
- 手や板をセンサー前で近づけ/離し、ゾーン切り替わりを確認
- ゾーン2で青LED点灯、ゾーン3で赤LED+ブザー動作を確認
改良・拡張アイデア
- 距離表示: LCD/OLEDに実距離数値表示
- 段階的ブザー: 距離に応じて音頻度/音程変化 (近いほど速く/高く)
- サーボ連動: センサーを左右にスイープして広角監視
- ログ記録: SDカードに距離・時刻記録
- 無線化: ESP8266/ESP32でスマホ通知
- 実車両グレード: 12V系電源、防水センサー (JSN-SR04T等)、CANバス連携
- 複数センサー融合: 前後左右 + カメラ (OpenCV) で完全周囲監視
回路図・ピン配置図
プロジェクトページの Schematics および Custom parts セクションを参照
製造プロセス
- JavaとReactive Blocksでモーション検知アラームシステム - Raspberry Piに展開しSMS送信
- Python連携で信頼性向上: Arduino RFID勤怠管理システム
- Arduino Unoベースの人間検知レスキューロボット:センサー統合ステップバイステップ
- SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム
- Arduinoで作る全自動植物水やりシステム - 湿度センサーとRTCで最適制御
- リアルタイム森林火災監視システム: SMSアラート機能付き
- スマート地下室換気システム:Arduinoで湿度制御
- ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム
- Arduino + Windows IoT + Azure クラウドによる高度な転倒検知システム
- クラウド連携・指紋認証Arduino勤怠管理システムの構築
- 侵入検知システム(IDS):スマートアラートでネットワークを保護