LED cube 5×5×5

15095 단어 Arduino

소개



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끼리의 간격이 넓은 쪽이 빛나고 있을 때에 깨끗하게 보입니다.

    좋은 웹페이지 즐겨찾기