Skip to main content

Rainbowduino v3.0

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

Rainbowduinoボードは、プロフェッショナルな多重化LEDドライバーを備えたArduino互換のコントローラーボードです。8x8 RGB LEDマトリックスまたは4x4x4 RGB LEDキューブを共通アノードモードで駆動することができます。Rainbowduino v3.0は、12チャンネル(R/G/B x 4)の定電流適応パルス密度変調(APDM)を提供するMY9221チップを2つ使用しています。Rainbowduino v3.0は、I2Cインターフェースを使用してさらに多くのボードをカスケード接続するための準備が整っています。

Rainbowduino v3.0はArduinoブートローダーがフラッシュされており、Arduino IDEを使用してスケッチを簡単にプログラムできます。他のLEDドライバーとは異なり、スケッチをプログラムするためのUSBからUART(FT232RL)が内蔵されています。

Rainbowduino v3.0 底面

特徴

パラメータ
定電流出力20.8mA
ピンヘッダー2 x 16(多重化LED接続用)
最大LED駆動能力192(例:8x8x3)
対応LEDディスプレイ4x4x4 RGBキューブ & 8x8 RGB LEDマトリックス
USBからUARTFT232RL
DC電源USB給電または外部6V~12V DC
内蔵電圧レギュレーター5V / 1A

応用アイデア

  • 汎用LEDドライバー
    • 4x4x4 RGBキューブを接続
    • 8x8 RGBマトリックスを接続
  • 複数のRainbowduino v3.0を連結してLED看板を作成

使用方法

ハードウェアセットアップ

note

Rainbowduino v3.0をプログラムする際は、スライドスイッチを常にUSB位置に設定してください。スライドスイッチをHOST位置に設定すると、オンボードのFT232がUartSBeeとして動作します(この機能はRainbowduino v3.0の通常操作には必要ありません)。

LEDマトリックスへの接続は非常に簡単です。

  • RGB LEDマトリックスの接続 RGBマトリックスの2x16オスピンヘッダーを以下のようにRainbowduinoに接続します(RGBマトリックスの背面を確認し、「2088RGB」テキストマークに近い16オスピンヘッダーをRainbowduinoのDRIVE - GREEN - DRIVEピンヘッダーに接続してください)。

Rainbowduino v3.0が8x8 RGB LEDマトリックスに接続された状態

または

  • RGB LEDキューブの接続 Rainbow Cube Kitの2x16オスピンヘッダーを以下のようにRainbowduinoに接続します。

2x16ピンヘッダーの位置

RainbowduinoRainbow Cube Kitに正しく接続された状態

  • プログラム用にRainbowduinoにUSBケーブルを接続します。

ソフトウェアセットアップ

  • Arduino IDE --> ツール --> ボードメニューで「DuemilanoveまたはDiecimila」を選択します。
  • リソースセクションからRainbouduino 3.0ライブラリをダウンロードしてインストールします。

プログラミング

RGB LEDキューブでの使用


RGB LEDキューブを使用した簡単な例から始めましょう:

  • リソースからRainbowduino v3.0ライブラリをダウンロードします。
  • Cube1.inoスケッチを開きます(そのコピーを以下に再現しています)。
  • スケッチをコンパイルしてアップロードします。そのコピーを以下に再現しています:
/*
Rainbowduino v3.0 Library examples: Cube1
 
Sets pixels on 3D plane (4x4x4 cube)
*/
 
#include <Rainbowduino.h>
 
void setup()
{
Rb.init(); //Rainbowduinoドライバーを初期化
}
 
void loop()
{
// (Z,X,Y):(0,0,0) ピクセルをBLUEに設定
Rb.setPixelZXY(0,0,0,0x0000FF); //24ビットRGBカラーコードを使用
 
// (Z,X,Y):(0,3,0) ピクセルをREDに設定
Rb.setPixelZXY(0,3,0,0xFF,0,0); //R, G, Bカラーのバイトを使用
 
// (Z,X,Y):(3,0,3) ピクセルをGREENに設定
Rb.setPixelZXY(3,0,3,0x00FF00); //24ビットRGBカラーコードを使用
}

出力:

Cube1.pdeデモ

Rainbowduino v3.0ライブラリはRGB LEDキューブを使用するための多くのAPIを提供しています。以下のセクションではそれらをリストアップし説明します:

API説明
Rb.init(void)Rainbowduinoドライバーを初期化します。これはsetup()内に配置する必要があります。
Rb.setPixelZXY(unsigned char z, unsigned char x, unsigned char y, unsigned char colorR, unsigned char colorG, unsigned char colorB)各チャンネル(カラー)を8ビット数で指定してピクセル(z,x,y)を設定します。
Rb.setPixelZXY(unsigned char z, unsigned char x, unsigned char y, uint32_t colorRGB)24ビットRGBカラーコードを指定してピクセル(z,x,y)を設定します。
Rb.blankDisplay(void)すべてのLEDを消灯するために使用される関数です。

