今回は、フルスペクトラム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追加 キットはこちら👇👇👇で購入できます。
追加終わり
コメント