なんちゃって同軸コリニアアンテナを作ってみた

以前に中国通販で購入したスペック6dBiのADS-B(1090MHz)用アンテナがどうしても信用できなかった「がとらぼ」の中の人は、6dBi程度のアンテナならド素人でも作れるんじゃないかしらと無謀なことを思ってみたり。

1090MHz用PCBアンテナ 2
信用できないのはこの白パイプのアンテナね。緑でUSB端子付きの箱はRTL-SDRチューナー。

そこで、ネットで情報の多い同軸ケーブルを利用したコーリニアアレイアンテナ (Coaxial Collinear Array Antenna 英語のページではCoCo Antennaなんて略されてるみたい)を作ることに。
無線の知識は全然無いので、一応軽くググってみた。(下)

  • 同軸コリニアアンテナは芯線と外側の網線が互い違いになるように1/2λの長さの給電エレメントを作り必要な段数を構成する。
  • 両端には1/4λの長さの位相整合部を付ける。
  • 先端側の位相整合部の上端は芯線と網線をショートする。
  • (さらに一番先端に1/4λの芯線を付ける) これは要るのか不明。
  • アンテナの部材はインピーダンス50Ω(またはテレビアンテナ用75Ω)で揃えた方が良さげ。が、拘らなくても可?
  • 根本側の位相整合部の下にチューナーに繋がる同軸ケーブルと平行に1/4λの長さのスタブを付ける(調整用)
  • (スタブと同じく根本側の位相整合部の下に両端ショートの1/4λの長さのバランを付ける)ネットの作例を見ると要らないような・・

今回はコリニアアンテナを作る練習ということで、同軸ケーブルは長年使われていなかった衛星放送のアンテナから室内に伸びていたのを回収したケーブルを使用した。また、コネクタは3Cの同軸ケーブルをつなぐ用のNコネクタ50Ω。と出処不明のNコネクタ−SMA変換アダプタなど、有り合わせ過ぎる部材を寄せ集めたのでインピーダンスも50Ωと75Ωが入り乱れ。今回は気にしない。

今回使う同軸ケーブルはS5CFVという絶縁体が発泡ポリエチレンなアルミ箔無しの古そうなもの。5Cなので75Ω。一応周波数的には1090MHzはいける筈。ケーブルの絶縁体が発泡ポリエチレンなので短縮率は80%の筈。

中心周波数1090MHzの波長(λ)は275.04mm
1/2λ = 137.52mm、短縮率を掛けて丸めて110mmとする。
1/4λ = 68.765mm、短縮率を掛けて丸めて55mmとする。
外皮が残る部分が110, 55mmなので、芯線はそれぞれ両端に15〜20mm程度出るように切る。

6段のコリニアなので給電エレメント110mmが6本
位相整合部がx2、スタブx1、で55mmが3本
バランは1/4λに短縮率を掛けずに69mm を1本

ただし、ディップメーターやアンテナアナライザなどの測定機器がなければ調整のしようがないのでスタブは意味がないかも。 また、スタブは細い同軸ケーブルの方が調整しやすいらしいというネット情報を見た。

アンテナケーブルを切る時はカッターナイフの刃を外皮に当ててケーブルを転がすようにして切ると比較的上手くいくが、今回は丸まりクセの強い古いケーブルを使うのでカッターナイフで切るのではなく同軸ケーブルストリッパーを使うことにした。

同軸ケーブルのストリッバーはあった方が作業がラク。AliExpressで送料無料で70〜90円程度なので1つくらい持っていた方が良いかと。日本のアマゾンだと僅かにお高め〜1000円程度のぼったくりまで。

ほんの少しお高めで300〜500円程度だけど、こちらは多機能。ただし、中央の刃が危なっかしいと思う。日本のアマゾンだと1000円程度。
もちろん、こんなおもちゃではなくてもっとまともな製品もたくさんあるけど使う頻度を考えると普通の人には勧めにくい。

同軸コーリニアアンテナ作成 1
購入した同軸ケーブルストリッパー。もちろん安い方。

