5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32-C3で作るJJYシミュレーター【Arduino】

Last updated at Posted at 2025-08-15

はじめに

我が家は鉄筋コンクリート造のため、窓から離れた場所だと電波時計の時刻が自動で合いません。
電波時計って、頻繁に時刻合わせをする事が前提なのか、放っておくと時刻のズレ方が他の時計よりも大きい気がします。
せっかくの電波時計なのに、頻繁に時刻合わせをするのが地味にストレスです。
「だったら、自分で電波を出せばいいじゃないか!」
そう思った瞬間から、今回の工作が始まりました。


JJYの電波って?

まずは、電波時計の時刻合わせに使われるJJYの電波について調べました。

電波時計に使われるJJYの電波は、東日本では福島県から40kHz、西日本では九州から60kHzの標準電波が出ています。

JJYは、1秒ごとに40kHzまたは60kHzの搬送波を使って、1ビットずつ情報を送っている信号です。
1分間で送られるのはちょうど60ビット。つまり、1ビット=1秒のペース。

各ビットの意味はシンプルで、

  • 秒の情報(1〜59秒)
  • 分・時・日・曜日・うるう年
  • パリティビット
  • 将来拡張用の空きビット

などが含まれています。

ビットの種類は3種類:

ビット種別 パルス長(無変調時間) 意味
0ビット 約0.8秒 論理0
1ビット 約0.5秒 論理1
マーカー 約0.2秒 区切り

60秒のうち、毎分0秒はマーカー になっていて、
59秒もポジションマーカーになっているので、マーカーが2回連続すると、
それが時刻(分)の先頭の印になります。

詳細は、国立研究開発法人 情報通信研究機構(NICT)の日本標準時グループのサイトを見てください。
信号パターンについては、ここに記載されています。


最初の実験:ESP32 DevKit+即席コイル

まずは原理が本当にうまくいくのかを試すため、机の引き出しからESP32 DevKitを取り出し、手元にあったポリウレタン線をぐるぐる巻きにしました。

  • 直径約5cmの型に数十回巻く
  • テープでぐるっとまとめる
  • GPIOからPWMで40kHzの搬送波を出力
  • 表示はなし(シリアルのログだけ)
  • Wi-Fi接続先はソースコードにベタ書き

見た目は小学生の自由研究みたいですが、時計を数十センチ(実用的には30cm以内)に近づけたところ、
電波時計のアンテナマークが点灯して、数分後に「ピッピッ!」っと音がして時刻が合いました。
─その瞬間、「これはイケる」と確信しました。
初回のテストでは、変な日時に設定されましたが、それはすぐに修正。


基板化への決断

原理が確認できたら、次は日常で使える形にしたくなります。
そこでKiCadを立ち上げて基板設計開始。ここでアンテナをどうするかが悩みどころでした。

  • フェライトバーアンテナ
    Aitendoにいろんなサイズがあって効率も期待できる。
    ただしコストがかかり、サイズも大きくなる。
  • PCBアンテナ
    基板上にパターンで形成でき、部品代ゼロでコンパクト。
    ただし効率は未知数。

悩んだ末、今回は手軽さとコンパクトさを優先してPCBアンテナを採用しました。


PCB版の構成

  • MCU:ESP32-C3(Arduino)
  • 機能
    • Wi-Fi経由でNTPから時刻取得
    • PWMで40/60 kHz JJYパターン生成
    • OLEDに現在時刻を表示
  • 電源/書き込み:USB Type-C
  • アンテナ:基板裏の螺旋パターン
  • 設計:KiCad(回路・基板)、Fusion360(ケース)
  • 発注:JLCPCB(基板&3Dプリント)

回路図(クリックでPDF)
JJYシミュレーター回路図
※2025/8/22に変更

主なピン