setPixelZXY() デモ

  • (Z,X,Y) ピクセルアドレス指定を理解するために、別の例を見てみましょう。このデモでは、レイヤー 0 (Z-0) が緑色に塗られ、レイヤー 3 が青色に塗られます。
/*
Rainbowduino v3.0 ライブラリ例: Cube2
 
3D 平面 (4x4x4 キューブ) 上のピクセルを設定
*/
 
#include <Rainbowduino.h>
 
void setup()
{
Rb.init(); // Rainbowduino ドライバを初期化
}
 
unsigned int z,x,y;
 
void loop()
{
for(x=0;x<4;x++)
{
for(y=0;y<4;y++)
{
// レイヤー 0 を緑色に塗る
Rb.setPixelZXY(0,x,y,0x00FF00); // 24ビット RGB カラーコードを使用
}
}
 
for(x=0;x<4;x++)
{
for(y=0;y<4;y++)
{
// レイヤー 3 を青色に塗る
Rb.setPixelZXY(3,x,y,0x0000FF); // 24ビット RGB カラーコードを使用
}
}
}

出力:

Cube2.pde デモ

setPixelZXY() ランダムカラー デモ

  • このデモでは、すべての LED がランダムな色で塗られます。5秒の遅延後、キューブ全体が再びランダムな色で塗り直されます。
    /*
Rainbowduino v3.0 ライブラリ例: Cube3

3D 平面 (4x4x4 キューブ) 上のピクセルを設定
*/

#include <Rainbowduino.h>

void setup()
{
Rb.init(); // Rainbowduino ドライバを初期化
}

unsigned int z,x,y;

void loop()
{
for(z=0;z<4;z++)
{
for(x=0;x<4;x++)
{
for(y=0;y<4;y++)
{
// ランダムな色で塗る
Rb.setPixelZXY(z,x,y,random(0xFF),random(0xFF),random(0xFF)); // R, G, B カラーバイトを使用
}
}
}
delay(5000);
Rb.blankDisplay(); // LED をクリア (すべてを空白にする)
}

出力:

Cube3.pde デモ

ナイトランプ / ムードランプ デモ

/*
 
Rainbowduino v3.0 ライブラリ例: ムードランプ
 
*/
 
#include <Rainbowduino.h>
 
 
// HSV から RGB 配列への変換
 
unsigned char RED[64] = {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,238,221,204,188,171,154,137,119,102,85,
68,51,34,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,35,52};
 
unsigned char GREEN[64] = {0,17,34,51,68,85,102,119,136,153,170,187,204,221,238,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,238,221,204,188,170,154,136,120,102,86,68,52,34,18,0,0,0,0};
 
unsigned char BLUE[64] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,34,52,68,86,102,120,136,154,170,188,
204,221,238,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
 
void setup()
{
Rb.init(); // Rainbowduino ドライバを初期化
}
 
unsigned int z,x,y;
void loop()
{
 
for(z=0; z<64 ;z++)
{
for(x=0;x<8;x++)
{
for(y=0;y<8;y++)
{
// ランダムな色で塗る
//Rb.setPixelZXY(z,x,y,RED[i],GREEN[i],BLUE[i]); // R, G, B カラーバイトを使用
Rb.setPixelXY(x,y,RED[z],GREEN[z],BLUE[z]); // R, G, B カラーバイトを使用
}
}
delay(100);
}
 
for(z=63; z > 0 ;z--)
{
for(x=0;x<8;x++)
{
for(y=0;y<8;y++)
{
// ランダムな色で塗る
//Rb.setPixelZXY(z,x,y,RED[i],GREEN[i],BLUE[i]); // R, G, B カラーバイトを使用
Rb.setPixelXY(x,y,RED[z],GREEN[z],BLUE[z]); // R, G, B カラーバイトを使用
}
}
delay(100);
}
 
}

プラズマキューブ

/*
 
Rainbowduino v3.0 ライブラリ例: 3D プラズマ
 
*/
 
#include <Rainbowduino.h>
 
// HSV から RGB 配列への変換
 
unsigned char RED[64] = {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,238,221,204,188,171,154,137,119,102,85,
68,51,34,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,35,52};
 
unsigned char GREEN[64] = {0,17,34,51,68,85,102,119,136,153,170,187,204,221,238,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,238,221,204,188,170,154,136,120,102,86,68,52,34,18,0,0,0,0};
 
unsigned char BLUE[64] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,34,52,68,86,102,120,136,154,170,188,
204,221,238,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
 
unsigned char plasma[4][4][4];
 
void setup()
{
Rb.init(); // Rainbowduino ドライバを初期化
 
for(unsigned char x = 0; x < 4; x++)
{
for(unsigned char y = 0; y < 4; y++)
{
for(unsigned char z = 0; z < 4; z++)
{
int color = int(32.0 + (32.0 * sin(x / 1.0))+ 32.0 + (32.0 * sin(y / 1.0)) + 32.0 + (32.0 * sin(z / 1.0))) / 3;
plasma[x][y][z] = color;
}
}
}
}
 
unsigned char x,y,z,colorshift=0;
 
