なんとなくクリスマス飾りをつけたくなるようなフレームを貰ったんですよ。
ただ飾るだけじゃつまらんし猫らに食われそうなので、
玄関先におくイルミネーションを作ってみよう。
せっかくなのでLEDテープだけ買って、
それをArduinoでスイッチしてみようではないか。
できれば明るくなったら自動で消えるようにしたい。
確か大昔にOLYMPUS XA2の自動露出を修理した時に
余分に買っておいたCdSがどこかに眠っているはず。
左が日没を検知して全体に電気を供給する部分。
まるにギザギザがCdS。
暗くなるとCdSの抵抗値が上がってGNDに落ちていた電気が
MOSFETに流れてGNDが開く、そして全体に電気が流れるという算段。
分圧用の抵抗は手持ち可変抵抗で一番抵抗の大きい100kでも足りず、
直列で200kの固定抵抗を足した。
いや100kだったかもしれない。
ここの抵抗はCdSのばらつき具合によっても変わるので
実際に試してチェック。間違えても壊れないから大丈夫。
→秋月CdS
3つ並んだLEDの上には便宜上電流制限抵抗を書いたけど
買ったテープLEDに抵抗入っているので実際にはLEDテープをつなぐだけ。
ArduinoのD2,D3,D4とMOSFETの間に電流制限抵抗、
GNDとの間にプルダウン抵抗を入れておけばいざという時に安心だけど、
まあ、実際やってみて動けば大丈夫だろう、多分。
MOSFETは2SK2925、正直オーバースペック。
暗くなったらスイッチオーンクリスマスイルミでーきた! pic.twitter.com/E6v05pfDqY
— カワヅ (@necobut) 2017年11月27日
ブレッドボードでテストしている様子。問題ない。
さらに雑になった実体配線図。
これ忘れた頃にみたら読めないかもしれん。
よっしクリスマスイルミ基板できた。後はケースに入れて防水するだけだ。 pic.twitter.com/JtPdXze2VQ
— カワヅ (@necobut) 2017年12月1日
ユニバーサル基板で作って無事動作。
裏は汚すぎて見せられないよ!
写真を撮り忘れたとも言う。
あとは屋外におくので防水。
基板はタッパーに入れて、タッパーの蓋に穴を開けて
配線を通して隙間をグルーガンで塞ぐ。
ACアダプターの部分はラップで包んで上からテープでぐるぐる巻き。
何度も書くけど写真を撮り忘れた。
Arduinoクリスマスイルミ、ひとまず完成!NanoのLEDが意外と気になるw pic.twitter.com/VzBXOMuE0T
— カワヅ (@necobut) 2017年12月2日
ちゃんと光った。
int ft = 1000; void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); } void fin2() { for (int i = 0; i < ft; i++) { digitalWrite(2, LOW); delayMicroseconds(ft - i); digitalWrite(2, HIGH); delayMicroseconds(i); } } void fin3() { for (int i = 0; i < ft; i++) { digitalWrite(3, LOW); delayMicroseconds(ft - i); digitalWrite(3, HIGH); delayMicroseconds(i); } } void fin4() { for (int i = 0; i < ft; i++) { digitalWrite(4, LOW); delayMicroseconds(ft - i); digitalWrite(4, HIGH); delayMicroseconds(i); } } void fout2() { for (int i = ft; i >= 0; i--) { digitalWrite(2, HIGH); delayMicroseconds(i); digitalWrite(2, LOW); delayMicroseconds(ft - i); } } void fout3() { for (int i = ft; i >= 0; i--) { digitalWrite(3, HIGH); delayMicroseconds(i); digitalWrite(3, LOW); delayMicroseconds(ft - i); } } void fout4() { for (int i = ft; i >= 0; i--) { digitalWrite(4, HIGH); delayMicroseconds(i); digitalWrite(4, LOW); delayMicroseconds(ft - i); } } void fin2fout4() { for (int i = 0; i < ft; i++) { digitalWrite(2, LOW); digitalWrite(4, HIGH); delayMicroseconds(ft - i); digitalWrite(2, HIGH); digitalWrite(4, LOW); delayMicroseconds(i); } } void fin3fout2() { for (int i = 0; i < ft; i++) { digitalWrite(3, LOW); digitalWrite(2, HIGH); delayMicroseconds(ft - i); digitalWrite(3, HIGH); digitalWrite(2, LOW); delayMicroseconds(i); } } void fin4fout3() { for (int i = 0; i < ft; i++) { digitalWrite(4, LOW); digitalWrite(3, HIGH); delayMicroseconds(ft - i); digitalWrite(4, HIGH); digitalWrite(3, LOW); delayMicroseconds(i); } } void fin3fout4() { for (int i = 0; i < ft; i++) { digitalWrite(3, LOW); digitalWrite(4, HIGH); delayMicroseconds(ft - i); digitalWrite(3, HIGH); digitalWrite(4, LOW); delayMicroseconds(i); } } void fin2fout3() { for (int i = 0; i < ft; i++) { digitalWrite(2, LOW); digitalWrite(3, HIGH); delayMicroseconds(ft - i); digitalWrite(2, HIGH); digitalWrite(3, LOW); delayMicroseconds(i); } } void loop() { fin2(); fin3(); fin4(); fout4(); fout3(); fout2(); delay(ft); fin2(); fin3fout2(); fin4fout3(); delay(ft); fin3fout4(); fin2fout3(); fout2(); delay(ft); }
デジタルアウトだけどPWMとして
高速オンオフをすることでフェードを実装。
今気がついたけど、finとかの関数呼ぶ時に
引数でポートを渡せば関数側がもっと
少ない行でかけたなーと思いましたそのうち直すかもしれないけど
面倒だったら直さないかもしれない。
とりあえず稼働したので、あとは気が向いた時に
演出バリエーションを増やしていく、つもり。
AP NANO V3.0 開発ボード AP-TH034
|
コメントを残す