ジャンク品の大型ヒートシンクをOrange Pi Zero2に付けてみた

学生時代、新宿河田町近辺でバイトしてて、その前後に秋葉原に行くのに新宿車庫←→秋葉原駅東口の都営バスに乗ることが多かった。(この路線は都営大江戸線開業で廃止)
秋葉原の電気街を利用するには終点の秋葉原駅東口は行き過ぎで逆に不便なので万世橋と昌平橋の間のバス停(万世橋バス停だっけ??)で降りることになったわけだが、バス停降りてすぐにところにあるのがジャンク屋の日米商事。そして、ラジオデパートの地下、万世橋を渡ってすぐのガード下のラジオガァデン、この辺りを徘徊してたときに購入したヒートシンクが我が家の神秘のジャンク箱から発掘された。これはUPSのAPC SU3000の冷却用として4つ並べて使ってたけどその後長く行方不明になってたもの。

ちなみに、PC系のジャンク屋は日米商事から2,3軒離れた地下(これも日米商事だったよね?)、丹青と湘南通商とラジオデパートの地下に行くことが多かったかな。その頃はジャンク漁りではLAOXザ・コンより北側(のジャンク通り)はあまり行かなかった。(PC用新品パーツを買うときはそっち方面に行ったけど)

OrangePi Zero2は、とんでもなく熱くなるわけではないが、実家の倉庫の屋根裏に設置予定で、鉄板とかトタンの建物なので夏場はメチャクチャ暑くなる場所。そこに冷却ファン無しで置く予定なので、発掘した巨大ヒートシンクを付けてみようと思った。

ジャンクのヒートシンクをOrangePi Zero2に付けてみた 1
写真の黒いのがヒートシンク。ジャンク品になる前にどのような用途で使われていたのかは不明。上に置いてあるシール容器がOrangePi Zero2。あきらかにヒートシンクが巨大すぎるが今回はこれで決まり。

ジャンクのヒートシンクをOrangePi Zero2に付けてみた 2
OrangePi Zero2のSoCとヒートシンクの間は銅キューブ。SoCと銅キューブ、銅キューブとヒートシンクの接触面は熱伝導テープを使ってガッチリ貼り付けることに。グリスの方が熱伝導性能は高そうだけど動いたり剥がれたりがイヤなので。

ジャンクのヒートシンクをOrangePi Zero2に付けてみた 3
ヒートシンクの向きが前の2枚の写真とは違うけど、タイバンドでヒートシンクとOrangePi Zero2を固定するのにこの向きの方が良さそうなのでこうなった。黒いタイバンドでキツすぎない程度に縛る。タイバンドのテンションかけるとおそらくOrangePi Zero2が壊れることに。

実験として、19インチラックの中のクソ暑いところに風を当てずにこのOrangePi Zero2を置いて動かし続けたがOrangePi Zero2の温度計が70℃を超えず順調。気温が20℃程度の涼しい夜中でラックの中が35℃程度、その状態でOrangePi Zero2の温度計が45℃程度。
これならクソ暑い倉庫の屋根裏でも大丈夫かな?

昨年までの10数年ほどは大きめのヒートシンクが欲しければAliExpressなど中国通販で格安で新品を購入できたのだが、昨年あたりから特に封筒以上のサイズの送料が劇的に上昇して下手したら国内で買うほうが安いくらいになってるので再びジャンクが狙いめになってるかも。あと、捨てずにジャンク箱に保管しておくのも大事。

NTPサーバで使っていたGPSアンテナが壊れた

2017年3月頃に購入したGPSアンテナとNanoPi NEOで作ったNTPサーバを使っていたのだが、半月ほど前からNMEAセンテンスが受信できておらず、PPSも機能していなかった。NMEAセンテンス自体が停まっている(受信できない)ならGPSモジュールが壊れているかもという判断になるが、GPSモジュールと通信できていてNMEAセンテンスの値の部分が「空」なのでGPSアンテナかそのケーブルが壊れたのだろうという判断になった。
そこで新しいGPSアンテナを購入。

