dump1090-faとPiAwareをVersion 4.0に更新

dump1090-faのWeb-UI SkyAware

FlightAwareのフィーダーさんたちが使っている多数がdump1090-faとPiAwareだと思われるが、そのdump1090-faとPiAwareが2020年9月末にバージョン4.0になった。そこで、アンテナ建て替えの停止ついでに3.8から4.0に半年ぶりに更新することに。3月下旬リリースの3.8.1はスキップ。

dump1090-fa 4.0への更新

2020年10月9日時点でArmbainのarm64のシングルボードコンピュータで利用可能なパッケージではすでにdump1090-faの4.0が提供されている。なので、この記事のように自分でビルドしなくてもapt install dump1090-faでインストールするなりapt upgrade dump1090-faで更新するなりで終わりといえば終わり。
しかし、今回はレシーバの種類をRTL-SDRに限定してビルドした。

基本的なdump1090-faのビルド方法は以前のdump1090-faの記事と同じ。 ただ、RTL-SDRに限るオプションとして dpkg-buildpackage -b --no-sign の代わりに

$ dpkg-buildpackage -b --no-sign --build-profiles=custom,rtlsdr
ビルドしてできたパッケージをインストール。

上の手順だけでは更新の場合はおそらくウェブUIが動かない・dump1090が機能していない?という状態になる。

$ lighty-enable-mod dump1090-fa
これで更新前と同様に動作するようになる。

dump1090-fa 4.0の起動オプションの見直し

ネットの記事をちょろっと見てチャチャっとインストール〜動作させたようなフィーダーだと起動オプションが不適切なことがある。
今回は見直すことにした。
まずは、使用できるオプションを確認する。

$ dump1090-fa --help
前略
--device-type <type>     Select SDR type (default: rtlsdr)

      rtlsdr-specific options (use with --device-type rtlsdr)

--device <index|serial>  select device by index or serial number
--enable-agc             enable digital AGC (not tuner AGC!)
--ppm <correction>       set oscillator frequency correction in PPM
--direct <0|1|2>         set direct sampling mode

      ifile-specific options (use with --ifile)

--ifile <path>           read samples from given file ('-' for stdin)
--iformat <type>         set sample format (UC8, SC16, SC16Q11)
--throttle               process samples at the original capture speed

      Common options

--gain <db>              Set gain (default: max gain. Use -10 for auto-gain)
--freq <hz>              Set frequency (default: 1090 Mhz)
--interactive            Interactive mode refreshing data on screen. Implies --throttle
--interactive-ttl <sec>  Remove from list if idle for <sec> (default: 60)
--raw                    Show only messages hex values
--net                    Enable networking with default ports unless overridden
--modeac                 Enable decoding of SSR Modes 3/A & 3/C
--no-modeac-auto         Don't enable Mode A/C if requested by a Beast connection
--net-only               Enable just networking, no RTL device or file used
--net-bind-address <ip>  IP address to bind to (default: Any; Use 127.0.0.1 for private)
--net-ri-port <ports>    TCP raw input listen ports  (default: 30001)
--net-ro-port <ports>    TCP raw output listen ports (default: 30002)
--net-sbs-port <ports>   TCP BaseStation output listen ports (default: 30003)
--net-bi-port <ports>    TCP Beast input listen ports  (default: 30004,30104)
--net-bo-port <ports>    TCP Beast output listen ports (default: 30005)
--net-stratux-port <ports>   TCP Stratux output listen ports (default: disabled)
--net-ro-size <size>     TCP output minimum size (default: 0)
--net-ro-interval <rate> TCP output memory flush rate in seconds (default: 0)
--net-heartbeat <rate>   TCP heartbeat rate in seconds (default: 60 sec; 0 to disable)
--net-buffer <n>         TCP buffer size 64Kb * (2^n) (default: n=0, 64Kb)
--net-verbatim           Make Beast-format output connections default to verbatim mode
                         (forward all messages, without applying CRC corrections)
