Arduinoで電波時計を合わせようArduinoで電波時計を合わせようArduino現在、福島第1原子力発電所の事故の影響で、東日本で電波時計の基準となる福島の送信所からの標準電波(JJY)の運用が止まっています。このため、電波時計の自動調整が行えなくなっています。(西日本は九州からの電波があるため問題ありません。)このJJYを模擬した出力を、NTPを使って取得した時刻をもとにArduinoを使って発信*1して、電波時計を合わせるのに挑戦してみました。PCのオーディオ端子を駆使して、同じことをするWindows用ソフトがあり、こちらに触発されて作ってみました。http://www.starstonesoft.com/JJY_Simulator.htmJJYのフォーマットについては、下に詳しく説明があります。40kHzの電波のON/OFF時間により、1秒に1bitずつ、60bitの信号を1分かけて送信します。標準電波の出し方ハードウェアはこんなかんじ。Arduinoの3pinに送信確認用LEDのアノードを接続し、カソードには適当にリード線を繋ぎます。リード線は、少しくるくる巻いておき、もう片方をGNDに繋ぎます。このリード線がアンテナの役割をします。信号は1mも飛ばないので、すぐ近くに電波時計を置きます。*2電源を入れると、Ethernetシールドを使ってNTPで正確な時刻を取得します。取得に成功すると、0秒(正分)になったところから信号の送信が開始され、LEDがいろいろな長さで点滅しはじめます。(時刻やNTPの取得状況はシリアル出力を見ると分かります。)送信が始まったら、合わせたい電波時計を強制受信モードにして、時刻を合わせるのがよいと思います。(なおArduino側は10分に1度NTPで時刻を再取得して時刻を補正しています。)ソフトウェア的な工夫として、Arduinoからの40kHzの信号を出力するために、今回はPWM出力を使ってみました。AVRのレジスタを直接操作してPWMの周波数を40kHzに変更し、これをJJYのフォーマットに合わせてON/OFFしています。ちなみにNTPのコードはIDE付属のEthernetライブラリのサンプルを改良してNTPと秒以下まで同期するようにしたものです。以下、スケッチの内容です。MACアドレスやEthernetの設定などは、お使いの環境に合わせて変更して下さい。下記からダウンロードできるArduino用のTimeライブラリをインストールしておく必要があります。日付計算に一部誤りがあったのを修正しました。*1:勝手に電波を出しても良いの?という疑問が湧きますが、市販のFMトランスミッタ等よりもさらに弱い出力なので問題ありません。実際試してみたところ、到達範囲は感度の良い電波時計でも1mもいかない程度でした。*2:もうちょっと共振回路らしくしても良いと思いますが、うちではこれで合わせられてしまったので追求しないことにしました。06:24我が家にあるのはJapaninoで、イーサのシールドなどは買っていません。PCと連携させたらUSBとかシリアルとかの通信と連携してやることでそれなりに出来るのかなぁ。(もちろん、Arduino+シールドで完結するのはすっきりですね。9*60*60);を呼び出す、というコードにすれば良さそうですね。はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。iPhoneで電波時計を合わせよう>プロフィールNeoCatMacとかLinuxとか。(ビームコミックス)ページビュー1779569TopHatenargeotargeting天気予報(神奈川)。