Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

picojjy

Raspberry Pi Pico W / Raspberry Pi Pico 2 W で動作する JJY(電波時計用標準電波)シミュレータです。 Wi-Fi 経由で NTP サーバー(デフォルト: ntp.nict.jp)から正確な時刻を取得し、GPIO ピンから 40kHz / 60kHz の JJY タイムコード信号を出力します。ピンに接続した簡易アンテナを電波時計の 近くに置くことで、電波の届きにくい室内でも電波時計を合わせられます。

特徴

  • Pico W / Pico 2 W 両対応 — MicroPython で実装、どちらも同じファイルで動作
  • NTP 同期 — ミリ秒精度で時刻を取得し、毎正秒のエッジを正確に出力
  • 40kHz / 60kHz 切り替えconfig.py の設定 1 行で変更(デフォルト 60kHz)
  • 定期再同期 — 水晶発振子のドリフトを NTP 再同期(デフォルト 60 分ごと)で補正。 再同期はキャリア OFF 区間内で完結するノンブロッキング方式で、送信信号は一切途切れない
  • 自動復帰 — Wi-Fi 切断時の再接続、致命的エラー時の自動リセット
  • 省電力・長期安定動作 — 初回同期後は Wi-Fi を省電力モードへ自動切替(平均 30〜50mA)。 秒エッジ直前の待機ループはヒープ確保ゼロ、GC はキャリア OFF 区間に予約実行され、 送信タイミングに影響しない設計
  • オンボード LED — 送信中のシンボル(0.2s / 0.5s / 0.8s)に同期して点滅し、動作確認が容易

必要なもの

  • Raspberry Pi Pico W または Raspberry Pi Pico 2 W
  • 抵抗 1 本(330Ω〜1kΩ)とアンテナ用の電線(詳細は ハードウェア準備)
  • 2.4GHz Wi-Fi 環境と USB 電源

セットアップ

  1. ハードウェア準備ガイド に従ってアンテナを接続する
  2. インストールガイド に従って MicroPython と本プログラムを書き込む
  3. config.py を編集して Wi-Fi 情報などを設定する

設定項目(config.py)

設定名 デフォルト 説明
WIFI_SSID / WIFI_PASSWORD 接続先 Wi-Fi の SSID とパスワード(2.4GHz のみ)
WIFI_TIMEOUT_S 30 Wi-Fi 接続のタイムアウト(秒)
NTP_SERVER "ntp.nict.jp" NTP サーバー名
NTP_RESYNC_MINUTES 60 NTP 再同期の間隔(分)
NTP_TIMEOUT_S / NTP_RETRIES 5 / 3 NTP 問い合わせのタイムアウトとリトライ回数
JJY_FREQUENCY_KHZ 60 JJY 周波数。40(おおたかどや山・東日本)または 60(はがね山・西日本)
ANTENNA_PIN 15 アンテナを接続する GPIO 番号
CARRIER_DUTY 0.5 キャリア ON 時の PWM デューティ(下げると放射強度が下がる)
TIME_OFFSET_HOURS 9 UTC からのオフセット。JJY は JST なので通常 9 のまま
STATUS_LED True オンボード LED を送信シンボルに同期して点滅させる
RESET_ON_ERROR True 回復不能なエラー時に 10 秒後に自動リセットする
WATCHDOG False ハードウェアウォッチドッグ(8 秒)を有効化。例外にならないハングからも自動復帰する。開発中は False 推奨(詳細は INSTALL.md)
POWER_SAVE False 省エネモード。送信ウィンドウ以外は Wi-Fi を切って lightsleep で待機(電池運用向け)。WATCHDOG とは併用不可
POWER_SAVE_STARTUP_MINUTES 20 電源投入直後に連続送信する時間(分)。時計の設置・強制受信用
POWER_SAVE_WINDOWS ("11:45-12:15", "23:45-00:15") 毎日の送信ウィンドウ(ローカル時刻、日跨ぎ可)
POWER_SAVE_CPU_MHZ 48 省エネモードの送信中に Wi-Fi を切った上で CPU をこの周波数(MHz)に下げる。0 でクロック変更なし

周波数の選び方

実際の JJY は 2 局から送信されています。

  • 40kHz — おおたかどや山標準電波送信所(福島県)。主に東日本向け
  • 60kHz — はがね山標準電波送信所(佐賀県)。主に西日本向け

お使いの電波時計が受信する周波数に合わせてください。40/60kHz 自動選択の時計はどちらでも 受信できます。海外の時計(WWVB 60kHz など)は本プログラムの対象外ですが、TIME_OFFSET_HOURS を変えることで実験は可能です。

注意事項(電波法)

本プログラムは GPIO 出力(3.3V)に抵抗を介して短いアンテナ線を接続する前提で作られており、 到達距離は数 cm〜数十 cm 程度の「微弱無線局」の範囲での使用を想定しています。 アンプなどで信号を増幅して送信範囲を広げる行為は電波法違反となるおそれがあります。 必ず時計のすぐ近くに置いて使用し、増幅は行わないでください。

日本国外で日本の電波時計を使いたいユーザー向けに、日本の電波法の適用を受けない 環境を前提とした増幅方法を docs/HARDWARE.md の英語セクション "Boosting the signal for users outside Japan" に記載しています。 この増幅回路を日本国内で使用することは違法です。絶対に使用しないでください。 また国外でも、各国の電波規制(米国 FCC Part 15 など)の順守は使用者の責任です。

ファイル構成

main.py            プログラム本体(コメントは英語)
config.py          設定ファイル
docs/INSTALL.md    インストール手順(日本語)
docs/HARDWARE.md   ハードウェア準備ガイド(日本語)
tests/             PC 上で実行する回帰テスト(Pico へのコピーは不要)

開発時は python3 -m unittest discover tests で、フレーム生成・ ウィンドウ計算・NTP 時刻計算の回帰テストを PC 上で実行できます。

ライセンス

MIT License

About

JJY (Japanese longwave time signal) simulator for Raspberry Pi Pico W / Pico 2 W - syncs via NTP and drives radio-controlled clocks at 40/60 kHz

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages