GR-SAKURA
ルネサスのArduino互換ボード.半年前に購入したのにほったらかしていた.
がじぇっとるねさすは、マイコンを搭載した小型のガジェット(電子工作ボード)「GRリファレンスボード」と、マイコン用のプログラムを専門知識がなくても容易に作成できるクラウド環境をWebブラウザ上で提供することで、電子工作を身近なものとして楽しんで頂くことを目的にルネサスで発足した新プロジェクトです。
プログラムをWebブラウザ上で書いて,コンパイルはサーバ上で行うのが特徴. コンパイルしたバイナリはダウンロードして,USBストレージ (として見えている本体) にコピーするだけでOK.
Webブラウザ上でプログラムをエディットし、コンパイルできるクラウド環境を無償でご提供します。クラウド環境で作成したプログラムおよびコンパイルして生成されたオブジェクトは、 ローカルPCに ダウンロードすることができます。
フルカラーLEDを制御したい
最近になって,フルカラーLEDのコンサートライトを作ってみたいと思うようになった.
ほったらかしていたGR-SAKURAで遊ぶのと,LEDの制御を理解するのにはちょうどいいと思ったので, 秋葉原で部品を集めて実装してみた. (ただ,GR-SAKURAでは機能が豊富すぎるし,そもそも大きすぎて全然筒におさまらないので,いずれマイコンとかに移植しなければならない)
部品
LEDは秋月電子で買った EP204K-35G1R1B1-CA にした.
大型フルカラーLED(35mA)EP204K-35G1R1B1-CA: LED(発光ダイオード) 秋月電子通商 電子部品 ネット通販
回路
なぜか+5Vから5V供給されないようなので,IO7をHIGHにしっぱなしにして5V供給する (が,測ってみると3V前後しか出ていない.よくわからん.とりあえず点灯するのでいいや). 5V供給されたとして,R, G, Bにそれぞれ20mA流れるように適当に抵抗をつなげる. IO0をLOWにすると赤,IO1とLOWにすると青,IO2をLOWにすると緑が点灯する.
プログラムソース
ピンの定義は以下を参考 (公式に情報ないんかな?).
1秒ごとに赤,黄,ピンク,緑,紫,白が表示されるようにした. 赤,緑はRやGをONにして,他を消せばよいけど,黄色,ピンク,紫はR, G, Bをコントロールしないといけない. analogWriteを使ってPWM制御をする. 黄色は R:100%, G:100%, B:0%, ピンクは R:100%, G:0%, B:14%, 紫は R:61%, G:0%, B:100% とした.
/* | |
* gr_sketch.ino | |
* | |
* Created by FUKUBAYASHI Yuichiro on 2012/12/19 | |
* Copyright (c) 2012, FUKUBAYASHI Yuichiro | |
* | |
* last update: <2012/12/23 21:00:36> | |
*/ | |
#include <rxduino.h> | |
#define INTERVAL 1000 | |
#define PIN_5V PIN_P33 | |
#define PIN_R PIN_P21 | |
#define PIN_G PIN_P22 | |
#define PIN_B PIN_P20 | |
unsigned int PINS[] = {PIN_R, PIN_G, PIN_B}; | |
void LED_OFF (){ | |
for(int i=0; i<3; i++){ | |
digitalWrite(PINS[i], HIGH); | |
} | |
} | |
void RED_ON(){ | |
digitalWrite(PIN_R, LOW); | |
digitalWrite(PIN_G, HIGH); | |
digitalWrite(PIN_B, HIGH); | |
} | |
void YELLOW_ON(){ | |
digitalWrite(PIN_R, LOW); | |
digitalWrite(PIN_G, LOW); | |
digitalWrite(PIN_B, HIGH); | |
} | |
void PINK_ON(){ | |
digitalWrite(PIN_R, LOW); | |
digitalWrite(PIN_G, HIGH); | |
analogWrite(PIN_B, (int) 255*(100-14)/100); | |
} | |
void GREEN_ON(){ | |
digitalWrite(PIN_R, HIGH); | |
digitalWrite(PIN_G, LOW); | |
digitalWrite(PIN_B, HIGH); | |
} | |
void PURPLE_ON(){ | |
analogWrite(PIN_R, (int) 255*(100-61)/100); | |
digitalWrite(PIN_G, HIGH); | |
digitalWrite(PIN_B, LOW); | |
} | |
void WHITE_ON(){ | |
digitalWrite(PIN_R, LOW); | |
digitalWrite(PIN_G, LOW); | |
digitalWrite(PIN_B, LOW); | |
} | |
void setup() | |
{ | |
pinMode(PIN_R, OUTPUT); | |
pinMode(PIN_G, OUTPUT); | |
pinMode(PIN_B, OUTPUT); | |
pinMode(PIN_5V, OUTPUT); | |
digitalWrite(PIN_5V, HIGH); | |
} | |
void loop() | |
{ | |
RED_ON(); | |
delay(INTERVAL); | |
LED_OFF(); | |
YELLOW_ON(); | |
delay(INTERVAL); | |
LED_OFF(); | |
PINK_ON(); | |
delay(INTERVAL); | |
LED_OFF(); | |
GREEN_ON(); | |
delay(INTERVAL); | |
LED_OFF(); | |
PURPLE_ON(); | |
delay(INTERVAL); | |
LED_OFF(); | |
WHITE_ON(); | |
delay(INTERVAL); | |
LED_OFF(); | |
} |
動作例
赤
黄色
ピンク
緑
紫
白.本当はもうちょっと白いけど,カメラで撮ると赤っぽい. RGBの明るさが完全には同じじゃないからきれいな白にするのは難しいかも.