Arduino HC-SR04 超音波レーダー:サーボ+Processingでリアルタイム可視化
必要な部品と材料
| Arduino UNO | ×1 |
| 超音波距離センサ HC-SR04 | ×1 |
| サーボモータ(SG90等、標準サイズ) | ×1 |
| ブレッドボード & ジャンパーワイヤー | 適宜 |
プロジェクト概要
HC-SR04超音波センサをサーボモータで水平にスキャンさせ、距離データをシリアル通信でPCへ送信。PC側でProcessingを用いてレーダー画面風にリアルタイム描画するプロジェクトです。往年のレーダースコープのようなビジュアルで、周囲の障害物分布を直感的に把握できます。
システム構成
- Arduino側(送信側):サーボを往復駆動(-80°〜+80°、1°刻み)、各角度でHC-SR04から距離を取得し、「角度,距離」形式でシリアル出力(9600bps)
- Processing側(受信・描画側):シリアルポートからデータを読み取り、極座標→直交座標変換して画面上にプロット。往路・復路の2回測定値を平均化して表示
Arduinoコード(送信側)
NewPingライブラリとServoライブラリを使用。NewPingはパルス幅測定をラップし、簡潔に距離(cm)を取得できます。
/* HC-SR04 Radar Screen Visualisation
Sends angle,distance via Serial for Processing */
#include <NewPing.h>
#include <Servo.h>
#define TRIGGER_PIN 2
#define ECHO_PIN 3
#define MAX_DISTANCE 150 // 最大測定距離 cm
#define SERVO_PWM_PIN 9
#define ANGLE_BOUNDS 80 // ±80°
#define ANGLE_STEP 1 // 1°刻み
int angle = 0;
int dir = 1; // 1:正方向, -1:逆方向
Servo myservo;
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
myservo.attach(SERVO_PWM_PIN);
}
void loop() {
delay(50); // サーボ安定待ち
// サーボ角度指令(0〜180°に正規化)
myservo.write(angle + ANGLE_BOUNDS);
// 距離測定 & シリアル送信
getDistanceAndSend2Serial(angle);
// 角度更新・反転判定
if (angle >= ANGLE_BOUNDS || angle <= -ANGLE_BOUNDS) dir = -dir;
angle += dir * ANGLE_STEP;
}
int getDistanceAndSend2Serial(int angle) {
int cm = sonar.ping_cm(); // cm単位で距離取得(0=範囲外/エラー)
Serial.print(angle, DEC);
Serial.print(",");
Serial.println(cm, DEC);
}
Processingコード(受信・描画側)
GitHubリポジトリに完全なコードがあります(リンク)。主な処理は以下の通り。
- シリアルポートを開き、カンマ区切りで角度・距離をパース
- 角度をラジアン変換し、
x = r * cos(θ),y = r * sin(θ)で画面座標へ - 往路・復路それぞれのスイープで描画色を変え、重ね合わせで平均化効果を演出
- 画面中心から円弧状にグリッド線・目盛りを描画し、レーダー風UIを構築
配線図
- HC-SR04: VCC→5V, GND→GND, Trig→D2, Echo→D3
- サーボ: 赤→5V, 茶/黒→GND, オレンジ/黄→D9(PWM)
- ※サーボ駆動時の電流変動でArduinoがリセットされる場合、サーボ電源を外部5V(大容量)から取るか、電源ラインに大きめの電解コンデンサ(470µF以上)を追加してください
拡張アイデア
- 測定角度範囲・ステップ角の変更(広角・高分解能化)
- 複数センサの融合(前方+側方など)
- Processing側で障害物検出・アラート機能追加
- Bluetooth/Wi-Fiモジュール追加でワイヤレス化
まとめ
超音波センサとサーボ、PCの組み合わせで手軽に「レーダー」を体験できる好例です。Arduino側はセンサ驱動とデータ送信に専念し、重い描画処理はPCのProcessingに任せるという役割分担が明確で、拡張性も高い構成です。ロボットの環境認識や、駐車支援シミュレーションの教材としても活用できます。
製造プロセス
- Bluetooth操作のArduinoスパイボットを自作する
- FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
- 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduinoプロジェクトのための最適化電源ソリューション
- Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
- Arduino超音波センサーとProcessingで作るリアルタイム距離測定ソナー
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- Arduino NanoとMPU6050で加速度から傾斜角を算出 - Visuino活用チュートリアル