本記事の内容
世界最小マイコンボード「Seeeduino xiao RP2040」と超音波センサー「HC-SR04超音波距離センサー」を活用した、ミニ距離測定器を作製しました。
所得した距離データは即時に確認できるよう、OLEDディスプレイに表示される仕組みとしています。マイコンボードと距離センサ、ディスプレイは、ハーフサイズ(30行)のブレッドボード上に全て収まる最小構成となっております。
Seeeduino 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円程度で買える上に意外と扱いやすいので、マイコンボード初心者に最初におすすめできるセンサーの一つになります。
必要なもの
それでは、今回必要なパーツについて紹介します。
- 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の小ささを最大限に活用して、マイコンボードと距離センサ、ディスプレイがハーフサイズのブレッドボード上に全て収まる世界最小構成となっております。
コメント