現在プログラミングの仕事をしているが集中すると
ついつい休憩せずにぶっ通しで1時間くらい仕事をしてしまう。
しかし間できちんと休憩をした方が作業効率は上がるみたいだ
ということで今回は15分経過すると休憩を促すような
装置を開発してみた。
使用したのは以下
ハードウェア
1、余っているLED 1個
2、余っているバッテリケース(単3✕2本) 1個
3、余っているプッシュボタン 1個
4、余っているセレクトスイッチ 1個
5、余っているATTiny85 1個
すべて余り物で作成した
データ書き込み
ArduinoUNOを書き込み装置に作り変えて
ATTiny85に書き込みをする。
詳細は以下のURLを参照してください。
https://qiita.com/Kurogara/items/23a471cc0037303dcd17
プログラム
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
int LED_PIN = 4;
int Button_PIN = 3;
// watchdog interrupt
ISR(WDT_vect) {
wdt_disable(); // disable watchdog
}
void setup() {
delay(1000);
// ピンの設定
pinMode(LED_PIN, OUTPUT);
pinMode(Button_PIN, INPUT_PULLUP);
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
}
void loop() {
for (int i = 0; i < 112; i++) {
myWatchdogEnable(); //8秒スリープ
}
while(digitalRead(Button_PIN) == HIGH){
delay(500);
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
}
}
void myWatchdogEnable() {
noInterrupts(); // timed sequence below
MCUSR = 0; // reset various flags
// allow changes, disable reset
// Le registre a un nom différent par rapport à l'ATmega328 : `WDTCR` % `WDTCSR
WDTCR = bit(WDCE) | bit(WDE) | bit(WDIF); // set WDCE (Watchdog Change Enable), WDE (Watchdog System Reset Enable)
WDTCR = bit(WDIE) | bit(WDP3) | bit(WDP0); // set interrupt mode and an interval 8s (cf. datasheet p45-46)
wdt_reset(); // pat the dog
byte adcsra_save = ADCSRA;
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
ADCSRA = 0; // disable ADC
// Important note! You must use the PRR after setting ADCSRA to zero,
// otherwise the ADC is "frozen" in an active state.
power_all_disable(); // turn off all modules
noInterrupts(); // timed sequence follows
sleep_enable();
interrupts();
sleep_cpu(); // now goes to Sleep and waits for the interrupt
sleep_disable(); // cancel sleep as a precaution
power_all_enable(); // turn on all modules L'ordre est important !!
ADCSRA = adcsra_save; // stop power reduction
} // end of myWatchdogEnable
setup()の箇所でPINの設定
loop()の箇所でmyWatchdogEnable(); //8秒スリープ
を112回することで約15分の待機を行っています。
待機を抜けるとLEDを点滅。
ボタンが押されるとLOWになるのでまたスリープのループに入ります。
配線
実機
あまりがあれば実質0円で作成できるので
皆さんも15分の休憩を定期的に取りたい方は参考にして作成してください!
休憩は大事ですよ~