2014年12月5日金曜日

atmega8 + 100円ショップLEDケーブルでクリスマスイルミネーション

実に10ヶ月ぶりの投稿。

そろそろクリスマスなシーズンなので去年作成したイルミネーションをアレンジしてみた。

  • 白色LEDケーブルを3本追加→計6本LED60個
  • オルゴールはなし
  • LED点灯パターンを点滅のみにして10秒毎に点滅時間をランダムに(100ms~2000ms)
簡単な回路とプログラムの割にはいい感じ。
このままツリーにまとわりつかせて飾る予定。


回路


  • atmega8
  • aitendo USB-UART変換モジュール(電源として使用)
  • トランジスタx6
  • 抵抗100Ωx6
  • 100円ショップLEDx6


動画


コード

/*
atmega8 16pu + um3281
xmass ilumination
ISP
PC6 RESET
PB5 SCK
PB4 MISO
PB3 MOSI
LED1 PC0
LED2 PC1
LED3 PC2
LED4 PC3
LED5 PC4
LED6 PC5
*/
#define F_CPU 1000000UL // Clock Speed
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
/* DDRC |= (1 << PC0); */
#define DSET(p,n) (DDR##p|=(1<<P##p##n))
/* PORTC |= (1 << PC0); */
#define PSET(p,n,d) \
if ((d)) { \
(PORT##p|=(1<<P##p##n));\
} else { \
(PORT##p&=~(1<<P##p##n));\
}
#define DELAY 50
#define INTERVAL 10000
volatile unsigned long e = 0;
int
main(void)
{
int i,j,k,m;
// port c output setting
DSET(C,0);
DSET(C,1);
DSET(C,2);
DSET(C,3);
DSET(C,4);
DSET(C,5);
// pull up
PORTC = 0xFF;
srandom(0);
i = 0;
m = 10;
while (1) {
if (e < INTERVAL) {
// drive led by pattern
j = i % 2;
k = (i+1) % 2;
PSET(C,0,j);
PSET(C,1,k);
PSET(C,2,j);
PSET(C,3,k);
PSET(C,4,j);
PSET(C,5,k);
for(k=0;k<m;k++) {
_delay_ms(DELAY);
e += DELAY;
}
i++;
} else {
i = 0;
e = 0;
m = random() % 20 + 1;
}
}
return 0;
}
view raw xmass2014.c hosted with ❤ by GitHub

久々にatmegaやらはんだごてやらさわったけどもわりと楽しめた。

amazonアソシエイト