10/15(火)-10/19(土) 岐阜県(南濃温泉「水晶の湯」)で自動運転車の実証実験を行います☆彡

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

はじめに

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

材料

Arduino Uno

Arduino Uno Rev3: 開発ツール・ボード 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作Arduino Uno Rev3秋月電子通商 電子部品通信販売

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

トランジスターアレイ ULN2003AN: 半導体 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作トランジスターアレイ 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の周波数?デューティ比?の範囲があるのかなとも想像しますが。

SNS等でお気軽にご連絡ください

※当ブログに関することは何でもご相談・ご依頼可能です(Servicesになくても)
※TwitterはFF外の場合はDMではなく返信orメンションでお願いしますm(_ _)m

情報発信しています

質問・コメントはSlackやDiscordでお気軽に

勉強会の告知はこちらで

Raspberry Pi / Arduino
この記事を書いた人

博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。物価上昇のため半額弁当とともに絶滅寸前。

この記事をシェアする
Vignette & Clarity(ビネット&クラリティ)
タイトルとURLをコピーしました