Дело было вечером, делать было нечего. (с)

Дело было года 3 назад. Случайно наткнулся на одно видео LED cube 8x8x8 demo и скажу честно, оно меня впечатлило. У меня на тот момент уже давно чесались руки что-нибудь сотворить «этакое». Тогда я ещё не знал что такое Arduino, да и вообще имел смутные понятия даже как правильно подключить светодиод. Набравшись храбрости, я отправился на просторы Интернета, где достаточно быстро нашёл идеи и схемы как собирают подобные кубики, и магазин, где можно купить компоненты. Выбрал кубик 4х4х4 как оптимальный вариант для первого опыта.
Немного теории и ход размышлений:
Как зажечь светодиод?
Подать напряжение и подключить землю. Питание 5В — нужен резистор.
Как зажечь 16 диодов с возможностью зажигать по отдельности?
Нужно 16 ключей для подачи напряжения.
Как зажигать любой диод из матрицы 4х4х4?
Раскладываем матрицу на «этажи» 4 на 4. Получаем 16 ключей на напряжение по «столбам» + 4 для открытия земли на «этаже».
Итого необходимо 20 управляемых выходов некого микроконтроллера.
Паять обвязку и программировать с нуля микроконтроллер без опыта я не решился и выбрал Arduino, точнее аналог Freeduino.
Freeduino Nano v5
Микроконтроллер: ATmega328
Цифровые порты ввода/вывода: 14 портов (из них 6 с ШИМ-сигналом)
Аналоговые порты ввода: 8 портов
22 программируемых входов/выходов с напряжением +5В при логической единице — то что надо.
Материалы:
Светодиоды 64шт.
Резисторы 20 шт.
Транзисторы биполярные 4 шт.
МК: Freeduino Nano v5
Проводки, выключатель, разъёмы, макетки и прочее.
Светодиоды и Freeduino были куплены в ближайшем магазине остальное выпаяно из ближайшего блока питания или найдено где-нибудь ещё.
Итак, приступаем:
Размечаем что-либо на квадраты со сторонами 5мм на 5мм — это длина короткой из ножек светодиода.

Загибаем катод на 90 градусов — их будем спаивать в цепочку, получая «этажи» и красиво выставляем на полученную ранее матрицу-шаблон.

Далее загибаем анод (длинная нога) под небольшим углом. Это требуется чтобы удобно было спаивать «этажи»


и спаиваем всё вместе.
Пришло время тестировать.
Т.к. светодиоды были синие, нашёл синий шлейф и распустил его.

Когда это всё заработало на макетке радости не было придела.
Собираем постамент.
Так уж получилось что купил я ровно 64 светодиода и один потерялся. Магазина где можно было купить по дороге у меня нет, а доставку из-за одного диода заказывать совсем уж странно. Выход нашёлся сам собой — поставить кубик на усечённую грань! И оригинально и внешний вид только выигрывает. Коробочка от болванок как раз подошла по размерам. В неё для надёжности и возможности отключения вплавил выключатель который перекрывает землю.

Далее идут фотографии уже обновлённой версии. Первый собранный кубик пал жертвой катаклизма локального масштаба и был безвозвратно утрачен кроме базы. Для сбора обновлённой версии я уже не сгибал ножки, т.к. они очень мягкие и плохо держат форму, я отрезал их почти под корень, а соединения делал из стальной проволоки 0,9 мм из строительного магазина. Возни получилось больше, зато результат намного лучше. Более ровные грани, да и жёсткость конструкции увеличилась. Диоды уже брал у китайцев и собрал полный 4х4х4 кубик.

То, что внутри:

И результат:

Питается от любого источника на 5В. Чаще всего подключен к USB порту. Для программирования необходимо выключать кубик, чтобы не светился. т.к. были использованы выходы 0 и 1, которые также используются для программирования контроллера. При включенной иллюминации и работе программы через выходы протекает ток, что ведёт в 90% случаев к сбоям при заливки нового скетча.
Писать про Arduino IDEи приводить код не стал. Простые циклы — ничего интересного и примеров уже в Интернете очень много.
Если появится у кого-нибудь интерес, добавлю код и сниму видео.
Led Romb
Спасибо за внимание.
З.Ы. Пересматривая перед публикацией статью увидел край подставки под кружки. Чую будут вопросы «что под кружкой?».
Вот:

Склеено клеевым пистолетом.


