发一个正在做的8*8*8光立方
最近不怎么忙就焊接了一个光立方,第一次做,也没什么参考。有思路后就开工。用激光雕刻机做了个焊接的模板,3mm的孔,间距10mm,再上面一排一排的做好再焊接。用的高亮红色3mm,高度没怎么注意结果间距大有些偏高了。
驱动电路用的自制的595小板子,一共9片,8片负责纵向控制,最后一片负责8个层控制,用2803做驱动。
编了个小程序测试了一下,最终成功。焊接一定要注意焊好一排就挨个测试,都亮了再继续。要是完成了再发现不亮的就麻烦了。
附刚刚写的测试程序:
各种变换效果抽空再编写了。
又订购了双色的3mmLED,再做异形的。
// 使用 74HC595
// 接 74HC595 的 ST_CP (pin 12,latch pin)
#define latchPin 5
// 接 74HC595 的 SH_CP (pin 11, clock pin)
#define clockPin4
// 接 74HC595 的 DS (pin 14)
#define dataPin3
#define dataPin29//双色备用
const byte ta ={
{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,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);
}
}
S型扭呀扭
#include <MsTimer2.h>//定时中断的库
// 使用 74HC595
// 接 74HC595 的 ST_CP (pin 12,latch pin)
#define latchPin 5
// 接 74HC595 的 SH_CP (pin 11, clock pin)
#define clockPin4
// 接 74HC595 的 DS (pin 14)
#define dataPin3
#define dataPin29//双色备用
byte led ={
{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;
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;
}
for(int i=0;i<7;i++){ //顺序下移一层
for(int j=0;j<8;j++){
led = led;
}
}
for(int i = 0;i<8;i++){ //把缓存放入顶层
led = 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,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);
}
}
贴设计板图,上午刚弄的。打算做16*16*16双色的。估计要半年完成吧。
一个双色单元。16光立方要用32片,用64片595,再加两片层驱动。
用红蓝双色3mm雾状灯
第二个焊接练习
嗯,很赞,很久前在油管上见过这个项目。 既漂亮又实用
页:
[1]