SSブログ

ミリ波レーダーを使った動体検知システム(5/5)

 リモートレーダー子機にはこれまでRaspberry pi 3B (以降Raspi 3Bと呼びます)をレーダーデータ受信ならびに転送用PCとして使って来ましたが、少し贅沢すぎるかなという感がありました。また、ケース内の温度が高く夏場の暑いときの測定例ではCPUは83℃ありました。これはクロックのスロットリングで限界の85℃にならないよう抑えられていたのかも知れませんが、ともあれ温度が高過ぎます。
そこで機能がシンプルで消費電力が少なく廉価なPCに置き換えることにしました。
最初はESP32で出来ないかと思ったのですが、レーダーのUSBインターフェースデバイスXDS-110はOSを持ったPC用のドライバーしか提供されておらず、結局OSのある安いPCとしてRaspberry pi Zero WH (以降Raspi Zeroと呼びます)を採用しました。

 図1に新子機のシステム構成を、図2に回路図を示します。
Raspi Zero でレーダーデータをUPD送信をする場合は構造がシンプルですが、MONO TWELITEで送信する場合は更にESP32とMONO TWELITEが必要になって若干構造が複雑になります。今回は後者の製作例を紹介します。

図1 子機システム新構成
図1_レーダーシステム子機新構成V3.0.jpg

図2 新子機回路図
図2_レーダーシステム子機新回路V3.0.jpg


新子機の製作
 新子機のハードウェア製作方法はこちらにまとめてあります。
<2021.09.16追記>
Raspi ZeroのCPU温度が高かったので熱対策を強化しました。
こちらを参照してください。<追記終>

消費電流が減ったので以前は2個使っていた5Vレギュレータ―は1つにできた事もあり、内部が大分すっきりしました。

今回の製作ではRaspi ZeroのWiFiはアンテナの位置が悪く非常に繋がりにくいです。(TWELITEを使う事を目標にしたので行く行くはWiFi無しのRaspi Zeroにしようと思っていたもので。)
Raspi ZeroでUDPを使う事を考えられている場合はアンテナ位置に充分注意して配置をご検討下さい。

ESP32については ESP32-WROOM-32U という外付けアンテナタイプのモデルがあり、それ用のアンテナも販売されています。プログラム書き込み用のツールが必要になりますが場合によってはこれを使った方がより確実なWiFi接続が期待できます。
ESP32とTWELITEの回路については記事「ESP32 & 2.8" G_LCD一体型ユニットの製作 」が、書き込みツールに関しては記事「ESP32書き込みツールの製作」が参考になると思います。


ハードウェア
・レーダーからのデータをUDPで転送するだけの場合はRaspi ZeroからWiFiで送信するだけですが、MONO TWELITEで送信する場合はデータ量や送信頻度を下げるための処理が必要で、そのための処理をRaspi Zeroで行うと処理能力を超えてレーダーデータの取りこぼしが起きてしまいます。
そこで受信したレーダーデータを即座に他のマイコンに転送してTWELITEでの送信用パケットにするまでの処理をする事が必要で、そのためにデュアルコアのESP32を採用しました。

・通信にESP32 UDP または MONO TWELITEを使う場合はRaspi ZeroはWiFi非対応のタイプでも良いです(Raspi Zeroのセットアップは手間がかかりますが。)

・電源は各マイコンのDOからの制御でリセット(TJ60S04M3Lで電源OFF-ON)できるようにしてあります。(TWELITEの場合は他の用途もあるので4ビット全てがLowの時電源リセットになる)

・ESP32のIO4は電源立ち上げ時に0.5V位のノイズが出るのでそれでトランジスタがONしないようダイオードを入れてあります。通常はダイオードはOFFなのでトランジスタのベース電圧を安定化するために10kをGNDとの間に入れてあります。

・ESP32はシステムの立ち上がり時にRaspi Zeroからリセットされるほか、ESP32 UDP通信時ならびにTWELITE通信時には親機からの信号でリセットできるようにしてあります。

・Raspi ZeroとESP32の5Vラインにはショットキーダイオードを入れ、それぞれのUSBポートからも5V供給があった時のトラブル防止をしています。

・SPIの信号は比較的高速の上ノイズを拾いやすいので出来るだけ短く且つGNDラインに並行して配線してください。今回はクロック8MHzで使用していますが、波形はきれいで問題ありませんでした。


ソフトウェア
ソフトウェアのダウンロードは以下で出来ます。
・RadearSW_3.1.pkg (最終) => ダウンロード ・・・要修正(2023.02.27)
・RadearSW_3.0.pkg (参考) => ダウンロード ・・・要修正(2023.02.27)

設定方法、使用方法はこちらの資料を参照してください。 => ダウンロード
資料は最初に「レーダーシステムの設定手順」を読むと手順全体の流れがわかりやすいです。

 ソフトウェアを作る中でいくつか問題や疑問にぶつかりました。以下は同じような事をされる方の参考になればと思い書いておきます。

