【初めてのArduino】初心者キットで作る「気分メーターランプ」|つまみを回すと色がグラデーションで変わる卓上ガジェット

初心者キットで作る「気分メーターランプ」

初心者キットでLチカは終わったんだけど、次に何を作ればいいのか分からなくて、、つまみとかLEDとか余ってる部品で、もうちょい面白いの作れないの?

じゃあ今回は、つまみを回すとRGB LEDの色が青→緑→黄→赤にグラデーションで変わる「気分メーターランプ」を作ってみよう!自分の今の気分を色でデスクに表示できる、見た目もちょっとオシャレな卓上ガジェットだよ。

今回は、初心者キットを買ったけどLチカの先に進めず止まっている方に向けて、ELEGOOのR3スターターキットに入っている部品だけで作れる「気分メーターランプ」の作り方を紹介したいと思います。

使う部品はポテンショメータ(つまみ)1個とRGB LED1個だけ。それでも、つまみを回すと青→水色→緑→黄→オレンジ→赤と色が連続で変化する、見ていて飽きないガジェットになります。

初心者の方も、Lチカから次の一歩を踏み出したい方も、ぜひ最後までご覧ください。

作るもののイメージ

まずは、これから作る気分メーターランプの全体像を見ていきましょう。つまみを左いっぱいに回すと「青」、真ん中で「緑〜黄」、右いっぱいで「赤」になります。会議前は青で落ち着き、締切日は赤、みたいに使うとちょっと楽しいガジェットです。

この記事で作るもの
つまみを回すとRGB LEDの色が青→緑→黄→赤にグラデーションで変わる卓上ランプ。Arduinoとキットの部品だけで作れます。

仕組みはとてもシンプルで、つまみで0〜1023の値を読み取り、その値からRGB LEDの赤・緑・青の明るさを計算してPWMで出力する、それだけです。

全体の接続イメージ

部品同士のつながりを俯瞰すると、下の図のようになります。つまみが入力、RGB LEDが出力、Arduinoが司令塔という役割分担です。

  [入力]
   ┌──────────────┐
   │ ポテンショ    │
   │ メータ        │
   └──────┬───────┘
          │ A0
          ▼
   ┌──────────────┐
   │ Arduino UNO  │  ← 司令塔
   └─┬───┬───┬────┘
   D9│ D10│ D11│
     ▼    ▼    ▼
   ┌────────────────┐
   │   RGB LED      │
   │  (R / G / B)   │
   └────────────────┘
       [出力]

必要な物

用意するのは下の5つです。すべてELEGOOのR3スターターキットに入っているので、追加購入は不要です。

用意するもの
  1. Arduino UNO R3 (本体)
  2. ブレッドボード
  3. ポテンショメータ(可変抵抗、つまみ部品)1個
  4. RGB LED 1個 (4本足、共通カソードタイプ)
  5. 330Ωの抵抗3本、オスオスのジャンパー線数本

RGB LEDは足が4本あるのが特徴だね。長い足が「共通カソード」(GNDに繋ぐ足)で、残り3本がそれぞれR(赤)・G(緑)・B(青)の入力になっているよ。

抵抗はRGB LEDの3本(R/G/B)それぞれに1本ずつ必要です。LEDは抵抗なしでつなぐと壊れる原因になるので、必ず3本セットで用意してください。

配線手順

続いて、ブレッドボード上で配線を組んでいきます。Arduinoの電源を抜いた状態で進めてください。配線中の通電は部品を壊す原因になります。

ブレッドボード全体図

ブレッドボード上の挿し位置は下の図の通りです。左の電源レールは使いません(GNDだけ右の青レールを使います)。

        a b c d e
       +─────────+
[+]rail| . . . . . | ← 未使用
[-]rail| . . . . . | ← GND (Arduino GND)
       +─────────+
row 5  | X . . . . | ← ポテンショ 左足 (5V)
row 6  | X . . . . | ← ポテンショ 中足 (A0)
row 7  | X . . . . | ← ポテンショ 右足 (GND)
       +─────────+
