Arduino Mega 2560 LESSON:4 RGB LED

提供:yonewiki
2026年10月1日 (木) 20:19時点におけるYo-net (トーク | 投稿記録)による版 (ページの作成:「<yjavascript></script> <script> // 最初に実行されるスクリプト document.addEventListener('DOMContentLoaded', () => { const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { mutation.addedNodes.forEach((node) => { if (node.tagName === 'SCRIPT' &@@& node.textContent) { // JavaScriptコードを変換 const originalCode = node.textContent;…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

Arduino Mega 2560に戻る。

概要

 RGB LEDでいろいろな色を光らせることができます。ひとつのパーツの中にRed LEDとGreen LEDとBlue LEDが入っていて、アノードが別々になっていて、共通カソードを持つパーツがスターターキットには入っていました。


4本の足を持つLEDです。短い脚、長い脚、短い脚、短い脚のようになるように置いたとき、


  • Red LEDアノード端子、共通カソード端子、Green LEDアノード端子、Blue LEDアノード端子


 の順番になります。LEDのときと同じように220Ωの抵抗をそれぞれのアノード端子の手前に置くと適度な電流を得ることができます。220Ωでとりあえず安全に動作するとELEGOOは言っています。信じましょう。謎のRGB LEDですね。


LESSON3 結線図


 Arduino Mega2560 にはピン2~13、44、45、46のパルス幅変調(PWM:Pulse Wide Modulation)出力があります。このLESSONではそのパルス幅を調整することでそれぞれのR,G,Bの強さを変えています。0Vになる瞬間を増やすことで暗くする方向に働きます。


//www.elegoo.com
//2016.12.8

// Define Pins
#define BLUE 3
#define GREEN 5
#define RED 6

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
  digitalWrite(RED, HIGH);
  digitalWrite(GREEN, LOW);
  digitalWrite(BLUE, LOW);
}

// define variables
int redValue;
int greenValue;
int blueValue;

// main loop
void loop() {
#define delayTime 5  // fading time between colors

  redValue = 255;  // choose a value between 1 and 255 to change the color.
  greenValue = 0;
  blueValue = 0;

  // this is unnecessary as we've either turned on RED in SETUP
  // or in the previous loop ... regardless, this turns RED off
  // analogWrite(RED, 0);
  // delay(1000);

  for (int i = 0; i < 255; i += 1)  // fades out red bring green full when i=255
  {
    redValue -= 1;
    greenValue += 1;
    // The following was reversed, counting in the wrong directions
    // analogWrite(RED, 255 - redValue);
    // analogWrite(GREEN, 255 - greenValue);
    analogWrite(RED, redValue);
    analogWrite(GREEN, greenValue);
    delay(delayTime);
  }

  redValue = 0;
  greenValue = 255;
  blueValue = 0;

  for (int i = 0; i < 255; i += 1)  // fades out green bring blue full when i=255
  {
    greenValue -= 1;
    blueValue += 1;
    // The following was reversed, counting in the wrong directions
    // analogWrite(GREEN, 255 - greenValue);
    // analogWrite(BLUE, 255 - blueValue);
    analogWrite(GREEN, greenValue);
    analogWrite(BLUE, blueValue);
    delay(delayTime);
  }

  redValue = 0;
  greenValue = 0;
  blueValue = 255;

  for (int i = 0; i < 255; i += 1)  // fades out blue bring red full when i=255
  {
    // The following code has been rearranged to match the other two similar sections
    blueValue -= 1;
    redValue += 1;
    // The following was reversed, counting in the wrong directions
    // analogWrite(BLUE, 255 - blueValue);
    // analogWrite(RED, 255 - redValue);
    analogWrite(BLUE, blueValue);
    analogWrite(RED, redValue);
    delay(delayTime);
  }
}


analogWrite関数は第一引数が出力するピン番号で第二引数が


\[ Duty≈\frac{analogWrite値}{255}​×100[\text{%}] \]


で算出されるDuty比となるanalogWrite値を指定していることになります。


AIによる作図

LESSON3 Duty比


 Duty比とは上記のようなOnとOffの割合を示すもので、Onになっている割合が人間の目で色が点滅している時間の割合の変化により明るい状態だと感じるようになる現象を使って、その色の明るさを指定しています。Onのときの明るさは抵抗によってきめられた電流値にしたがって明るくなります。これはLESSON2で勉強した内容そのものです。


 プログラムはRGBの全組合せ16,777,216通りの内の765通りを実験するものになっていて全体の0.00456%しか試していませんが、色相環のまわりをうまく辿っていて鮮やかです。​


AIによる作図

LESSON3 経路


 上記のような経路を辿っています。


LESSON3 動作図


 説明書によるLESSON3の内容はここまでですが、赤だけ100%、緑だけ100%、青だけ100%の3状態にしてそれぞれの色の\( V_FーI_F \)値を簡単に測定をしてみようと思います。


色 実測抵抗 抵抗電圧 VRV_R LED電圧 VFV_F 計算した IFI_F
Hyper Red 9.95kΩ 3.263V 1.743V 約0.328mA
Green 9.94kΩ 2.795V 2.211V 約0.281mA
Blue 10.01kΩ 2.520V 2.486V 約0.252mA


で消費電力は


色 電流 抵抗の消費電力 LEDの消費電力 総消費電力
Hyper Red 約0.328mA 約1.070mW 約0.572mW 約1.642mW
Green 約0.281mA 約0.786mW 約0.622mW 約1.408mW
Blue 約0.252mA 約0.634mW 約0.626mW 約1.260mW


 白色100%なら総消費電力は4.310mW、電流は0.861mAですね。電力会社の従量部分だけに着目すると1年間つけっぱなしでちょうど1円くらいかかる電力です。

 

Arduino Mega 2560に戻る。