ショップ

製品概要

超音波距離センサーは、センサーから発した超音波パルスが、計測対象物にあたって反射して帰ってくるまでの時間を計測し、その値で距離を計測するものです。


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を接続できるコネクタを基板左上に装備しています。