3x3x3LED cubeを制御する Arduino UNOプログラミングワークショップfor kid’s part3


LED cubeとは?

それぞれのLEDを制御して光らせるものですね。音楽に合わせて光らせたり、その日の天候に合わせて光り方を変えたり、またセンサーと組み合わせて来客を知らせたり、様々な場面で表示デバイスとして利用できるので1つ作っておくのも良いでしょう。こんなかんじのものです。今回は3x3x3のものを作りました。

LED cube dynamic さて次はいよいよ8×8×8に取りかかろう。 #arduino #LED #green

ANFさん(@peacesheltie)が投稿した動画 –


必要なもの

  

必要部品 数量
LED今回は秋月で買った190個入り300円詳細不明、質問不可のもの 27コ
炭素皮膜抵抗330Ω 3コ
ジャンプワイヤオス・メス 12本
ジャンプワイヤオス・オス 3本
Arduino 1コ
USBケーブル 1本
ブレッドボード 1枚
ハンダごて 1本
ハンダ 20センチ

作り方はこのあたりを参考にすると、わかりやすいのでないかとおもいます。
Circuit Digest making-3X3X3-led-cube-with-arduino

配線は

  

Arduino LED cube
A0 1段目
A1 2段目
A2 3段目
LED1
LED2
LED3
LED5
LED5
LED6
LED7
LED8
10 LED9

まずはLチカから

const int anode_pin = 2;    // アノードに接続するArduinoのピン
const int cathode_pin = A2; // カソードに接続するArduinoのピン
 
// setup() は、最初に一度だけ実行される
void setup() {
  pinMode(anode_pin, OUTPUT);    // anode_pinを出力モードに設定する
  pinMode(cathode_pin, OUTPUT);  // cathode_pinを出力モードに設定する
}
 
// loop() は、setup ()実行後、無限に実行される
void loop() {
  digitalWrite(cathode_pin, LOW);  // cathode_pinにLOWを出力する
  digitalWrite(anode_pin, HIGH);   // anode_pinにHIGHを出力する
  delay(500);                      // 500ミリ秒待つ
  digitalWrite(anode_pin, LOW);    // anode_pinにHIGHを出力する
  delay(500);                      // 500ミリ秒待つ
}

三段目の1番のLEDが点滅したでしょうか?LEDがチカチカすれば成功です。違う番号がついたら配線の間違いですね。チェックしてみてください。
14行目、16行目のdelay(500);に注目してみましょう。delayはちょっとまってね!の意味。(500)は500ミリ秒つまり0.5秒待つ。ということです。0.5秒ごとに点滅を繰り返すということですね。
数値をいろいろと変化させて観察してみてください。

cubeandArduino

9つのLEDを制御する

順番に点灯
const int anode_pins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};    // アノードに接続するArduinoのピン
const int cathode_pin = A0;  // カソードに接続するArduinoのピン
const int number_of_anode_pins = sizeof(anode_pins) / sizeof(anode_pins[0]);
 
// setup() は、最初に一度だけ実行される
void setup() {
  for (int i = 0; i < number_of_anode_pins; i++) {
    pinMode(anode_pins[i], OUTPUT);  // anode_pinsを出力モードに設定する
  }
   
  pinMode(cathode_pin, OUTPUT);  // cathode_pinを出力モードに設定する
}
 
// loop() は、setup ()実行後、無限に実行される
void loop() 
{
  for (int x=0; x< 9; x=x+1)
  {
   digitalWrite(cathode_pin, LOW);  // cathode_pinにLOWを出力する
   digitalWrite(anode_pins[x], HIGH);   // 選択したピンにHIGHを出力する
   delay(100);                      // 少し待つ
   digitalWrite(anode_pins[x], LOW);    // 選択したピンにLOWを出力する
  }
}
ランダム点灯
const int anode_pins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};    // アノードに接続するArduinoのピン
const int cathode_pin = A0;  // カソードに接続するArduinoのピン
const int number_of_anode_pins = sizeof(anode_pins) / sizeof(anode_pins[0]);
 
// setup() は、最初に一度だけ実行される
void setup() {
  for (int i = 0; i < number_of_anode_pins; i++) {
    pinMode(anode_pins[i], OUTPUT);  
// anode_pinsを出力モードに設定する
  }
   
  pinMode(cathode_pin, OUTPUT);  
// cathode_pinを出力モードに設定する
}
 
// loop() は、setup ()実行後、無限に実行される
void loop() {
  int anode_pin = anode_pins[random(number_of_anode_pins)];  
// 点灯するピンを選択する
   
  digitalWrite(cathode_pin, LOW);  // cathode_pinにLOWを出力する
  digitalWrite(anode_pin, HIGH);   // 選択したピンにHIGHを出力する
  delay(100);                      // 少し待つ
  digitalWrite(anode_pin, LOW);    // 選択したピンにLOWを出力する
}
パターン点灯
const int anode_pins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};    // アノードに接続するArduinoのピン
const int cathode_pin = A0;  // カソードに接続するArduinoのピン
const int number_of_anode_pins = sizeof(anode_pins) / sizeof(anode_pins[0]);
 
// パターン0から9まで。表示させるセグメントの関係
const int digits[] = {
  0b0010000010, // パターン0
  0b0000010000, // パターン1
  0b0100000001, // パターン2
  0b0001000100, // パターン3
  0b0110110000, // 4
  0b0011011000, // 5
  0b0000011011, // 6
  0b0000110110, // 7
  0b0010111010, // 8
  0b0111101111, // 9
};
 
// パターンを表示
// パターン(n)を表示する
void display_number (int n) {
  for (int i = 0; i < number_of_anode_pins; i++) {
    digitalWrite(anode_pins[i], digits[n] & (1 << i) ? HIGH : LOW);
  }
}
 
// setup() は、最初に一度だけ実行される
void setup() {
  for (int i = 0; i < number_of_anode_pins; i++) {
    pinMode(anode_pins[i], OUTPUT);  // anode_pinsを出力モードに設定する
  }
  pinMode(cathode_pin, OUTPUT);  // cathode_pinを出力モードに設定する
}
 
void loop () {
  digitalWrite(cathode_pin, LOW);
  display_number(0);
  delay(500);
  display_number(1);
  delay(500);
  display_number(2);
  delay(500);
  display_number(3);
  delay(500);
  display_number(4);
  delay(500);
  display_number(5);
  delay(500);
  display_number(6);
  delay(500);
  display_number(7);
  delay(500);
  display_number(8);
  delay(500);
  display_number(9);
  delay(500);
}


ご自由にどうぞ