真夜中のToF(Time of flight)
諸君。私はセンサが好きだ。
諸君。私はセンサが好きだ。
諸君。私はセンサが大好きだ。
光センサが好きだ。
加速度センサが好きだ。
ジャイロセンサが好きだ。
方位センサが好きだ。
温度センサが好きだ。
湿度センサが好きだ。
磁気センサが好きだ。
臭いセンサが好きだ。
電圧センサが好きだ。
電流センサが好きだ。
静電容量センサが好きだ。
距離センサが好きだ。
事務所で 工場で
河川で 山間部で
道路で 農地で
海上で 地下で
上空で 水中で
この世界に活用されるありとあらゆるセンサが大好きだ。
というわけで、いろんなセンサをDigiKeyやMouserで買い集めて動かして楽しむのを趣味としている私だが、最近アツいのは距離センサ。特に光を使ったToFセンサがアツい。
ToFというのはTime of Flightの略で、飛行時間型という意味だ。光を発射してから、帰ってくるまでの時間を見ることで距離を測定するもの。光を使った測距方式は数あるが、その中でも比較的新しい部類の原理だ。
考え方はレーダーとほぼ同じ。
光の速度は秒速30万キロメートル。1秒で30万キロメートル進む。
ということは、1ミリ秒で300キロメートル
1マイクロ秒で300メートル
1ナノ秒で30センチメートル
1ピコ秒で0.3ミリメートル
光を発射してから帰ってくるまでの時間を、ピコ秒オーダーで測ることができれば、距離が分かるという寸法だ。
言うのは簡単だが、そんなことが本当に出来るのかとか思ってしまう。
でも、実際にそれが出来ており、高級なスマホや、ちょっと前に流行った、手を近づけると消毒液が出てくるアレとかに組み込まれて生活の中に溶け込んでる。
そんなすごい機能を持つ部品。部品単体としても市販されており、米粒ぐらいのサイズで部品単体だと千円しないぐらいの価格で買える。
この種の部品で有名なのはSTのVL53シリーズだが、その辺はわりと遊び倒したので今度は違う物で遊びたい。そう考えていろいろ探したら、別メーカから似たようなものが出ているじゃないですか。イェイ。
…………
見つけた以上は遊びたい。何かを作るわけでもなく、何かに使うわけでは無い。面白そうな部品を買って弄りたいだけだ。趣味の電子工作なんてそんなもんだ。
そして、今回のターゲットはAMS社製の【TMF8821】。
エリア別検知とヒストグラム出力ができるらしい。FOVが60°近くと、STの品揃えに例えるとVL53L5に相当しそうな感じ。
この種の部品はパッケージ小型化のために、リフローでないと実装できないようなパッケージになっている。だから、部品だけ買っても遊べない。
実装済みの適当なボードを探す。メーカー純正の開発ボード【TMF882X-EVM】もあるにはあるが、\50,756-とちょっと高いので、素子を乗せて配線を出せるようにしただけぐらいの簡単なものを探す。
いろいろ探すと【1568-SEN-19451-ND】が丁度良かった。DigiKeyで\3,403-だ。円安の悪影響が若干出ているような気もするが、趣味の玩具としては許容範囲だ。他に気になる物もまとめてポチる。
…………
CPUには【ATOM Lite】を使う。加速度センサとか搭載していないシンプルな構成なので、I2Cを好き放題使いたいときには重宝する。
WiFiも付いているので、PC側でソフト作ったらデータロガーみたいな使い方もできてなおよし。
【1568-SEN-19451-ND】側の電源電圧は素子直結で3.3Vなので、【ATOM Lite】のGroveコネクタを使うわけにはいかない。かつて買い漁った余り部品に【ATOM Mate】があったので、それ付属の基板を使うことにした。
ケーブルもQWIIC用の【C-15885】が余っていたのでそれを使う。長年電子工作を趣味にしていると、こういう小さい部品が部品箱の隅から出てきたりして助かったりする。まぁ、おかげで部屋が片付かないんだけど。
結線はこんな感じ。
GND G ……黒…… QWIIC Pin1
電源 3V3 ……赤…… QWIIC Pin2
SDA GPIO25 ……青…… QWIIC Pin3
SCL GPIO21 ……黄…… QWIIC Pin4
家族が寝ている深夜未明に、テーブルにはんだごてを広げて即席ではんだ付け。趣味人間なオッサンの幸せタイム。はんだ付けの際にはダイニングのテーブルを焦がさないように注意が必要だ。
滅多に使わないはんだごてだが、いいモノを用意している。白光の【FX-600】に、C2のコテ先【T18-C2】を付けたものだ。面実装部品にも対応できるいいモノだ。
…………
簡単な配線作業が終わったら、ソフトを作成する。使うのはArduinoだ。
コレは大きいものを作ろうとするといろいろ不足しがちだが、ちょっと弄るぐらいならちょうどいい。Webでリポジトリとか調べて、必要なボード情報とライブラリをインストール。
ToFセンサのライブラリは、メーカー公開のソースコードを元に【とても素晴らしい人】がArduinoに移植してくれていたりする。とてもありがたい話だ。
ライブラリは【SparkFun_Qwiic_TMF882X_Arduino_Library】をインストール。ドキュメント読んで真面目にコーディングするのはめんどくさいので、付属のサンプルを改造する。
ライブラリをインストールするとサンプルもインストールされて、スケッチ例のメニューから呼び出せる。
そこから【Example-11_Histogram】を読みだす。CPUが純正のArduinoではなく【ATOM Lite】なのでちょっと工夫が必要。とくにI2Cのインターフェイスのあたり。
setup関数で、シリアルポートをした後に以下の行を追加。
Wire.begin(25,21);
そして、ToFセンサを初期化するコードを以下のように書き換え。
前:if(!myTMF882X.begin())
後:if(!myTMF882X.begin(Wire))
こうすることで、結線したI2Cの配線に合わせてToFセンサが初期化される。やりたい放題するためにもドライバの内容は解読したいけど、今はとりあえず動かすのが先。わくわくだ。
コンパイルすると、あっさり通って書き込みが始まる。
…………
シリアルモニタからヒストグラムが出力される。TMF8821は3×3のエリア検知で動いているので、ヒストグラムは10系統出力されるようだ。0番がセンサ内部のクロストーク参照用。0点補正のようなもので、短い時間にピークがある。
残り9系統は、3×3のエリアそれぞれのヒストグラム。
高さ約70cmのテーブルから床にかざして測定。5番が中心なので、0番と5番のヒストグラムはこんかなんじ。
時番号 , 0番 , 5番
1 , 6 , 424
2 , 5 , 408
3 , 6 , 463
4 , 7 , 450
5 , 2 , 396
6 , 3 , 403
7 , 4 , 394
8 , 6 , 415
9 , 5 , 423
10 , 6 , 394
11 , 5 , 415
12 , 5 , 420
13 , 9 , 477
14 , 11 , 429
15 , 13207 , 458
16 , 36050 , 467
17 , 12407 , 435
18 , 5746 , 429
19 , 3248 , 373
20 , 1937 , 496
21 , 1206 , 548
22 , 779 , 610
23 , 561 , 476
24 , 437 , 515
25 , 334 , 439
26 , 287 , 440
27 , 242 , 455
28 , 194 , 7412
29 , 150 , 9515
30 , 138 , 2140
31 , 117 , 942
32 , 121 , 670
33 , 86 , 535
34 , 69 , 472
35 , 64 , 454
36 , 62 , 399
37 , 45 , 393
38 , 36 , 437
39 , 44 , 400
40 , 36 , 412
41 , 28 , 374
42 , 26 , 421
43 , 22 , 403
44 , 21 , 409
45 , 13 , 418
46 , 9 , 399
47 , 10 , 406
48 , 10 , 363
49 , 14 , 435
50 , 7 , 396
51 , 8 , 437
52 , 9 , 412
53 , 7 , 362
54 , 13 , 405
55 , 11 , 399
56 , 7 , 356
57 , 11 , 377
58 , 4 , 406
59 , 6 , 402
60 , 8 , 412
61 , 5 , 377
62 , 8 , 383
63 , 4 , 421
64 , 4 , 416
65 , 3 , 388
66 , 6 , 366
67 , 4 , 381
68 , 5 , 397
69 , 6 , 403
70 , 5 , 400
71 , 3 , 404
72 , 3 , 383
73 , 7 , 391
74 , 5 , 367
75 , 9 , 411
76 , 3 , 399
77 , 7 , 414
78 , 1 , 389
79 , 7 , 375
80 , 6 , 379
81 , 3 , 386
82 , 3 , 379
83 , 5 , 363
84 , 10 , 432
85 , 9 , 401
86 , 8 , 381
87 , 6 , 384
88 , 5 , 370
89 , 9 , 380
90 , 5 , 381
91 , 4 , 391
92 , 5 , 386
93 , 4 , 370
94 , 8 , 400
95 , 5 , 410
96 , 3 , 365
97 , 14 , 381
98 , 8 , 398
99 , 10 , 357
100 , 4 , 394
101 , 3 , 346
102 , 4 , 423
103 , 6 , 382
104 , 6 , 377
105 , 5 , 337
106 , 4 , 370
107 , 8 , 370
108 , 9 , 370
109 , 6 , 352
110 , 5 , 365
111 , 7 , 396
112 , 7 , 341
113 , 10 , 421
114 , 4 , 367
115 , 8 , 340
116 , 3 , 365
117 , 4 , 368
118 , 7 , 373
119 , 7 , 359
120 , 2 , 383
121 , 6 , 355
122 , 6 , 372
123 , 11 , 397
124 , 6 , 405
125 , 6 , 374
126 , 7 , 349
127 , 7 , 377
128 , 2 , 320
0番と5番のピーク位置の差分から距離を求めるような原理かな。時番号16番がセンサ内部の距離ゼロのピークで、29番が床からの反射光のピークと考えると、時番号1あたり5cmぐらいかな。ちょっと分解能荒いのかな? 設定変更でそこを変えることもできるのかもしれん。、まぁ、今回は動いただけでもよしとしよう。
データシート熟読していろいろ遊ぶのはこれからだ。STのデバイスではヒストグラムの生データ出力とか無かったから、これはこれでオモロイ使い方ができるかもしれん。
…………
何かに使うわけではない。何かを作るわけではない。ただ部品を動かしてみたい。そんな趣味の電子工作。ちょっと小銭をはたいて最新技術に触れる愉しみ。
アラフォーオッサンの趣味人間の夜は明けていく。
いや、コレ小説じゃないだろ。とか、Qiitaでやれとか、そういう話かもしれん。でもまぁ、エッセイの一種と考えれば許容範囲なのかどうなのか。
ロマンあふれるトンデモ原理なデバイスが小銭で買えるこのご時世。ある種の電気屋として、そんなものがあるよということを書いてみたかった。