Arduinoで作るクリスマスツリーイルミネーション(改良版)
先週作ったArduinoで動かすクリスマスツリーイルミネーションの話の続きです。このツリーを見た家族の反応はとても良いのですが、後ろにプリント基板が剥き出しになっているのが残念という評価です。せめてケースか何かで覆って欲しいということでした。
▼ツリーの後ろに基板が剥き出しになっていると評判が悪い

ツリーの後ろ(この写真では右側)にあるのがArduino UNO の基板です。
なるほど、普通の人から見ると、基板が剥き出しになっているのはあり得ない光景なんでしょう。そんなことで、回路を出来るだけコンパクトに作り直すことにしました。またイルミネーション自体は好評なので、回路をツリーに固定する許可が出ました。ちなみにこれまでは、簡単に取り外せるような仕組みで取り付けていたのですが、そんな配慮はいらなくなりました。
これからが本題です。小さく作るためにはCPU(ATmega328PU)の単独動作にするしかありません。
▼クリスマスツリーの回路図 (クリックで別窓に拡大)

Arduino UNO で動かしていたのをCPUの単独動作に変更した回路図です。
▼チップ単体動作の確認中

この時点ではクロックにセラロックを使っていますが、最終的にはヒューズを書き換えて内部の8MHz CRオシレーターで動くようにします。
◆スケッチ
せっかくなのでスケッチも見直しました。CPUを使っていない時は深いスリープに入れ、消費電流を減らすことにしました。ここは以前作ったdelayWDT関数を使えば簡単です。あと、LEDの点灯パターンの追加/改良と切り忘れタイマー機能などを組み込んでいます。
このクリスマスツリーのスケッチ(20171129XmassTree.txt) (Shift-JISでエンコードしています。このブログの制限で拡張子はtxtになっています)
▼CPUの準備完了

動作確認が終わったらCPUの足を延ばして平らにします。足を曲げ戻したら間違いなく折れるはずなので、もう後戻りはできません。
▼スタンドの内側に回路を組み込み

お椀型のスタンドの裏にCPUを両面テープで貼り付けて、配線しました。ケースの内側にはショート防止用にカプトンテープを貼っています。またスイッや配線はホットボンドで固定しています。
▼6時間延長スイッチ

このツリーには切り忘れ防止機能があり、6時間で自動消灯します。USBコネクタを挿抜して電源を入れ直してもいいのですが、あまりスマートでは無いのでリセットスイッチを設けました。このスイッチを押すとリセットがかかり、その時点から6時間ツリーが点灯します。
▼完成

後ろにあったプリント基板が無くなり、すっきりしました。
▼動画
◆まとめ
・ コンパクトにまとまっていて、なかなか良い物が出来たと思います。最終的には透明な裏蓋を取り付ける予定です。
・ delayWDT関数を使った効果でCPUの消費電流は無視できるレベルまで下がりました。その結果、全体の消費電流は LEDが全点灯した状態でも1.2mA程度に収まっています。これなら単三を2本使ったDCDCコンバータータイプのUSB電源でも、長時間の動作が可能だと思います。ちなみにdelayWDTを使わない場合、CPUは常時15mAくらいの電流を電流を消費します。
・ こんなふうにLEDの数が多い場合は時分割駆動にして配線を減らすのが定石です。でも、それをやるとCPUを止められないので、消費電流の点では不利になりそうです。それに、この回路のようにCPU内蔵のプルアップ抵抗でLEDを光らせていると、絶対的な明るさが不足する可能性があります。でも10ms周期くらいの時分割駆動なら何とかなるかも知れません。どなたかやってみませんか?
▼ツリーの後ろに基板が剥き出しになっていると評判が悪い

ツリーの後ろ(この写真では右側)にあるのがArduino UNO の基板です。
なるほど、普通の人から見ると、基板が剥き出しになっているのはあり得ない光景なんでしょう。そんなことで、回路を出来るだけコンパクトに作り直すことにしました。またイルミネーション自体は好評なので、回路をツリーに固定する許可が出ました。ちなみにこれまでは、簡単に取り外せるような仕組みで取り付けていたのですが、そんな配慮はいらなくなりました。
これからが本題です。小さく作るためにはCPU(ATmega328PU)の単独動作にするしかありません。
▼クリスマスツリーの回路図 (クリックで別窓に拡大)

Arduino UNO で動かしていたのをCPUの単独動作に変更した回路図です。
▼チップ単体動作の確認中

この時点ではクロックにセラロックを使っていますが、最終的にはヒューズを書き換えて内部の8MHz CRオシレーターで動くようにします。
◆スケッチ
せっかくなのでスケッチも見直しました。CPUを使っていない時は深いスリープに入れ、消費電流を減らすことにしました。ここは以前作ったdelayWDT関数を使えば簡単です。あと、LEDの点灯パターンの追加/改良と切り忘れタイマー機能などを組み込んでいます。
このクリスマスツリーのスケッチ(20171129XmassTree.txt) (Shift-JISでエンコードしています。このブログの制限で拡張子はtxtになっています)
▼CPUの準備完了

動作確認が終わったらCPUの足を延ばして平らにします。足を曲げ戻したら間違いなく折れるはずなので、もう後戻りはできません。
▼スタンドの内側に回路を組み込み

お椀型のスタンドの裏にCPUを両面テープで貼り付けて、配線しました。ケースの内側にはショート防止用にカプトンテープを貼っています。またスイッや配線はホットボンドで固定しています。
▼6時間延長スイッチ

このツリーには切り忘れ防止機能があり、6時間で自動消灯します。USBコネクタを挿抜して電源を入れ直してもいいのですが、あまりスマートでは無いのでリセットスイッチを設けました。このスイッチを押すとリセットがかかり、その時点から6時間ツリーが点灯します。
▼完成

後ろにあったプリント基板が無くなり、すっきりしました。
▼動画
◆まとめ
・ コンパクトにまとまっていて、なかなか良い物が出来たと思います。最終的には透明な裏蓋を取り付ける予定です。
・ delayWDT関数を使った効果でCPUの消費電流は無視できるレベルまで下がりました。その結果、全体の消費電流は LEDが全点灯した状態でも1.2mA程度に収まっています。これなら単三を2本使ったDCDCコンバータータイプのUSB電源でも、長時間の動作が可能だと思います。ちなみにdelayWDTを使わない場合、CPUは常時15mAくらいの電流を電流を消費します。
・ こんなふうにLEDの数が多い場合は時分割駆動にして配線を減らすのが定石です。でも、それをやるとCPUを止められないので、消費電流の点では不利になりそうです。それに、この回路のようにCPU内蔵のプルアップ抵抗でLEDを光らせていると、絶対的な明るさが不足する可能性があります。でも10ms周期くらいの時分割駆動なら何とかなるかも知れません。どなたかやってみませんか?