--forward-mlat           Allow forwarding of received mlat results to output ports
--lat <latitude>         Reference/receiver latitude for surface posn (opt)
--lon <longitude>        Reference/receiver longitude for surface posn (opt)
--max-range <distance>   Absolute maximum range for position decoding (in nm, default: 300)
--fix                    Enable single-bit error correction using CRC
--fix-2bit               Enable two-bit error correction using CRC (use with caution)
--no-fix                 Disable error correction using CRC
--no-crc-check           Disable messages with broken CRC (discouraged)
--mlat                   display raw messages in Beast ascii mode
--stats                  With --ifile print stats at exit. No other output
--stats-range            Collect/show range histogram
--stats-every <seconds>  Show and reset stats every <seconds> seconds
--onlyaddr               Show only ICAO addresses (testing purposes)
--metric                 Use metric units (meters, km/h, ...)
--gnss                   Show altitudes as HAE/GNSS (with H suffix) when available
--snip <level>           Strip IQ file removing samples < level
--quiet                  Disable output to stdout. Use for daemon applications
--show-only <addr>       Show only messages from the given ICAO on stdout
--write-json <dir>       Periodically write json output to <dir> (for serving by a separate webserver)
--write-json-every <t>   Write json output every t seconds (default 1)
--json-location-accuracy <n>  Accuracy of receiver location in json metadata: 0=no location, 1=approximate, 2=exact
--dcfilter               Apply a 1Hz DC filter to input data (requires more CPU)
--version                Show version and build options
--help                   Show this help

バージョンによって使用できるオプションが変わることがあるのでバージョンを更新した場合は設定変更するつもりがなくても確認しておくのが良さそう。 今回4.0では3.8で追加された --fix --fix の2ビット訂正が --fix-2bit に変更になっている。

また、ようやく --version でバージョン表示ができるようになった。
$ dump1090-fa --version
-----------------------------------------------------------------------------
| dump1090 ModeS Receiver                                   dump1090-fa 4.0 |
| build options: ENABLE_RTLSDR                                              |
-----------------------------------------------------------------------------

ところで、dump1090-faでゲインの設定ってどうしているだろうか。

https://discussions.flightaware.com/t/rtl-dongle-gain-question/15588
obj FlightAware Staffの発言の引用

librtlsdrには2つの異なるゲイン設定があり、これらのオプションが制御します
–enable-agc は、RTL2832U内のデジタルAGCを有効にします。実際には、これはあまり役に立ちません(デジタルステージ内でデータをスケーリングするだけなので、追加情報が抽出されることはありません)
–gain -10 は、チューナーチップでアナログAGCを有効にします。これは、有用である可能性が高くなります。
–gain(何か他のもの)はアナログAGCを無効にし、チューナーゲインをdB単位のその値(または近くにあるチューナーがサポートするもの)に直接設定します。
R820Tチューナーでは、チューナーのゲイン設定が実際にはLNA(RF)ゲインとミキサーゲインの両方を制御します。 librtlsdrを介してそれらを個別に制御することはできません。
アナログAGCは、信号が特定の強度にしばらく留まる場合に最適に機能し、フィードバックループを調整するための時間を与えます。これは、バーストが非常に短いため(1090MHz信号では実際には当てはまりません)、ほとんど)そしてあなたは広範囲の信号強度を得るでしょう。
個人的には、R820Tの最大ゲインから1ノッチ下の-ゲイン48で実行します。最大ゲイン(デフォルト)は、不均衡な量のノイズを追加するようです。強い/近い信号の場合、または増幅されたアンテナを使用する場合は、ADCステージでのクリッピングを回避するためにゲインを低くする必要があります。

