RGB LED¶
概要¶
本レッスンでは、PWM(パルス幅変調)を使用してRGB LEDを様々な色に点滅させます。LEDのR(赤)、G(緑)、B(青)ピンに異なるPWM値を設定すると、その明るさが変わります。3つの異なる色を混ぜることで、RGB LEDが様々な色に点滅するのを観察できます。
必要なコンポーネント¶
このプロジェクトには、以下のコンポーネントが必要です。
全セットを購入するのが便利です。こちらがリンクです:
名称 |
このキットのアイテム数 |
リンク |
---|---|---|
Elite Explorer Kit |
300+ |
以下のリンクから個別に購入することもできます。
コンポーネント紹介 |
購入リンク |
---|---|
- |
|
PWM¶
パルス幅変調(PWM)は、デジタル手段でアナログ結果を得るための技術です。デジタル制御を使用して、オンとオフの間で切り替えられる矩形波(スクエアウェーブ)を作成します。このオン・オフのパターンは、オン(5ボルト)とオフ(0ボルト)の間の電圧を、信号がオンになる時間とオフになる時間の比率を変えることでシミュレートできます。"オン時間"の持続時間を「パルス幅」と呼びます。異なるアナログ値を得るには、その幅を変調(調整)します。このオン・オフのパターンを十分に高速で繰り返すと、例えばLEDのようなデバイスでは、信号が0~5Vの間の安定した電圧として現れ、LEDの明るさを制御します(Arduinoの公式ウェブサイト上のPWM説明を参照)。
以下の図では、緑色の線が通常の時間周期を表しています。この持続時間または周期はPWM周波数の逆数です。つまり、ArduinoのPWM周波数が約500Hzであれば、緑色の線はそれぞれ2ミリ秒となります。
analogWrite()の呼び出しは0~255のスケールで行われ、analogWrite(255)は100%のデューティサイクル(常にオン)、analogWrite(127)は50%のデューティサイクル(半分の時間オン)を要求します。
PWM値が小さいほど、電圧に変換された後の値も小さくなります。その結果、LEDの明るさもそれに応じて暗くなります。したがって、PWM値を制御することでLEDの明るさをコントロールできます。
配線図¶
回路図¶
コード¶
注釈
ファイル
11-rgb_led.ino
をelite-explorer-kit-main\basic_project\11-rgb_led
のパスで直接開くことができます。または、このコードをArduino IDEにコピーしてください。
コードが正常にアップロードされると、最初はRGB LEDが赤、緑、青の順に循環点滅し、その後、赤、オレンジ、黄色、緑、青、藍色、紫の順に点滅します。
コード解析¶
色の設定
ここでは color()
関数を使用してRGB LEDの色を設定します。コードでは、7つの異なる色に点滅するように設定されています。
コンピューターのペイントツールを使用してRGB値を取得できます。
コンピューターでペイントツールを開き、色の編集をクリックします。
1色を選択すると、その色のRGB値が表示されます。それらをコードに入力してください。
注釈
ハードウェアや環境要因により、コンピューターの画面とRGB LEDで表示される色は、同じRGB値を使用しても異なる場合があります。
void loop() // run over and over again { // Basic colors: color(255, 0, 0); // turn the RGB LED red delay(1000); // delay for 1 second color(0,255, 0); // turn the RGB LED green delay(1000); // delay for 1 second color(0, 0, 255); // turn the RGB LED blue delay(1000); // delay for 1 second // Example blended colors: color(255,0,252); // turn the RGB LED red delay(1000); // delay for 1 second color(237,109,0); // turn the RGB LED orange delay(1000); // delay for 1 second color(255,215,0); // turn the RGB LED yellow ......
color()関数
void color (int red, int green, int blue)
// the color generating function
{
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
赤、緑、青の3つのunsigned char変数を定義し、それらの値を redPin
、 greenPin
、 bluePin
に書き込みます。例えば、color(128,0,128)は redPin
に128、 greenPin
に0、 bluePin
に128を書き込むことを意味し、結果としてLEDが紫色に点滅します。
analogWrite():アナログ値(PWM波)をピンに書き込みます。アナログピンとは関係ありませんが、PWMピン専用です。 analogWrite()
を呼び出す前にピンを出力として設定するために pinMode()
を呼び出す必要はありません。