ESP32でミニカーを作る #4 距離を表示する編(おおたfab 電子工作初心者勉強会)

ESP32

おおたfabさんでは電子工作初心者勉強会を定期的に開催しています。

前回はESP32ミニカーのマイコンをXIAO ESP32C6に変更してモーターを動かしました。今回はミニカーに情報を表示するためのOLEDと障害物との距離を測る超音波センサーを実装してみます。

ミニカーの回路図を清書する

前回までの回路図を清書しておきます。マイコンが変更になったのでシンプルな回路図になりました。

この回路図では今回接続するOLEDと超音波センサーを含めています。OLEDは「Organic Light Emitting Diode」の略称で有機ELディスプレイです。液晶とは異なり自ら発光するのでバックライトが不要できれいな表示ができます。XIAO ESP32C6ではI2Cデバイスを接続できるピンが決まっています。このためI2CデバイスであるOLEDはGPIO22(SDA)とGPIO23(SCL)に接続します。超音波センサーは空いているGPIO18(TRIG)とGPIO20(ECHO)に接続しました。

ミニカーにOLEDと超音波センサーを実装する

ミニカーのブレッドボードにはすでにOLEDを実装していますが、これに超音波センサーも接続する必要があります。今回は超音波センサーをそのままブレッドボードに挿すことで、回路の接続とセンサーの固定を行いました。センサーの位置で問題がでてきた場合はその時に再検討することにします。

これで回路図に従った実装ができました。

ESP32でOLEDに文字を表示する

OLEDに文字を表示するにはすでに提供されているライブラリを使うと簡単です。様々なライブラリが提供されていますが、ここではAdafruit ssd1306を使用することにします。

Arduino IDEのライブラリマネージャーでssd1306を検索するといくつか表示されますが、この中でAdafruit ssd1306を選択してインストールします。

スケッチ例にssd1306を使用したデモプログラムが用意されていますので、ファイルのスケッチ例からssd1306_128x64_i2cを選択します。今回は秋月電子さんのOLED 128×64を使用しましたが、I2Cアドレスが0x3cでしたので35行目だけを修正しました。

修正前

修正後

修正したスケッチをコンパイルしてXIAO ESP32C6に書き込むと、さまざまな表示がOLEDに現れます。かなり高機能のライブラリのようなので今後も活用できそうです。

ESP32で超音波センサーの値を読み取る

超音波センサーは秋月電子で販売している超音波距離センサー HC-SR04を使用しました。これを選択した理由は電源電圧が3.3vに対応しているからです。HC-SR04のプログラムはSparkfunのサンプルコードを参照しました。

GitHub - sparkfun/HC-SR04_UltrasonicSensor: Arduino example code for the HC-SR04 ultrasonic ranging sensor.
Arduino example code for the HC-SR04 ultrasonic ranging sensor. - sparkfun/HC-SR04_UltrasonicSensor

先ほどの回路図のようにTRIGをGPIO18に、ECHOをGPIO20に接続していますので、サンプルコードのGPIO番号を以下のように修正しました。

修正前

修正後

このスケッチをXIAO ESP32C6に書き込むと、シリアルモニタに距離が表示されました。

これで超音波センサーで距離が計測できることが確認できました。

ミニカーのプログラムでOLEDに距離を表示する

前回までに作成したミニカーのプログラムにこれまでのOLEDや超音波センサーのデモプログラムを取り込んでみました。超音波センサーの距離を測る部分は関数にしています。テスト目的ですので、ミニカーのプログラムのloop関数内で距離をOLEDに表示するように組み込みました。

ソースコードはこちら(esp32_mouse2-dest.ino)

モーターを動かしながら距離を表示することができていますが、このプログラムでは1秒間隔で距離を測って表示することしかできないので実用的ではありません。もう少し工夫をする必要があります。

テスト走行の動画です。走りながらも距離を表示していました。

次回

次回は距離センサーの値をリアルタイムで液晶ディスプレイに表示し、その距離から障害物を避ける走り方を考えてみます。

タイトルとURLをコピーしました