2017年12月9日土曜日

Raspberry Pi + SDRで流星雨の電波観測を試してみる

RTL-SDRをRaspberry Piと組み合わせてスペアナ表示など機能をフルに使用するとCPU稼働率が100%を超え音切れが発生したりアプリが異常終了してしまう現象がありました。

Raspberry Pi3では発生しない(しにくい)のですが、初期モデルであるRaspberry Pi model B,B+
では、顕著に発生します。

B,B+にRTL-SDRは不向きかと思い始めましたが良い方法を思いつきました。

それはRaspberry PiにA/D変換と転送処理だけを行わせ、Qt(GUI)環境下でスペアナ表示のFFTや復調処理など重い処理をPCか、別のRaspberry Piにお任せすることのできるSDRサーバーともいえる構成でデータ転送には有線LANか無線LANを使用したTCP接続で行う方法です。

以下にその手順を示します。
ここでは、有線LAN、無線LANの接続の方法には触れませんがお持ちの環境下でRaspberry PiのLAN接続は済ませておいてください。
また、Port5900(UDP/TCP VNC)と Port 1234 (UDP/TCP VLC data stream)を使用します。ルータやファイアウォールなどこのポートをあけておいてください。

使い方を確認するためにヘルプを表示します。

pi@SDRPI0:~/gqrx-2.6-rpi2-2 $ rtl_tcp --help
rtl_tcp: invalid option -- '-'
rtl_tcp, an I/Q spectrum server for RTL2832 based DVB-T receivers

Usage:  [-a listen address]
        [-p listen port (default: 1234)]
        [-f frequency to tune to [Hz]]
        [-g gain (default: 0 for auto)]
        [-s samplerate in Hz (default: 2048000 Hz)]
        [-b number of buffers (default: 15, set by library)]
        [-n max number of linked list buffers to keep (default: 500)]
        [-d device index (default: 0)]
        [-P ppm_error (default: 0)]
pi@SDRPI0:~/gqrx-2.6-rpi2-2 $


ここで Raspberry Pi B+ で実行可能なサンプリング周波数は2.048MHzか1.4MHzで、defalt値の2048MHzだと判りました。
ということで2.048MHzを指定します。

gain は 0:自動
最大は29です。
ここでは 28を指定しています。


pi@SDRPI0:~/gqrx-2.6-rpi2-2 $rtl_tcp -a 0.0.0.0 -s 1024000 -g 28
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Tuned to 100000000 Hz.
listening...
Use the device argument 'rtl_tcp=0.0.0.0:1234' in OsmoSDR (gr-osmosdr) source
to receive samples in GRC and control rtl_tcp parameters (frequency, gain, ...).
client accepted!
set sample rate 2048000
set freq correction 0
set freq 100005982
set agc mode 0
set gain mode 1
set tuner gain by index 0
set freq 743262
[R82XX] PLL not locked!
set freq 10743262
[R82XX] PLL not locked!
set freq 20743262
set freq 30743262
set freq 40743262
set freq 50743262
set freq 60743262
set freq 70743262
set freq 71743262
set freq 72743262
set freq 73743262
set freq 74743262
set freq 75743262
set freq 76743262
set freq 77743262
set freq 78743262
set freq 78843262

set tuner gain by index 28
set tuner gain by index 29


CPU 負荷は90と余裕がないですが何とか動いているといった感じになります。
地元コミュニティFMを受信してみました。






pi@SDRPI0:~ $ nano wakeupSDRPI.sh
pi@SDRPI0:~ $


cd /home/pi/
rtl_tcp -a 0.0.0.0 -s 1024000 -g 28

パーミッションを実行可能なファイルに変更します。
pi@SDRPI0:~ $chmod 744 wakeupSDRPI.sh