void loop()
{
for(x=0;x<4;x++)
{
for(y=0;y<4;y++)
{
for(z=0;z<4;z++)
{
Rb.setPixelZXY(z,x,y,(RED[plasma[x][y][z] + colorshift]) % 256,(GREEN[plasma[x][y][z] + colorshift]) % 256,(BLUE[plasma[x][y][z] + colorshift]) % 256); // R, G, B カラーバイトを使用
}
}
}
delay(100);
colorshift= colorshift + 1;
}

出力:

PlasmaCube.pde デモ

RGB LED マトリックスでの使用

Rainbowduino v3.0 ライブラリは、RGB LED マトリックスを使用するための多くの API を提供します。以下のセクションでは、それらをリストアップし説明します:

API説明
Rb.init(void)Rainbowduino ドライバを初期化します。setup() 内に配置する必要があります。
Rb.setPixelXY(unsigned char x, unsigned char y, unsigned char colorR, unsigned char colorG, unsigned char colorB)各チャンネル (色) を 8ビット数値で指定してピクセル (x,y) を設定します。
Rb.setPixelXY(unsigned char x, unsigned char y, uint32_t colorRGB)24ビット RGB カラーコードを指定してピクセル (x,y) を設定します。
Rb.blankDisplay(void)すべての LED を空白にするために使用されます。
Rb.drawChar(unsigned char ascii, unsigned int poX, unsigned int poY, uint32_t colorRGB)(poX,poY) に uint32_t カラーの ASCII 文字を描画します。
Rb.drawCircle(int poX, int poY, int r, uint32_t color)(poX,poY) に半径 r の uint32_t カラーの円を描画します。
Rb.fillCircle(int poX, int poY, int r, uint32_t color)(poX,poY) に半径 r の塗りつぶし uint32_t カラーの円を描画します。
Rb.drawLine(unsigned int x0,unsigned int y0,unsigned int x1,unsigned int y1, uint32_t color)(x0,y0) から (x1,y1) までの線を描画します。
Rb.drawVerticalLine(unsigned int poX, unsigned int poY,unsigned int length, uint32_t color)(poX,poY) から長さピクセルの水平線を描画します。
Rb.drawRectangle(unsigned int poX, unsigned int poY, unsigned int length,unsigned int width, uint32_t color)(poX,poY) から長さと幅ピクセルの矩形線を描画します。
Rb.fillRectangle(unsigned int poX, unsigned int poY, unsigned int length, unsigned int width, uint32_t color)(poX,poY) から長さと幅ピクセルの塗りつぶし矩形を描画します。

Shapes デモ

    /*
Rainbowduino v3.0 ライブラリの例:

2D 平面 (8x8 マトリックス) に図形を描画

*/

#include <Rainbowduino.h>

void setup()
{
Rb.init();
}

unsigned char x,y,z;

void loop()
{

Rb.drawCircle(3, 4, 3, 0xFF0000); // (3,4) の位置に半径 3 の赤い円を描画
delay(1000);
Rb.blankDisplay();

Rb.fillCircle(3, 4, 2, 0x0000FF); // (3,4) の位置に半径 2 の青い塗りつぶし円を描画
delay(1000);
Rb.blankDisplay();

Rb.drawLine(0, 0, 7, 7, 0x00FF00); // (0,0) から (7,7) までの線を描画
delay(1000);
Rb.blankDisplay();

Rb.drawVerticalLine(0, 0, 7, random(0xFFFFFF)); // (0,0) から長さ 7 ピクセルの垂直線を描画
delay(1000);
Rb.blankDisplay();

Rb.drawHorizontalLine(0, 0, 7, random(0xFFFFFF)); // (0,0) から長さ 7 ピクセルの水平線を描画
delay(1000);
Rb.blankDisplay();

Rb.drawRectangle(0, 0, 4, 6, random(0xFFFFFF)); // (0,0) から長さ 4、幅 6 ピクセルの矩形を描画
delay(1000);
Rb.blankDisplay();

Rb.fillRectangle(0, 0, 7, 7, random(0xFFFFFF)); // (0,0) から長さと幅が 7 ピクセルの塗りつぶし矩形を描画
delay(1000);
Rb.blankDisplay();

}

出力:

図形

drawChar デモ

    /*
Rainbowduino v3.0 ライブラリの例:

2D 平面 (8x8 マトリックス) に文字を描画

*/

#include <Rainbowduino.h>

void setup()
{
Rb.init();
}

unsigned char x,y,z;

void loop()
{

for(int i= 0x20; i<=0x7E; i++) // すべての印刷可能な文字の ASCII 値を生成
{
Rb.drawChar(i,0,1,random(0xFFFFFF));
delay(500);
Rb.blankDisplay();
}

}

出力:

回路図オンラインビューア

リソース

その他関連製品、リソース、プロジェクト:

技術サポートと製品ディスカッション

弊社の製品をお選びいただきありがとうございます!お客様が弊社製品をスムーズにご利用いただけるよう、さまざまなサポートをご提供しております。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルをご用意しています。

Loading Comments...