Arduino近接センサー自作ガイド:IR/超音波モジュールで物体検知
Arduinoと赤外線(IR)または超音波モジュールを組み合わせれば、低コストで近接センサーが自作できます。人・ペット・小物の検知から、衝突防止・自動照明・セキュリティまで幅広く応用可能。本記事では、HC-SR04超音波センサーとIR近接モジュールの両方に対応した配線・コード・調整手順を解説します。
Arduino近接センサーとは
マイコンボードに距離測定モジュールを接続し、物体までの距離や接近を検知するシステムです。主な方式は2つ:
- 超音波(HC-SR04等): 超音波パルスの往復時間で距離測定(2cm〜4m、精度約3mm)。指向性広め。
- 赤外線反射(GP2Y0A21YK等 / 安価なIRモジュール): 赤外光の反射強度で距離推定(数cm〜80cm程度)。安価だが環境光・材質の影響大。
必要なハードウェア
- Arduino Uno / Nano / Pro Mini 等
- ブレッドボード、ジャンパー線
- 超音波センサー HC-SR04(推奨:安定・距離長)
または IR近接モジュール(3ピン:VCC/GND/OUT) - LED(検知表示用)、抵抗 220Ω〜1kΩ
- USBケーブル(書き込み用)
ピン接続(HC-SR04 超音波センサーの場合)
| センサー | Arduino | 備考 |
|---|---|---|
| VCC | 5V | 5V駆動 |
| GND | GND | 共通グランド |
| Trig | D9(例) | トリガー出力 |
| Echo | D10(例) | エコー入力(5V→3.3V分圧推奨) |
3ピンIR近接モジュール(VCC/GND/OUT)の場合
- 茶色/赤:VCC → 5V
- 青/黒:GND → GND
- 黒/白:OUT → D2 等(デジタル入力)
※ モジュールにより配色異なるためデータシート確認必須。
製作手順
- ブレッドボードに配線: 上記ピン表通りに接続。LEDはD13(オンボード兼用)または別ピンにアノード、カソード→抵抗→GND。
- スケッチ書き込み: 後述のコードをArduino IDEで書き込み。
- センサー配置: センサー正面に遮蔽物なく、検知エリアを確保。
- キャリブレーション(重要):
- 超音波:温度補正・最小/最大距離クリッピング設定
- IR:モジュール背面のポテンショメータで検知距離調整(時計回りで感度UP/距離延長傾向)
- 動作確認: シリアルモニタ(9600bps)で距離値・検知状態を監視。物体を近づけ/離してLED点灯/消灯・数値変化を確認。
動作原理
超音波(HC-SR04)
- Trigに10μs以上のHIGHパルス送信
- モジュール内部で8回の40kHzパルスバースト送出
- 物体で反射した超音波を受信 → EchoピンがHIGH期間=往復時間
- 距離 = (HIGH期間 × 音速340m/s) / 2 = HIGH期間(μs) / 58.2 (cm)
IR反射式
- 内部IR LEDがパルス発光
- 物体で反射した光をフォトトランジスタ/PSDで受光
- 受光量(距離に反比例)をコンパレータで閾値判定 → デジタルOUT、またはADCでアナログ出力
サンプルコード
HC-SR04 超音波距離測定
const int trigPin = 9;
const int echoPin = 10;
const int ledPin = 13;
const float threshold_cm = 30.0; // 検知閾値
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH, 30000); // タイムアウト30ms(約5m)
float distance = duration / 58.2;
bool detected = (distance > 0 && distance < threshold_cm);
digitalWrite(ledPin, detected);
Serial.print("Distance: ");
Serial.print(distance);
Serial.print(" cm | ");
Serial.println(detected ? "DETECTED" : "CLEAR");
delay(100);
}
IR近接モジュール(デジタル出力)
const int irPin = 2;
const int ledPin = 13;
void setup() {
pinMode(irPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
bool detected = (digitalRead(irPin) == LOW); // アクティブLOWの場合多い
digitalWrite(ledPin, detected);
Serial.println(detected ? "Object NEAR" : "Object FAR");
delay(100);
}
主な活用例
- 物体検知・カウント: コンベアライン、自動ドア、来客カウンター
- 衝突防止・AGV/ロボット: 前方障害物検知で停止/回避
- セキュリティ: 駐車場空き検知、侵入検知、自動照明
- スマートフォンのジェスチャー/近接: 通話時の画面消灯等(近接センサー応用)
- 液面/残量検知: タンク上部から超音波で液面距離測定
まとめ
Arduino近接センサーは、超音波(距離精度・範囲重視)かIR(低コスト・近距離)で使い分けが鉄則。配線・ライブラリ不要のシンプルコードで即動作確認でき、アイデア次第で多彩な応用が可能です。より高精度・長距離ならToF(Time-of-Flight)センサー(VL53L0X等)へのステップアップもおすすめ。ご質問・ご相談はお気軽に。
産業技術
- 状態基準保全(CBM)の効果を最大化する実践ガイド
- 湿度センサーの検証とキャリブレーションで精密測定を実現
- デジタル身長計の自作:Arduino Nanoとレーザー距離センサーで成長記録
- Arduinoで楽器演奏:音階生成のステップバイステップガイド
- MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信
- ArduinoでRFIDドアロックを作る - マスターRFID技術をステップバイステップで習得
- PIRモーションセンサー: 動作原理とArduino連携ガイド
- ArduinoとProcessingで作るリアルタイムデジタルコンパス
- 製造と出荷を効率化:コスト削減と効率向上の実証済み戦略
- 製造プラントのオフィス整理術:効率向上とストレス軽減の実証済みヒント
- Arduinoセンサー:種類、応用、実世界プロジェクト