#はじめに
Arduino MEGAを使って5×5×5LED Cubeを作成を行います。
#目次
- 電子部品リスト
- 回路図
- Arduino MEGAのプログラム
- 動画
- まとめ
1.電子部品リスト
名称 | 個数 |
---|---|
Arduino MEGA | 1個 |
LED | 125個 |
抵抗 150Ω | 5個 |
ジャンパー線 | 30本 |
#2.回路図
それぞれの番号とArduino MEGAに配線をしていきます。
Arduino MEGAのプログラム
LEDcube.rd
#define LED_SIZE 25
#define FLOOR_SIZE 5
#define SIDE_SIZE 5
byte dots[] = {
22, 23, 24, 25, 26,
27, 28, 29, 30, 31,
32, 33, 36, 37, 38,
39, 40, 41, 42, 43,
44, 45, 46, 53, 52
};
byte floors[] = {
2, 3, 4, 5, 6
};
byte memmap[FLOOR_SIZE * LED_SIZE];
void pset(byte* pattern, int floor_num, int dot_num, byte value) {
pattern[floor_num * LED_SIZE + dot_num] = value;
}
byte pget(byte* pattern, int floor_num, int dot_num) {
return pattern[floor_num * LED_SIZE + dot_num];
}
void setup() {
int i, j;
randomSeed(analogRead(0));
for (i = 0; i < LED_SIZE; i++)
pinMode(dots[i], OUTPUT);
for (i = 0; i < FLOOR_SIZE; i++)
pinMode(floors[i], OUTPUT);
setFloor(0);
for (i = 0; i < FLOOR_SIZE; i++)
for (j = 0; j < LED_SIZE; j++)
pset(memmap, i, j, LOW);
}
// num: 0 origin
void writeDotValue(int num, int value) {
digitalWrite(dots[num], value);
}
// num: 0 origin
void setFloor(int num) {
int i;
for (i = 0; i < FLOOR_SIZE; i++)
digitalWrite(floors[i], i == num ? HIGH: LOW);
}
// 一回分の描画
#define DELAY_US 600
int setDots(byte* pattern) {
long current;
long wait_us = 0;
int f, i;
for (f = 0; f < FLOOR_SIZE; f++) {
current = micros();
setFloor(f);
for (i = 0; i < LED_SIZE; i++)
writeDotValue(i, pget(pattern, f, i));
delayMicroseconds(DELAY_US);
wait_us += micros() - current;
}
return (int)(wait_us / 1000);
}
void draw(byte* pattern, int ms) {
int total_ms = 0;
while (true) {
total_ms += setDots(pattern);
if (total_ms >= ms)
break;
}
}
void loop() {
int i, j;
for (i = 0; i < FLOOR_SIZE - 1; i++)
for (j = 0; j < LED_SIZE; j++)
pset(memmap, i, j,
pget(memmap, i + 1, j));
for (j = 0; j < LED_SIZE; j++)
pset(memmap, 4, j, random(10000) % 9 == 0 ? HIGH: LOW);
draw(memmap, 150);
}
4.動画
下の画像を選択すると動画が再生されます。
__YouTube__に飛びます。
5.まとめ
今回、LEDの足が短いのを購入してい半田する際に半田コテがLEDと接触してしまいLEDを溶かすハプニングが度々起こりました。
LEDの足が長いやつを買うことをオススメします。それにLEDどうしの間隔がが広い方が光っている際にキレイに見えますよ。