概要
北陽電機様の「UST-10LX」を、RaspberryPi5(以下:ラズパイ)を介して通信しNucleo-f446re(以下:ヌクレオ)で使うという試みです。
20万円ぐらいするこのセンサがなぜうちにあるのかは永遠の謎です。加えてラズパイとヌクレオを使用したあまりにも高級なセンサを、シロート制御班がとても雑に陳腐にメイキングしていきます。

周囲270°の物体までの距離をかなりの精度で読み取れるこの代物。果たして実用化に至るか!?
次第
- ヌクレオとラズパイをUART通信、読みたい角度位置を送信
- ラズパイとUST-10LXをイーサネットで通信、距離データを取得
- ラズパイからヌクレオにデータを送信、ヌクレオで距離データを取得!
結果
読めた!実用的!誤差±1cmぐらい?(←すげぇ)
ロボコン大会において、我々はヌクレオとモバイルバッテリーをUSBでつないで電源供給を行っている。ラズパイにも電源、すなわちモバイルバッテリーを用いる。そこで、
モバイルバッテリー – ラズパイ – ヌクレオ
といった具合に接続してみる。すると、モバイルバッテリー一つでラズパイとヌクレオ両方に電源供給ができるではないか!地味に便利でうれしい。

受難
イーサネット通信においては、公式ソースコードを丸パクリするだけでOKだった。製作者は通信初心者なので、UART通信にも一苦労した。精進しなきゃ。
まず、データ先頭ビットのズレに悩まされた。わからない人のために説明すると、例えば3ケタのデータを送信しようとしたとき、1→2→3桁目の順に送信する。(例:180)

順調に1→8→0の順に読んでくれるといいのだが、そうはいかない。連続でデータを送ると、先頭がどこなのかわからなくなってしまう。するとずれちゃうのだ。

ヌクレオとラズパイは互いに送受信を行う。が、このバグはラズパイが受信したときのみ見られた。まぁ、「企業製マイコンの超安定通信」&「雑魚が書いた通信用プログラム」なら納得できる結果である。これは、ヌル文字を基準にデータを整列させることで解決した。

妙なことに、ヌクレオ側も「送信時にDMAを使用しない」尚且つ「受信時にDMAを使用する」ときのみ通信ができ、それ以外は一切のデータの行き来がなかった。「何言ってるかわからないよ~」っていう方、奇遇ですね!私もです。
変な通信をしているおかげで、マイコン側で通信が停止してしまうことがよくある。(←深刻)ということで、エラーのトラブルシューティング関数が存在するので、それを毎通信ごとに実行するという力技で押し切った。これで晴れて実用化に至る。あまり使うのに気が乗らない
コメント