なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

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

Posted by arms22 on 2009年01月19日 4  0

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

Ads by Google

4 Comments

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

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

待機電流(PowerDown時)を3mA以下、出来ればμAの単位まで落としたいです。
目的は車載用。状態監視で割り込みが入ると、ルームランプやウェルカムランプ、アンロック入力でドアオープン等を目指します。
2010.03.17 13:59 | URL | #W3fW6d3U [edit]
arms22 says..."No title"
そうですね、USBシリアルブリッジが残りの電流を
消費しています。
ですのでUSBシリアルブリッジを搭載していない
Arduino=Proを使ってみてください。

あとSleepライブラリを使われる場合、
こちらの最新バージョンをお使いください。
http://code.google.com/p/arms22/
2010.03.17 16:16 | URL | #j7sy4omY [edit]
says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2010.12.10 07:36 | | # [edit]
arms22 says..."Re: sleepライブラリ"
次のURLで最新verを公開しています。
http://code.google.com/p/arms22/
2010.12.10 11:45 | URL | #- [edit]

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。