Arduinoで遊ぼう - Arduinoをスリープさせる

Arduinoでスリープ機能を使うにはavr/sleep.hをインクルードし、set_sleep_mode関数、sleep_mode関数を使う。こんな感じ。
#include <avr/sleep.h>

void loop() {
  set_sleep_mode(SLEEP_MODE_IDLE);
  sleep_mode();  //ここでsleep
}
このままでも特に問題ないんだけど、生のavr-gccが見えてよくない。Arduinoっぽくないのでスリープ機能を使うためのSleepライブラリを作成した。

ダウンロード: Sleepライブラリ
http://xfind.hp.infoseek.co.jp/electric/arduino/Sleep001.zip

使い方
1.Sleepライブラリをarduino-0012/hardware/libraries/以下にコピー。
2.新しいスケッチを作成。
3.メニューからSketch > Import Library > Sleepを選択。
4.スリープさせたいタイミングでスリープメソッドを呼ぶ。

Sleepライブラリでサポートしているスリープメソッドは次の6つ。
 メソッド
アイドルモードidle
ADCノイズ低減モードnoiseReduction
パワーセーブモードpowerSave
スタンバイモードstandBy
パワーダウンモードpowerDown
パワーダウン+外部割り込みによる復帰モードpowerDownAndWakeupExternalEvent


各スリープ動作に於ける動作クロック範囲と復帰起動要因
wakeup-source-in-sleep-modes.png


サンプルスケッチ:パワーダウン+外部割り込みによる復帰
#include <Sleep.h>

void setup() {
  pinMode(2,INPUT); // INT0
  pinMode(13,OUTPUT); // LED
}

void loop() {
  digitalWrite(13,HIGH); // sets the LED on
  delay(3000); // waits for a second
  digitalWrite(13,LOW);
  Sleep::powerDownAndWakeupExternalEvent(0);
}
パワーダウンモードと外部割り込み(INT0)による復帰起動のサンプルを解説します。pin2は外部割り込み(INT0)の端子です。入力モードに設定します。pin13はLEDに接続されています。出力に設定します。スケッチでは起動後LEDを3秒点灯させてから、LEDを消灯し、外部割り込み(INT0)が発生するまでパワーダウンモードに入ります。外部割り込み(INT0)が発生したら復帰起動します。
powerDownAndWakeupExternalEventメソッドの引数は外部割り込みの番号です。

Arduino Duemilanove Wake Up on a External Event
上記スケッチ用の接続図です。pin2を10kΩ程度の抵抗でプルアップし、プッシュスイッチ経てGNDに接続します。スイッチオフ時はプルアップ抵抗によりpin2はHiになり、スイッチオン時はpin2はGNDに接続されLowになります。外部割り込み(INT0)はpin2のHi→Low変化Lowレベルによって発生します。



サンプルスケッチ: パワーダウン+外部割り込みによる復帰
http://xfind.hp.infoseek.co.jp/electric/arduino/sketch_090115a.pde

avr-libc: : Power Management and Sleep Modes
http://www11.ocn.ne.jp/~akibow/avr-libc-user-manual-1.4.3/group__avr__sleep.html

Arduino Playground - ArduinoSleepCode
http://www.arduino.cc/playground/Learning/ArduinoSleepCode




Making Things Talk -Arduinoで作る「会話」するモノたち
Tom Igoe
オライリージャパン
売り上げランキング: 8025

コメント

PowerDownモード

貴殿のブログを見て早速試してみました。
Arduino Duemilanove
ATmega328P
Clock 16Mhz(Default)
電源電圧 5V
通常電流 27mA
PowerDown時 9.69mA

本当であればもっと少ないはずかと思うのですが、基板上の電源確認用の緑のLED(POWER)が消灯しないのでここで食っているのでしょうか。それともUSBシリアルブリッジで消耗しているのでしょうか。

待機電流(PowerDown時)を3mA以下、出来ればμAの単位まで落としたいです。
目的は車載用。状態監視で割り込みが入ると、ルームランプやウェルカムランプ、アンロック入力でドアオープン等を目指します。

No title

そうですね、USBシリアルブリッジが残りの電流を
消費しています。
ですのでUSBシリアルブリッジを搭載していない
Arduino=Proを使ってみてください。

あとSleepライブラリを使われる場合、
こちらの最新バージョンをお使いください。
http://code.google.com/p/arms22/

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: sleepライブラリ

次のURLで最新verを公開しています。
http://code.google.com/p/arms22/
Secret

Ads by Google
最近の記事
カテゴリ
Arduino (106)
電子工作 (111)
スタバッテルミン (5)
スタバカップアンプ (17)
電光掲示板 (7)
イベント (53)
太陽電池 (12)
ニキシー管 (19)
ARM (8)
PIC (20)
USBデバイス (7)
V850 (17)
Xfind (6)
プログラミング (4)
Android (3)
未分類 (22)
カメラ (6)
本 (18)
mbed (1)
D.I.Y (1)
Amazon.co.jp
最近のトラックバック
最近のコメント
arms22:Dotsライブラリ003リリース (12/09)
鹿煎餅:Dotsライブラリ003リリース (12/08)
鹿煎餅:Dotsライブラリ003リリース (12/08)
arms22:Maker Faire Tokyo 2012に出展してきたよ。 (12/07)
赤フグのグロラン:Maker Faire Tokyo 2012に出展してきたよ。 (12/07)
arms22:Dotsライブラリ003リリース (12/02)
鹿煎餅:Dotsライブラリ003リリース (12/01)
雑技工房:Dotsライブラリ003リリース (11/29)
リンク
Amazon.co.jp
プライバシーポリシー
当サイトでは、第三者配信による広告サービスを利用しています。このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 (氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。このプロセスの詳細やこのような情報が広告配信事業者に使用されないようにする方法については、ここをクリックしてください。