Arduino

Arduinoのスリープモードについて(WDTによる復帰)

ウォッチドックタイマーによるスリープモードの復帰のやり方

前回は外部からのトリガー「ボタンを押す」によってスリープモードへの移行や復帰を行いました。

しかし、実際に運用していく際は、一定時間の間隔おきにArduinoを起動させることの方が多いと思います。

本ブログでも製作している「自動水やり機」でも一定時間おきに土の状態を読んで必要に応じて水やりを行うプログラムが理想的です。

今回はウォッチドックタイマー(WDT)を使って、一定時間おきに
「起動」→「スリープ」→「起動」→「スリープ」
を繰り返すプログラム
を考えていきたいと思います。

目次
  • ウォッチドックタイマーとは
  • 作成するプログラムの流れ
  • プログラム作成
  • 消費電力

ウォッチドックタイマーとは

プログラムが問題なく作動しているかを見張る番犬のような機能です。外部回路で動いているタイマーのカウントがあふれる前にタイマーのクリアを行わないとマイコンのリセットが行われる仕組みです。

作成するプログラムの流れ

今回作成するプログラムの流れは下の写真の通りです。

プログラム作成

スリープモードを使用するためのライブラリ「avr/sleep.h」に加え、今回はウォッチドックタイマーを使用するためのライブラリ「avr/wdt.h」も読み込んでいきます。

起動時にLEDを点灯させるためのピンの設定に加え、スリープモードの設定もここで行っています。今回はパワーダウンモードを使っていきます。

また、ウォッチドックタイマーの設定もここで行います。wdt_enable(WDTO_●●)の赤字の部分を変更することでウォッチドックタイマーによるリセットまでの間隔を指定します。指定できる間隔は10通りです。

設定時間 コード
0.015秒 WDTO_15MS
0.03秒 WDTO_30MS
0.06秒 WDTO_60MS
0.12秒 WDTO_120MS
0.25秒 WDTO_250MS
0.5秒 WDTO_500MS
1秒 WDTO_1S
2秒 WDTO_2S
4秒 WDTO_4S
8秒 WDTO_8S

7ピンを「HIGH」にすることでLEDを点灯させます。1秒間点灯させた後に7ピンを「LOW」にしてLEDを消灯させ、その後にスリープモードにします。

プログラム上はそのままスリープモードが継続いたしますが、8秒経過した時点でマイコン自体がリセットされるため、再度プログラム最初から処理が始まります。

下記にすべてをまとめとプログラムを掲載します。

消費電力

スリープモードの有無で消費電力を確認してみました。結果としてはLED点灯時の消費電力に差はありませんでしたが、LED消灯時はスリープモード有の方が3割ほど消費電力が低い結果となりました。スリープモードはきちんと動作しているようです。

スリープモード
無のプログラム 有のプログラム
LED点灯時 LED消灯時 LED点灯時 LED消灯時
5V 42mA 5V 30mA 5V 42mA 5V 20mA