GPSアンテナが壊れた 1
今回新しく購入した車載用(車内設置用)GPSアンテナ。いつものようにAliExpressで購入。3mのケーブルとSMA端子付きで330円(送料無料)。防水対応として販売している店もあるようだが、防水ではない。

GPSアンテナが壊れた 2
アンテナ本体部分の裏側は銀色の金属シールが貼ってあり磁石が入っていて鉄板などにひっつけられるようになっている。
なんか、緑のROHSマークが付いてるけど本当にRoHSなのかは謎。

古いアンテナを外し、この新しいアンテナをGPSモジュールに接続したところ、正常にGPSの情報が受信できるようになってNTPサーバとしても正常に動作するようになった。
新しく購入したアンテナは以上。

壊れたアンテナを調べてみる

2017年に購入したときのGPSアンテナ
2017年3月頃に購入したGPSアンテナについて書いた記事の写真
今回購入したのとほとんど同じ。緑のROHSマークが無いのが違う程度?

GPSアンテナが壊れた 3
1つ前の写真は新品時だが、この写真が現在のもの。4年間屋外で建物の壁に貼り付けられていたのでキチャナイ状態。白っぽいのはパテ。

GPSアンテナが壊れた 4
裏返した状態。防水/防塵のためのパテがグルリ。そして壁面への取り付けは3Mの超強力両面テープ。パテについている焦げ茶の粒のようなは湿った黄砂?

GPSアンテナが壊れた 5
両面テープとパテを一応取り除いた。

GPSアンテナが壊れた 6
金属シールをめくると磁石が付いていた。金属シール自体が磁石シールということではなかったみたい。で金属シールの接着剤で磁石が張り付いている。GPSアンテナの黒い樹脂側にはシールも接着剤も無く只の窪みがあるだけ。

GPSアンテナが壊れた 7
直径12mm、厚み0.5mmのネオジム磁石が直径14.5mmの金属製の皿の上に載っている。シールの接着剤が付いてるので判るが磁石がシールに張り付いている。皿はおそらく磁石を保護するため。この写真を撮った後にオネジム磁石だけを剥がして別のネオジム磁石に引っ付けたところ、この0.5mm厚の磁石はそれだけで割れてしまった。皿は大事だったのね。

GPSアンテナが壊れた 8
このGPSアンテナ本体は黒い樹脂ケースに封入されていて、組み立てたときはおそらくシールの貼ってあった面が蓋になっていたのだろうと思われるが、溝にヘラを突っ込んでもまったく歯が立たず。側面の樹脂部分を1周グルリと糸ノコで切断。

GPSアンテナが壊れた 9
樹脂ケースを分離するとこうなった。左側の灰色に見える部分は鉄板のシールド。右側の丸いのは電池の窪みの裏側。

GPSアンテナが壊れた 10
金属のシールドの反対の面がパッチアンテナ本体。この面で。GPSからの電波を受信する。アンテナ付きGPSモジュールに付いてるのと全く同じもの。
GPS用のパッチアンテナは1.575GHzの電波受信に最適化するために25 x 25mmの正方形の鉄板をGNDプレーンとして基板に、もう1枚の一回り小さい鉄板(放射素子)を約4mmの隙間を開けて平行に位置するように置く。で、2枚の板を接続するピン(給電点)が打ち込んである。そして、鉄板が曲がったり平行が狂わないようセラミックで隙間を塞いである。(作るときはおそらく話は逆でセラミックをベースにその両面に作っていくんだろうけど)
2枚の鉄板の間は理論上は「空気」が最も利得が高いんだろうけど作るのが難しいか精度が保てないようで、GPS用で「空気」なのは売ってるのを見たことがない。それと、セラミックを使うと短縮率何パーセントかは知らないけど空気より2枚の鉄板の距離を縮められるみたい。

GPSアンテナが壊れた 11
そもそもこのGPSアンテナの何が壊れていたのか。
シールドの部分はLNAの基盤で、アンテナケーブルがそこに取り付けられているのだが、シールドとケーブルの接続部分付近が以上にサビていて、ハンダ付けされていた筈のケーブルはとっくに取れていた。黒い樹脂でケーブルが押さえつけられていたので抜けてはいなかったけど、断線状態。

