google-site-verification: google3bd66dd162ef54c7.html

雷センサー AS3935を使ってみる

 秋月の雷センサーモジュールを買ってみました。これからの雷シーズンに動かすと面白そうです。

 センサーのデーターをラズパイで受信し、グリッドタイインバーターのデーターのようにxivelyへ送って、webブラウザ上のグラフで見えるようにすると使い易いかも。

 でも待てよ、雷センサーは持っている人がその場で確認出来ることに意味があって、遠くに設置されたセンサーの状態をインターネット越しに見ても、あまり意味が無さそうです。というか、ネットが使えるなら雷レーダーのサイトを見た方が確実だし、情報量もずっと多いです。

 つまり、小さな液晶に状態を表示する可搬型の物を作ると良さそうです。出来るなら、時間と雷までの距離をグラフィックにプロットして表示させるとかっこいいはずです。

 と、まあ夢は膨らむのですが、まずは動作確認のために、秋月のサイトにあるスケッチをArduinoで動かしてみました。このスケッチは雷センサーとI2Cのキャラクタ液晶を動かすようになっていますが、該当する液晶を持っていないので、表示はシリアルモニタだけでやってみます。

 スケッチを走らせると、最初に周波数の調整ルーチンが動いて、その後は落雷待ちになります。でもそうそう都合よく雷が落ちてはくれません。待っていてもダメなので、人工の雷ノイズをアンテナに注入しました。

 コンデンサに充電しておいて、共振周波数が500kHzになるようなコイルにスイッチで接続、とかやったのですが、一番簡単だったのが次の方法。

▼コイルをアンテナの近くに置いてノイズ磁界を注入
雷磁界を加える
 このコイルは470μHのコア入りインダクタです。単三の電池を用意し、コイルに瞬間的に通電させることでノイズ磁界を発生させます。大きな電流が流れるのでタクトスイッチだとすぐにダメになりそうだし、思いっきりチャッタリングが発生した方がいいので、線を手で動かして回路を閉じるのがいいと思います。

 繋ぎっぱなしにすると線が焼けてくるはずなので要注意。それと、外部コイルを近づけすぎると、同調周波数が下がって目標の500kHzに合わなくなるので、これも要注意です。

▼シリアルモニタの画面
シリアルモニタ

 CAP_RESULT=5  40pF までが初期化プロセスで、以降は人工雷ノイズを検出した場合の表示です。ノイズを発生させてから一呼吸置いてシリアルモニタに検知結果が一行表示されます。なお、コイルに通電した時に必ず検出されることは無く、10回に一回程度の頻度でしか検知されません。雷パルス判定条件が簡単には満たされないからでしょうが、これでも雷が落ちるのを待っているよりはずっとマシです。

 ということで、センサーとしては動いているようです。さて、これをどう料理するか、、

ATmega328P用のヒューズリセッターの製作

 Arduino UNOに使えるCPUの在庫が少なくなってきたので、ヒューズの設定をおかしくしてしまって動かなくなったCPUを復旧させてみました。

▼使えなくなったCPUが3個
ヒューズがおかしくなったCPUたち
 このチップはATmega328Pなのでシグネチャは0x1E950Fのはずが、ライターで読むと変な数字(0x010305)が返ってきます。

▼ISPライターで読んだ画面
不当なデバイスID

 これはAVRISP mkIIの画面ですが、シグネチャーの窓が赤字になって、不当なIDであることを示しています。こうなってしまうと普通の(ISPの)ライターでは元の状態に戻すことは出来ず、もちろん書き込みも出来ません。

 こういう場合でも、高電圧プログラミングが可能なライターならヒューズを操作できるので、正しい状態に戻すことが出来ます。まあ、高電圧と言っても+12Vなので何てこと無い電圧です。ともかくこれはヒューズリセッターという名前で呼ばれていて、ネットに先人の方々の事例がいくつも上がっています。その中で、今回は作り易すそうな、まりすさんの記事の物を作ることにしました。

 まりすさんの、ATmega48/88/168/328用のヒューズリセッターをArduinoで作る、の記事

▼回路図(クリックで別窓に拡大)
回路図
 まずは自分が見易い(使い易い)回路図に書き直しました。

▼ブレッドボード
ブレッドボードに作った高電圧書き込み回路
 線が多いですが、規則正しく並んでいる部分が多いので配線はさほど難しくはありません。

▼12Vの電源を用意して実行中
イレース作業中
 上にちょっとだけ写っているのは直流安定化電源で、これから12Vを供給します。手間にあるのは単体動作用のCPUボードで16MHzのオシレーターが付いています。ヒューズの書き込みが終わったチップをここに挿して、左奥にあるISPのライタ(AVRISP mkII)で正しく設定出来ているか確認しました。

▼シリアルモニタの画面
シリアルモニタの画面
 作業はArduino IDEのシリアルモニタ上で対話形式で行います。

 こう書くと何の問題も無く進んだように見えますが、ひとつ引っ掛かりました。それは元のプログラムがコンパイラを通らなかったことです。プログラムを見ると、プログラム領域に置いた構造体のデーターをポインターで読み出すという高度なことがやられていました。これを直すのは私にとってかなりの難問です。

 ということで、まりすさんのブログにコメント入れて質問してみると、問題が再現したみたいで、Arduino1.6.0以降だと問題が出るようです。Arduinoはバージョンが上がる度にこういう非互換性問題が出るのが困りものです。

 で、今回はATmega328Pだけ処理できれば問題無いので、それに特化したプログラムに書き換えて問題を回避することにしました。ちなみにオリジナルのプログラムは、チップのシグネチャを読んで、各種のCPUに対する設定を自動的に行うという親切な作りになっています。

 ということで、今回作ったATmega328Pのチップイレーサーのスケッチはこちら。まりすさんが作られたものにちょっとだけ手を入れたものです。(chipData.hは不要です)

 これでチップのヒューズがリセットできますが、実は使い方が完全に判っていません。ヒューズの書き込みやチップのイレースをやってたら、AVRISP mkIIで読み書きできるようになってました。チップのイレースやるとヒューズがデフォルトに戻ると思ってましたが、何だか違う感じです。どうもヒューズとロックビットの書き込みを明示的にやらないとでめなようですが、このあたりはあまり自信がありません。汗;

 AVRISP mkIIで扱えるようになったらしめたものです。すかさずブートローダーのoptibootを書き込んでArduinoで使えるようにします。optibootは下記にあります。(環境によって場所は微妙に変わると思います。また将来無くなる可能性もあると思います。それとoptifixを書き込む手もあるはずですが・・・)
C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex

 ここまでやったら最後にArduino UNO で使えるようにヒューズの値の最終確認をします。このへんも変なこと書くと混乱の元になるので詳しくは書きません(書く能力がありません)。

◆まとめ
 ということで途中で躓きましたが、何とかATmega328Pのヒューズのリセットに成功しました。ゴミだったチップ3個が使えるようになって、さらにArduinoのブートローダーまで書けたので、市場価格で1050円の価値が生まれたことになります。これって何だかすごく嬉しいw
カレンダー
03 | 2015/04 | 05
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード