3D LED куб
|
|
Serg | Дата: Суббота, 20.04.2013, 18:30 | Сообщение # 1 |
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| 3D LED куб Данный комплект состоит из светодиодов, соединительных клемм и платы, которая по размерам совместима с Arduino. Процесс сборки выглядит примерно так:
Отгибаем короткий вывод катода в сторону. И так всех 64 светодиодов. Затем в фанерке сверлим отверстия диаметром 3 мм. с шагом 14 мм. Вставляем светодиоды, спаиваем катоды в линию .
Затем подкладываем карандаш, загибаем аноды вперед. Карандаш помогает сформировать изгиб на уровне, немного выше катодов и избежать замыкания. Спаиваем катоды каждого ряда в одну линию. В итоге получится 4 ряда анодов и 4 катодов. Это будет один уровень- грань куба. Нужно спаять 4 таких уровня.Не забываем пользоваться флюсом- светодиоды довольно хрупкие, корпус легко плавится от перегрева. Я успел испортить парочку ((((
Затем впаиваем соединительные клеммы.
Вставляем грани в ссоединительные клеммы.
Спаиваем аноды каждого уровня вместе.
Фото крупнее.
Еще крупнее.
Соединяем аноды к своим клеммам.
|
|
| |
Serg | Дата: Суббота, 20.04.2013, 21:27 | Сообщение # 2 |
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| Программа
Код #include <LedCube.h>
#define SIZE 4 // кубик из 4 индикаторов #define COLS (SIZE*SIZE)// размерность кубика 4*4
byte levelPins [SIZE]= {16,17,18,19};// Аналоговые входы A2,A3,A4,A5. Их подключаем к этажам кубика byte colPins [COLS]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};// Цифровые пины D0-D13, аналоговые пины A0,A1
LedCube cube(SIZE, levelPins, colPins);
void setup () { }
void loop () { delay(10); // Одиночное свечение уровней for(byte level=0; level<cube.getLevels(); level++) { for(byte col=0; col<cube.getCols(); col++) { cube.lightPulse(level, col, 100); } } // Увеличение скорости переключения уровней for(byte d=25; d>2; d-=2) { for(byte l=1; l <= cube.getLevels(); l++) { cube.lightLevel(l, d); } } // одиночное свечение в уровнях for(byte level=1; level<=cube.getLevels(); level++) { for(byte row=1; row<=cube.getLevels()*2; row++) { cube.lightRow(row, level); } } // Свечение в каждом уровне for(byte i=3; i; i--) { for(byte row=1; row<=cube.getLevels()*2; row++) { cube.lightPlane(row, 10*i); } } // Одиночное свечение cube.randomLight(random(25,100),100); // Падение столбиков for(byte x=0; x<=15; x++) { cube.lightDrop(random(0,cube.getCols()), random(50,150)); } // Круговое свечение for(byte x=0; x<=5; x++) { cube.lightPerimeter(random(0,cube.getLevels()), random(1,5), random(25,100)); } // Свечение граней byte planes[] = {cube.getLevels()+1,cube.getLevels(),cube.getLevels()*2,1}; for(byte i=5; i; i--) { for(byte p=0; p<sizeof(planes); p++) { cube.lightPlane(planes[p], 5*i); } } // Случайное переключение cube.randomColumn(25); // Случайные столбики cube.enableBuffer(); for(byte c=0; c<30; c++) { cube.fillBuffer(); cube.invertBuffer(); cube.randomColumn(); cube.drawBuffer(7); } cube.enableBuffer(false); // столбики for(byte c=1, d=0; c<=10; c++) { if(c%2 == 0) { for(d=0; d<20; d++) { cube.lightColumn(2,1); cube.lightColumn(4,1); cube.lightColumn(6,1); cube.lightColumn(8,1); } } else if(c%4 == 1) { for(d=0; d<30; d++) { cube.lightColumn(1,1); cube.lightColumn(3,1); cube.lightColumn(7,1); cube.lightColumn(9,1); } } else { for(d=0; d<70; d++) { cube.lightColumn(5,1); } } } // Бриллиантовое мерцание byte diamond[] = {0,4, 1,1, 1,3, 1,4, 1,5, 1,7, 2,4}; byte box[] = { 2,0, 2,1, 2,2, 2,3, 2,5, 2,6, 2,7, 2,8, 1,0, 1,2, 1,6, 1,8, 0,0, 0,1, 0,2, 0,3, 0,5, 0,6, 0,7, 0,8 }; cube.lightSequence(box, sizeof(box), 200); cube.lightSequence(diamond, sizeof(diamond), 400); // Эффект пропеллера byte topSeq[8] = {0,3,6,7,8,5,2,1}; byte botSeq[8] = {8,5,2,1,0,3,6,7}; for(byte loops = 0, delay = 50; loops<=8; loops++) { for(byte s=0; s<8; s++) { byte seq[] = {2,topSeq[s], 1,4, 0,botSeq[s]}; cube.lightSequence(seq, sizeof(seq), delay); } if(loops < 5) delay-=10; else delay += 10; } // Отключение по переполнению cube.enableBuffer(); cube.fillBuffer(); cube.drawBuffer(25); for(byte w=0, l, c, max = cube.getNumLights(); w<max; ) { // Все уровни, кроме верхнего l = random(0, cube.getLevels()); c = random(0, cube.getCols()); if(cube.getBufferAt(l,c) == HIGH) { cube.lightOff(l,c); cube.drawBuffer(5); w++; } } cube.enableBuffer(false); } Для программы была использована готовая библиотека, адаптированная под наш набор. Скачать ее можно по ссылке ниже, а затем скопировать в папку arduino\libraries.
И напоследок, видео... Это лишь малая часть всех эффектов.
|
|
| |
Ivan-771 | Дата: Воскресенье, 21.04.2013, 08:04 | Сообщение # 3 |
 5 Вольт
Группа: Пользователи
Сообщений: 39
Репутация: 0
Статус: Offline
| А теперь, самая малость, показать в работе...
|
|
| |
Trooper_OK | Дата: Суббота, 04.05.2013, 18:34 | Сообщение # 4 |
 5 Вольт
Группа: Пользователи
Сообщений: 52
Репутация: 20
Статус: Offline
| На Меге 2650 аналоговые выходы- пины такие же ?Собрал, не пошло ,пока на ряды +5 не подашь. Столбики ,подключенные к аналоговым A0,A1 тоже не светятся.. .попробовать инвертировать уровни с низкого на высокий ?
|
|
| |
Serg | Дата: Суббота, 04.05.2013, 19:30 | Сообщение # 5 |
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| А плата куба правильно вставлена в разъем Меги? Ее нужно вставлять в разъемы, которыt ближе к USB.
|
|
| |
Trooper_OK | Дата: Суббота, 04.05.2013, 19:57 | Сообщение # 6 |
 5 Вольт
Группа: Пользователи
Сообщений: 52
Репутация: 20
Статус: Offline
| да,выводы аналоговые прозваниваються отплаты до светодиодов.Переставил перемычки и в скетче поменял аналоговые пины на цифровые 50-53 - завелось.
Сообщение отредактировал Trooper_OK - Суббота, 04.05.2013, 19:58 |
|
| |
Serg | Дата: Суббота, 04.05.2013, 20:37 | Сообщение # 7 |
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| Поздравляю! Можете видео выложить?
|
|
| |
Trooper_OK | Дата: Суббота, 04.05.2013, 21:01 | Сообщение # 8 |
 5 Вольт
Группа: Пользователи
Сообщений: 52
Репутация: 20
Статус: Offline
| В левом углу видно как неработают столбики, подключенные к пинам A0,A1
|
|
| |
Serg | Дата: Суббота, 04.05.2013, 21:06 | Сообщение # 9 |
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| А почему не работают?
|
|
| |
Trooper_OK | Дата: Суббота, 04.05.2013, 21:24 | Сообщение # 10 |
 5 Вольт
Группа: Пользователи
Сообщений: 52
Репутация: 20
Статус: Offline
| Во время работы на них должен быть высокий уровень - а там - лог.0. не нашел где поменять уровень LOW на HIGH
|
|
| |
Serg | Дата: Суббота, 04.05.2013, 21:37 | Сообщение # 11 |
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| в 6 и 7 строке программы определятся выводы low - high
|
|
| |
Trooper_OK | Дата: Суббота, 04.05.2013, 21:46 | Сообщение # 12 |
 5 Вольт
Группа: Пользователи
Сообщений: 52
Репутация: 20
Статус: Offline
| byte levelPins [size]= {16,17,18,19};// Аналоговые входы A2,A3,A4,A5. Их подключаем к этажам кубика byte colPins [COLS][/size]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};// Цифровые пины D0-D13, аналоговые пины A0,A1
В упор не вижу где стоят начальные уровни на аналоговых выходах...
|
|
| |
Serg | Дата: Суббота, 04.05.2013, 21:49 | Сообщение # 13 |
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| 4 пина- высокий уровень 16 пинов- низкий уровень Логические выводы на этих уровнях я прописал в подключаемой библиотеке LedCube.h. В самой программе о них ни слова. Это позволяет назначить абосолютно любые выводы и любой другой размер кубика.
|
|
| |
Trooper_OK | Дата: Суббота, 04.05.2013, 21:55 | Сообщение # 14 |
 5 Вольт
Группа: Пользователи
Сообщений: 52
Репутация: 20
Статус: Offline
| получается A2,A3,A4,A5 и так должны быть в "1" состоянии...по факту - 0
|
|
| |
Serg | Дата: Суббота, 04.05.2013, 22:07 | Сообщение # 15 |
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| На них ноль и должен быть. Высокий уровень только в момент зажигания светодиода. Можно переназначить на свободные цифровые выводы и протянуть перемычки.
|
|
| |
Trooper_OK | Дата: Суббота, 04.05.2013, 22:15 | Сообщение # 16 |
 5 Вольт
Группа: Пользователи
Сообщений: 52
Репутация: 20
Статус: Offline
| Я так и сделал )))) некрасиво только ))) да и 2 столбика левые не светятся...
|
|
| |
Serg | Дата: Суббота, 04.05.2013, 22:20 | Сообщение # 17 |
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| Ну значит эти столбики на другие выводы перенести
|
|
| |
Trooper_OK | Дата: Суббота, 04.05.2013, 22:39 | Сообщение # 18 |
 5 Вольт
