今週末は出不精になり部屋に籠ってしまったが、黙々とRaspberry Pi Picoをいじる良い機会になっている。LEDドットマトリックスに続いて超音波距離センサを試した。
使用したセンサは電子工作の超音波距離センサでは最もメジャー(?)なHC-SR04という、超音波信号をだして反射して帰って来た信号との時間差から距離を測定出来るセンサ。センサ側は入力されたTrigger信号に対してEcho信号を返すだけなので、実際の計算はマイコン側で行う。
これまで試した部品を残したまま足しているので、 ブリッドボードが若干ごちゃごちゃしてきた。 |
使用した機材等
- Raspberry Pi Pico
- Thonny
- 超音波距離センサー
- 型式: HC-SR04
配線
HC-SR04の電源は5Vだが、PicoのGPIOは3.3Vで受ける必要があるため、ECHO端子からの信号を抵抗を使って分圧してGPIOに入力する。
HC-SR04 | RPi Pico | Pin |
---|---|---|
VCC | VBUS (DC5V) | 40 |
GND | GND | 3 |
TRIG | GPIO20 | 26 |
ECHO | GPIO21 | 27 |
コード
- import
- SPI: LEDドットマトリックス接続
- ADC: 温度計のアナログ入力
- GPIO
- OUT: trigger信号
- IN: echo信号
- def measure()
- while True:にベタ打ちでも良かったが、整理するため関数化
- trigger信号は10μs以上入れる仕様(ひとまず10μsで問題なさそう)
- echo信号がHighになっている時間が、対象物に超音波をだして戻ってくるまでの時間
- 温度を計測して、温度補正入りの音速値を計算
- 音速と計測した時間から距離を計算
- def disp_ledmatrix()
- 計測部分同様に、表示する文字列を引数にした関数とした
- len(string)で表示する値の長さを読み取り、桁が少ない時(距離が短い時)も右寄せで表示するように表示位置を調整
- 計測した距離の値(未処理状態では浮動小数点)を整数に変換
- LEDマトリックスに表示
結果
センサのどの位置から計測されているのかわからないが、おおむね±5mm以内での計測が出来るようになった。
写真は表示位置調整前。[mm]表示があるとよりそれっぽくなるか… |
参考にしたサイト
- JH7UBCブログ
- Raspberry Pi Pico MicroPython HC-SR04 距離の測定
- https://blog.goo.ne.jp/jh7ubc/e/f8a52422511afbf077cf8b7e5d629783