row 11 | X . . . . | ← 330Ω(R) 上 (D9)
row 12 | X X . . . | ← 330Ω(R)下+RGB Rピン
row 14 | X . . . . | ← 330Ω(G) 上 (D10)
row 15 | X X . . . | ← 330Ω(G)下+RGB Gピン
row 16 | X . . . . | ← RGB 共通カソード(GND)
row 17 | X . . . . | ← 330Ω(B) 上 (D11)
row 18 | X X . . . | ← 330Ω(B)下+RGB Bピン
       +─────────+

記号: X=部品を挿す穴, .=空き穴
注意: 同じ row の a-e は内部で連結 (5穴 1組)

ポテンショメータ部分の配線

ポテンショメータは3本足で、両端が電源(5V/GND)、真ん中がアナログ出力です。中足の電圧をArduinoのA0で読み取ります。

   ポテンショメータ (3 線)

   [5V]    ─→  左足
   [A0]    ←─  中足 (つまみで変化)
   [GND]   ─→  右足
左右が逆だと色の変化方向も逆になるってこと?

その通り。左足と右足を入れ替えると、つまみを右に回したときに「青→赤」ではなく「赤→青」に変わるよ。違和感があったら左右を入れ替えるだけでOK。

RGB LED部分の配線

RGB LEDの3本(R/G/B)はそれぞれ独立した足なので、3本とも別の330Ωを通してデジタルピンに繋ぎます。長い足(共通カソード)はそのままGNDへ落とします。

   [D9] ─→ 330Ω ─→ Rピン  ┐
   [D10] ─→ 330Ω ─→ Gピン ├ RGB LED
   [D11] ─→ 330Ω ─→ Bピン ┘
                        │
                共通カソード(長足)
                        │
                        ▼
                       [GND]

配線時の注意点

RGB LEDで一番つまずきやすいのは、4本ある足のうちどれが共通カソードか分からなくなることです。よく見ると一番長い足が共通カソードで、その隣がR、反対側がBになっているタイプが一般的です。

もし色を点けてみて「赤のつもりが緑になる」ような違和感があれば、RピンとGピンの場所が逆の可能性が高いので、配線を1本ずつ抜き差しして確認しましょう。

配線の原則
RGB LEDは3本のアノードと1本の共通カソード。R/G/Bそれぞれに必ず330Ωを直列で入れ、共通カソードはGNDへ直結する。

プログラム

配線ができたら、続いてArduinoに書き込むプログラムを準備します。今回のコードはとてもシンプルで、つまみの値を0〜1023で読み取り、その値から色を計算してPWM出力するだけです。

コード全文

// 気分メーターランプ
// つまみ(A0)を回すと、RGB LEDの色が青→水色→緑→黄→赤に変化する。

const int POT_PIN = A0;     // ポテンショメータの中足
const int R_PIN   = 9;      // RGB LED の赤
const int G_PIN   = 10;     // RGB LED の緑
const int B_PIN   = 11;     // RGB LED の青

void setup() {
  pinMode(R_PIN, OUTPUT);
  pinMode(G_PIN, OUTPUT);
  pinMode(B_PIN, OUTPUT);
}

void loop() {
  int v = analogRead(POT_PIN);          // 0〜1023
  int hue = map(v, 0, 1023, 0, 255);    // 0〜255 に圧縮

  int r, g, b;
  if (hue  85) {
    // 青(0,0,255) → 緑(0,255,0)
    r = 0;
    g = map(hue, 0, 84, 0, 255);
    b = map(hue, 0, 84, 255, 0);
  } else if (hue  170) {
    // 緑(0,255,0) → 黄(255,255,0)
    r = map(hue, 85, 169, 0, 255);
    g = 255;
    b = 0;
  } else {
    // 黄(255,255,0) → 赤(255,0,0)
    r = 255;
    g = map(hue, 170, 255, 255, 0);
    b = 0;
  }

  analogWrite(R_PIN, r);
  analogWrite(G_PIN, g);
  analogWrite(B_PIN, b);
  delay(20);
}