GPSアンテナが壊れた 12
シールドを剥がしてみた。シールドの中にはLNA用と思われる部品とパターンがある。この基盤の反対面には25 x 25mmのGNDプレーンが形成されている(筈)。シールドは4隅の内の対角2箇所だけがハンダで固定されていた。ケーブルの取り付け部分は写真の「↑ここ」と書かれた部分。水分で腐って剥がれたみたい。

今回購入した新しいアンテナはパテではなく接着剤で完全に密封しようと思う。特にケーブルの生えてる部分。
屋外設置なら車内用ではなく船舶用のキノコ型アンテナを買う方が良いのかもしれないが、お値段が一気に5〜20倍に跳ね上がるのとポールに取り付けることが前提の品物なので壁面に両面テープで気軽に貼り付けて終わりとはいかない点で困るのよね。

dump1090-fa 5.0のウェブ表示ができない問題

dump1090-faとPiAwareの5.0がリリースされていたので、それぞれarm64のdebian用パッケージとしてビルドしてインストールした。
dump1090-faとPiAwareの5.0のビルドは4.0のビルドと必要環境&やり方は同じ。

で、気になったのがdump1090-faのウェブUIがエラーになって表示されないこと。dump1090-faのウェブUIはウェブサーバとしてlighttpdが使われているのだが、これがエラーで起動できない。
何故かlighttpdとdump1090-faのパッケージインストール後の初回だけは起動するのに次回からは起動しない。最初、インストールしていたOrangePi Zero 2がハングアップした後にlighttpdが起動しなくなるのでハングアップが影響しているのかと勘違いしたが、これは見当違いだった。(OrangePi Zero 2のハングアップが多いため)