Дело было года 3 назад. Случайно наткнулся на одно видео LED cube 8x8x8 demo и скажу честно, оно меня впечатлило. У меня на тот момент уже давно чесались руки что-нибудь сотворить «этакое». Тогда я ещё не знал что такое Arduino, да и вообще имел смутные понятия даже как правильно подключить светодиод. Набравшись храбрости, я отправился на просторы Интернета, где достаточно быстро нашёл идеи и схемы как собирают подобные кубики, и магазин, где можно купить компоненты. Выбрал кубик 4х4х4 как оптимальный вариант для первого опыта.
Немного теории и ход размышлений:
Как зажечь светодиод?
Подать напряжение и подключить землю. Питание 5В — нужен резистор.
Как зажечь 16 диодов с возможностью зажигать по отдельности?
Нужно 16 ключей для подачи напряжения.
Как зажигать любой диод из матрицы 4х4х4?
Раскладываем матрицу на «этажи» 4 на 4. Получаем 16 ключей на напряжение по «столбам» + 4 для открытия земли на «этаже».
Итого необходимо 20 управляемых выходов некого микроконтроллера.
Паять обвязку и программировать с нуля микроконтроллер без опыта я не решился и выбрал Arduino, точнее аналог Freeduino.
Freeduino Nano v5
Микроконтроллер: ATmega328
Цифровые порты ввода/вывода: 14 портов (из них 6 с ШИМ-сигналом)
Аналоговые порты ввода: 8 портов
22 программируемых входов/выходов с напряжением +5В при логической единице — то что надо.
Материалы:
Светодиоды 64шт.
Резисторы 20 шт.
Транзисторы биполярные 4 шт.
МК: Freeduino Nano v5
Проводки, выключатель, разъёмы, макетки и прочее.
Светодиоды и Freeduino были куплены в ближайшем магазине остальное выпаяно из ближайшего блока питания или найдено где-нибудь ещё.
Итак, приступаем:
Размечаем что-либо на квадраты со сторонами 5мм на 5мм — это длина короткой из ножек светодиода.

Загибаем катод на 90 градусов — их будем спаивать в цепочку, получая «этажи» и красиво выставляем на полученную ранее матрицу-шаблон.

Далее загибаем анод (длинная нога) под небольшим углом. Это требуется чтобы удобно было спаивать «этажи»


и спаиваем всё вместе.
Пришло время тестировать.
Т.к. светодиоды были синие, нашёл синий шлейф и распустил его.

Когда это всё заработало на макетке радости не было придела.
Собираем постамент.
Так уж получилось что купил я ровно 64 светодиода и один потерялся. Магазина где можно было купить по дороге у меня нет, а доставку из-за одного диода заказывать совсем уж странно. Выход нашёлся сам собой — поставить кубик на усечённую грань! И оригинально и внешний вид только выигрывает. Коробочка от болванок как раз подошла по размерам. В неё для надёжности и возможности отключения вплавил выключатель который перекрывает землю.

Далее идут фотографии уже обновлённой версии. Первый собранный кубик пал жертвой катаклизма локального масштаба и был безвозвратно утрачен кроме базы. Для сбора обновлённой версии я уже не сгибал ножки, т.к. они очень мягкие и плохо держат форму, я отрезал их почти под корень, а соединения делал из стальной проволоки 0,9 мм из строительного магазина. Возни получилось больше, зато результат намного лучше. Более ровные грани, да и жёсткость конструкции увеличилась. Диоды уже брал у китайцев и собрал полный 4х4х4 кубик.

То, что внутри:

И результат:

