【Seeeduino xiao】超音波センサーで距離測定器を作製する

seeeduino-xiao-hcsr04-top Seeeduino xiao

本記事の内容

世界最小マイコンボード「Seeeduino xiao RP2040」と超音波センサー「HC-SR04超音波距離センサー」を活用した、ミニ距離測定器を作製しました。

所得した距離データは即時に確認できるよう、OLEDディスプレイに表示される仕組みとしています。マイコンボードと距離センサ、ディスプレイは、ハーフサイズ(30行)のブレッドボード上に全て収まる最小構成となっております。

Seeeduino xiaoとは

seeediuno-xiao

言わずと知れた、Seeed Studio製のマイコンボードです。小さいながらも低電力・高性能であり、昨今はRaspberry Pi Picoと値段もあまり変わらないので、私も大変愛用しています。

Raspberry Pi PicoやArduino Nano Everyでも今回のミニ距離測定器は作製できますが、どうしてもピンの数が多いため、小さなブレッドボード上に全てのパーツを配置することは困難でした。しかしながら、世界最小のマイコンボード「Seeeduino xiao」を使用したことで、今回は30列タイプのブレッドボード1枚に全てのパーツが収まる最小構成となっております。

今回はRaspberry Pi Picoと同様にMicroPythonを書き込めるSeeeduino xiao RP2040を使用しました。

HC-SR04超音波距離センサーについて

測距範囲2~400cm
分解能0.3cm
電源電圧DC 5.0V
動作電流15mA
サイズ45×20×15mm
ピン4本(VCC,Trig,Echo,GND)

超音波の反射時間を取得して、対象物までの距離を非接触で測定するモジュールです。

具体的には、Seeeduino xiaoから入力信号を受け取ると、40KHzの超音波パルス(8波)を発信して、直後に物体からの反射波を受信します。発信から受信までに要した時間を計算することによって、距離を測ることができます。

Amazonで一つ300円程度で買える上に意外と扱いやすいので、マイコンボード初心者に最初におすすめできるセンサーの一つになります。

created by Rinker
¥293 (2024/10/07 04:06:57時点 楽天市場調べ-詳細)

必要なもの

それでは、今回必要なパーツについて紹介します。

  • Seeeduino xiao RP2040:690円
  • HC-SR04超音波距離センサー:250円
  • KeeYees OLEDディスプレイモジュール SSD1306:560円
  • その他、30列程度のブレッドボード、ジャンプワイヤなど

もちろん、Raspberry Pi Picoでも作成できますが、今回はより小さな構成となるようにSeeeduino xiaoを使用しました。

距離センサーとOLEDディスプレイを一つずつ繋げる程度であれば、Seeeduino xiaoの14ピンでも十分に事足ります。むしろ不要な配線ミスを防げて、作業がとても楽になりました。

配線

参考までに、Seeeduino xiaoの配線図も掲載しておきます。下側のピンがP0からP7に当たるのはまだ理解できますが、左上のD0からD3がMicroPythonではP26からP29に該当することはプログラムコード記載時に要注意です。

また、もう一点注意するべき事項としては、Seeeduino xiaoのGeneral I/Oピンに3.3V以上を加えないようにすることです。Echoをそのままつなげると5VがSeeeduino xiaoに流れ込むため、抵抗を挟んで電圧を下げています。

プログラムコード

Seeeduino xiaoでSSD1306 OLEDディスプレイモジュールを使用する方法は、公式Wikiに掲載されています。ssd1306.pyをSeeeduino xiaoにアップロードして、I2C通信をさせるだけなので、以下の記事でも簡単に説明しています。

HC-SR04超音波距離センサーをMicroPythonで使用する方法は、メタエレ実験室さんのプログラムコードを参考にさせていただきました。赤枠が書き換え箇所です。

from machine import I2C, Pin
from ssd1306 import SSD1306_I2C
import utime

i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=200000)
oled = SSD1306_I2C(128, 64, i2c)
trigger = machine.Pin(27, machine.Pin.OUT)
echo = machine.Pin(26, machine.Pin.IN)

def read_distance():
    trigger.low()
    utime.sleep_us(2)
    trigger.high()
    utime.sleep(0.00001)
    trigger.low()
    while echo.value() == 0:
        signaloff = utime.ticks_us()
    while echo.value() == 1:
        signalon = utime.ticks_us()
    timepassed = signalon - signaloff
    distance = (timepassed * 0.0343) / 2
    return distance

while True:
    oled.fill(0) 
    d = read_distance()
    d = round(d, 2) 
    oled.text('distance', 5, 5)
    oled.text(str(d), 30, 25)
    oled.show()
    utime.sleep(0.1)

Seeeduino xiaoではI2Cの系統が1しかなく、SCLがPin(7)、SDAがPin(6)になります。

また、triggerとechoはそれぞれSeeeduino xiaoの27,26ピンに当たるため、ここさえ書き直せば問題ありません。

完成図

この通り全てのパーツがブレッドボード上に収まりました。Seeeduino xiaoならではの、最小構成です。

本当は前回に紹介したGroveシールド+リチウムポリマー電池でモバイル距離測定系を作製したかったですが、あちらはGroveセンサーしか増設不能だったために諦めました。何としてもバッテリー駆動させてみたいという方は、以下の記事も参考にしてください。

まとめ

Seeeduino xiao RP2040とHC-SR04超音波距離センサー、OLEDディスプレイモジュールを活用して、ミニ距離測定器を作製しました。

Seeeduino xiaoの小ささを最大限に活用して、マイコンボードと距離センサ、ディスプレイがハーフサイズのブレッドボード上に全て収まる世界最小構成となっております。

コメント