发一个正在做的8*8*8光立方-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5867|回复: 6

[项目] 发一个正在做的8*8*8光立方

[复制链接]
发表于 2019-3-23 19:56 | 显示全部楼层 |阅读模式
最近不怎么忙就焊接了一个光立方,第一次做,也没什么参考。有思路后就开工。用激光雕刻机做了个焊接的模板,3mm的孔,间距10mm,再上面一排一排的做好再焊接。
20190323_193014.jpg
用的高亮红色3mm,高度没怎么注意结果间距大有些偏高了。
20190316_083508.jpg
20190317_092648.jpg
20190317_092721.jpg

驱动电路用的自制的595小板子,一共9片,8片负责纵向控制,最后一片负责8个层控制,用2803做驱动。
20190323_191930.jpg
20190323_191955.jpg
20190323_192025.jpg
PCB_NEW-PCB_20190323192329.png
595.PNG

编了个小程序测试了一下,最终成功。焊接一定要注意焊好一排就挨个测试,都亮了再继续。要是完成了再发现不亮的就麻烦了。
20190323_191233_20190323194656.gif

附刚刚写的测试程序:
各种变换效果抽空再编写了。

又订购了双色的3mmLED,再做异形的。
[mw_shl_code=arduino,true]// 使用 74HC595
// 接 74HC595 的 ST_CP (pin 12,latch pin)
#define latchPin 5
// 接 74HC595 的 SH_CP (pin 11, clock pin)
#define clockPin  4
// 接 74HC595 的 DS (pin 14)
#define dataPin  3
#define dataPin2  9  //双色备用

const byte ta[8][8] ={
  {0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF},
  {0xFF,0x7E,0x00,0x00,0x00,0x00,0x7E,0xFF},
  {0xFF,0x7E,0x3C,0x00,0x00,0x3C,0x7E,0xFF},
  {0xFF,0x7E,0x3C,0x18,0x18,0x3C,0x7E,0xFF},
  {0xFF,0x7E,0x3C,0x18,0x18,0x3C,0x7E,0xFF},
  {0xFF,0x7E,0x3C,0x00,0x00,0x3C,0x7E,0xFF},
  {0xFF,0x7E,0x00,0x00,0x00,0x00,0x7E,0xFF},
  {0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF},
  
  };
void setup() {
  // 将 latchPin, clockPin, dataPin 设置为输出
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(dataPin2, OUTPUT);

Serial.begin(115200);

}
void loop() {
    for (int x = 0;x<8;x++){
        outchar(x);
      delay(50);
    }   
    for (int x = 7;x>=0;x--){
        outchar(x);
      delay(50);
    }  
}
void outchar(int outx){
        digitalWrite(latchPin, LOW);
          OUTDATA(dataPin,dataPin2, clockPin,1<<(7-outx),0);
       for (int m=0;m<8;m++){
          OUTDATA(dataPin,dataPin2, clockPin,ta[m][outx],0);  
       }
    digitalWrite(latchPin, HIGH);  

  }
void OUTDATA(uint8_t x,uint8_t y, uint8_t clockp, uint8_t val, uint8_t val_2){
      uint8_t i;
      for (i = 0; i < 8; i++){
                  digitalWrite(x, (val & ( 1<< i )));
                  digitalWrite(y, (val_2 & (1<< i )));
                  digitalWrite(clockp, HIGH);
                  digitalWrite(clockp, LOW);           
      }
}[/mw_shl_code]



 楼主| 发表于 2019-3-24 17:30 | 显示全部楼层
20190324_171940_20190324172636.gif

S型扭呀扭
[mw_shl_code=arduino,true]#include <MsTimer2.h>  //定时中断的库
// 使用 74HC595
// 接 74HC595 的 ST_CP (pin 12,latch pin)
#define latchPin 5
// 接 74HC595 的 SH_CP (pin 11, clock pin)
#define clockPin  4
// 接 74HC595 的 DS (pin 14)
#define dataPin  3
#define dataPin2  9  //双色备用

byte led[8][8] ={
  {0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF},
  {0x00,0x7E,0x00,0x00,0x00,0x00,0x7E,0x00},
  {0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00},
  {0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00},
  {0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00},
  {0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00},
  {0x00,0x7E,0x00,0x00,0x00,0x00,0x7E,0x00},
  {0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF},
  
  };
byte buff[8];
uint8_t layer = 0;
unsigned int num = 0;
void ledout(){  //定时中断,扫描每一层
    layer++;
    if (layer ==8)
      layer = 0;
    outchar(layer);
  
  }
void setup() {
  // 将 latchPin, clockPin, dataPin 设置为输出
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(dataPin2, OUTPUT);
   MsTimer2::set(2, ledout); // 2ms period
  MsTimer2::start();

//Serial.begin(115200);

}
void loop() {
  for(int i = 0;i<8;i++){  //把底层放入缓存
            buff = led[7];
    }
  for(int i=0;i<7;i++){     //顺序下移一层
    for(int j=0;j<8;j++){
           led[j][7-i] = led[j][6-i];
     }
    }
  for(int i = 0;i<8;i++){   //把缓存放入顶层
           led[0] = buff;
    }

    delay(100);

}
void outchar(int outx){
        digitalWrite(latchPin, LOW);
          OUTDATA(dataPin,dataPin2, clockPin,1<<(7-outx),0);  //层选中
         // int m=5;
       for (int m=0;m<8;m++){   //输出8个立面
          OUTDATA(dataPin,dataPin2, clockPin,led[m][outx],0);  
       }
    digitalWrite(latchPin, HIGH);  

  }
void OUTDATA(uint8_t x,uint8_t y, uint8_t clockp, uint8_t val, uint8_t val_2){
      uint8_t i;
      for (i = 0; i < 8; i++){
                  digitalWrite(x, (val & ( 1<< i )));
                  digitalWrite(y, (val_2 & (1<< i )));
                  digitalWrite(clockp, HIGH);
                  digitalWrite(clockp, LOW);           
      }
}[/mw_shl_code]


 楼主| 发表于 2019-3-25 14:17 | 显示全部楼层
贴设计板图,上午刚弄的。打算做16*16*16双色的。估计要半年完成吧。
pb.png

PCB_NEW-PCB_20190325140935.png

一个双色单元。16光立方要用32片,用64片595,再加两片层驱动。

用红蓝双色3mm雾状灯


 楼主| 发表于 2019-4-6 18:58 | 显示全部楼层
第二个焊接练习
PCB_NEW-PCB_20190406185130.png 20190404_221049.jpg 20190404_221053.jpg 20190404_221057.jpg 20190405_085634.jpg 20190405_085641.jpg

 楼主| 发表于 2019-4-6 19:00 | 显示全部楼层
20190406_090253_20190406185731.gif
发表于 2019-5-30 23:47 | 显示全部楼层
嗯,很赞,很久前在油管上见过这个项目。
发表于 2019-6-27 13:53 | 显示全部楼层
既漂亮又实用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-9-20 22:28 , Processed in 0.217399 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表