2018年9月29日土曜日

[Elegoo: 4] アナログ入出力
RGB LEDの色をポテンショメータで制御する




概要 (Overview)
  • PWM幅変調とアナログ入出力について学ぶ
  • RGB LEDの色をポテンショメータで制御する



参照 (Reference)
PWM(パルス幅変調)
  • PWM(パルス幅変調)は電力を制御する技術
  • 「~」の付いたデジタルI/Oピン[D3,D5,D6,D9,D10,D11]の6本
  • ピンの状態設定(出力)はスケッチ上で行う
  • 基本的にはHIGH(5V)かLOW(0V)の1Bit[0,1]だが
    デューティ比として8Bit[0~255]の値を出力可能

アナログI/Oピン
  • A0~A5番の計6本
  • ピンの状態設定をスケッチ上で行わない
  • ピンの電圧を10Bit[0~1023]で取得可能

アナログ入出力関数

書式引数説明
void pinMode( [byte]pin, [boolean]mode ) pin:デジタルピン番号
mode:ピンモード
・OUTPUT:出力
pinにmodeを設定
void analogWrite( [byte]pin, [byte]value ) pin:デジタルピン番号
value:デューティ比
pin[D3,D5,D6,D9,D10,D11]に
value[0-255]を出力
※) pinMode関数で
"OUTPUT"を設定
int analogRead( [byte]pin ) pin:アナログピン番号 pin[A0-A5]から値[0-1023]を返す
※) pinMode関数で
ピンの状態を設定しない




使用する電子部品 (Component Required)
電子種別電子部品個数
マイコン Elegoo UNO R3 マイコンボード1
USBケーブル1
能動RGB LED1
受動220Ω 抵抗器1
機構 ポテンショメータ1
ブレッドボード1
ジャンプワイヤ(黒)[オス-オス]3
ジャンプワイヤ(赤)[オス-オス]2
ジャンプワイヤ(緑)[オス-オス]1
ジャンプワイヤ(青)[オス-オス]1
ジャンプワイヤ(黄)[オス-オス]1




電子部品について (Component Introduction)

RGB LED


  • 内部にRGBのLEDが存在し、個々のLEDの明るさ[0-255]を制御することで、様々な色を表現できる
  • ピンは一番長いCATHODEの”ー(GND)”を挟んで1本が"赤"、2本のうちCATHODE横のピンが”緑”、隣が”青”の計4本
  • 各LEDを直接電源に接続すると多くの電流が流れて破壊されるため、抵抗器で電流を調整する

ポテンショメータ

  • ボリューム(音量)の調整等、抵抗値を調節できる3端子の可変抵抗器
  • 形状としては、回転角度を検出するロータリーポテンショメータと、直線上の位置を検出するリニアポテンショメータがある
  • 使用方法としては二つの固定電極の両端に基準電圧を掛け、可動電極の電圧を測定することで可動電極の位置を判定する




電子回路 (Electronic Circuit)

回路図 (Schematic)


実体配線図 (Wiring Diagram)






実践 (To Practice)

配線写真 (Example Picture)


プログラム (Code)

ライブラリ
  • 無し

スケッチ
/****************************************************/
/* 【 Elegoo:4 】アナログ入出力                      */
/*    LEDの色をポテンショメーターで制御する            */
/****************************************************/

/*----------------------------*/
/* RGBリスト:表示する色(RGB)  */
/*----------------------------*/
long  RGB_LIST[] = {
    0x000000,   // BLACK
    0x0000FF,   // BLUE
    0x00FFFF,   // CYAN
    0x00FF00,   // GREEN
    0xFFFF00,   // YELLOW
    0xFF0000,   // RED
    0xFF00FF,   // MAZENTA
    0xFFFFFF,   // WHITE
};
// RGBリスト_配列数
byte bytRgbNum;

// ポテンショメータ値
int intMeter = 0;

// ピンの定義
#define METER 0   // A0:ポテンショメータ
#define BLUE  3   // D3:BLUE
#define GREEN 5   // D5:GREEN
#define RED   6   // D6:RED


/*********/
/* setup */
/*********/
void setup(){
  // --------------------------------------------------
  // デジタルピンを出力に設定
  // --------------------------------------------------
  pinMode( BLUE,  OUTPUT );
  pinMode( GREEN, OUTPUT );
  pinMode( RED,   OUTPUT );

  // --------------------------------------------------
  // RGBリストの配列数を設定
  // --------------------------------------------------
  bytRgbNum =  sizeof(RGB_LIST) / sizeof(RGB_LIST[0]);
}

/********/
/* loop */
/********/
void loop(){
  // ------------------------------------------------------------
  // ポテンショメータ[0-1023]の値を[0~RGBリストの配列数]で読み込む
  // ------------------------------------------------------------
  intMeter = map( analogRead(METER), 0, 1023, 0, bytRgbNum );

  // --------------------------------------------------
  // RGBリストの中からポテンショメータ値のRGBを出力する
  // --------------------------------------------------
  analogWrite( BLUE,  (   RGB_LIST[intMeter] & 0x0000FF ) );
  analogWrite( GREEN, ( ( RGB_LIST[intMeter] & 0x00FF00 ) >> 8) );
  analogWrite( RED,   ( ( RGB_LIST[intMeter] & 0xFF0000 ) >> 16) );
  
  delay( 100 );
}

結果(動画)・モニタリング


RGB LEDの色をポテンショメーターで制御する

0 件のコメント:

コメントを投稿