Arduino RGBカラーミキサーの製作 - ステップバイステップチュートリアル
必要な部品と材料
| Arduino UNO | ×1 |
| ロータリーポテンショメーター(汎用) | ×3 |
| ブレッドボード(汎用) | ×1 |
| RGB LED | ×1 |
| 抵抗 330Ω | ×3 |
| ジャンパーワイヤー(オス-オス、約15本) | ×1セット |
使用するアプリとオンラインサービス
- Arduino IDE
プロジェクト概要
Arduinoカラーミキサー
このチュートリアルはArduinoと電子工作の基礎知識があれば簡単に作れます。Arduinoに慣れていない方向けに、参考リンクも含めて解説します。
このプロジェクトでは、ポテンショメーターを回すだけで約1,677万色(16,777,216色)すべてを生成できます。RGBカラーモデルの仕組みを理解し、現代のディスプレイがどう動いているかを学べます。
また、Arduinoのアナログ入力/出力(I/O)を使い、アナログ電圧の読み書き方法を習得できます。
1-1 使用部品
- Arduinoボード(ここではArduino Unoを使用)
- ブレッドボード
- オス-オス ジャンパーワイヤー(約15本)
- ポテンショメーター ×3(5kΩを使用)
- 330Ω抵抗 ×3(オレンジ-オレンジ-茶色)
- RGB LED(RGBモジュールでも可)
- Arduino IDEがインストールされたPC
さあ始めましょう!
カラーミキサーの仕組み: Arduinoがポテンショメーターのアナログ入力電圧に応じた電圧をRGB LEDの各ピンにPWM出力します。
1-2 ポテンショメーターの接続
ポテンショメーターは分圧回路として働き、可変抵抗によって電圧を調整し、Arduinoのアナログ入力ピン(Vout)に供給します。

外側の2端子を5VとGNDに接続し(どちらでも可)、中央の端子をアナログ入力ピンに接続します。5VとGNDはArduinoから取ります。
5Vにはオレンジ色のワイヤーを使用(赤と区別しやすくするため)
3つのポテンショメーターをそれぞれ接続します。配線を整理するため、赤用をA0、緑用をA1、青用をA2に接続します。
1-3 RGB LEDの接続
RGB LEDは通常のLEDと同じ原理ですが、赤・緑・青の3つのLEDが内蔵されており、それらの光が網膜で混ざって様々な色に見えます。
各PWM出力が256段階(0〜255)、3ピンあるため、256 × 256 × 256 = 16,777,216色(約1,677万色)を表現できます。

RGB LEDの接続は通常のLEDと同じ要領で、3回繰り返します。各色に330Ωの抵抗を直列に入れてください(入れないとLEDが焼損します)。
私は抵抗を忘れて赤色LEDを焼いてしまいました。電気はLEDを焼くのに一瞬です。くれぐれもご注意を。
完成した回路

コードは非常にシンプルです。
プログラミング
Arduinoのコードは以下のシンプルな処理を順番に実行します。
setup()
- 3つのアナログ入力ピンをINPUTモードに設定
- 3つのPWM出力ピンをOUTPUTモードに設定
loop()
analogRead()でポテンショメーターの値を読み取り(0〜1023)map()関数で0〜1023をPWM範囲の0〜255に変換analogWrite()でPWM値を出力ピンに書き込み
スケッチ
/* Controls RGB LED using potentiometers for each color
Name: RGBLedPot.ino
Created: 17/2/16 9:47:03 AM
Author: Ahmed Hamdy
GNUPL 3.0+
*/
// アナログ入力ピン(ポテンショメーター接続)
int inRGB[] = { A0, A1, A2 };
// PWM出力ピン(RGB LED接続)
int outRGB[] = { 9, 10, 11 };
int tempValue = 0;
const int inMinVal = 0, inMaxVal = 1023; // ポテンショメーター読み取り範囲
void setup() {
for (int i = 0; i < 3; i++) {
pinMode(inRGB[i], INPUT); // ポテンショメーター読み取り用
pinMode(outRGB[i], OUTPUT); // RGB LED出力用
}
}
void loop() {
for (int i = 0; i < 3; i++) {
tempValue = analogRead(inRGB[i]); // ポテンショメーター読み取り
tempValue = map(tempValue, inMinVal, inMaxVal, 0, 255); // 0-1023 → 0-255にスケーリング
analogWrite(outRGB[i], tempValue); // PWM出力
}
}
回路図

製造プロセス
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Arduino RGB LEDカラーミキサー:初心者向けDIYプロジェクト
- Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- ArduinoとTEA5767で作る高性能FMラジオ受信機
- Arduino 101で作る万歩計:DHT11温湿度センサー&LCD表示付き
- 音楽同期LEDイルミネーションで新年を盛り上げよう – Arduino Nano + NeoPixel