PR 記事には広告が含まれています
スポンサーリンク
Translate

ATTINY13Aを使ってフルスペクトラムLEDを調光できるようにしました

スポンサーリンク

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

追加終わり