ゲインは固定なら30〜48程度で設定 (--gain 48 など)、または、AGCを使うなら (--gain -10 AGCはこれ一択)だけど、ADS-BではAGCオンはあまりオススメではないらしい。他の人の意見でも。受信範囲を殆ど航空機が通らなくて1機だけを暫く追跡するような場合には有用らしいが。–enable-agcは問題外ということで。
そこで、「がとらぼ」ではAGC不使用に変更。ただし、固定の場合は環境に合わせた調整は面倒。次のdump1090-exporterのSignal Strengthのグラフを見ながら値を調整したところ、「かとらぼ」の環境(過剰に増幅する怪しいLNA使用)では --gain 30 くらいが一番良さそうな感じということになった。

https://discussions.flightaware.com/t/dump1090-mutability-dcfilter/30584
david.bakerの発言の引用

DCフィルターは、エンコードが振幅エンコードされているため、ADSBには役立ちません。 他の無線システムでは、非常に便利です。
RTLドングルとプロスティックは実際にはソフトウェア無線であり、他の周波数(数MHzから1.8GHz)を聞くために使用できます。 RTLドングルで使用されるテクノロジーは、低IFおよびゼロIF無線変換と呼ばれます。 ゼロIF変換は、ソフトウェアでフィルターで除去できるDC成分を出力に追加します。 一部の無線エンコーディングでは、DCオフセットを削除することが重要です。 ADSBではそれは問題ではありません。
DCフィルターをオフのままにしてください。

前回のdump1090-faの記事でCPUの使用率として少し触れたDC FilterはADS-Bでは役に立たないらしいので使用しない (--dcfilter は付けない)

2ビット訂正 (--fix --fix)オプションは4.0で --fix-2bit に変更になった。
ただし、2ビット訂正はFR24にフィードするなら使わない方が良いみたい。1ビット訂正 (--fix 1回指定)に留めるのが良さそう。

1ビット訂正 --fix について

https://discussions.flightaware.com/t/fix-parameter-in-dump1090-fa/65791
obj FlightAware Staffの発言の引用

転送中のノイズによって損傷した一部のメッセージに対してエラー訂正を行います。そうでない場合は破棄されます。 これの欠点は、ひどく損傷したメッセージが誤って「修正」され、悪いデータが生成される可能性が高くなることです。 通常、これらの不良メッセージは、後続の処理によって除外されます(これが「シングルトラック」統計の取得元です)

dump1090exporterの更新

dump1090exporterの更新はpipで行う。
$ pip3 install --update dump1090exporter
環境によってはpip3ではなくpip。

更新自体は簡単だが、オプションが変わっていて、動作が怪しいためdump1090 Prometheus ExporterでADS-B受信状況を監視するのようにデータの在り処のURLを未指定にするとaircraft.jsonが取得できなくなってる。他のjsonファイルは/dataに取りに行くのでdump1090exporterのバグ?
そして、データの在り処の指定オプションが変わっているっぽい。
--url=在り処のURL だったのが --resource-path=在り処のURL になった。どのバージョンで変わったかは調べてない。

dump1090-faのWebUIのURLがhttp://127.0.0.1:8080だとすると、データは(初期値では)その/dataにあるので http://127.0.0.1:8080/dataになる。

起動コマンドの例
$ /usr/local/bin/dump1090exporter --resource-path=http://127.0.0.1:8080/data --latitude=-35.xxxxxxxx --longitude=139xxxxxxxx

dump1090exporterのグラフ
Grafanaでチャートを表示してSignal Strengthの折れ線グラフ(下から2番め)を見る。dump1090-faで--gain 30を指定するとこれくらい。(あくまでも「がとらぼ」の中の人の環境で怪しいLNAを使用しての30指定でこれくらい。)
--gain の数値を増やすと3つのグラフが上方向に上がる。「がとらぼ」の環境だと40指定のようにむやみに高い数値を指定すると水色のnoiseが-5 dbFSあたりまで上がる。その結果はとても悪くなる。LNA無しだと先の引用のように48くらいを指定するのも良さそう。

