ToF距離センサの仕組み
しっかりとした正しい知識を基礎から学び、長く電子工作を楽しむことができるようになることを目的とした今回の連載。分かりやすく解説してくれるのは、金沢大学電子情報通信学類教授の秋田純一先生です。記念すべき第1弾はセンサの仕組みを解説。
第1回となる今回は数あるセンサの中から、ToF距離センサについて解説をしていただきます。
目次
1. いろいろな距離の計測方法
みなさん、こんにちは。金沢大学の秋田純一と申します。よろしくお願いいたします。
早速ですが、マイコンを使って何か作るとき、距離を測りたいことって、よくありますよね?
例えば障害物をよけて進むロボットとか、手を近づけたらアルコール消毒液を出す、といった場合です。こういうときは、いわゆる「距離センサ」を使うことになります。
対象物までの距離を測る距離センサには、いろいろなタイプのものがあります。例えば、スイッチサイエンスのサイトで「距離センサ」で検索すると100件近くの製品がヒットします。
距離の測定原理は、大きく分けると、よく使われるものには次の2タイプがあります。
- 対象物までの波の往復時間を計測する
- 三角測量法で計測する
往復時間を計測するものの例としては、少し前までは超音波を使うものがポピュラーでした。超音波は空気中の音波のうち、周波数が可聴域より高いもの(40kHz程度が多い)で、その速度Vは、いわゆる音速(約340m/s)です。センサから対象物までの距離をLとすれば、往復にかかる時間Tは、T=2L/V ですので、Tを計測すればLがわかる、というわけです。
例えばL=3mとすると、T=2・3/340 = 18ms程度となります。人間の感覚では、18ms(1/60秒くらい)は、あっという間ですが、マイコンでタイマを使えば、余裕で計測できそうですね。例えば1MHzのクロックだと18msは18000周期分です。
もうひとつの三角測量法は、センサと対象物の位置関係を利用するものです。この図のように、受光部から対象物が見える方向は、対象物までの距離によって変わりますから、この方向を計測すればいいわけです。
この方法の距離センサで、よく使われるものに「PSDセンサ」があります。これはPosition Sensitive Detectorの頭文字をとった名称で、距離に応じた電圧が出力されるものです(使ったことがある方だと、その電圧が距離の反比例に近い(けどちょっと補正が必要)というクセがあるのに苦労された方も多いかと思います)。
PSDは、入ってくる光の位置によって電圧が変わる素子で、三角測量法の原理から、対象物までの距離を計測することができます。この他、あまりお手軽ではありませんが、2台のカメラを使って、ステレオ視の原理から距離を求めるステレオカメラもあります。
2. ToFセンサと使い方
そんな中で、最近、けっこうお手軽に使えるようになってきた距離センサに、「ToFセンサ」と呼ばれるものがあります。「ToF」は「とふ」とか読むことが多いですね。
例えばスイッチサイエンスでは、ピッチ変換基板として売っていて、マイコンなどにI2Cバスでつないで使うことができます。
https://www.switch-science.com/catalog/2894/
同じセンサのチップを使ったGrove規格のものもあって、ArduinoやRaspberry Piなどで使うのにも便利です。
https://www.switch-science.com/catalog/3988/
さらに、M5Stack用のものもあります。
https://www.switch-science.com/catalog/5219/
マイコンからの使い方は、他のセンサ類とだいたい同じで、例えばArduinoであれば、ライブラリをインストールして、サンプルスケッチを開いて動かす、という、いつもの流れで使えます。
3. ToF距離センサの原理
このToFセンサの原理をみていきましょう。ToFとは”Time of Flight”の略で、日本語に訳すと「飛程時間」といったところでしょうか。つまり波などが飛ぶのにかかる時間、のことです。さきほど紹介した超音波距離センサも、超音波が対象物から反射して返ってくるまでの時間を計測していましたが、これも超音波の”Time of Flight”を使う、ToF方式、といえます。ただし最近は”ToF”と呼ばれる距離センサは、ほとんど場合、光を使います。つまり対象物に向かって光を照射し、それが対象物で反射して返ってくるまでの時間を計測するタイプのものです。
さりげなく「光の往復時間」と書きましたが、実はけっこうすごいことなのです。光の速さ(光速)は3×108m/s(毎秒30万km)です。「1秒間に地球を7回半」という例えをされることもよくありますよね。子どものころは無限に速いように思えていた光ですが、実は計算してみると、それなりに(?)時間がかかります。
例えば光が100mを飛ぶのにかかる時間は、100/(3×108) = 3.3×10-7sですから、330nsです。Arduino UNOのマイコンATmega328Pの動作クロックが20MHzですので、その周期は50ns、つまりさきほどの光が100m進むのにかかる時間はクロック6周期分ちょっと、ということになります。マイコンにとっては「止まって見える」というほどではないにしても、全く一瞬というわけでもなさそうです。
とはいえ、光の往復時間で距離を測るためには、その時間を精度よく計測する必要があって、さすがにマイコンのタイマで計測するのは無茶そうです。
いくら電子回路技術が進歩したとはいえ、光の往復時間を高い精度と分解能で計測するのはなかなか難しかったのですが、最近になって主に2つの技術的なブレイクスルーがあって、これが可能(というかお手軽な部品にできるようになった)になりました。
ひとつは、ブロック図にもあるSPAD (Single Photon Avalanche Diode)という素子です。これは、ダイオードの一種なのですが、ちょっと特殊な構造をしています。ダイオードのPN接合付近は空乏層と呼ばれる状態になっていて、そこに光が入ると電子-正孔ペアが発生して電流となり、これで光の強さなどを計測したり、カメラの画素の回路として使われます。
このSPADはダイオードを高い電圧の逆バイアス(カソード側からみてアノード側に負の電圧を加える)を加えておきます。これにより、光の最小単位である光子(フォトン)が1個入って電子-正孔ペアが1個できるだけでも、それがこの逆バイアス電圧によって加速されて次の電子-正孔ペアを次々に雪だるま式に生成していくアバランシェ(雪崩)降伏という現象がおこります。これによって、フォトン1個を検出できるものすごく高感度な光センサが実現できるようになりました。
もう1つは光の到来時間のような非常に短い時間を高精度に計測する回路の実用化です。これには大きく2つの方式があって、一つはTDC(時間-デジタル変換)と呼ばれる、クロック信号の計測に基づく時間計測回路です。これが「ムーアの法則」の恩恵で高速化され、いろいろな回路構成の工夫と相まって光の到来時間も計測できるようになりました。
もうひとつは電荷変調素子と呼ばれる素子(回路)で、これは光の到達時間のような極めて短い時間を、電荷の量(つまりアナログ電圧)として計測することができるものです。これにより、クロック信号をタイマで数えて計測するデジタル型の計測よりも高い分解能で時間を計測できるようになりました。この電荷変調素子の電荷の制御を、先程の超高感度光センサであるSPADでおこなうと、より高精度にできるわけです。
なお、このToFセンサで対象物に照射する光は赤外線レーザーなのですが、このVCSEL (Vertical Cavity Surface Emitting LASER)と呼ばれる構造の、小型なレーザー照射素子が安価に量産できるようになったことも、ここ数年で一気に身近なものになった要素のひとつです。
ところでこのToFセンサ、小型で高精度な距離計測ができるのですが、その原理上、光が透過してしまう透明な対象物は計測できません。そういう対象物までの距離を計測したいときは、超音波型を使ったりすることになります。
4. カメラとToF距離センサ
最近はこのToFの原理回路を、カメラの画素ごとに持たせた「ToFカメラ」と呼ばれるものも市場に出てきています。つまりカメラの画素ごとに、対象物までの距離を計測できる、奥行き(Depth)カメラとも呼ばれるものです。最近ですと、例えばMicrosoftのKinect v2がToFカメラ素子を使ったものです。
5. まとめ
センサの仕組みを解説していく本連載。第1回はToF距離センサについて紹介していきましたが、いかがでしたでしょうか?次回以降は加速度センサや温度センサについて、解説していきたいと思いますので、ぜひそちらもご期待ください。
今回の連載の流れ
第1回:ToF距離センサの仕組み(今回)
第2回:加速度センサの仕組み
第3回:温度センサの仕組み
第4回:光学式マウスのチップを拝む
第5回:チップを拝む〜互換チップの世界〜
第6回:ソースコードを覗く〜GPIO編〜
第7回:ソースコードを覗く〜analogWrite編〜
第8回:ソースコードを覗く〜なんか動作がおかしくなった編〜