ウォッチドッグタイマ(番犬)の使い方 [Arduino]
ハードウェア、ソフトウェア問わずにシステム異常を検知する「番犬」です。
異常を検知する方法は、今回のTA8030SではRC回路による「コンデンサの充電時間」を利用します。
~ 番犬の流れ ~
システムの「何らかの処理」の実行前にコンデンサの充電を開始して、処理が終了したらコンデンサを放電します。
システム正常時は処理の後に必ずコンデンサを放電しますが、異常時は放電ができないのでコンデンサが満タンになります。満タンになるとTA8030SのRST1ピンから「リセット信号」が出力されます。このリセット信号がシステムの異常信号となります。
この番犬の手法は、機械屋さんの「例外処理」となります。
(TA8030Sはコンデンサの充電開始が2Vからで満タンが4Vです。今回はC1とR1を調整して満タンになるまでは約15秒間としています。)
リンク先は0Vからの充電時間の計算です。今回の番犬は2Vから充電開始ですので計算結果が異なりますので「参考程度」にして下さい。
使用部品・材料
総額で約560円です。(Arduino本体の値段を除く)
部品/材料 | 値段 | 備考 |
---|---|---|
サンハヤト SAD-101 ニューブレッドボード | ¥500 | Amazon.com |
ウォッチドッグタイマ TA8030S | ¥20 | 秋月電子の通販コード(I-09600) |
タクトスイッチ | ¥10 | 秋月電子の通販コード(P-03647) |
電解コンデンサー100μF25V85℃(ルビコンPK) | ¥10 | 秋月電子の通販コード(P-03122) |
5mm赤色LED OSDR5113A | ¥20 | 秋月電子の通販コード(I-11655) |
カーボン抵抗器 | 数円 | 100kΩ(1個)、10kΩ(2個)、220Ω(1個)を使用。 |
配線図
C1に100μF、R1に100kΩを使用することによりコンデンサが満タン(4V)になるまでの充電時間を約15秒としています。この値はシステムによって適宜、変更して下さい。
次は公式データシートより(TA8030.pdf)
スケッチ(プログラム)
暴走ボタンを約15秒間、押し続けると擬似的に「システム異常」を発生させます。システムが異常になるとLEDが点灯するようにしています。
void setup() { Serial.begin(9600); pinMode(7,OUTPUT); pinMode(8,OUTPUT); pinMode(9,INPUT); } void loop() { int val = analogRead(A0); // システムの暴走を知らせるLEDを点灯 if(val < 100){ digitalWrite(7,HIGH); Serial.println("システムが暴走しました。リセットボタンを押してください。"); } // コンデンサの充電開始 digitalWrite(8,LOW); // 本来はココに「何らかの処理」を記述する // その処理が完了したらHIGHにしてコンデンサを放電します。 // 暴走ボタンを押した状態は「何らかの処理中」とする if(digitalRead(9) == LOW){ digitalWrite(8,HIGH); } }
実行例
掲示板
ArduinoやRaspberry Piなどの電子工作の掲示板を作成しました。質問やわからない事は電子工作 (Arduino・ラズパイ等)でユーザー同士で情報を共有して下さい。