こんにちは! けい(Twitter)です。
今回は、Raspberry Pi Pico(ラズピコ)と超音波センサーとOLEDディスプレイを使用して、距離のデータをOLEDディスプレイに表示する方法についてまとめていきたいと思います。
また、以前の記事の延長の内容なので、気になる方はぜひのぞいてみてください。
以前の記事
- 【Raspberry Pi Pico】OLEDディスプレイ(I2C)に文字を描画する方法
- 【Raspberry Pi Pico】超音波センサーで距離を測定する方法
目次
必要な物
Raspberry Pi Pico
超音波センサー
OLEDディスプレイ
その他
回路図
ラズピコと超音波センサーの接続
抵抗を挟む理由は以前の記事でまとめていますので、気になる方は確認してください。
ラズピコとOLEDディスプレイの接続
ライブラリ(ssd1306)のインストール
OLEDディスプレイをMicroPythonで表示させるためのライブラリがあるので、それを使用します。
ライブラリのインストールに関しては以前の記事でまとめていますので、そちらを参考にしてみてください。
プログラム
ライブラリのインストールが完了したら、実際に超音波センサーで取得した距離データをOLEDディスプレイに表示させてみましょう。
プログラムのディレクトリ構造は、このようになっています。
|-lib
| └ssd1306.py
|-main.py
main.pyのプログラムを見ていきましょう。
import machine
import utime
import ssd1306
# 超音波センサーのGPIO設定
trigger = machine.Pin(14, machine.Pin.OUT)
echo = machine.Pin(15, machine.Pin.IN)
# oledディスプレイの初期設定
sda = machine.Pin(0)
scl = machine.Pin(1)
i2c = machine.I2C(0,sda=sda, scl=scl, freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
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) # 小数点以下を2桁に丸める
oled.text('distance', 5, 5)
oled.text(str(d), 30, 25)
oled.show()
utime.sleep(0.1)
プログラム解説
6,7行目で超音波センサーのトリガーピンとエコーピンの指定を行っています。
10~13行目でOLEDディスプレイのI2C接続の設定と、ssd1306ライブラリのインスタンスを生成しています。
read_distanceという関数が、超音波センサーで距離を実際に測定する部分です。
33~35行目でOLEDディスプレイに文字を表示させています。
実行結果
上のプログラムを実行している動画をyoutubeにまとめました。