同軸コーリニアアンテナ作成 2
実家で何時頃からあったのかか判らない古い衛星アンテナを外したときに回収した巻いておいた同軸ケーブル。マスプロのS5CFV。

同軸コーリニアアンテナ作成 3
ニッパーで同軸ケーブルを切るのは全くオススメできない。この写真のように絶縁体を潰しかねないのでNG。

同軸コーリニアアンテナ作成 4
同軸ストリッパーの内側にはA〜Eの文字があって、最初はBの位置に絶縁体用の刃(内刃)がある。外皮用の刃(外刃)はDの位置。それぞれの刃の位置はピンを抜くことで変更できるらしいが余程気に入らないのでなければ普通は触らないかも。
問題は、絶縁体を切る内刃の位置が判りにくいこと。A〜Eまでの文字が書かれてはいるが、少なくとも1mm以内の精度で切りたいのであれば、上の写真のように刃の位置をマークしておいた方が良いと思われる。

同軸コーリニアアンテナ作成 5
今回は外皮を剥く必要はなくて芯線だけ出せば良いので外皮カッターの位置調整ネジを本体付属の六角レンチで半時計回りにまわるところまで回して緩める。(普通の力で回せばネジは抜けない筈)これで外刃は使われなくなる。
外皮を剥く時は内刃用のネジと同程度まで締めてから、外皮の厚さに応じて多少締め方を調整する。

同軸コーリニアアンテナ作成 6
ケーブルはオレンジの部品のXが大きく見えている側が先端側で、同軸ケーブルの先の部分は本体から少なくとも1〜2cm程度は出るようにセットする。ケチって先を1cm以下しか出さないと切った断面が汚くなるかも。
5C, 5Dの太さ(普通の家庭で屋外のテレビアンテナなどに使われる外経7mm程度)のケーブルの場合は本体の▲にオレンジの部品の「6」(RG-6?)を合わせるようだが、数字に合わせてセットすると上手く綺麗に切れない。写真のように数字の「9」(RG-59?)に合わせると上手く切れる。造りが悪いのか使い方が悪いのかは不明。

製品の想定?
6: RG-6 外径7mm程度
8: RG-58 外径5.0mm程度
9: RG-59 外径6.2mm程度
D: RG-174 外径2.5mm程度

同軸コーリニアアンテナ作成 7
絶縁体が発泡ポリエチレンの同軸ケーブルの場合は絶縁体が柔らかすぎるからかバネまかせにすると刃の食い込みが変になりやすいのでバネを僅かに緩めるように力を入れて持って、本体に書いてある矢印方向に本体を回す。矢印方向と反対に回すと何故か網線が滅茶苦茶になるので必ず矢印を確認してから回す。バネを緩めるように持つのは最初の1周だけ。後はバネまかせで本体を3周以上回すと抵抗が急に軽くなるのがわかるので、軽くなったらストリッパーを外す。

同軸コーリニアアンテナ作成 8
ぐるぐる回して軽くなったらこの写真のように先端が抜けかけているかと思われる。

同軸コーリニアアンテナ作成 9
芯線だけを残して綺麗に切れました。本来の切り方ではないけど、これで綺麗に切れる。ただし、ときどき網線が正しく切れずに芯線に巻き付いていることがあった。発泡ポリエチレンの中に網線の1本が埋もれて芯線に触れているということもあった。発泡ポリエチレンに埋もれてしまうと気づきにくいが、そのままだと当然ショートなので注意。

ちなみに今回は簡単な「挿すだけ」方式にした。下は参考にしたYoutubeの動画。

同軸コーリニアアンテナ作成 10
芯線の先端ををニッパーで斜めに切り落とす。斜めに切ったバリ部分をヤスリで落とす。これで先端が注射器の針の先のように尖る。全ての芯線の先端にこの加工を行う。

エレメントを繋ぐ際は、それぞれ切り落とした芯線の先の斜めカット部分が外を向くようにしてケーブルの外皮の内側に差し込む。斜めカット部分が内側を向いていると外皮を突き破って外に飛び出やすい。ただし、絶縁体が発泡ポリエチレンだと非常に柔らかいので網線と発泡ポリエチレンを突き破って芯線とショートする可能性があるので注意。できるだけまっすぐ網線の外側に差し込む。

