1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ATtiny85を使用して15分間隔できちんと休憩できる装置を作ってみた

Posted at

現在プログラミングの仕事をしているが集中すると
ついつい休憩せずにぶっ通しで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になるのでまたスリープのループに入ります。

配線

image.png

実機

image.png

image.png

あまりがあれば実質0円で作成できるので
皆さんも15分の休憩を定期的に取りたい方は参考にして作成してください!

休憩は大事ですよ~

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?