・Raspi ZeroでUART転送するプログラムは当初データ受信部のみC言語で作りレーダー設定やUDP送信はPythonで行うようにしてプログラムを一旦完成しました。これはRaspi 3Bを使ってプログラミングをしたのですが(これがまずかった)、これをRaspi Zeroで走らせたところデータ転送が遅くて使えず、やっぱり全てC言語にしないと駄目でした。

・Raspi ZeroはUART0, UART1の2つ使えるとの事でしたので、1つをレーダーにもう一方をESP32に繋いでレーダーデータを転送しようとしたのですが、エラーが起きてだめでした。エラーメッセージからするにUARTは2つを同時に使う事は出来ないようでしたのでESP32への送信方法をSPIにすることにしました。クロック周波数はradar.cファイルのマクロ定義で8MHzにしてあります。

・Raspi Zeroに用いたSPIライブラリによるものか、Raspi側をマスターにしてSPIモードは0に設定するという選択しかないようです。

・SPI送信されたレーダーデータをESP32(スレーブ)のシリアルモニターに表示して動作確認をしようとしたのですが表示が出ず結構考え込んでしまいました。原因は、データはボーレート921600bpsで0.1秒おきに1024Bを送信されて来るのに対しそれをシリアルモニターに115200bpsで表示しようとしていたので表示が間に合わなかったことでした。パケットの始めの64Bのみ表示するようにしたらデータ表示が流れるようになりました。

・ESP32はSPIで送られてくるデータをTask1で受信しTask2で処理・転送するというマルチタスク仕様にしてあります。
殆どプログラムの完成時に気が付いたのですが、間違ってTask1もTask2もCore1で設定してありました。それでも処理速度的に遅さを感じなかったのですが、Coreを別々にしようと Task1をCore1, Task2をCore0にしたらすごく遅くなってしまい使い物になりませんでした。
逆にTask1をCore0, Task2をCore1にしたところ問題ない速度になりましたが、両TaskをCore1で行った時と差が分かりませんでした。一応別Coreを使いたかったので最終的にはこの設定にしてあります。

・ESP32はシリアルポートがUART0, UART1, UART2の3つあり、プログラミング用にUART0が使われているのでTWELITEとの通信をUART1, UART2で試みました。ところが、送信はできるのですが受信データが壊れていました。UART1, UART2でも、HardwareSerial設定をしても、マルチタスクを止めても、送信・受信をUART1,UART2で分けても、いずれも受信データが壊れていて駄目でした。結局親機から子機への通信は以前作ったTWELITEの改造プログラムでTWELITEのDO(4ビット)を制御することで行うことにしました。

・レーダーのデータはUDPの場合100mS間隔で子機から送信されている(ESP32の送信ループ時間で確認。これはレーダーの設定値と合致している)のですが、なぜか親機のPyhtonプログラムで受信ループ時間を測ると平均で70mS位となっています。(送信都合でいつも同じ間隔というわけではありません)
受信パケットのFrame番号は順番になっていて重複はないので、測定方法かPythonの測定時間に誤りがあるとしか考えようがありません。(time.time()を使った極めてオーソドックスな測定方法なのですが。)とりあえず送信側の100mSで受信しているとしています。

<後記>
 これで納得の行く子機の構成となりましたが、もしRaspi Zeroがデュアルコアだったらもっとシンプル構造になったのにと思います。
ESP32はハイスペックなのですが、中々思うような動作をしてくれないデバイスという感じがします。対処法をインターネットで調べたり検討したりで結構手間がかかりました。
デュアルコアという点を除いてはESP8266の方が利点があるのではないでしょうか。
センサーデータの処理ではスレッド1でデータ取得スレッド2でその処理という構成は良くあるので、安価で性能が良くプログラムしやすいデュアルコアMPUのシングルボードPCが欲しいものです。

(2022.08.25記)
2022年6月にクアッドコアのRaspberry Pi Zero 2 W (約2,700円)が発売されました。
品薄で8月下旬になっても入手できていませんが、将来的にはこれを使ってESP32を省くシステム構成の方が良いと思います。
(2022.09.21記)
更に改造してポータブルタイプのシステムにしてみました。
興味がありましたら「ポータブルミリ波レーダーの製作」をご覧ください。


===== 関連記事 =====
ミリ波レーダーを使った動体検知システム(1/5)
ミリ波レーダーを使った動体検知システム(2/5)
ミリ波レーダーを使った動体検知システム(3/5)
ミリ波レーダーを使った動体検知システム(4/5)
ポータブルミリ波レーダーの製作


>> ブログ記事一覧へ
nice!(0) 
共通テーマ:趣味・カルチャー

nice! 0