pi@SDRPI0:~ $ ls -l .
合計 9448
-rw-r--r-- 1 pi pi 1510065 12月 8 21:19 2017-12-08-211944_1824x984_scrot.png
-rw-r--r-- 1 pi pi 2067113 12月 9 19:26 2017-12-09-192602_1824x984_scrot.png
drwxr-xr-x 2 pi pi 4096 9月 8 01:13 Desktop
drwxr-xr-x 5 pi pi 4096 9月 8 00:45 Documents
drwxr-xr-x 2 pi pi 4096 9月 8 01:13 Downloads
drwxr-xr-x 2 pi pi 4096 9月 8 01:13 Music
drwxr-xr-x 2 pi pi 4096 9月 8 01:13 Pictures
drwxr-xr-x 2 pi pi 4096 9月 8 01:13 Public
drwxr-xr-x 2 pi pi 4096 9月 8 01:13 Templates
drwxr-xr-x 2 pi pi 4096 9月 8 01:13 Videos
drwxr-xr-x 5 pi pi 4096 12月 9 10:25 gqrx-2.6-rpi2-2
-rw-r--r-- 1 pi pi 6048888 5月 25 2017 gqrx-2.6-rpi2-2.tar.xz
drwxr-xr-x 2 pi pi 4096 9月 8 00:45 python_games
-rwxr--r-- 1 pi pi 50 12月 9 20:01 wakeupSDRPI.sh
pi@SDRPI0:~ $


wakeupSDRPI.sh

autostartファイルを編集します

pi@SDRPI0:~ $ nano ~/.config/lxsession/LXDE-pi/autostart
pi@SDRPI0:~ $



@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
@point-rpi
@/home/pi/wakeupSDRPI.sh




人工衛星(435MHz JAMSAT)を追いかける その⑦受信アプリインストール 実践編4

gqrxのインストールも終盤です。

予め、ダウンロード後解凍したフォルダに移動しておきます。
場所は
pi@SDRPI0:~/gqrx-2.6-rpi2-2 $

です。
もし違っていたのなら

$cd /home/pi/gqrx-2.6-rpi2-2
で移動しておきましょう。


pi@SDRPI0:~/gqrx-2.6-rpi2-2 $
pi@SDRPI0:~/gqrx-2.6-rpi2-2 $ sudo apt-get updatepi@SDRPI0:~/gqrx-2.6-rpi2-2 $ sudo apt-get upgrade
 pi@SDRPI0:~/gqrx-2.6-rpi2-2 $
sudo reboot


GUIツールQtをインストールします。

pi@SDRPI0:~/gqrx-2.6-rpi2-2 $ sudo apt-get install libqt5gui5 libqt5core5a libqt5network5


パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
libqt5core5a はすでに最新バージョン (5.7.1+dfsg-3+rpi1) です。
libqt5core5a は手動でインストールしたと設定されました。
libqt5gui5 はすでに最新バージョン (5.7.1+dfsg-3+rpi1) です。
libqt5gui5 は手動でインストールしたと設定されました。
libqt5network5 はすでに最新バージョン (5.7.1+dfsg-3+rpi1) です。
libqt5network5 は手動でインストールしたと設定されました。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 2 個。
pi@SDRPI0:~/gqrx-2.6-rpi2-2 $ sudo apt-get install libqt5widgets5 libqt5svg5 libportaudio2

ではインストールのためのセットアップスクリプトを実行します。
この作業は自動的に行われます。
エラーが発生せず終了するはずです。

  pi@SDRPI0:~/gqrx-2.6-rpi2-2 $./setup_gqrx.sh




では動作を確認します。

  pi@SDRPI0:~/gqrx-2.6-rpi2-2 $ ./run_gqrx.sh

これでインストールは完了です。

自動起動登録するか ショートカットを作成しておくと便利でしょう。


人工衛星(435MHz JAMSAT)を追いかける その⑥受信アプリインストール 実践編3



ここで rootから抜けます 重要
root@SDRPI0:/# exit
ログアウト

さていよいよチューナーソフトといってもfacade つまり表面的なGUI「お面」であるgqrxをインストールします。

これはRaspberry Pi 2とPi 3ではインストールするパッケージが違います。また 旧モデルの model B および B+では下記の方法では動作しません。推測ですがCPUの処理能力からも model B B+はお勧めしません。
では始めましょう


raspberry pi 2の場合

pi@SDRPI0:~ $ wget https://github.com/csete/gqrx/releases/download/v2.6/gqrx-2.6-rpi2-2.tar.xz