このとき、Youtubeの動画の様にエレメントとエレメントの間に20x20mm程度のビニールテープを1枚挟んでおく。両側のエレメントの芯線だけがこのビニールテープを突き破る形。このビニールテープが両側のエレメントの網線同士でショートするのを防ぐ。(上の写真では見えやすいように省略している)

同軸コーリニアアンテナ作成 11
手持ちのNコネクタは3Cケーブル用なので細い。芯線側は良いとして、外皮の上を覆うパイプ(カシメてケーブルを固定する金具)が細くて使えない。しかたがないのでハンダで網線ごとコネクタに固定する。ケーブルを頻繁に動かすなら頼りなさすぎだが、仮止めならこれで十分。スタブは1/4λ x 0.8(短縮率)で、バランは1/4λなので本当ならスタブが1/5短い筈だけど、スタブも1/4λ程度(むしろ長い)になっている。後で切る予定。バランは両端ともにハンダ付きでショートさせている。さらにバランの根本側のショート部分とチューナーに繋がるケーブルの網線を接続。

同軸コーリニアアンテナ作成 12
バランとスタブの(アンテナ)先端側が名目上の給電点という位置づけになる。ここから先は網線と芯線が交互に繋がるように取り付ける。エレメントが抜けないようにビニールテープでつなぎ目を巻いた。今回は試験的なアンテナでテキトーなのでビニールテープを使っているが、屋外に長期間設置するアンテナであればビニールテープではなく融着テープを使う。融着テープはダイソーでも売ってるくらいなのでそんなに特殊なものではないと思う。

VNAもSWRメーターも無いので作りっぱなしで計測も調整も無し。したくてもできない。
つまり、デタラメ&テキトーな、なんちゃってコリニアアンテナの完成。

しかし、こんなデタラメなアンテナだが、例の自称6dBiアンテナ+BPFフィルタ+LNA付きに余裕で勝っちゃうんだよねぇ、これが。
屋根の上に設置したわけではなく窓の内側にガムテープで仮止めしてぶら下げただけだが、チューナーをオンにして数分後には100km以上先の飛行機を楽に捕えている。窓の外で遠くまで開けている少しの範囲だけだけど。
200km、300km先の飛行機までというのは現時点では確認できていないけど、屋根の上にアンテナを設置したらせ可能性はあるかしら?
デタラメに作ったアンテナでこれなら適切に制作・調整された6〜8段くらいのコリニアアンテナだと凄いかも。ただし、アンテナを設置する実家は山に囲まれているのであまり段数を増やすと垂直方向が狭まってダメだと思う。

関連記事:

Prometheus2によるシステム監視 FreeBSD標準のエクスポーター prometheus_sysctl_exporterを使う

FreeBSD 12からはprometheus_sysctl_exporterというPrometheus用のExporterが何故かOS標準で入っている。
Linuxではprocで取れるような値でsysctlで取得できる値は、難しいことをしなくてもprometheus_sysctl_exporterで取れてしまう。
前々回あたりにやったFreeBSDのCPU温度取得はsysctlで取っていたので、当然それもprometheus_sysctl_exporterで取れる。
FreeBSDだとNode Exporterでは取れない値が多いのだが、prometheus_sysctl_exporterが一部その代替となるかも。

問題は「がとらぼ」の中の人が管理するホストにはFreeBSD 11がまだ半分ほど残っているので、全てでprometheus_sysctl_exporterが使えないこと。
また、FreeBSDだけではなくてLinuxもあるので全てのホストでprometheus_sysctl_exporterに統一するというのも無理。
できたらNode Exporterとprometheus_sysctl_exporterを併用は避けたいかなと思う心がある。
FreeBSDではNode Exporterで取れない値があるといってもそれが重要な値でもないというのが正直な感想。
さらに、Node Exporterの標準状態で取れない値で必要なのがあればCPU温度みたいにsysctlで取ってNode Exporterに渡せば良いじゃん?
prometheus_sysctl_exporterの出力データが多すぎるんだけど、これを全てPrometheusで受けさせるの?
prometheus_sysctl_exporter側で出力項目を制御できないのかしら?

