距離センサーを回して周囲を測る「レーダーもどき」は、Arduinoの定番課題だ。ただし多くは、角度と距離をシリアルモニターに流して終わる。Salim Ammar氏が公開した「arduino-matlab-ultrasonic-radar」は、そこから先の表示側を作り込んだ。超音波センサーHC-SR04を連続回転サーボの上で回し、測定値をシリアルでPCへ送って、極座標のリアルタイム表示として描く。制御はArduino Nanoで、部品代は合計10ドル、日本円にしておよそ1600円だという。
超音波で距離を測る仕組みは、音が跳ね返るまでの時間から逆算する。したがって精度は音速の正確さに左右され、音速は気温で変わる。同氏は1ドル(約160円)のLM35で気温を読み、331.3に0.606を掛けた気温を足す式で音速を補正した。マイコン側では、内蔵の基準電圧と比べて電源電圧そのものを校正し、温度の測定値には係数0.15の指数移動平均をかける。ADCの雑音対策として、使わないデジタル入力を切り、10nFのコンデンサーを入れ、8回分を平均する。こうした積み重ねで±3mmの精度になったとしている。
ファームウェアはdelay関数を使わず、待機、走査、復帰の3状態を持つ非ブロッキングの状態機械として書かれている。エコーの待ち時間にもタイムアウトを設ける。360度を2510ミリ秒、毎秒およそ143度の速さで回り、シリアルの通信速度は25万bpsだ。PC側とはREADYの合図をやり取りしてから走査を始め、5秒で応答がなければ打ち切る。ポートが切れた場合は5回まで自動で再接続を試みる。
表示側はMATLAB App Designerで806行ある。極座標のヒートマップ、サーボの角度に追従する掃引線、復帰時に色を変えて引く線、カーソルを重ねると角度と距離が出る表示、Ctrlキーとスクロールによる拡大、ベクター形式でのPDF書き出し、ダークとライトの切り替え、COMポートの自動検出まで入る。配線図とピン配置、サーボの校正ツール、測定結果はリポジトリにあり、ライセンスはMITだ。ただし表示側にはMATLABが要る。またサーボについて同氏は、連続回転に改造したSG90は長持ちしないので、最初から連続回転用のFS90Rを使うほうがよいと書き添えている。