遅ればせながらMerry Christmas!
といっても何もなかったですけどね('A`
クリスマスにちなんで(?)LEDキャンドルを作ってみました。
ただ点灯させてるだけじゃライトになるんでゆらぎをつけました。
1/fゆらぎにして吹いたら消えるようにしました。
製品として既にありますけど(´・ω・`)
スポンサーリンク
消えるほどではないけど強く吹いたら激しくぶれます。
そしてちょっとリアルに吹いても時々消えないようにしました。
消えたように見えて消えてないやつですwww
吹いたら消えるといってもさすがに風に反応させるのは思いつかなかったので、音に反応させる回路を敏感にしました。
それをAVRで操作しています。
最近部品がもったいなくてブレッドボード上ばかりですorz
これを10個ぐらい作ったらケーキのろうそく代わりに!?
備忘録として回路とArduinoのスケッチを置いときます
AVRISPとATtinyほしい・・・
頭悪いプログラムですけど多めに見てください
#include <Sleep.h> // cf. http://arms22.blog91.fc2.com/blog-entry-212.html int yuragi(); int val = 0; float x = 0.1; float x1 = 0.1; int off = 40; // 消える確率 int rev = 30; // 復活する確率 // 100 - (off + rev) == 吹いても何も起こらない確率 int SMinMic = 520; // 吹いていないときの最小値 int SMaxMic = 540; // 吹いていないときの最大値 int MicMin = 120; // センサーからの入力の最小値 int MicMax = 900; // センサーからの入力の最大値 int OffMic = 10; // 閾値:この値が大きいとすぐ消える void setup() { randomSeed(analogRead(0)); } void loop() { int i, rand; int input = analogRead(1); if(SMinMic <= input && input <= SMaxMic){ val = yruagi(); analogWrite(9, val); delay(100); } else{ int mic = map(input, MicMin, MicMax, 255, 0); analogWrite(9, mic); if(mic <= OffMic){ rand = random(100); if(rand <= off){ for(i = 255;i >= 0;i--){ analogWrite(9, i); delay(2); } while(1){ digitalWrite(9, LOW); Sleep.powerDown(); } } else if(off < rand && rand <= off + rev){ for(i = 255;i >= 0;i--){ analogWrite(9, i); delay(2); } delay(500); for(i = 0;i <= 100;i++){ analogWrite(9, i); delay(1); } } } } } int yruagi(){ // 1/fゆらぎ // cf. http://dkylog.air-nifty.com/dkylog/2009/07/led-wardiuno-37.html x = x1; if(x < 0.5) x = x + 2 * x * x; else { x = x - 2 * (1.0 - x) * (1.0 - x); } if(x < 0.08) x = (float)(random(20,80))/256; if(x > 0.995) x = (float)(random(128,253))/256; x1 = x; x = x * 255; return (unsigned int)x; }
LEDキャンドル
スポンサーリンク
Leave a Comment