どうしようかな?
是非使ってみたいという気持ちではないけど、今後に備えて一応触ってみた。ネットに情報が全然無いので手探りだけど。

prometheus_sysctl_exporter はターミナルで /usr/sbin/prometheus_sysctl_exporter を実行すれば、「sysctl_hoge_hoge 値」というのを大量に返してくる。
これをPrometheusが取りに来た時に渡すようにすれば良い。
FreeBSDではこれはinetdで動かすことを想定しているみたい。

/etc/inetd.conf (最終行)
#prom-sysctl stream tcp nowait nobody /usr/sbin/prometheus_sysctl_exporter prometheus_sysctl_exporter -dgh

行頭の#を削ってinetdを起動すれば使えるみたい。
ただ、inetdは昔から嫌いなのよね。最近は改善されているのかも知らないけど。

そこで20年前と変わらずinetdの代替としてtcpserverを使うことにする。(頭が化石でスミマセン)

tcpserverのインストール

# cd /usr/ports/sysutils/ucspi-tcp
# make install

configオプションは初期値で特に問題ない。
tcpserverはサービス起動周りが何か用意されているわけでもないのでこれだけ。

prometheus_sysctl_exporterをネットで使う

prometheus_sysctl_exporterは標準でTCPポート9124を使うみたい。

$ tcpserver -H -R  0 9124 /usr/sbin/prometheus_sysctl_exporter & 

今回はtcpserverのアクセス制御は入れていない。

では、ネット経由でprometheus_sysctl_exporterのメトリクスを表示してみます。

$ curl http://ホストアドレス:9124
curl: (1) Received HTTP/0.9 when not allowed

あれっ?HTTP/0.9だって言ってる?HTTP応答ヘッダが無いの?

$ curl --http0.9 http://ホストアドレス:9124
または
$ echo -e "GET /\r\n" | nc ホストアドレス 9124
sysctl_kern_osrevision 199506
sysctl_kern_maxvnodes 3350688
sysctl_kern_maxproc 13444
sysctl_kern_maxfiles 4030976
sysctl_kern_argmax 262144
sysctl_kern_securelevel -1
sysctl_kern_hostid 1764859756
sysctl_kern_posix1version 200112
sysctl_kern_ngroups 1023
sysctl_kern_job_control 1
sysctl_kern_saved_ids 0
sysctl_kern_boottime_seconds 1568628839.445746
sysctl_kern_osreldate 1200086
sysctl_kern_maxfilesperproc 3627792
sysctl_kern_maxprocperuid 12099
大量に後略

おおっ、表示できた。でも、Exporterのデータで見るHELP hogeっていう説明が一切付いてない。
prometheus_sysctl_exporterのヘルプによるとオプションが3つだけあるのね。

  • -d メトリクスの説明を付けて表示
  • -g HTTP応答ボディのGzip 圧縮あり
  • -h HTTP応答ヘッダーを付ける
なるほど、-hオプション無しだとHTTP応答ヘッダ無しなのね。っていうか、これオプション全指定が標準で良くない?

自動起動スクリプト

直前で見たオプション3つを指定して自動起動させる。
FreeBSDの自動起動は起動スクリプトを書いて/usr/local/etc/rc.dの下に置くだけ。
ただし、起動しっぱなしは行儀が悪いと思ったら同ディレクトリの他のスクリプトと同様にstart, stopで制御できるものにした方が良いかも。(下)

/usr/local/etc/rc.d/prometheus_sysctl_exporter (新規作成)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh
# Add the following line to /etc/rc.conf to enable prometheus_sysctl_exporter:
# prometheus_sysctl_exporter="YES"

PATH=/usr/local/bin:/bin:/usr/bin:/usr/sbin

. /etc/rc.subr

name="prometheus_sysctl_exporter"
rcvar="${name}_enable"
start_cmd="${name}_start"
stop_cmd="${name}_stop"

prometheus_sysctl_exporter_start() {
        tcpserver -H -R 0 9124 prometheus_sysctl_exporter -dgh & 
}

prometheus_sysctl_exporter_stop() {
        killall tcpserver
}

