目次
はじめに
電子工作では非常に有名な超音波センサを使ってみましょう。
リンク
動作の仕組み
超音波センサー HC-SR04 は、距離を測定するために超音波を利用するセンサーです。
小型で安価、そして高精度なため、ロボティクスやIoTプロジェクトに広く使われています。
ロボットの目の様に見えるもの使い勝手の良い点ですね。
特徴
- 測定範囲:2cm ~ 400cm
- 精度:±3mm
- 動作電圧:5V
基本構造
HC-SR04 センサーは主に次の部分で構成されています
- 送信部 (Transmitter):超音波を発する部品。
- 受信部 (Receiver):反射された超音波を受け取る部品。
- 制御回路 (Control Circuit):信号の送受信を制御する回路。
動作の流れ
センサーは以下のプロセスで距離を計算します
- トリガ信号の送信
- センサーの Trig ピンに 10µs の高電位パルスを送信します。
- これにより、送信部が 40kHz の超音波パルスを 8 回発信します。
- 超音波の伝播
- 発信された超音波は空気中を進み、障害物に当たると反射します。
- 反射波の受信
- 受信部が反射された超音波を検出します。
- センサーは Echo ピンを高電位状態にして反応時間を出力します。
- 時間の測定
- Echo ピンが高電位の間、超音波が往復するのにかかった時間を測定します。
- 距離の計算
- 超音波の速度(約 343m/s)を利用して、距離を次の式で計算します
- 超音波の速度(約 343m/s)を利用して、距離を次の式で計算します
配線
RaspberryPi Pico | 超音波センサ |
VSYS(39番) | VCC |
GND(38番) | GND |
GP14(19番) | Trig |
GP15(20番) | Echo |
超音波センサーで距離を計測し、ディスプレイに表示する
from machine import Pin, I2C
import utime
from ssd1306 import SSD1306_I2C
# 超音波センサーのピン設定
TRIGGER_PIN = 14
ECHO_PIN = 15
# OLEDディスプレイの設定 (I2C)
I2C_SCL = 17
I2C_SDA = 16
I2C_FREQ = 400000
# OLEDディスプレイのサイズ
OLED_WIDTH = 128
OLED_HEIGHT = 64
# 超音波センサーの初期化
trigger = Pin(TRIGGER_PIN, Pin.OUT)
echo = Pin(ECHO_PIN, Pin.IN)
# I2CとOLEDの初期化
i2c = I2C(0, scl=Pin(I2C_SCL), sda=Pin(I2C_SDA), freq=I2C_FREQ)
oled = SSD1306_I2C(OLED_WIDTH, OLED_HEIGHT, i2c)
def ultrasonic_distance():
# トリガー信号を送る
trigger.low()
utime.sleep_us(2)
trigger.high()
utime.sleep_us(10)
trigger.low()
# エコー信号を待つ
while echo.value() == 0:
start_time = utime.ticks_us()
while echo.value() == 1:
end_time = utime.ticks_us()
# 時間差を距離に変換
duration = utime.ticks_diff(end_time, start_time)
distance = (duration / 2) / 29.1 *10 # 距離 (mm)
return distance
def display_distance(dist):
oled.fill(0) # 画面をクリア
oled.text("Distance:", 0, 0)
oled.text(f"{dist:.2f} mm", 0, 20) # 小数点2桁まで表示
oled.show()
# メインループ
while True:
try:
distance = ultrasonic_distance()
print(f"Distance: {distance:.2f} mm") # コンソールにも表示
display_distance(distance)
utime.sleep(1)
except KeyboardInterrupt:
print("終了します")
break
リンク
コメント