--2017-12-08 23:59:55--  https://github.com/csete/gqrx/releases/download/v2.6/gqrx-2.6-rpi2-2.tar.xz
github.com (github.com) をDNSに問いあわせています... 192.30.255.113, 192.30.255.112
github.com (github.com)|192.30.255.113|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: https://github-production-release-asset-2e65be.s3.amazonaws.com/1033271/b33d79de-ebab-11e6-8983-d1d30e4dba6b?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20171208%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20171208T145956Z&X-Amz-Expires=300&X-Amz-Signature=0a6a326040ee0306ddb55e5adbb8de9c62f5534f31a5d5c84a4bb54d254720b0&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dgqrx-2.6-rpi2-2.tar.xz&response-content-type=application%2Foctet-stream [続く]
--2017-12-08 23:59:56--  https://github-production-release-asset-2e65be.s3.amazonaws.com/1033271/b33d79de-ebab-11e6-8983-d1d30e4dba6b?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20171208%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20171208T145956Z&X-Amz-Expires=300&X-Amz-Signature=0a6a326040ee0306ddb55e5adbb8de9c62f5534f31a5d5c84a4bb54d254720b0&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dgqrx-2.6-rpi2-2.tar.xz&response-content-type=application%2Foctet-stream
github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com) をDNSに問いあわせています... 54.231.11.144
github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)|54.231.11.144|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 6048888 (5.8M) [application/octet-stream]
`gqrx-2.6-rpi2-2.tar.xz' に保存中
gqrx-2.6-rpi2-2.tar.xz      100%[==========================================>]   5.77M  56.5KB/s    in 92s
2017-12-09 00:01:28 (64.4 KB/s) - `gqrx-2.6-rpi2-2.tar.xz' へ保存完了 [6048888/6048888]
pi@SDRPI0:~ $


解凍します。

pi@SDRPI0:~ $ tar xvf gqrx-2.6-rpi2-2.tar.xz

gqrx-2.6-rpi2-2/
gqrx-2.6-rpi2-2/gqrx_runtime.env
gqrx-2.6-rpi2-2/data/
gqrx-2.6-rpi2-2/data/rtl-sdr.rules
:
:

gqrx-2.6-rpi2-2/bin/fftw-wisdom-to-conf
gqrx-2.6-rpi2-2/setup_gqrx.sh
gqrx-2.6-rpi2-2/changelog.txt
pi@SDRPI0:~ $

2017年12月8日金曜日

人工衛星(435MHz JAMSAT)を追いかける その⑤受信アプリインストール 実践編2

少し間が開いてしまいましたが、受信アプリのインストール方法をご紹介いたします。

起動するためには、5V 2AのACアダプタ HDMI接続可能なモニタディスプレイとケーブル
USB キーボードとマウス
そしてLANケーブルとインターネット環境が必要になります。


前回作成した Raspbian Stretch のイメージを書き込んだSDカードをRaspberry Piに装着して起動します。

LXterminalを起動します。
上端のメニューバーのアイコンを見つけてクリックしてください。


アプリケーションをインストールする前に、Raspbianのアップデートを済ませておきます。
アップデートには管理者権限が必要です。rootログインします。

pi@SDRPI0:~ $ sudo su - <-- rootになります。
root@SDRPI0:~# apt-get update <--パッケージリストの読み込み
ヒット:1 http://archive.raspberrypi.org/debian stretch InRelease
ヒット:2 http://mirrordirector.raspbian.org/raspbian stretch InRelease
パッケージリストを読み込んでいます... 完了
root@SDRPI0:~# apt-get upgrade   <--- アップデート
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージは保留されます:
  gstreamer1.0-omx raspberrypi-ui-mods
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 2 個。
root@SDRPI0:~#





OSのバージョンのを確認します。
root@SDRPI0:~# uname -a

Linux SDRPI0 4.9.59+ #1047 Sun Oct 29 11:47:10 GMT 2017 armv6l GNU/Linux
root@SDRPI0:~# cat /etc/os-release

PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
root@SDRPI0:~#


RTL-SDRをRaspberry Pi のUSBポートに接続します
lsusbコマンドで認識されているUSBデバイスを表示します。

root@SDRPI0:~# lsusb
Bus 001 Device 004: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@SDRPI0:~# lsusb
Bus 001 Device 004: ID 046d:c52b Logitech, Inc. Unifying ReceiverBus 001 Device 005: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-TBus 001 Device003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@SDRPI0:~#


