2022/10/26-28 「量子コンピューティングEXPO」にてARウェディングドレス試着のデモを行いました!

7-31. ArduinoのPWMでLEDの明るさを制御する

はじめに

ArduinoでLEDの明るさを調整したいのですが、デジタル可変抵抗(デジタルポテンショメータ)を使ってアナログに調整する以外に、PWMを使ってデジタルに調整する方法があるので試してみます。

材料

Arduino Uno

Arduino Uno Rev3: マイコン関連 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,マイコン,電子工作Arduino Uno Rev3秋月電子通商 電子部品通信販売

トランジスタアレイはNPN型でよく使われる型番(ULN2003AN)を用意しました。7chです。

トランジスタアレイ ULN2003AN: 半導体(モジュール) 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,マイコン,電子工作トランジスタアレイ ULN2003AN秋月電子通商 電子部品通信販売

適当なLED×4個、適当な抵抗(1kΩ)×4個、配線用のジャンパワイヤです。

PWMについてはこちらもご参照ください。

Arduinoチュートリアル 基礎編

シンプルにLEDの調光

まずはシンプルなPWM制御を試してみます。PWM対応のデジタルピンには「~」が付いています。ここでは3番ピン。

Arduinoに書き込みます。

void setup(){
  // シリアルポートを9600 bps[ビット/秒]で初期化
  Serial.begin(9600);
  // PWMピンをoutputに
  pinMode(3, OUTPUT);
}

void loop(){
  // ゆっくり点灯
  for (int i = 0; i <= 255; i++){
    analogWrite(3, i);
    delay(5);
  }

  // ゆっくり消灯
  for (int i = 255; i >= 0; i--){
    analogWrite(3, i);
    delay(5);
  }
}

トランジスタアレイ経由でLEDの調光

次に、トランジスタアレイ経由で明るさを制御してみます。とりあえず4個繋ぎました。PWM出力ピンは3, 5, 6, 9番です。

Arduinoに書き込みます。

void setup(){
  // シリアルポートを9600 bps[ビット/秒]で初期化
  Serial.begin(9600);
  // PWMピンをoutputに
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(9, OUTPUT);
}

void loop(){
  // ゆっくり点灯
  for (int i = 0; i < 128; i++){
    analogWrite(3, i);
    analogWrite(5, 128 + i);
    analogWrite(6, 255 - i);
    analogWrite(9, 127 - i);
    delay(5);
  }
   for (int i = 0; i < 128; i++){
    analogWrite(3, 128 + i);
    analogWrite(5, 255 - i);
    analogWrite(6, 127 - i);
    analogWrite(9, i);
    delay(5);
  }
   for (int i = 0; i < 128; i++){
    analogWrite(3, 255 - i);
    analogWrite(5, 127 - i);
    analogWrite(6, i);
    analogWrite(9, 128 + i);
    delay(5);
  }
   for (int i = 0; i < 128; i++){
    analogWrite(3, 127 - i);
    analogWrite(5, i);
    analogWrite(6, 128 + i);
    analogWrite(9, 255 - i);
    delay(5);
  }
}

analogWrite() に与えるデューティ比(0から255の整数)とLEDの明るさは比例しないようです。信号と明るさを比例させるには適当な非線形関数が必要です。

さいごに

結局、非線形関数を設定してPythonからの制御もできました。トランジスタってパキパキON/OFFを切り替えられるものなのでしょうか。対応できるPWMの周波数?デューティ比?の範囲があるのかなとも想像しますが。

タイトルとURLをコピーしました