run_rc_command "$1"

なお、上のスクリプトではサービス停止がkillallによる全tcpserver停止という手抜きなので他にtcpserverを使っていたら注意。

実行属性を付ける
# chmod +x /usr/local/etc/rc.d/prometheus_sysctl_exporter
自動実行フラグの設定
/etc/rc.conf (1行追加)
prometheus_sysctl_exporter_start="YES"
または(コマンド)
# sysrc prometheus_sysctl_exporter="YES"
サービスの開始・停止
# service prometheus_sysctl_exporter start      システム再起動後のサービス手動スタート
# service prometheus_sysctl_exporter onestart   システム再起動前のサービス臨時スタート
# service prometheus_sysctl_exporter stop      システム再起動後のサービス手動停止
# service prometheus_sysctl_exporter onestop   システム再起動前のサービス臨時停止

出力確認

GZIP圧縮を有効にしたので確認にはブラウザを使う。http://ホストアドレス:9124を開く。

# HELP sysctl_kern_osrevision Operating system revision
sysctl_kern_osrevision 199506
# HELP sysctl_kern_maxvnodes Target for maximum number of vnodes
sysctl_kern_maxvnodes 3350688
# HELP sysctl_kern_maxproc Maximum number of processes
sysctl_kern_maxproc 13444
# HELP sysctl_kern_maxfiles Maximum number of files
sysctl_kern_maxfiles 4030976
# HELP sysctl_kern_argmax Maximum bytes of argument to execve(2)
sysctl_kern_argmax 262144
# HELP sysctl_kern_securelevel Current secure level
sysctl_kern_securelevel -1
# HELP sysctl_kern_hostid Host ID
sysctl_kern_hostid 1764859756
# HELP sysctl_kern_posix1version Version of POSIX attempting to comply to
sysctl_kern_posix1version 200112
# HELP sysctl_kern_ngroups Maximum number of supplemental groups a user can belong to
sysctl_kern_ngroups 1023
# HELP sysctl_kern_job_control Whether job control is available
sysctl_kern_job_control 1
# HELP sysctl_kern_saved_ids Whether saved set-group/user ID is available
sysctl_kern_saved_ids 0
大量に後略

希望通りの出力になった。
この後は、Prometheusに読み込ませて、Grafanaのダッシュボードを作成するところだけど、今回はここで気力が尽きたのでおしまい。

以下、2023年1月23日追記

出力項目のフィルタ

FreeBSD 13.1からは-iオプションと-eオプションが追加されて出力する項目を調整できるようになった。

  • -i オプションは出力する項目の指定
  • -e オプションは除外する項目の指定

たとえば prometheus_sysctl_exporter でフィルタ無しで出力した中に以下のような項目があって、それが不要だとする。

sysctl_compat_linux_setid_allowed 1
sysctl_compat_linux_use_emul_path 1
sysctl_compat_linux_map_sched_prio 1
続く

sysctl_compat_linuxから始まることが共通しているので

# prometheus_sysctl_exporter -e sysctl_compat_linux

このように-eオプションを付けて実行すると sysctl_compat_linux〜 が抜けた状態で出力される。

反対に、CPUの温度だけが欲しいというとき、sysctl_dev_cpu_coretemp〜だけ出力したいなら-iオプションでその項目を指定する。

# prometheus_sysctl_exporter -i sysctl_dev_cpu_coretemp

指定した項目以外は表示されない。

複数項目を指定したいなら「\|」で区切ることが可能。

# prometheus_sysctl_exporter -e sysctl_kern_features\|sysctl_vm\|sysctl_vfs_nfs\|sysctl_vfs_nfsd\|sysctl_debug\|sysctl_hw\|sysctl_machdep\|sysctl_user\|sysctl_p1003\|sysctl_dev\|sysctl_security\|sysctl_compat

こんな感じ。上の礼は-eオプションだが、-iオプションでも指定の仕方は同じ。
なお、-eオプションと-iオプションの併用は注意が必要っぽい。-eで除外した項目を-iで表示しようとするなど矛盾した指定を行うと何も出力されなくなるよう。

関連記事:
Up