これまでは、リレーを使ってACアダプタからライトへの給電自体を遮断していました。それって野蛮じゃないですか?だってライト消すときいちいちコンセント抜かないじゃないですか。電源ボタンを押すのが文明人です。いうわけで、切り替え時には電源ボタンを押すことにしました。いってもサーボモータで物理的に押すわけではなくて、回路的に押します。スイッチって、遮断されてる回路を、ボタンを押すことでつなげてるわけですよね。回路を接続したり遮断したりしている。それってつまり、リレーと同じじゃないですか。スイッチをリレーに置き換えれば、マイコンからLEDライトの電源ボタンを押せるわけです。前回はLEDがONになっているあいだずっとリレーをONにしておく必要があり、過熱してしまいました。今回は、「ボタンを押す」という一瞬の動作にリレーを使うだけなので、ONにするのも一瞬です。マイコンがアッツアツになるのも防げるというわけです。今回は、リレーをこの部品に差し替えます。ホーム&キッチンこの商品を含むブログを見るこれはフォトカプラという部品です。フォトリレーと呼ばれることもあるくらいでリレーとだいたい同じように使えるので、今回はこれを使うことにしました。フォトカプラは、電磁石を使わないので少ない電力で動きます。そのかわりデメリットもあり、制御される方の回路に大きな電流を流せません。さっきリレーでやったような用途、つまりLEDライトの電源をフォトカプラ経由で取るようなことはできないんです。ボタン代わりにする程度なら問題なし。Nanoに変えました。前回スイッチ周りのハマりで懲りたのに加えて、前者はマイコンの内部クロックで時間を測っており、後者は外部水晶がついています。こっちの方がタイマーの精度が高いはず。見る電源スイッチの両端から線を引き出しまして...試作。これはいける!!さて、タイマーでのライトのON/OFFまでできましたが、実はこれ、まだひとつ問題が残っています。前回の電源遮断方式では、リレーに電流を流せばライトはON、流さなければライトはOFFでした。マイコン視点だと自分が電流を流しているかどうかです。ソフトウェア側から、いまライトがついてるかどうかが簡単にわかるんですね。今回は、リレーに電流を流すたびにON/OFFが切り変わるしくみです。これってソフトウェア側からいまどっちかがわからないんです。ボタンを奇数回押したか偶数回押したかで推定はできますけど、あくまで推定なので、何らかの理由で途中でずれることもある。(例えば、途中で誰かが手でボタンを押したら?)なのでいまLEDライトがONになっているかOFFになっているか、調べる手段を別途確保する必要があります。OFF時はこの青いLEDが点くので、ここの電圧調べたら点灯状態わからないかな、とかいろいろテスターで調べていたのですが...どうもこのマイコンの足に、電源ON時だけ5Vが来ているようでした。表面実装の脇に無理やり銅線をはんだづけしました。端のピンでよかった...。5Vなのは好都合です。Arduinoのピンにそのまま入れてデジタル入力で読み取ることができます。いうわけで試作完成です!!さて、実際に水槽に置いてみます。実はこの記事の序盤、ライトのアームをなくした時に貼った、Afterの写真がその時の写真です。見ると左側にマステで留めたタッパーが写っていますね。この中にブレッドボードがそのまま入っています。前回、先に基板実装したら結局ダメで苦労が無に帰してしまったので、今度はこのまま仮運用に移ります。よいです数日間運用してみたのですが、大変良いです。この実装であればArduinoがアツアツになることはありません。タイマーも思いのほか正確で、秒単位で調べたわけではないですが、分単位ではだいたいあってそう。申しぶんない感じですので、いよいよ基板実装して仕上げます。フリスクのケースがちょうどいいサイズだったので収納しました。ケースの高さが足りずいろんなものがはみ出していますが...。コンパクトにまとめるために、もともとのリモコンと裏表で接着。ついでにライト本体にもマジックテープで金具をつけて、水槽の上で安定するようにしました。これで本当の本当に完成です。作業時間捻出のためまるっと1週間寝不足が続きましたが、寿命と代償に水槽周りはかなりすっきりしました。一回改造してしまうと、今後ほしい機能ができたときにまた拡張できそうなのもいいですね。「買ったデバイスが自分のものになった」という感じがします。以下に技術情報を載せておくので、アクアリウムをやっていて腕に覚えがあり、かつ物好きな方はぜひチャレンジしてみてください。技術解説ここからはもうちょっと詳しい技術よりの話です。フォトカプラを使ってみたい場合など、参考にしてください。これがブレッドボード上での配線図です。フォトカプラはTLP222AFを使っています(ちなみに上に貼ったAmazonリンクは別の型番ですが、少なくともピン配置は同じでした)。4本足で、切り欠きがない方の2本には繋いだり遮断したりしたい回路を、切り欠きがある方はGNDとArduinoのOUTPUTピンにつなぎます。Arduinoとの間には抵抗を入れる必要がありますが、計算方法はYahoo知恵袋(!)に書いてありました。基本的には上のブレッドボードの接続図と同じですが、インジケータLEDを一個追加しました。カッコ内は上のブレッドボードの図での色。0:ACアダプタの+(赤)1:リモコンのマイコンにはんだづけした線(黄色)2:ACアダプタのー(黒)3,4:リモコンのボタンからひっぱってきた線(緑)です。さいごにArduinoのコード。delay(100);}ポイントとしてはタイマーにmillis()を使っているところでしょうか。Arduino(というかそこに載っているAVR)は起動時点からの時間経過を内部でカウントしており、それをミリ秒単位で取得するのがmillis関数です。今回のプログラムでは、ライトをONにしたタイミングでmillis()の結果をstartTimeに代入しておき、随時最新の結果と比較、設定した時間が経過していたらライトをOFFにしています。その後24時間まで経ったらstartTimeを現在のミリ秒で上書きし、再びライトをONにします。longなので、だいたい50日くらいでオーバーフローします。幸運にも今回のような前回時刻からの経過時間を求めるような処理では、特段配慮する必要はないようです。なんでこうなるのかもっと詳しいことがここに書いてあって、英語ですが読んでみると面白いです。みなさまも良い水槽およびDIYライフを。最近飼いはじめた貝です。その他この商品を含むブログを見る2匹いると爆発的に増えるらしいので1匹だけにしました。ピンボケですみませんがグッピーの子供も生まれました。生まれたてと、ちょっと大きくなったやつ。nomolkはてなブログをはじめよう!slideglideさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。