秋月のソリッドステートリレーキットとネットに転がっている図面を収集して作った回路がこれ。
AC電源とTLP626をつなげるところの抵抗値はあやしいw
FritzingにZNRの画像がないので、ZNRはそれっぽく書いておきました。これに放熱板とかつけます。
ヒューズも付けてないですが、僕の利用法としては50Wの白熱電球の調光なので、まぁいっかって感じ^^;;;
調光の原理としては、上半分のTLP626の回路でAC電源のゼロクロスを検知し、下半分のTLP560の回路でACリレーを構成して、ゼロクロスを検知したらリレーオフにし、任意の時間後にリレーオンにすることで調光を実現します。
これをArduinoで制御しようとすると、結構苦労します。attatchInterrupt()した関数内でdelay()する方法では動きません(´・ω・`)
タイマーで短いインターバルで関数を連続的に呼び出し、関数内で呼び出し回数をカウントして、インターバル×カウント数でリレーオンにするタイミングをはかります。
それだけだったらそんなには難しくはないのですが、他の制御と同居させようとすると、他の制御がタイマーいじってたりするので、そっちに合わせないといけない><たかだか電球1個の調光だけのためにArduino使うのはもったい無いですから。
このコメントは投稿者によって削除されました。
返信削除はじめまして、突然すみません。arduinoでの電球の調光を制御したくいろいろと試してこのブログにたどり着きました、、。
返信削除この回路と次のページのコードを使わせて頂き、試してみたのですがうまく行きませんでした。arduinoに関しては本当に基礎知識しかないのですが、よろしければアドバイスをいただきたいです。
つくったの、だいぶ前で、もうArduinoもいじってないので
返信削除コメントしづらいのですが。。。
TLP、なにそれって感じです><
うーん、うちではずっと使用し続けています。
基本、ゼロクロス検知とリレーオンオフがそれぞれ単独で動作確認できれば
あとはタイミング調整だけだと思うんですけどね。
ごめんなさい。
コメント返信ありがとうございます。本当に困っておりまして、、、お手数ですがもう少しご質問をさせて頂いてもよろしいでしょうか、、。
削除載せていらっしゃる画像の回路に
#include "Tlc5940.h"
#include "MsTimer2.h"
volatile int zc_counter=0;
volatile boolean zero_cross=false;
int AC_pin = 5;
volatile int ACdim = 500; // 0-600(?)
void zero_cross_detect()
{
zero_cross = true;
digitalWrite(AC_pin, LOW);
}
void ACdim_check()
{
if(zero_cross == true) {
if(zc_counter>=ACdim) {
digitalWrite(AC_pin, HIGH);
zc_counter = 0;
zero_cross = false;
} else {
zc_counter++;
}
}
}
void setup()
{
attachInterrupt(0, zero_cross_detect, RISING);
pinMode(AC_pin, OUTPUT);
MsTimer2::set(1, ACdim_check);
MsTimer2::start();
Tlc.init();
Tlc.clear();
Serial.begin(115200);
}
void loop()
{
if(Serial.available()>0){
int inByte=Serial.read();
if(inByte=='1'){
ACdim+=50;
if(ACdim>600) ACdim=0;
Serial.println(ACdim, DEC);
}else if(inByte=='2'){
Tlc.set(0, 2000);
Tlc.set(1, 2000);
Tlc.update();
}else if(inByte=='0'){
ACdim=600;
Tlc.set(0, 0);
Tlc.set(1, 0);
Tlc.update();
Serial.println("reset");
}
}
}
のコードを使用して、稼働させているということでまちがいないでしょうか。また回路図のデジタルピンは2と12で間違いないでしょうか。
お手数おかけしてすみません、、宜しくお願いいたします、、!
コメント、見過ごしていました。ごめんなさい。
削除ピン配置ですか、多分アレンジしてあるかもです。。。
ソースは、、、外付けHDDに入っているのでちょっとすぐには確認できません。
いや、本当にすみません。
ご返答ありがとうございました!
削除もう少しいじってみて頑張ってみようかと思います。
タイミングだけとおっしゃっているのは0~600の数値を
変化させていくということなのでしょうか。
たびたび申し訳ありません、、、。
返答遅れまして申し訳ございません。
返信削除ACdimの値を変化させる、でよいです。
ACの0クロスを検知して、どの値になったらリレーオフにするかの
タイマーカウンター(ただし単位はArduino依存)としています。