PiAwareの更新

PiAwareもすでに4.0のパッケージが提供されているようなので面倒がイヤなら素直にパッケージを利用する方が簡単。
しかし、「がとらぼ」では前回に引き続きビルドする。
ビルドの基本はFlightAwareにフィードすると変わっていない。ただし、4.0では3.8より依存関係を満たすのが面倒になっている。

足りない
piaware depends on tclx8.4; however:
  Package tclx8.4 is not installed.
 piaware depends on tcllib; however:
  Package tcllib is not installed.
 piaware depends on tcl-tls (>= 1.7.16-1+fa1); however:
  Package tcl-tls is not installed.
 piaware depends on itcl3; however:
  Package itcl3 is not installed.

tclx8.4, tcllib, itcl3は普通に apt install hoge のようにインストールする。(嫌がられる場合は apt install -f hoge

のように-fを付けて強制する)

上の4つの内、piaware 4.0ではtcl-tlsは専用版が要るみたい PiAwareビルド時には要らないけどインストール以降で必要。
そこで、扱いやすいようにパッケージとしてビルドしてインストールする。

$ sudo apt install tcl-dev chrpath
$ cd ~/      (ホームディレクトリで)
$ git clone http://github.com/flightaware/tcltls-rebuild.git
$ cd tcltls-rebuild
$ ./prepare-build.sh buster     (Armbian, Debianのバージョンがbusterの場合)
$ cd package-buster
$ sudo dpkg-buildpackage -b --no-sign
$ cd ../
$ sudo dpkg -i tcl-tls_1.7.16-1+fa1_arm64.deb

PiAwareの更新は /etc/piaware.conf と /var/cache/piaware の中のファイルを消したりしなければ基本的にはトラブらない筈。

dump1090-faやPiAwareのバージョンを最新にしないとFlightAwareからフィードをブロックされるとかはないようなので、最新に保つ必要があるかと問われると「まぁ必要はない」けど、半年放置したので新しくしたい気持ちがあった。今回はアンテナの建て替えついでだからちょうど良かった。そういう機会がないとダウンタイムがそれなりに発生するから更新なんかしたくないしね。

クルマのヘッドライトのガチ黄ばみ落とし

今年の初めにヘッドライトをLEDに変えたのだが、なんかライトが鋭い光じゃなくヘッドライトユニットの中でモヤっとしている。そして、昼にクルマのヘッドライトを見ると透明樹脂のはずが劣化して真っ黄色でみっともない。ヘッドライトユニットのポリカーボネートの表面が細かいキズ(ヒビに見える)だらけ。イエローハットやオートバックスのようなカー用品店でポリカーボネートの表面を削って綺麗に仕上げてくれるようだが5千円以上かかるし、どの程度削ってくれるのかもよく判らない。
ガッツリ黄ばんでるのは自分でやりたいよね。

クルマのヘッドライトの黄ばみ落とし 1
洗顔コットン2枚を縫い合わせて、中にネオジム(ネオジミウム)磁石を1つ入れて閉じた袋を作る。これを複数用意する。普通の磁石では弱すぎるのでネオジム磁石が必要。ネオジム磁石は100均ショップでも売っている。写真は直径1.5cmのタイプのものだが、このサイズと重量がちょうど良い。(ダイソーで購入)

クルマのヘッドライトの黄ばみ落とし 2
袋に紐をつなぐ。紐は1mもあれば十分。ピックアップ用のワイヤーもあるとなお可。