Группа: Пользователи
Сообщений: 52
Репутация: 20
Статус: Offline
| Думаю и софтово можно подправить ))) поищу другие примеры- может заработает с стандартной распайкой платы
|
|
| |
Serg | Дата: Суббота, 04.05.2013, 22:46 | Сообщение # 19 |
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| как вариант-эти выводы неисправны. можно попробовать сделать мигание светодиодом на этот выводы из стандартного примера Blink и проверить их исправность.
|
|
| |
Trooper_OK | Дата: Суббота, 04.05.2013, 22:55 | Сообщение # 20 |
 5 Вольт
Группа: Пользователи
Сообщений: 52
Репутация: 20
Статус: Offline
| Пины рабочие - напряжения с резисторов читаю в монитор. что то значит с библиотекой
|
|
| |
Serg | Дата: Суббота, 04.05.2013, 23:09 | Сообщение # 21 |
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| Пины рабочие в режиме входов АЦП. А в программе они используются в режиме цифровых выходов. Билиотеку легко проверить- переназначить на другие пины неработающие столбики. Хотя и возможна какая то несовместимость с мк 2650.
|
|
| |
Trooper_OK | Дата: Воскресенье, 05.05.2013, 00:32 | Сообщение # 22 |
 5 Вольт
Группа: Пользователи
Сообщений: 52
Репутация: 20
Статус: Offline
| проверил в режиме цифровых выходов- светодиоды мигает. Добавлено (05.05.2013, 00:32) --------------------------------------------- Ошибка была в скетче исправил byte levelPins [size]= {A2,A3,A4,A5};// Аналоговые входы A2,A3,A4,A5. Их подключаем к этажам кубика byte colPins [COLS][/size]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,A0,A1};// Цифровые пины D0-D13, аналоговые пины A0,A1 и все зарабтало
|
|
| |