Arduino
Flashから交流電源をコントロール
前回のリレースイッチでは、電源のON/OFFしかできませんでした。
今回扱はAC電源をコントロールして、電球の明るさをコントロールします。
必要なもの

トライアック

フォトトラアック(非クロスゼロ)

フォトカプラ

フィルムコンデンサ

トランス
そのほか、抵抗、電球、配線、基盤など
1 | トライアックで電源の切替する
交流電力をコントロールするには、交流のサイン波をカットすることで調整します。
リレースイッチでは、切替に時間がかかるので、
交流のトランジスターにあたるトライアックを使用します。
トライアックへの切り替えトリガーパルスを送るために、
AC100Vの電源をarduinoに直結させるのは、
危険なためフォトトライアック使って絶縁させます。
arduinoから、フォトトライアックに1msのトリガーパルスを送ることで、
トライアックに間接的にトリガーパルスを送ります。
回路右側のコンデンサーと抵抗は、高周波ノイズを取るための回路です。
2 | 交流の周期を読み込む
交流のサイン波を切り取るために、交流の周期を知る必要があります。
交流の周期を読み込むのに、トランスで6Vに降圧後、
フォトカプラでパルスに変換します。
フォトカプラは、交流が0Vになる地点で、パルスを送ってきます。
AC50Hzの場合、1秒間に100回パルスを送ってきます。
ソフト上の処理
arduinoでパルスの割り込みには、attachInterruptを使います。
attachInterruptは最初に、setupの中で、パルス割り込み宣言します。
attachInterrupt(0, zeroPulse, RISING);
attachInterruptの
引数1つ目は、使うポート名(Digital2→0に対応)
引数2つ目は、割り込み関数名
引数3つ目は、パルスが立ち上がりか、立ち下がりかを選択
割り込み関数の中では、delay関数を使えないので、フラグの変化をさせています。
void zeroPulse()
{
zeroFlg = 1;
}
3 | arduinoでパルスコントロール
arduinoからパルスを出すには、
フォトカプラからのパルスで割り込み後、zeroFlgが1になります。
delayMicrosecondsで、時間待ちをして、
1msのパルスをフォトトライアックに送信します。
delayMicroseconds(delayTime); digitalWrite(triggerPin, HIGH); delay(1); digitalWrite(triggerPin, LOW);
フォトトライアックへのパルス出力待ち時間計算
arduinoは1ms以下のパルスを出すと、不安定になるので、パルスは1msとしました。
10ms-1ms=9msを、255で割ります。
9000μs ÷ 255 ≒ 35
フォトカプラからのパルスは、交流0Vになる前に57μsずれがあるので、
遅延時間は以下のようになります。
delayTime = 57 + (255 - sum) * 39;
それと、
出力電源が不安定なため、電力が0に近く小さい時と、
電力が大きく100%に近い時は、
上記の式を使わず、0V、100V出力にしています。
今回のarduinoでの交流のコントロールは、delay関数の不安定なことや、割り込み処理ができないために不安定なので、使う用途によって応答処理をするなど、ソースを改良する必要があります。