プログラムの動作フロー

このプログラムはずっとloopを回し続け、毎回つまみの値を読み取って色を計算しています。文字で書くと分かりにくいので、フローチャートにしてみると下のようなイメージになります。

flowchart TD A[起動] --> B[ピン設定] B --> C[つまみの値を読む] C --> D[hueに変換0から255] D --> E{hueの範囲は?} E -->|青→緑| F[R=0, G=上昇, B=下降] E -->|緑→黄| G[R=上昇, G=255, B=0] E -->|黄→赤| H[R=255, G=下降, B=0] F --> I[RGBをPWM出力] G --> I H --> I I --> J[20msだけ待つ] J --> C

ポイントは、色相を3つの区間に分けて、それぞれで赤・緑・青の明るさをmap関数で滑らかに変化させているところです。これで、つまみを回した分だけ色が連続的に変わって見えます。

書き込みの手順

プログラム書き込みの手順
  1. USBケーブルでArduinoとPCを接続する
  2. Arduino IDEで「ツール」→「ボード」→「Arduino UNO」を選ぶ
  3. 「ツール」→「シリアルポート」でArduino UNOと表示されるポートを選ぶ
  4. 上のコードをコピーしてIDEに貼り付ける
  5. 「→」(マイコンボードに書き込む)ボタンを押す

書き込みが完了したら、つまみを左いっぱいから右いっぱいまでゆっくり回してみてください。RGB LEDの色が連続的に変化すれば成功です。

うまく動かない時のチェックポイント

初心者の方が一度はハマるポイントをまとめておきました。下のどれかに当てはまることが多いので、上から順にチェックしてみてください。

うまくいかない時のチェックリスト
  1. RGB LEDの長足(共通カソード)がGNDに繋がっているか
  2. R/G/Bの3本にそれぞれ330Ωが直列で入っているか
  3. ポテンショメータの中足がA0に繋がっているか(両端は5V/GND)
  4. D9/D10/D11はPWM対応ピン。違うピンにすると色が変化しない場合がある
  5. つまみを動かしても全く色が変わらないなら、ポテンショの両端が両方ともGNDになっていないか確認
赤と青しか出なくて、緑だけ光らないんだけど!

自分も初めて触った時に同じところで詰まったよ。たいていは緑の足の抵抗が浮いてるか、GピンがD10じゃなくD2あたりに刺さってる。落ち着いて1本ずつ追って。

もっと面白くするアイデア

基本動作ができたら、少しコードを足すだけで遊びの幅が広がります。

  • 「気分ログ」を取る: Serial.printlnでhueの値を毎秒出力し、1日分のグラフを描く
  • 「自動呼吸」モード: つまみが動いていない時は色がゆっくり脈打つように明滅させる
  • 「気分しきい値アラーム」: 赤側にしばらく振り切れたら、パッシブブザーを短く鳴らす

どれもキットの中の部品だけで実装できる範囲なので、慣れてきたら挑戦してみてください。

まとめ

今回は、初心者キットを買ったけれどLチカの先に進めず止まっている方に向けて、ポテンショメータとRGB LEDだけで作れる「気分メーターランプ」を紹介してきました。

使う部品はたった2種類ですが、analogReadでアナログ入力を読む方法、map関数で値の範囲を変換する方法、analogWriteでPWMの明るさを制御する方法と、Lチカの次に覚えるべき定番テクニックがひと通り詰まっているのがこの工作のいいところです。

今後も、初心者キットの部品で作れる小さなガジェット作品を紹介していく予定ですので、そちらも合わせてご覧ください。

次は、ここで使ったRGB LEDをCdSセンサと組み合わせて、部屋の明るさで自動的に色温度が変わる卓上ライトを紹介する予定だよ。お楽しみに!