今回は、フルスペクトラムLEDの昇圧型LEDドライバにあるPWMピンを使って、LEDを調光できる装置を作りたいと思います。
ATTINY13A
やりたいことは
- ボリウムの電圧をA/D変換する
- 明るさが人の目で見て直線的に変わるように補正する
- PWM出力する
- 上記を2セット用意する
です。
A/Dが2chあって、PWM出力も2chあれば、なんのマイコンでも構いません。そこで、8ピンマイコンのATTINY13Aを使うことにします。
ATTINY13Aは、Arduinoでプログラムを作ることができるので、上記のことを簡単に実現することができます。
ATTINY13AをArduinoでプログラムする方法は下の記事をご覧ください。
プログラム
ATTINY13AをArduinoでプログラムするとき、各ピンは以下の機能に対応しています。
そこで、
- A3ピンのA/D値を補正してPB1へPWM出力する
- A2ピンのA/D値を補正してPB0へPWM出力する
というプログラムを作ります。
補正の内容は、昇圧型LEDドライバは、HighでOFF、LowでONするので、PWMを反転させる必要があります。また、LEDの明るさを人の目の感度に合わせてA/D値を2乗します。
できたプログラムは以下の通りです。
int ledPin1 = 0;
int ledPin2 = 1;
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
int ad_to_pwm(uint16_t in) {
uint16_t out = in >> 2;
out = out * out;
uint16_t tmp = out;
out = (uint16_t)255 - (tmp >> 8);
if (out > 253) {
out = 255;
}
if (out < 2) {
out = 0;
}
return out;
}
void loop() {
analogWrite(ledPin1, ad_to_pwm(analogRead(A2)));
TCCR0B = _BV(CS01); // PWM frequency = (F_CPU/256) / 8
analogWrite(ledPin2, ad_to_pwm(analogRead(A3)));
TCCR0B = _BV(CS01);
delay(5);
}
これを、以下のような設定で、マイコンに書き込みます。
- BOD(低電圧時のリセット電圧)は1.8V
- クロックは4.8MHz
です。
analogWrite(ledPin1, ad_to_pwm(analogRead(A2))); TCCR0B = _BV(CS01); // PWM frequency = (F_CPU/256) / 8
上記のように、analogWriteをした後に、TCCR0B = _BV(CS01);を実行することで、PWM回路への供給クロックを変更しています。これにより、CPUクロックが4.8MHzなので、PWMの周波数が約2.3kHzに変更されます。
プログラムの書き込み
AVRISPを使って、プログラムをマイコンに書き込みます。
ボリウムを回すと、フルスペクトラムLEDの明るさが調光できるようになりました。
組み込み
プログラムができたので、基板に部品をはんだ付けします。マイコンの電源は降圧型のDCDCでLEDドライバに供給されている24Vから5Vに変換しています。
この調光回路とLEDドライバとの配線は、電源のプラスとマイナス、PWMが2chの4本必要です。USBケーブルもちょうど4本の配線が入っています。USBコネクタで簡単に接続ができて便利なので、Amazonで売っていた9mのUSBケーブルを使って、接続できるようにしました。
回路をタカチのSW-100Sという箱に入れて完成です。
次回は、今まで作ってきたフルスペクトラムLEDと調光装置を使って、シーリングライトを高演色なフルスペクトラムLEDに改造したいと思います。
2022.6.27追加 キットはこちら👇👇👇で購入できます。
追加終わり














コメント