概要
秋月電子で購入できる安価な測距センサ「ToF測距センサMTOF171000C0」をMicroPythonでデータ取得するプログラムを紹介します。
ToF測距センサMTOF171000C0(以下、ToF測距センサ)はI2C通信機能とUART通信機能を有していますが、ここではI2C通信を用いてデータ取得していきます。
ToF測距センサMTOF171000C0(秋月)
ToF測距センサMTOF171000C0の性能
MTOF171000C0のアプリケーションノート(秋月)を参照して、ToF測距センサの性能を簡単に示します。
- 一般性能
項目 | パラメータ |
---|---|
計測形式 | ToF(光の反射時間で測距) |
電源電圧 | 3.0~3.6 [V] |
通信形式 | I2C、UART |
計測範囲 | 白色板:2~120 [cm] 灰色板:2~70 [cm] |
計測精度 | 白色板:±4 [%] 灰色板:±7 [%] |
動作サイクル時間 | 33 [ms] |
- I2C関連
項目 | パラメータ |
---|---|
I2Cアドレス | 0x52(7bit) |
I2C周波数 | 100 [kHz] |
計測用コマンド | 0xD3 |
実装
配線
配線例を以下に示します。下表の「ピン番号」は、Raspberry Pi Picoの各ピンに振り分けられた番号と対応しています(GPIOの番号とは違うので注意)。
MTOF171000C0のピン | 接続先 | ピン番号 |
---|---|---|
赤(VDD) | 3.3 [V] | pin 36 |
黒(GND) | GND | pin 3 |
白(TXD) | GND | pin 3 |
茶(RXD) | GND | pin 3 |
緑(SCL) | GPIO 3(I2C1 SCL) | pin 5 |
黄(SDA) | GPIO 2(I2C1 SDA) | pin 4 |
もし複数台のToF測距センサを接続したい場合は、RXDをCS(チップセレクト)ピンとして利用できます。
使用したいセンサのRXDにLOWを印可し、それ以外のセンサのRXDにHIGHを印可することで、動作機器の切り替えが可能です。
MicroPythonプログラム
ToF測距センサから1秒おきにデータを取得するMicroPythonプログラムを紹介します。
開発環境としてはThonny IDEを使いました。
main.py
from machine import Pin, I2C
import time
i2c = I2C(id=1, scl=3, sda=2, freq=100000)
while True:
i2c.writeto(0x52, b'0xD3')
data_bytes = i2c.readfrom(0x52, 2) # bytes型のデータを取得
data = data_bytes[1]<<8 | data_bytes[0] # 距離に変換[単位:mm]
print(data, ' mm')
time.sleep(1)
これでミリメートル単位の距離が取得出来たら成功です。