はじめに
この記事では、小型のレーザー距離センサ「TDSN5200E」もしくは「TDSN5200」を使って、「そこに誰かいるのか?」をRaspberry Piで判定してみます。
このセンサはUSB接続で使えて、最大6mまでの距離を測ることができます。しかもとってもコンパクト。人の出入りの検知や、ロボットの前に何かあるかを調べるのにぴったりです。
用意するもの
アイテム | 説明 |
---|---|
Raspberry Pi(OSインストール済み) | Pi 4 または 5 推奨。Raspberry Pi OSが入ってること |
TDSN5200 距離センサ | USB-miniB ケーブルで接続します |
インターネット | 必須。ツールのインストールやソースの取得で使います |
まずはツールを準備しよう
Raspberry Pi のソフトをアップデートしてから、必要な開発ツールやライブラリをインストールします。
sudo apt update && sudo apt upgrade -y
sudo apt install -y git build-essential libusb-dev
センサにアクセスするためのUSB設定
センサを使うには、USBのアクセス権限を調整する必要があります。
以下のコマンドで「udev」ルールを作って、一般ユーザーからもセンサにアクセスできるようにしましょう:
sudo tee /etc/udev/rules.d/99-usb-tokyodevices.rules <<EOF
SUBSYSTEM=="usb", ATTR{idVendor}=="32ee", ATTR{idProduct}=="177c", MODE="0666"
EOF
変更を反映します。
sudo udevadm control --reload-rules
sudo udevadm trigger
TD-USBツールをインストールしよう
センサを操作するには、「TD-USB」という公式のコマンドラインツールを使います。以下の手順でビルドできます:
git clone https://github.com/tokyodevices/td-usb.git
cd td-usb
make
ちゃんと動くか試してみましょう。
./td-usb
# → バージョン情報が表示されれば成功!
Pythonで動かしてみよう
ここでは、Pythonでセンサからリアルタイムに距離を取得して、人が「近くにいるか」「離れたか」を判定するスクリプトを書いてみます。以下のコードを含む presense.py というファイルを作成してください:
#!/usr/bin/env python3
import subprocess, time
THRESHOLD = 100
CMD = ['td-usb', 'tdsn5200', 'listen', '--loop']
proc = subprocess.Popen(CMD, stdout=subprocess.PIPE, text=True)
state = None
for line in proc.stdout:
try:
dist = int(line.strip())
except ValueError:
continue
now_present = dist < THRESHOLD
if state is None:
state = now_present
if now_present and not state:
print(f'[{time.strftime("%H:%M:%S")}] 近くに何かある!({dist} mm)')
elif not now_present and state:
print(f'[{time.strftime("%H:%M:%S")}] 離れたっぽい({dist} mm)')
state = now_present
実行してみよう
$ python3 presence.py
[12:03:15] 近くに何かある!(78 mm)
[12:03:19] 離れたっぽい(65535 mm)
[12:03:25] 近くに何かある!(63 mm)
おわりに
どうでしたか?
センサで「人がいる・いない」を検知できると、いろんな応用ができそうですよね。たとえば:
- 部屋に入ったら自動でライトON
- 自販機の前に立ったらLEDが光る
- ロボットの前に障害物があるか判断
今回使った「TDSN5200」はコンパクトで扱いやすいので、センサ初体験の人にもおすすめです。ぜひ自分のアイデアを実装してみてください!