SDRチューナーが認識されていますね。

この確認ができたのならドライバをインストールします。

root@SDRPI0:~# apt-get install rtl-sdr
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  librtlsdr0
以下のパッケージが新たにインストールされます:
  librtlsdr0 rtl-sdr
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 2 個。
76.8 kB のアーカイブを取得する必要があります。
この操作後に追加で 261 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://archive.raspberrypi.org/debian stretch/main armhf librtlsdr0 armhf 0.5.3-11+rpt1 [25.1 kB]
取得:2 http://archive.raspberrypi.org/debian stretch/main armhf rtl-sdr armhf 0.5.3-11+rpt1 [51.7 kB]
76.8 kB を 2秒 で取得しました (27.2 kB/s)
以前に未選択のパッケージ librtlsdr0:armhf を選択しています。
(データベースを読み込んでいます ... 現在 122961 個のファイルとディレクトリがインストールされています。)
.../librtlsdr0_0.5.3-11+rpt1_armhf.deb を展開する準備をしています ...
librtlsdr0:armhf (0.5.3-11+rpt1) を展開しています...
以前に未選択のパッケージ rtl-sdr を選択しています。
.../rtl-sdr_0.5.3-11+rpt1_armhf.deb を展開する準備をしています ...
rtl-sdr (0.5.3-11+rpt1) を展開しています...
librtlsdr0:armhf (0.5.3-11+rpt1) を設定しています ...
libc-bin (2.24-11+deb9u1) のトリガを処理しています ...
man-db (2.7.6.1-2) のトリガを処理しています ...
rtl-sdr (0.5.3-11+rpt1) を設定しています ...
root@SDRPI0:~#



root@SDRPI0:~# rtl_test
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Detached kernel driver
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
[R82XX] PLL not locked!
Sampling at 2048000 S/s.
Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.
Reading samples in async mode...
lost at least 72 bytes
^CSignal caught, exiting!
User cancel, exiting...
Samples per million lost (minimum): 2
Reattached kernel driver
root@SDRPI0:~#









2017年11月25日土曜日

無線機送信タイマー(ラグチューキーパー) スタンバイP 付き   その②

アマチュア無線機アクセサリ 自作用としてプログラミングした ラグチューキーパーですが 早いものですでに第4版(Rev4)です。

現在のrev4では以前の版に指摘されていた、PTTタイマー残時間「警告音が短くて聞き取れない」
また タイムアウトしたことに気が付かず、強制送信停止しているのにもかかわらずPTTスイッチを押し続けてしまうという状況が発生していましたが、マイクの送信スイッチ(PTT)がいったん離れるまで警告音を出し続けることで対処しました。

この動作について動画にまとめてみましたのでこちらをご覧ください。


さて、このラグチュータイマーですが 8本足のDIP IC (外見に似合わずかなり高性能なマイコン)を使用しています。 ICの名前は AVR ATTINY13Aといい 有名なタイマーIC NE555と同じ8pin DIPですが555タイマーICに必要な時定数のCR部品が不要なのにもかかわらず、内部オシレータを使用したタイマーが構成できます。
  
また内部の機能モジュールに関しては、割り込み 8/16bit TIMER PWM  A/D EEROM  内部128kHz オシレーターと盛りだくさんです。

このマイコンにラグチュータイマーのプログラムを書き込むと Flash ROM 1Kbyte に対し、現在約90%の領域を使用しています。 残り10% 約100byteぐらい空いていますから、あと一つか二つぐらいの機能拡張はできると思います。

しかし最近の AVR用 C コンパイラはすごいの一言です。
アセンブラの出番が無いというかそれ以上に最適化されたコードを吐き出し、アセンブラの存在価値が...というくらいのシロモノでした。

AVRマイコンは命令体系がすっきりしていてアセンブラもキレイに記述できるんですけどね。




2017年11月24日金曜日

人工衛星(435MHz JAMSAT)を追いかける その⑥手作り受信アンテナ制作編a