$ sudo systemctl status lighttpd
● lighttpd.service - Lighttpd Daemon
   Loaded: loaded (/lib/systemd/system/lighttpd.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2021-05-06 23:02:50 UTC; 11h ago
  Process: 2552 ExecStartPre=/usr/sbin/lighttpd -tt -f /etc/lighttpd/lighttpd.conf (code=exited, status=0/SUCCESS)
  Process: 2563 ExecStart=/usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf (code=exited, status=255/EXCEPTION)
 Main PID: 2563 (code=exited, status=255/EXCEPTION)

lighttpdサービスのステータスを見てみたが、lighttpdは自分で能動的に使うウェブサーバじゃないのでよく知らない。とりあえず/etc/lighttpd/lighttpd.confを見たがよくわからなかった。

異常が起きて困ったら見るのがログ。そこでlighttpdのログを確認してみた。

$ ls -l /var/log/lighttpd
total 0
-rw-r--r-- 1 root root 0 May  6 23:02 access.log
-rw-r--r-- 1 root root 0 May  6 23:02 error.log

なんかログが空なんですけど・・そして、ファイルオーナーがroot。フザケンナ

/lib/systemd/system/lighttpd.service
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[Unit]
Description=Lighttpd Daemon
After=network-online.target

[Service]
Type=simple
PIDFile=/run/lighttpd.pid
ExecStartPre=/usr/sbin/lighttpd -tt -f /etc/lighttpd/lighttpd.conf
ExecStart=/usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf
ExecReload=/bin/kill -USR1 $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

lighttpdのサービス用ファイルを見た。
特殊なことはやってないようなので8行目を実行してから9行目を実行してみれば良さそう。

8行目を実行してみた。
$ /usr/sbin/lighttpd -tt -f /etc/lighttpd/lighttpd.conf
2021-05-07 10:48:49: (plugin.c.190) Cannot load plugin mod_setenv more than once, please fix your config (lighttpd may not accept such configs in future releases) 

mod_setenvというモジュール?が複数回ロードされようとしているみたい。おそらく設定ファイルの複数箇所でmod_setenvが読み込まれるようになってる?

lighttpdの設定ファイルは/etc/lighttpd/lighttpd.confだけでなく/etc/lighttpd/conf-enabledディレクトリの中にあるのもそうみたい。 そこには4つファイルがあった。といっても/etc/lighttpd/conf-availableディレクトリにあるファイルのシンボリックリンクだけど。
  • 88-dump1090-fa-statcache.conf
  • 89-dump1090-fa.conf
  • 89-skyaware.conf
  • 99-unconfigured.conf

この中で、89-dump1090-fa.conf(旧UI用?)と89-skyaware.conf(新UI用?)の中にmod_setenvについての設定がある。
dump1090-fa 5.0ではhttp://IPアドレス/dump1090-faにアクセスするとhttp://IPアドレス/skyawareにアクセスするように促す表示が出る。(旧UIも使えるようだが)
それを考えると89-dump1090-fa.confは要らないのかなという気もするが、とりあえず残しておいて、89-skyaware.confの中のmod_setenvの行をコメント化する。

/etc/lighttpd/conf-enabled/89-skyaware.conf
# Add CORS header
server.modules += ( "mod_setenv" )  ←この行を探す

見つけたら行頭に #を付けてコメントにする。

lighttpdを起動するコマンドを手動で実行
$ /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf
2021-05-07 11:15:24: (server.c.750) opening errorlog '/var/log/lighttpd/error.log' failed: Permission denied
2021-05-07 11:15:24: (server.c.1461) Opening errorlog failed. Going down. 

mod_setenvよりもそもそもの原因はこれ。lighttpdが起動するときにログファイルに書き込めなくて落ちてたということみたい。
先にログファイルを確認したときにログファイルのオーナーがrootになっていてヘンだと思ってたのよね。

lighttpdのサービス用ファイルに3行挿入する。
/lib/systemd/system/lighttpd.service (8行目の直前に3行挿入)

ExecStartPre=/usr/bin/touch -c /var/log/lighttpd/access.log
ExecStartPre=/usr/bin/touch -c /var/log/lighttpd/error.log
ExecStartPre=/bin/bash -c '/bin/chown www-data:www-data /var/log/lighttpd/*.log'

サービス用のファイルを書き換えたらデーモンリロードを実行。またはそのサービスを無効化して再度有効化する。

$ sudo systemctl daemon-reload    普通はこちら
または
$ sudo systemctl disable lighttpd   無効化して  
$ sudo systemctl enable lighttpd   再度有効化する

なんでログファイルのオーナーがrootで作成されてしまうのかという根本的な部分は調べてないし不明なままだが、「がとらぼ」の中の人がLinuxに不慣れということでここは放置。おそらくlighttpdのパッケージに間違いがあるのでいつか誰かが修正してくれるでしょう。

$ sudo systemctl start lighttpd    lighttpdサービスを起動
$ systemctl status lighttpd    lighttpdサービスのステータス表示
● lighttpd.service - Lighttpd Daemon
   Loaded: loaded (/lib/systemd/system/lighttpd.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2021-05-07 11:17:09 UTC; 11s ago
  Process: 15305 ExecStartPre=/usr/sbin/lighttpd -tt -f /etc/lighttpd/lighttpd.conf (code=exited, status=0/SUCCESS
 Main PID: 15310 (lighttpd)
    Tasks: 1 (limit: 1127)
   Memory: 964.0K
   CGroup: /system.slice/lighttpd.service
           └─15310 /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf

May 07 11:17:08 orangepizero2 systemd[1]: Starting Lighttpd Daemon...
May 07 11:17:09 orangepizero2 systemd[1]: Started Lighttpd Daemon.
Lighttpdサービスを起動してステータスを見たがエラーにならずActiveになっているので問題なさそう。

dump1090-fa 5.0のSkyAware
lighttpdが正常に起動するようになったのでdump1090-fa 5.0の新ウェブUIのSkyAwareが表示できるようになった。なお、ADS-Bの1090MHz用ではないロッドアンテナをつないでいるので航空機は1つも見えていない。また、実家に設置すること前提で設定しているので上の画像の地図には近畿を中心とする同心円が描かれている。