なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

Arduinoで遊ぼう - フルカラーLED

Posted by arms22 on 2008年11月25日 4  0

Make Tokyo Meeting 02で買ってきたArduino Duemilanoveで遊んでみました。Arduinoの説明や環境構築については下記URLを参照してください。

統合開発環境とUSBドライバをインストールして、Arduino DuemilanoveをMacに繋げば環境構築完了。試しにLED点滅のサンプルをダウンロードするとすぐにLEDの点滅が開始される。サンプルを少し変えて、LEDの点滅周期を変えるなんてこともすぐにできてしまう。

proc_sketch_081118a_screen.png
さっそく何か作ってみた。↑のようなカラーチャートから色を読み取りその色情報をArduino Duemilanoveに送るProcessingアプリを作成した。カラーチャート上でマウスを動かすとカーソルの下の色を読み取り、Arduino Duemilanoveに送信する。Arduino Duemilanoveは送られて来た色情報を元にフルカラーLEDを点灯させる。

新日本無線のNJU6061というLEDドライバICがある。PWM制御型の3色LEDドライバだ。このICの一部の機能をArduino Duemilanoveで実装して、フルカラーLEDを光らせている。

簡易版PWM制御型3色LEDドライバ仕様

  • 各色16step(内部256step*3色)
  • 波形補正機能(非線形補正を行い自然に明るさが変わっているように見せる)
  • UART 9600bps
制御コマンドは次のデータセットのコマンドのみ実装する。
  • LED1 PWMデータセット 0110 xxxx
  • LED2 PWMデータセット 0111 xxxx
  • LED3 PWMデータセット 1000 xxxx

回路
Arduino DuemilanoveのPWM 3にRED、PWM 5にGREEN、PWM 6にBLUE、カソードコモンをGNDに接続する。

サンプルスケッチ
#define INS_MASK      0xf0
#define DAT_MASK      0x0f
#define INS_LED1_DATA 0x60
#define INS_LED2_DATA 0x70
#define INS_LED3_DATA 0x80

int LED1_step;
int LED2_step;
int LED3_step;

#define LED1_port 3
#define LED2_port 5
#define LED3_port 6

const int step_to_duty[] = {
     0,  2,  4,  6,
    10, 16, 26, 38,
    54, 72, 92,118,
   146,180,216,255,
};

void setup(){
  LED1_step = 0;
  LED2_step = 0;
  LED3_step = 0;
  pinMode(LED1_port,OUTPUT);
  pinMode(LED2_port,OUTPUT);
  pinMode(LED3_port,OUTPUT);
  digitalWrite(LED1_port, 0);
  digitalWrite(LED2_port, 0);
  digitalWrite(LED3_port, 0);
  Serial.begin(9600);
}

void loop(){
  if(Serial.available() > 0){
    int ledIns = Serial.read();
    if((ledIns & INS_MASK) == INS_LED1_DATA){
      LED1_step = ledIns & DAT_MASK;
      if(!LED1_step){
        digitalWrite(LED1_port, LOW);
      }else{
        analogWrite(LED1_port, step_to_duty[LED1_step]);
      }
    }
    else if((ledIns & INS_MASK) == INS_LED2_DATA){
      LED2_step = ledIns & DAT_MASK;
      if(!LED2_step){
        digitalWrite(LED2_port, LOW);
      }else{
        analogWrite(LED2_port, step_to_duty[LED2_step]);
      }
    }
    else if((ledIns & INS_MASK) == INS_LED3_DATA){
      LED3_step = ledIns & DAT_MASK;
      if(!LED3_step){
        digitalWrite(LED3_port, LOW);
      }else{
        analogWrite(LED3_port, step_to_duty[LED3_step]);
      }
    }
  }
}


サンプルスケッチ: PWM制御型3色LEDドライバ
http://xfind.hp.infoseek.co.jp/electric/arduino/sketch_081118a.zip

Make日本語版 Vol.04記事「初めてのArduino」PDF公開
http://jp.makezine.com/blog/2008/11/make_lrn_arduino.html

フィジカル・コンピューティング: Arduinoを使おう
http://www.eleki-jack.com/FC/arduino/

建築発明工作ゼミ2008: Arduino
http://kousaku-kousaku.blogspot.com/2008/07/arduino.html

四谷工作研究所: Arduino
http://www.artstudium.org/kousaku/arduino/

Arduino.cc
http://www.arduino.cc/



Arduino Uno SMD
Arduino Uno SMD
posted with amazlet at 11.02.04
スイッチサイエンス
売り上げランキング: 21734



Ads by Google

4 Comments

masamo@ says...""
CQ ham radio 掲載おめでとうございます。
2008.11.26 15:53 | URL | #- [edit]
arms22 says...""
んーー???
何が掲載されたんだろ。。
人違い?
2008.11.26 17:41 | URL | #j7sy4omY [edit]
masamo@ says...""
えっとですね
CQ ham radioっていうアマチュア無線の専門誌の12月号の55ページのハムに役立つサイトカタログのMacユーザーのためにっていう欄にこのblogが紹介されてました
御存知じゃなかったんですか
2008.12.01 23:26 | URL | #- [edit]
arms22 says...""
CQ ham radioは購読していないので
知りませんでした。。
情報ありがとうございます。
2008.12.02 09:22 | URL | #j7sy4omY [edit]

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。