スマートフォン用の表示で見るpoipoiです。技術的ななにかと、そうじゃないなにか。この広告は、90日以上更新していないブログに表示しています。調光回路のソフトウェアのおはなしこちらの続き。poipoides.hatenablog.com今回は、調光制御のソフトウェア部分のはなし。pin)にトリガが入る↑の外部割込みで各フォトトライアックをOFFする。フォトトライアックをONにする。いう流れになっています。フォトトライアックをONにするタイミングを制御するためのデータは、親機から送られる調光制御データを無線経由でTWE-Lite子機で受け取って、そこからUART経由でArduinoで受けて、最終的にArduino内でタイミング設定のデータに変換して使用する感じになってます。ここら辺詳しくは次回(以降?)の通信編で解説しようかと。コード今回、Arduinoのコードについてはこんな感じで組みました。github.com※マジックナンバーばっかりだが急いでたんだ。見なかったことにしてくれ。詳細はそれぞれ以下のように。立ち下がりで割込みを受ける割込みハンドラ内で、各種設定の初期化、各出力ピンをLOWに(トライアックOFF)。コードにするとこんなかんじ。}}タイマ割り込み部タイマはus刻みで設定できるTimerOneライブラリを使用。500usに1回割込みさせるTickとして使っています。最大20段階の光量調整になります。親機からの調光制御のデータは0~255でくるので実はだいぶ丸めちゃっているのですが、まああんまり細かくても人間の目にはわからないんじゃないですかね。いうアバウトな感じでやっています。(ここらへん調光の仕組みをロジック回路でまるっと作ればもっと精度よくなると思うんだけど、今回はマイコンでの簡易制御だからまあこんなもんかなという感じです。機会あったらやるかも?)ただし、実はこれだけではちゃんと動かないのです。TimerOneライブラリのフラグクリア部についてじつは上述のコードでうまく動かなくてずっと悩んでたんですが、TimerOneライブラリの中身を見て理由が判明。bit}割り込みフラグのクリア処理がコメントアウトされてますけど!?ちょっと理由は定かじゃないのですが、タイマをスタートさせる関数で割り込みフラグをクリアしてないんですよね。いうか、そのためのコードが意図的にコメントアウトされているのです。そりゃ2回目以降のタイマ割り込みが入らないわけですよ。(時間なくあんまり真面目にライブラリ全体を見てないのでもしかしたら何らかの理由があるのかもしれませんが。)なので今回はそこのコメントアウトを外したライブラリを作って使用しています。github.com皆様もTimerOneライブラリを使用するときはお気をつけください。締めということで今回はここまで。調光回路のハードウェアのおはなしこちらの続き。poipoides.hatenablog.com調光回路はうまいことAC電源の波形にあわせて制御してあげなければいけません。単純に電球をON/OFFするだけならリレーやSSRを使うだけで比較的簡単に制御できます。今回調光までやりたかったので制御部分がちょっと複雑になってます。いうことかというと、電球の動力となるAC電源は50Hzで波打っているわけです。単純にPWM制御(高速にON/OFFしつつONの幅を変えることで見た目上の明るさを変える制御)するだけだと、AC波形の山のどの部分でONしたかによって明るさが変わってしまうのです。AC波形がプラスマイナス反転するタイミング(ゼロクロス)をトリガーにしてタイミングを測ってON/OFFする必要が出てきます。ついてもかなり詳しく解説されているのでとても勉強になります!簡単に制御のポイントを説明するとトランスで降圧したAC波形を両方向フォトカプラに通してゼロクロス検出(フォトダイオードの立ち上がり電圧以下ではフォトトランジスタがONにならないのを利用)上記トリガ波形をマイコンの割込み端子で受ける割込み後一定時間後にフォトトライアックをONにする(どのくらい時間経過したかで明るさが決まる)次のゼロクロス点付近でフォトトライアックが自動でOFFになるこれらを繰り返すという感じ。これをもとに作ったのがこちらの回路です。ほんとはちゃんと回路図エディタで作り直そうと思ったんだけど、めんどくさくなったので手書きのままです。採用)制御を4ch化という感じでしょうか。ついてTWE-Liteというのは東京コスモス電機が製造販売しているZigBee無線モジュールです。TOCOS-WIRELESS.COMなぜ数あるZigBeeモジュールの中からこれを選んでいるか。それは、ひとえに簡単だからです!買った時点で親機と子機をミラーリングするためのファームウェアがすでに入っているので、親機につないだボタンを押したら子機につないだモーターが動く、みたいなことが3秒くらいでできてしまいます!また、もう少し細かいことをやろうと思ったら子機の各IOやI2Cピンを親機にUART経由でコマンドを送ってあげるだけで制御できるのです!もちろん無線で!TWE-Liteのすばらしさについては(余力があれば)そのうち別記事でまとめますが、ホントおすすめです。これのおかげでちょっとしたプロトタイピングなら最近Arduinoすら使わずに作ってしまっています。用のピンが変な位置にあるので断念。代わりに今回はUARTで接続しています。mini]という感じで、結局さっきTWE-Liteをあれだけ褒めちぎったくせに結局まあ普通のZigBeeモジュールと変わらない使い方になっちゃってますが。盛りだくさんになりそうなので今回はこの辺で。次回は、Arduino側のソフトウェアの解説をば。あ、もう少し詳しく説明して!とか要望あったらコメントくださいね。