ハロウィン Lチカ | Tamesuke-Goto Maker的Blog

Tamesuke-Goto Maker的Blog

地域ISP管理者だけれど、ここ3年ほどMakerなJobが増えたのでまとめてみたいと思います 旧ハンドル Ringoro

昨年作った ハロウィン用LEDチカを今年も作ってみました

 

 

 

今回は秋月のLEDストリングを使ってやってみます。

LEDストリングは4-5個づつ切り取って、抵抗値は 220Ωでやってみます。

 

LEDストリング

 

今回はATTiny13Aのウォッチドッグタイマーを使ってDeppSleepをさせながら動かしてみました。

512msecのWDタイマーで0.5sec点灯 1sec消灯にしてみます。

 

ウォッチドッグの省電力化はなかなかです。CR2032一個で2週間くらい点灯しっぱなしですが、まだ光っています。

 

消費電力を計算してみます  LEDの電圧降下2.8V として

 

(3-2.8)/220 * 2 = 0.9 mA

 

これが連続ではなく1.5sec間に0.5sec なので消費電力約1/3。 CR2032ボタン電池の容量が 220mAHなので、、、ATTinyの待機電流は10μAとかなのでとりあえず無視。

 

220/(0.9/3) = 733h   ... 30日


大分長持ちする計算です。少なくとも20日くらいは持つと考えて良いでしょう。

 

 

 

スケッチはこんな感じ

 
/*
     Blink 2 LEDs
     for  ATTiny13 LED Board

     2018/10/17
 
   PCINT5/A0/D5/RST |1---O---8| VCC
      *PCINT3/A3/D3 |2       7| D2/A1/INT0/PCINT2*
       PCINT4/A2/D4 |3       6| D1/PWM/PCINT1
                GND |4-------5| D0/PWM/A0/PCINT0*

  *Use PIN
  PIN5 (D0) ... PCINT SW ON/OFF connect to GND
 
 */
 
//#include <avr/pgmspace.h>

#include <avr/interrupt.h>
#include <avr/sleep.h>

#define LED1 3
#define LED2 4
#define LED3 0
#define LED4 1
#define LED5 2

volatile int pcint;
volatile bool wait;

/*
 *    Random
 */

unsigned int randshort(unsigned int init)
{
  static unsigned int seed;
  if(init!=0){
  seed ^= init;
  }
  seed *= 52341;
  seed += 37;
  return(seed ^ 0x1234);
}


ISR(PCINT0_vect) {
  if(digitalRead(0)==0){
    pcint=pcint ^ 1;
  }
}  


void setup() {
  randshort(analogRead(0));
  pinMode(LED1, OUTPUT);
//  pinMode(LED2, OUTPUT);
//  pinMode(LED3, OUTPUT);
//  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);

  pinMode(0, INPUT_PULLUP);
  GIMSK |= _BV(PCIE);                     // Enable Pin Change Interrupts
  PCMSK |= _BV(PCINT0);                   // Use PB1 as interrupt pin for My Board

  // set timer to 0.5s
  WDTCR |= (1<<WDP2) | (1<<WDP0);

// set timer to 4 sec
//  WDTCR |= (1<<WDP3);

// Set watchdog timer in interrupt mode
  WDTCR |= (1<<WDTIE);
  WDTCR |= (0<<WDE);
  sei(); // Enable global interrupts
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
}


ISR(WDT_vect) {

}

void loop() {
  static unsigned char d;
  static unsigned char t;

  if(pcint){
    sleep_mode();
    return;
  }


//  d = randshort(0) & 0x60;

//  digitalWrite(LED1,(d & 0x11));
//  digitalWrite(LED2,(d & 0x22));
//  digitalWrite(LED4,(d & 0x44));
//  digitalWrite(LED5,(d & 0x88));
//  digitalWrite(LED3,(d & 0x41));

  d = randshort(0) & 0x05;
//  d++;
  digitalWrite(LED1,(d));
  digitalWrite(LED5,(d^0x01));
//  digitalWrite(LED2,(d^0x01));

  sleep_mode();
  digitalWrite(LED1,0);
  digitalWrite(LED5,0);
//  digitalWrite(LED2,0);
  sleep_mode();
  sleep_mode();

}
 
----------------------