Питается от любого источника на 5В. Чаще всего подключен к USB порту. Для программирования необходимо выключать кубик, чтобы не светился. т.к. были использованы выходы 0 и 1, которые также используются для программирования контроллера. При включенной иллюминации и работе программы через выходы протекает ток, что ведёт в 90% случаев к сбоям при заливки нового скетча.
Писать про Arduino IDE
Скетч ромбика
/* Rombik Arduino. Created by Azurius */ int i,z,x,c,v,b,a,s,d; int dt = 100; int dts = 2; int nprog =1; int tmp1=0, tmp2=0, tmp3=0; int timeb=0, timew=0; int LEDM[4][4] = { 4,5,6,7, 8,9,10,11, 16,17,18,19, 15,14,12,13}; int LEDF[4] = { 3,2,0,1}; int ma[12]={ 4,5,6,7,11,19,13,12,14,15,16,8}; int mas[4]={ 0,3,12,15}; void setup() { for (i=0;i<4;i++){ for (z=0;z<4;z++){ pinMode(LEDM[i][z], OUTPUT); } } for (i=0;i<4;i++){ pinMode(LEDF[i], OUTPUT); } LedOFFAll(); //tushim vse pered nachalom } void LedON(int pin){ digitalWrite(pin, HIGH); } void LedOFF(int pin){ digitalWrite(pin, LOW); } void DotON(int kx, int ky, int kz){ LedON(LEDM[kx][ky]); LedON(LEDF[kz]); } void DotOFF(int kx,int ky, int kz){ LedOFF(LEDM[kx][ky]); LedOFF(LEDF[kz]); } void LedOFFAll(){ for (i=0;i<4;i++){ for (z=0;z<4;z++){ LedOFF(LEDM[i][z]); } LedOFF(LEDF[i]); } } void change(){ timew=millis(); if ((timew-timeb)>=10000){nprog++;timeb=millis();dt=70;} if (nprog==10) nprog=1; } void loop() { change(); //nprog = 0; //##########[## Prog 0 ############## // ALL ON if (nprog==0){ // ON begin for (c=0;c<4;c++){ LedON(LEDF[c]); for (i=0;i<4;i++){ for (z=0;z<4;z++){ LedON(LEDM[i][z]); delay(300); LedOFF(LEDM[i][z]); } } LedOFF(LEDF[c]); } } // end nprog 0 //############ Prog 1 ############## // zajigaet po ocheredi tochkami if (nprog==1){ // ON begin for (c=0;c<4;c++){ for (i=0;i<4;i++){ for (z=0;z<4;z++){ DotON(i,z,c); delay(dt); DotOFF(i,z,c); } } } } // end nprog 1 //############ Prog 2 ############## // zajigaem stolbiki po ocheredi if (nprog==2){ // ON begin for (c=0;c<4;c++){ LedON(LEDF[c]); } for (i=0;i<4;i++){ for (z=0;z<4;z++){ LedON(LEDM[i][z]); delay(dt); } } for (i=0;i<4;i++){ for (z=0;z<4;z++){ delay(dt); LedOFF(LEDM[i][z]); } } } // end nprog 2 //############ Prog 3 ############## // zajigaem etaji po ocheredi if (nprog==3) { // ON begin for (i=0;i<4;i++){ for (z=0;z<4;z++){ //LedON(LEDF[c]); LedON(LEDM[i][z]); } } for (c=0;c<4;c++){ LedON(LEDF[c]); delay(dt); LedOFF(LEDF[c]); } LedOFFAll(); } //end nprog 3 //############ Prog 4 ############## // Zmeyka po granyam if (nprog ==4){ dt=30; while(1){ x=v; v=random(0,3); if(x!=v){break;} } if(v==0){if(i==0){ for(b=0;b<4;b++){i=b;DotON(i,z,c); delay(dt); DotOFF(i,z,c);}} else{ for(b=3;b>-1;b--){i=b;DotON(i,z,c); delay(dt); DotOFF(i,z,c);}} } if(v==1){if(z==0){ for(b=0;b<4;b++){z=b;DotON(i,z,c); delay(dt); DotOFF(i,z,c);}} else{ for(b=3;b>-1;b--){z=b;DotON(i,z,c); delay(dt); DotOFF(i,z,c);}} } if(v==2){if(c==0){ for(b=0;b<4;b++){c=b;DotON(i,z,c); delay(dt); DotOFF(i,z,c);}} else{ for(b=3;b>-1;b--){c=b;DotON(i,z,c); delay(dt); DotOFF(i,z,c);}} } } //end nprog 4 //############ Prog 5 ############## // goryashie grani if (nprog == 5){ for (c=0;c<4;c++){ LedON(LEDF[c]); for (i=0;i<12;i++){ LedON(ma[i]); if (c==1 | c==2){ i=i+2; } } delay(dts); LedOFF(LEDF[c]); for (i=0;i<12;i++){ LedOFF(ma[i]); } } }// end nprog 5 //############ 6 ########### // ploskosti po ocheredi if (nprog==6){ // ON begin for (i=0;i<4;i++){ LedON(LEDM[i][0]); LedON(LEDM[i][3]); LedON(LEDF[i]); } delay(1000); LedOFFAll(); for (i=0;i<4;i++){ LedON(LEDM[0][i]); LedON(LEDM[3][i]); LedON(LEDF[i]); } delay(1000); LedOFFAll(); } //end nprog 6 //############ 7 ########### if (nprog==7){ i=random(0,4); z=random(0,4); c=random(0,4); DotON(i,z,c); delay(dt); DotOFF(i,z,c); } //end nprog 7 //############ 8 ########### if (nprog==8){ //random up i=random(0,4); z=random(0,4); v=random(0,4); b=random(0,4); a=random(0,4); s=random(0,4); LedON(LEDM[i][z]); LedON(LEDM[v][b]); LedON(LEDM[a][s]); for (c=0;c<4;c++){ LedON(LEDF[c]); delay(dt); LedOFF(LEDF[c]); } LedOFF(LEDM[i][z]); LedOFF(LEDM[v][b]); LedOFF(LEDM[a][s]); } //end nprog 8 //############ 8 ########### if (nprog==9){ //obhod po krugu LedOFFAll(); for(c=0;c<4;c++){ LedON(LEDF[c]); } for(i=0;i<12;i++){ LedON(ma[i]); delay(dt); if(i>1){LedOFF(ma[i-2]);} } } //end nprog 9 } // end loop
Led Romb
Спасибо за внимание.
З.Ы. Пересматривая перед публикацией статью увидел край подставки под кружки. Чую будут вопросы «что под кружкой?».
Вот:

Склеено клеевым пистолетом.

