Arduinoに緊急警報放送を検出させてみた †
最近作っていた Arduino シールドができたので,デモ動画をアップしました.
YouTube: Arduinoに緊急警報放送を検出させてみた
ニコ動: Arduinoに緊急警報放送を検出させてみた
ここのところの電子回路の実験ネタは,実はこいつを作るためのものだったりします.
警告 †
以下の回路図・スケッチは実験用です.生命・財産に関わる用途には使用しないこと.
シールド回路図 †
- 3.3V 系の Arduino でも動作すると思います(未確認).
- あ,警報表示の LED は回路図には入っていません.
どこにでもある普通の L チカ回路なので,各自組んでください.
- シールドの回路とは言っても単なる FSK 復調回路なので,他のマイコンでも応用は効くと思います.
- 74HC123 は東芝製 (TC74HC123) を使いました.
他のメーカ(TI など)の 74HC123 では時定数の計算式が異なる場合があるようです.
そのような IC を使いたい場合は,データシートを見て FSK 復調側の C, R の値を計算し直してください.
LED を光らせているほうの C, R の値は,まぁ,そのままでもいいでしょう.
LED の光り方がちょっと変わるだけです.
- 74HC74 のほうは,ベンダ依存は無いと思います.
- 入力段の LM2903 はコンパレータです.
オペアンプではありません.記号が一緒なので紛らわしいですね.ヒステリシスコンパレータ回路を組んでいます.
スケッチ †
動作には FlexiTimer2 ライブラリが必要です.
プログラム改造のヒント
- まずは緊急警報放送の仕様書を読みましょう
- FSK 復調信号入力は 3 倍オーバサンプリング (64 bps x 3 = 192 sample/sec) しています.
サンプリングのタイミングは FSK 復調信号とは非同期です.
運が悪いとサンプリングタイミングが符号の変わり目にヒットします.
- サンプリング値は,サンプリングごとに3本のシフトレジスタに振り分けて蓄えます
- 各サンプルタイミングごとに,3本のシフトレジスタで多数決を取ってシンボル値を決定しています
サンプリングタイミングの問題もここで解決することになります.
- 「前置符号」「固定符号」のみを見ています
固定符号は,3つあるものを全部を見ています.
最初の固定符号だけ見るようにすると判定が速くなりますが,誤判定(警報信号の無いところで警報ありと判定する)が出るかもしれません.
- 地域情報・日付情報は無視しています.
これらのフィールドもシフトレジスタに取り込んではいるので,解読できるようにすることも難しくないでしょう.
解読結果を LCD モニタに表示させたりすることもできるでしょう.