機能 GPIO 備考
JJY PWM出力 10 変調された信号を出力
CONFIGスイッチ 9 Wi-Fi設定用(BOOTピンと兼用
WiFi LED 5 動作中LED
Wave LED 0 状態表示用LED
OLED Reset 2 OLEDモジュールリセット
OLED SDA 7 OLED I2C データ
OLED SCL 6 OLED I2C クロック

初版はOLED配線ミス→ジャンパーで救済。次ロットで修正。

修正済みの完成基板

jjy_sim_present_w400.jpg


PCBアンテナの事情と限界

このアンテナ、RF設計的にはかなり大雑把です。
マッチング回路なんて無いも同然で、専門家に見せたら確実に突っ込まれるレベル。
正直「電波が出ているだけでも奇跡」と思っています。

  • 実用距離:30cm以内
    目覚まし時計の横に置いて数分放置すれば同期しますが、それ以上離すと厳しいです。
  • 理由:JJYは40kHz/60kHzという低周波数帯で波長が非常に長く、物理的に小さいアンテナはどうしても効率が落ちます。

それでも、コンパクトで部品追加なしというメリットは大きく、今回は割り切りました。


改良の余地

RFに詳しい方なら、以下のような改良で効率を上げられます。

  • 外付けフェライトバーアンテナ化
  • LC共振回路の追加
  • アンテナパターンの巻き数・寸法調整
  • 出力段の駆動方式見直し(Hブリッジ化など)

「もっと飛ぶようになるよ!」というアドバイスがあれば、ぜひコメントで教えてください。
自分でも試してみたいです。


ケース

Fusion360で設計→JLCPCBで3Dプリント。
OLEDがあるので、透明樹脂で作成しました。
初版はRESET/CONFIG穴の位置がずれて押せず…
図面修正版をGitHubに置いています。


ソフト概要

主な機能

  • Wi-Fi設定:起動後5秒以内にCONFIG押下→APモード→ブラウザでSSID/Key保存
  • 時刻同期:NTP取得→内部タイマでランニング
  • 信号生成ledcWrite()で40/60 kHz、1秒単位で断続
  • 表示:OLEDに時刻などの情報を表示

実際のJJYでは、毎時15分などは特別なフォーマットになっているのですが、
今回は時刻合わせが目的なので、すべてが同じフォーマットで送信しています。

開発環境


実用メモ

  • 置き方:時計の横に置いて数分で同期(30cm以内)
  • 注意点:金属筐体やノイズ源の近くでは感度低下
  • 用途:家庭内の時計合わせ、受信機テスト、教育用途

室内・微弱運用を前提としています。関係法令・規格に沿って使用してください。


リポジトリ

  • Arduinoスケッチ(ESP32-C3)
  • KiCad設計データ
  • 3Dケース(STEP)

👉 https://github.com/shachi-lab/jjy_sim_esp32_c3


まとめ

  • 即席コイルでの原理検証からスタート
  • 基板化で日常使い可能な形に
  • PCBアンテナは効率低いが近距離なら十分
  • 改良余地は多いので、アイデア募集

追記 (2025/8/22)

若干の改良

この記事を書いた後に、回路図をChatGPTに見せたら、やはりアンテナの回路付近について結構ダメだしされました。
あらためて、オシロで計測したら、最低な信号でした。いままで時刻が合ったのが不思議なくらい。
この基板をそのままで、少しでも改善できないかをChatGPTに相談したところ、
定数の変更とCをRに乗せ換えるなどを提案されました。
とりあえず、この改造によって、若干ですが距離が伸びたように思います。
根本的には、回路の作り直しが必要ということを、改めて思わされました。

海外の電波時計にも

今回のESP32-C3 JJYシミュレーターは、ソフトを変更することでJJY(日本)以外の方式にも対応可能です。
たとえば、

  • ドイツの DCF77 (77.5kHz)
  • アメリカの WWVB (60kHz)
  • その他、各国の標準電波

といった方式に合わせられるため、海外製の電波時計を日本国内で動かすこともできます。
海外製の電波時計を持ってる方はチャレンジしてみてはいかがでしょうか?


関連情報

この記事は、しゃちらぼブログ Vol.033 をベースに、Qiita向けに再構成・補足したものです。

この記事公開後、基板を欲しいという声があり、試しにヤフオクで少数出品したところすぐに完売しました。
想像以上に関心を持っていただけて嬉しいです。
入手方法や詳細は、ブログ「しゃちらぼ」にまとめています。
興味ある方はぜひそちらもご覧ください。

📎関連リンク


5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?