クルマのヘッドライトの黄ばみ落とし 3
ヘッドライトのバルプを外し、磁石入りコットン袋に精製水を少量含ませてピックアップ用のワイヤーでヘッドライトユニットの内側から光が出る面まで運ぶ。ピックアップ用のワイヤーに磁石がひっつくとヘッドライトユニット内ではもう外れなくなってしまうので掴む場所は要工夫。結果的にはピックアップワイヤーより100均ショップで売っている一番大きなタイバンドの方が上手くいった。
で、ヘッドライトユニットの外側でもウェットティッシュなどにネオジム磁石をくるんでポリカーボネートの表面に当てる。ポリカを挟んで2つの磁石が引き合うようにすればヘッドライトユニットの外側で磁石を動かせば内側の磁石も動いて、それで精製水を含んだコットンがポリカーボネートの内側を拭いてくれる。
密閉されている割には意外と汚れていた。このときはポリカ外側の汚れと黄ばみのせいでよく見えなかったけど黄ばみ落としを行った後にまだまだ内側が汚れていたことが判明。黄ばみ落としが終わるまでバルブは嵌めずに待った方が良さげ。

クルマのヘッドライトの黄ばみ落とし 4
ポリカ内側表面だけでなくその奥の銀色の反射板も汚れていたので、100均ショップで売っていた一番大きいタイプのタイバンドに洗顔コットンをガムテープで固定して精製水を少量含ませてガシガシ動かして清掃。ガシガシとは書いたが、銀色の塗膜を傷めないよう優しく撫でるように拭く。
こちらもこのときは綺麗になったと思ったが黄ばみ落とし後に確認したらまだ汚れていた。
それにしても黄ばみが凄い。

クルマのヘッドライトの黄ばみ落とし 5
ボンネットを開けて、ヘッドライトユニットの縁にマスキングテープを貼る。(これは必須)
さらにテープとビニールシートの合体したマスカーテープ(ダイソーで購入)でヘッドライトユニットの下側を覆ってやるとなお良い。とくにコンパウントを使う場合は必須。サンドペーバーがけの間はマスカーテープは無しでも良いかも。ただしハデに汚れるけど。

クルマのヘッドライトの黄ばみ落とし 6
ダイソーで購入した耐水サンドペーバーのセット。#60から#1500まで適度に番手が飛んだ8枚入り。今回はガッツリ削るつもりなので#60を除く#120から#1500まで全て使う。黄ばみが酷く細かいひび割れが多数あるように見える場合は#120から初めた方が良いが、黄ばみが特にひどいわけではなくて細かいひび割れが無いのであれば#400あたりから始めれば良いかと思う。逆に、細かい方はこのダイソーの耐水ペーバーのセットでは#1500までしかないのでギリギリ感がある。できれば別途#2000〜#3000まで、または細目〜極細のコンパウンドがあった方が良いかも。ただし、最後のコーティングがウレタンスプレーなら#1200までくらいの方が塗膜の食いつきが良くて長持ちするかも。
ペーバーは5cm幅程度にハサミで切って使うと扱いやすい。

クルマのヘッドライトの黄ばみ落とし 7
#120で磨き始め。ポリカ表面とペーバーは常に濡れた状態で磨く。黄ばみが酷かったのですぐにひどい茶色の削りカスが出てくる。#120では出てくるカスが一応白くなるまで磨く。(完全に白しか出なくなったと思っても次の番手で磨くと少し黄色っぽいのが出るかもしれない)写真では斜めに磨いているが、斜めは良くない。ヘッドライトユニットの形に関わらず最初から最後まで常に水平方向と垂直方向に磨くのがオススメ。

クルマのヘッドライトの黄ばみ落とし 8
ペーパー側も黄色というより茶色に汚れが付いている。濡らしながらどんどん磨いていくと次第に薄い黄色になりやがて白くなる。

ペーバーで磨くときは絶対に力は入れずに撫でるように。特に、荒い番手で力を入れたら深いキズになるので要注意。そして番手を変えたらその前の番手のキズを必ず全て消す。これが重要。番手を大きく飛ばして細かい番手で荒い番手のキズを消そうとしても難しい。そこで、次のやり方をオススメ。
ペーバーの番手を変える前は水平or垂直のどちらかで統一して磨き、その方向のキズ(ヤスリ目)だけになるようにする。違う向きのキズやキズの気配が残っていたらまだ番手を変えない。キズの向きが統一されるまで磨く。(ヤスリ目を揃える)
番手を変えるタイミングでライトを点灯し、「ヒビ割れのように見える」のが残っていないことを確認する。
番手を変えて、直前と同じ方向に暫く磨く。全体をある程度磨いたら磨く方向を90度変えて、その方向で全体を磨き、その方向のキズだけになるようにする。
このやり方で目標の番手まで手を抜かずに頑張る。根気は要るがこのやり方だと仕上がりが綺麗だし「ヒビが残ってた」というのも回避できる。
円を描くように回したり斜め方向に磨くのは絶対NGだと思ってひたすら水平方向と垂直方向を守る。

クルマのヘッドライトの黄ばみ落とし 9
ヘッドライトユニットの表面を濡らして磨いてを繰り返すとエンジンルームに水が飛ぶ。それを避けるためにプラダンやショップタオルなどで蓋をしておくのをオススメする。ボンネットを閉じるのはあまり良くないと思う。コンパウンドを使うならおなさら。
#1500まで磨いて水分を拭き取ると表面はこんな感じ。真っ白な磨りガラス状態。水をかけると透明にはなるけど。

クルマのヘッドライトの黄ばみ落とし 10
ホームセンターで購入したプロスタッフの「魁 磨き塾 ヘッドライト本気(ガチ)コート」。実売価格が800~900円程度なので気軽に購入できる。マイクロファイバーのクロスとかビニール手袋とかコーティング用ペーバーとスポンジなど作業に必要に一式が一応入っている。ただ、あくまで本体は「下地クリーナー」(黄色ラベル)と「コート剤」青ラベルの小瓶。
新しめのクルマならこの記事のようにサンドペーパーで表面を削らなくてもこのセットの「下地クリーナー」からでも多少の黄ばみは取れるらしい。この下地クリーナーはコンパウンドが入っているだけでなく石油系溶剤も入っているので、この記事のようにサンドペーバーで#1500までしか磨いていないなら是非使いたいところ。逆に#3000相当くらいまで磨いているなら「下地クリーナー」は要らないかも。「コート剤」は小瓶だけど、伸びが良いので量は要らない。1セットで数台分使えそう。さらに、この「コート剤」はクルマの外装の黒い樹脂部品にも使える。古いクルマは黒の未塗装樹脂が白っぽく汚くなるが、この樹脂が黒に蘇るので結構嬉しい。コーティングはシリコンオイルよりは長持ちする。コート剤だけで売って欲しいくらい。

クルマのヘッドライトの黄ばみ落とし 11
下地クリーナーで磨いて拭き取ったところ。(コンパウンドなので水洗いして必ず拭き取る)
真っ白な磨りガラスだった表面が石油溶剤のおかげなのか水分無しでもだいぶ透明っぽくなった。まだ少し白っぽいけどたぶん下地クリーナーではこれが限度。

クルマのヘッドライトの黄ばみ落とし 12
「魁 磨き塾 ヘッドライト本気(ガチ)コート」のセットに入っている黒い小さなスポンジに白い不織布の帯を巻き付けて、その1面に「コート剤を塗る」(数滴たらすだけでつけ過ぎないこと)
コート剤の付いた面でヘッドライトユニットのポリカーボネートに塗る。このとき1度になるべく広くズバっと塗って、なるべく「塗り重ねない」。ただし、塗り漏れがない程度に。コート剤を塗ったところは一瞬で透明になるので塗ったところと塗ってないところはよく判る。

コート剤は塗ってからは見た目は変わらないが、完全硬化までは24時間かかるらしい。なので、塗ってから1日は水がかからないように、なるべくなら走らせずに1日放置。

