6.3 バックアップ支援

想像してみてください:車に乗っていて、狭い駐車スペースにバックで入るところです。当プロジェクトを使えば、あなたの車の後部に取り付けられた超音波モジュールがデジタルアイとして機能します。リバースギアに入れると、このモジュールが活動を開始し、あなたの後ろの障害物から跳ね返る超音波パルスを発します。

魔法のようなことが起こります。これらのパルスがモジュールに戻ると、モジュールは迅速にあなたの車と物体との距離を計算し、このデータをリアルタイムの視覚フィードバックに変換し、鮮やかなLCD画面に表示します。動的なカラーコード付きインジケーターが障害物の近接を描き、周囲環境をクリスタルクリアに理解できるようになります。

しかし、私たちはそこで止まりませんでした。あなたをさらに運転体験に没入させるために、生き生きとしたブザーを組み込みました。車が障害物に近づくにつれて、ブザーのテンポは激しくなり、警告の交響曲を奏でます。それは、バック駐車の複雑さをナビゲートする個人オーケストラを持っているようなものです。

この革新的なプロジェクトは、最先端の技術とインタラクティブなユーザーインターフェイスを組み合わせており、あなたのバック駐車を安全でストレスフリーなものにします。超音波モジュール、LCDディスプレイ、活気のあるブザーが調和して動作し、狭いスペースでの操縦時にあなたを力強く自信を持たせ、運転の喜びに集中させます。

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

全キットを購入することは間違いなく便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

ESP32 Starter Kit

320+

ESP32 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

ESP32 WROOM 32E

BUY

ESP32カメラ拡張ボード

-

ブレッドボード

BUY

ジャンパーワイヤ

BUY

抵抗器

BUY

超音波モジュール

BUY

ブザー

-

トランジスタ

BUY

I2C LCD1602

BUY

回路図

../../_images/circuit_6.4_reversing_aid.png

プロジェクトにおける超音波センサーは、高周波の音波を発し、物体にぶつかって跳ね返ってくるまでの時間を測定します。このデータを分析することで、センサーと物体との距離が計算できます。物体が近すぎる場合の警告として、聴覚信号を発するブザーが使用されます。さらに、測定された距離は簡単な可視化のためにLCD画面に表示されます。

配線図

../../_images/6.4_aid_ultrasonic_bb.png

コード

注釈

  • ファイル 6.3_reversing_aid.ino をパス esp32-starter-kit-main\c\codes\6.3_reversing_aid から直接開くことができます。

  • ボード(ESP32 Dev Module)と適切なポートを選択した後、 アップロード ボタンをクリックします。

  • "Unknown COMxx"が常に表示されますか?

  • ここでは LiquidCrystal I2C ライブラリが使用されています。 Library Manager からインストールできます。

コードが正常にアップロードされた後、LCDに現在検出されている距離が表示されます。そして、ブザーは距離に応じて音の周波数を変更します。

注釈

コードと配線が正しくてもLCDに何も表示されない場合は、背面のポテンショメータを調整してコントラストを上げてください。

どのように動作するのか?

このコードは、物体間の距離を測定し、LCDディスプレイとブザーを通じてフィードバックを提供する簡単な距離測定装置を作成するのに役立ちます。

loop() 関数にはプログラムの主なロジックが含まれており、連続して実行されます。 loop() 関数をもう少し詳しく見てみましょう。

  1. 距離を読み取り、パラメータを更新するループ

    loop 内では、まず超音波モジュールによって測定された距離を読み取り、その距離に基づいて間隔パラメータを更新します。

    // Update the distance
    distance = readDistance();
    
    // Update intervals based on distance
    if (distance <= 10) {
        intervals = 300;
    } else if (distance <= 20) {
        intervals = 500;
    } else if (distance <= 50) {
        intervals = 1000;
    } else {
        intervals = 2000;
    }
    
  2. ビープ音を鳴らすタイミングをチェック

    コードは、現在の時刻と前回のビープ音の時刻との差を計算し、その差が間隔時間以上であればブザーを鳴らし、前回のビープ音の時刻を更新します。

    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= intervals) {
        Serial.println("Beeping!");
        beep();
        previousMillis = currentMillis;
    }
    
  3. LCDディスプレイを更新

    コードはLCDディスプレイをクリアし、その後、1行目に「Dis:」と現在の距離(センチメートル)を表示します。

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Dis: ");
    lcd.print(distance);
    lcd.print(" cm");
    
    delay(100);