プロジェクト21:パーキングセンサー

プロジェクト21:組み合わせて可能性無限大(パーキングセンサー)

このプロジェクトで学ぶこと: 超音波センサー・LED・ブザーを組み合わせ、距離に応じてアラートが変化する実用システムを作ります。複数のプロジェクトで学んだ技術を統合する力を養います。


完成イメージ

[手を近づけると距離に応じてLEDが増え、ブザーの間隔が短くなる動画を挿入]


必要な部品

部品名 数量
Arduino Uno R3 1
超音波センサー HC-SR04 1
赤色LED 1
黄色LED 1
緑色LED 1
抵抗 220Ω 3
パッシブブザー 1
ブレッドボード 1
ジャンパー線 多数

回路図と配線

[回路図画像を挿入]

配線手順

  1. HC-SR04: TRIG→10番ピン、ECHO→9番ピン、VCC→5V、GND→GND
  2. 緑LED(遠い)→220Ω→5番ピン
  3. 黄LED(中間)→220Ω→6番ピン
  4. 赤LED(近い)→220Ω→7番ピン
  5. ブザー→8番ピン、GND→GND

Arduinoスケッチ(プログラム)

// 駐車センサー:距離に応じてLEDとブザーでアラート

const int TRIG_PIN  = 10;
const int ECHO_PIN  = 9;
const int LED_GREEN = 5;
const int LED_YELLOW = 6;
const int LED_RED   = 7;
const int BUZZER_PIN = 8;

long getDistance() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  long duration = pulseIn(ECHO_PIN, HIGH);
  return duration * 0.034 / 2;
}

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED_GREEN,  OUTPUT);
  pinMode(LED_YELLOW, OUTPUT);
  pinMode(LED_RED,    OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  long distance = getDistance();
  Serial.print("距離: ");
  Serial.print(distance);
  Serial.println(" cm");

  // LEDとブザーのアラートゾーン設定
  if (distance > 30) {
    // 安全ゾーン(30cm超)
    digitalWrite(LED_GREEN, HIGH);
    digitalWrite(LED_YELLOW, LOW);
    digitalWrite(LED_RED, LOW);
    noTone(BUZZER_PIN);
    delay(200);
  } else if (distance > 15) {
    // 注意ゾーン(15〜30cm)
    digitalWrite(LED_GREEN, HIGH);
    digitalWrite(LED_YELLOW, HIGH);
    digitalWrite(LED_RED, LOW);
    tone(BUZZER_PIN, 1000, 100);
    delay(500);
  } else if (distance > 5) {
    // 警告ゾーン(5〜15cm)
    digitalWrite(LED_GREEN, HIGH);
    digitalWrite(LED_YELLOW, HIGH);
    digitalWrite(LED_RED, HIGH);
    tone(BUZZER_PIN, 1500, 100);
    delay(200);
  } else {
    // 危険ゾーン(5cm以下)
    digitalWrite(LED_RED, HIGH);
    digitalWrite(LED_GREEN, LOW);
    digitalWrite(LED_YELLOW, LOW);
    tone(BUZZER_PIN, 2000);  // 連続音
    delay(50);
    noTone(BUZZER_PIN);
    delay(50);
  }
}

コードのポイント解説

関数への分離 getDistance() 距離計測のコードを関数にまとめました。loop()がすっきりし、「何をしているか」が読みやすくなります。コードが長くなったら積極的に関数に切り出しましょう。

ゾーン別の複合制御 距離の範囲(ゾーン)ごとにLEDとブザーの動作を変えることで、段階的な警告表現を実現します。実際の車の駐車センサーも同じロジックで動いています。

delay()でブザー間隔を制御 距離が近いほどdelay()の値を小さくすることで、ブザーの「ピッピッ」の間隔が縮まります。距離→間隔のマッピングを変えることでより滑らかな応答も実現できます。


動作確認

  1. スケッチをアップロードしてシリアルモニタを開く
  2. 手を30cm以上離すと緑LEDのみ点灯
  3. 近づけると黄・赤LEDが順番に加わり、ブザーの頻度が上がれば成功

このプロジェクトで学んだこと

  • システム統合: 複数のプロジェクトで学んだ技術(超音波・LED・ブザー)を組み合わせる力を養いました
  • ゾーン別制御: 条件の範囲(ゾーン)に応じて複数の出力を組み合わせる設計を学びました
  • コードの整理: 機能を関数に分割して読みやすいコードを書く習慣を身につけました

次のプロジェクト「加速度センサー」では、I2C通信でより高度なセンサーから多次元データを取得します。


深掘り:技術の背景と社会への広がり

自動車の安全技術の歴史:センサーが命を守る

自動車の駐車センサーは1990年代にトヨタ・BMW・メルセデスが高級車向けに導入したのが始まりで、2000年代以降に急速に普及しました。当初は超音波センサーのみでしたが、2010年代からはカメラ映像と組み合わせた「バックカメラ」、さらにAIによる物体認識と組み合わせた「自動駐車支援システム」へと進化しています。日本では2021年から新型乗用車への自動ブレーキ(衝突被害軽減ブレーキ)搭載が義務化され、センサー技術が安全規制の中核に位置づけられました。

自動運転と社会課題

自動車事故は世界で年間135万人が死亡する社会問題です(WHO, 2023)。自動運転技術の核心はLiDAR・カメラ・超音波センサーの融合(センサーフュージョン)であり、あなたが今日作ったパーキングセンサーはその入口に位置します。完全自動運転(レベル5)が実現すれば交通事故の大幅削減のほか、高齢者・障害者の移動自由も大きく拡大するとされており、自動車業界のみならず医療・介護・都市設計の分野でも重大な社会変革が期待されています。


プロジェクト20:光追尾システム全プロジェクト一覧 | 次のプロジェクト:加速度センサー →