黄ばみ落とし前と比べると別物のように綺麗になって嬉しい。しかし、内側がまだ汚れていたことが判明。逆に言えば内側の汚れが判らないくらい外側が汚れてた。夜にヘッドライトの光で浮かび上がる細かいひび割れのようなのが気になっていたが確認しながら磨いたのでこれは綺麗に無くなった。(ヘッドライトユニット内側の拭きムラと水滴の残りが見つかったけど)

約1000円と3時間と根気があればオススメ。

100均の缶でアンプのケースを作ってみた

コンクリート詰めダイソースピーカーにPAM8406アンプを付ける」で購入したアンプだが、クソ安い中身に似合わない高級機に見えるケースに入れてやろうかとか考えていたのだが、今年AliExpressでは以前のように何でもかんでも送料無料とかはなくなって、ちょっと大きなモノは送料がバカ高くなっているが、特に金属ケースの類だと商品が2000円で送料が5000円とかシャレにならない状態になってる。中に入れるアンプが高級なものならちょっと高くても見合ったエンクロージャを用意しようかとは思うが、中身が500円でケースが送料込み1万円ちかくだと意味がわからなすぎる。
そこで悩んだ末に、「じゃあ100均の缶でいいや」ってことで作ったってのがこの記事。

中身はこれね。

100均の缶でアンプのケースを作る 1
100均ストアで購入したのはこの缶。サバでも入ってそうな雰囲気。

100均の缶でアンプのケースを作る 2
底の面、今回はこの面が上側になる。つまりこの写真の状態で使う。

100均の缶でアンプのケースを作る 3
中はこんなの。

100均の缶でアンプのケースを作る 4
蓋が今回はアンプ基板を支えるベースになる。基板の四隅の穴と同じ間隔で穴を開ける。

100均の缶でアンプのケースを作る 5
開けた穴にネジを通し、六角ナットで固定。写真では六角ナット2つひっついてるけど、これは離して基板を支えるようにする。

100均の缶でアンプのケースを作る 6
基板をはめてさらに六角ナットで固定する。基板をこの向きにしたのはボリュームのダイヤルの高さをなるべく缶の中央に近づけたかったから。

100均の缶でアンプのケースを作る 7
本来なら容器本体で、今回はカバーになる側。手前側の穴がボリューム用。奥側の3.5mmプラグが刺さってる部分がプラグが通るサイズの穴。写真では申し訳程度に刺さっているが、実際はプラグがずっぽり中に入り込む。その左隣りは電源とスピーカーのケーブルを通す穴。この穴は缶の内側と外側共に同じ大きさの穴のワッシャーを貼り付ける。ケーブルが缶の縁で傷まないようにするため。缶の加工はこれだけ。

100均の缶でアンプのケースを作る 8
缶の蓋を閉めたところ。ボリュームの穴もちょうど良いサイズ。

100均の缶でアンプのケースを作る 9
背面になる側。手前側が電源とスピーカーケーブルの穴。ワッシャーも既に付いて缶に接着済み。奥側の白いケーブルがオーディオ入力用の3.5mmプラグが刺さった状態。プラグ部分は缶の中に完全に隠れている。このままだと缶に当たる部分のケーブルが痛む可能性があるのでこの後、ケーブルに熱収縮チューブを付けた。

100均の缶でアンプのケースを作る 10
完成。
大きさ比較用に上にACアダプタを置いてみた。

100均の缶でアンプのケースを作る 11
ダイソーUSBスピーカーとパッシブラジエーターのの成れの果てコンクリートスピーカーとの組み合わせ。激安品にふさわしいケースかも。

こんなんでも音はゴキゲン。ダイソースピーカーの元の樹脂ケースだとペラッペラ・ビリビリな鳴り方だけど、超重量級のコンクリート詰めにして安物だけど一応まともに鳴らせるアンプを付けたことで、低出力小口径にしては一応低音も出てカッチリした音が鳴る。今回のアンプケースは鳴り方には関係ないけど。