そういえば数か月ほど前に3DCAD上のアンテナ画像だけで実際に組み立てた画像をブログにアップしていないことに今さらながら気が付きました。 実はすでに作成済みで受信確認も実証済みです。  ただ 衛星を追尾するのが手持ちorカメラ三脚では難しかったのでX,Y軸をステッピングモーターで動かす簡易式のアンテナローテーターを現在3D CADで造形中です。(うまく動作しないかもしれませんが...w)

...ということで掲載順は無視してアンテナ実作例を紹介したいと思います。


エレメント固定パーツはφ3mmのアルミワイヤを取り付けられるようになっています。
ブームとエレメントは電気的に接触していません。完全にフローティングになっているので、アンテナシミュレーション結果との違いが少なくなる傾向がある。(...とのことですが検証はしていません のであしからず)
エレメントの固定は、セットスクリュー穴はありますが接着剤で固定するのが簡単です。
また下記画像はエレメントをブームパイプに固定用M3ネジ穴をあけてエレメントの位置が固定できるタイプですが、 ブームを貫通させて固定するタイプもあります。こちらはエレメント位置を自由に調整できますので実験中エレメント位置を自由に動かしたい場合に便利だと思います。


実際に受信した様子は後日掲載しますね。

2017年11月21日火曜日

屋外設置用広帯域受信専用チューナー(広帯域受信サーバー) その②

広帯域アンテナの 給電部 ABS樹脂部品の外形が決まりました。

3段に分割された機構のABS部品で それぞれ トップカバー,ディスクエレメントホルダー、コーンエレメントホルダーで構成されています。それぞれのパーツは積み重ねM3ネジ4本で一体化する構造です。こうすることで、組み立てやメンテナンスが楽になるはず..です。特にエレメントホルダー部は樹脂部品ですので、はんだ付けの際に作業性が悪いとホルダー部の熱変形が心配になります。これをできるだけ回避する構造にしてみました。

また内部にはキツキツですが整合器ぐらいは入るかなといったところです。
(入れなくとも済むように出来上がってほしい..)


このアンテナはご存知の方も多いと思いますがディスコーンアンテナという広帯域(50MHz-430MHz)受信アンテナとして定番のアンテナになります。
その名の由来どおり本来ならばDISC(円盤)とコーン(円錐)の板金で構成するアンテナなのですが、その作りやすさと軽さなどから放射状に配置した細いワイヤ(エレメント)で作られることが多いようです。

使用可能な帯域は、目的の周波数の8倍程度あり、それぞれの帯域はエレメントの長さを変えることで対応可能です。 このエレメント寸法に関しては実測してみて決定したいと思います。
またコーン部の頂点角は標準形では60度になりますが ±15度前後変更可能ですのでいろいろ試してみたいと考えています。

アンテナエレメントの穴径は暫定で2mmにしましたが、多様なワイヤに対応できるように、穴加工(といってもCAD図面上のハナシですが)をしていないマスターを作成しておき、アンテナエレメント外形を減算処理して穴加工します。あとは3Dプリントすることで穴加工済みのホルダーが出来上がることになるわけです。

このホルダーの標準型外形寸法ではステンレスワイヤ Φ1.5-3mmに対応できます。 もちろん多少部材費は高くなりますが 真鍮、銅パイプなども使用できます。

現在の仕様としては

☆外形寸法 Φ30mm  高さ60mmの 円柱
☆引き込みケーブル 5D2V(50Ω) ただし外形仕上がり寸法Φ8mm程度なら5C2V(75Ω)
☆ ディスク部エレメント数8本 Φ2mmステンレスワイヤ 水平方向放射状に配置 エレメント長約0.75m (50MHz-400MHz時)
☆ コーン部エレメント数8本 Φ2mm ステンレスワイヤ  頂角60度 エレメント長 約1,201.2mm (50MHz-400MHz時)
☆エレメント径 2mmステンレスワイヤ(標準)
 ☆ 取り付け部寸法 Φ12.0mm t=1.0mm 6000系アルミパイプ 

になります。


 









Raspberry Pi + SDRで流星雨の電波観測を試してみる

RTL-SDRをRaspberry Piと組み合わせてスペアナ表示など機能をフルに使用するとCPU稼働率が100%を超え音切れが発生したりアプリが異常終了してしまう現象がありました。 Raspberry Pi3では発生しない(しにくい)のですが、初期モデルであるRaspber...