【Raspberry Pi Pico】超音波センサーで取得した距離をOLEDディスプレイに表示する

【Raspberry Pi Pico】超音波センサーで取得した距離をOLEDディスプレイで表示する

こんにちは! けい(Twitter)です。

今回は、Raspberry Pi Pico(ラズピコ)と超音波センサーとOLEDディスプレイを使用して、距離のデータをOLEDディスプレイに表示する方法についてまとめていきたいと思います。

また、以前の記事の延長の内容なので、気になる方はぜひのぞいてみてください。

必要な物

Raspberry Pi Pico

超音波センサー

ELEGOO Arduino用 HC-SR04超音波距離センサー5PCS
ELEGOO

OLEDディスプレイ

その他

created by Rinker
Sintron
¥343 (2023/05/26 13:50:35時点 Amazon調べ-詳細)

回路図

ラズピコと超音波センサーの接続

【Raspberry Pi Pico】超音波センサーの回路図

抵抗を挟む理由は以前の記事でまとめていますので、気になる方は確認してください。

ラズピコとOLEDディスプレイの接続

【Raspberry Pi Pico】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にまとめました。