このページの目次
ショップ
製品概要
超音波距離センサーは、センサーから発した超音波パルスが、計測対象物にあたって反射して帰ってくるまでの時間を計測し、その値で距離を計測するものです。
Arduinoのプログラミング
ESP32-PIXELでのスケッチ例
超音波距離センサーで対象物までの距離を計測し、それをシリアルモニタに出力するスケッチを示します。ESP32-PIXEL用のスケッチを示しますが、冒頭のTRIG,ECHOをお使いの回路で割り当てている入出力ピンに変更すれば、汎用的に使用できるスケッチです。
#define TRIG 25
#define ECHO 26 # Rev.1Xではシルクの表記に誤りがあります
#define TIMEOUT 30000
int temperature = 20 ;
void setup() {
Serial.begin(115200) ;
pinMode(ECHO, INPUT) ;
pinMode(TRIG, OUTPUT) ;
digitalWrite(TRIG, LOW) ;
}
void loop() {
double t, distance, sound_speed ;
digitalWrite(TRIG, HIGH) ;
delayMicroseconds(10) ;
digitalWrite(TRIG, LOW) ;
t = pulseIn(ECHO, HIGH, TIMEOUT) ; // 往復にかかった時間(microsec)
if (t > 0) {
t = t / 2 ; // 片道
sound_speed = 331.5 + 0.61 * temperature ; // 気温センサの値を使えば温度補正できる
distance = t * sound_speed * 100 / 1000000 ;
Serial.print(t) ;
Serial.print(" microsec, ") ;
Serial.print(distance) ;
Serial.println(" cm") ;
}
delay(500) ;
}
MicroPythonのプログラミング
HCSR04ライブラリ
まず、HCSR04を使用するためのライブラリを示します。
このライブラリを開発ボードに登録してください。
"""
HCSR04: Ultrasonic Distance Sensor driver
for MicroPython
Version 1.0
Copyright 2023 K.Kakizaki
"""
from machine import Pin, time_pulse_us
import time
class HCSR04:
def __init__(self, trigger, echo):
self._trigger = Pin(trigger, Pin.OUT)
self._echo = Pin(echo, Pin.IN)
self._trigger.off()
self.setTemperature(20)
def setTemperature(self, v):
self._temperature = v
self._sound_speed = 331.5 + 0.61 * self._temperature
def getTemperature(self):
return self._temperature
def getSoundSpeed(self):
return self._sound_speed
def getDistance(self):
self._trigger.on()
time.sleep_us(10)
self._trigger.off()
duration = time_pulse_us(self._echo, 1, 30_000)
if duration < 0:
return duration # エラーコード
return duration / 2 * self._sound_speed / 1_000_000
基本的な使用法は、センサーのピンを指定したコンストラクタを呼び、その後はgetDistance()メソッドを呼ぶとmm単位で距離を返します。初期状態では、気温が20度の音速での計測に設定されていますが、setTemperature()メソッドで、摂氏温度を指定することができます。
HCSR04ライブラリの使用例
ESP32-PIXELで距離を計測するプログラム例を示します。
ESP32-PIXELのRev.1Xでは、シルクで表記されているピン番号に誤りがあるので注意が必要です。(すみません。。。)
from hcsr04 import HCSR04
import time
hcsr = HCSR04(25,26) # ESP32-PIXEL
hcsr.setTemperature(25) # 温度センサーの計測値を設定する
while True:
print(hcsr.getDistance())
time.sleep_ms(500)
関連製品
ESP32-C3M-TRY
HCSR04を接続できるコネクタを基板左上に装備しています。
RP2040-PLAY
HCSR04を接続できるコネクタを基板左上に装備しています。