3D LED куб - ФОРУМ ДВ Робот dvrobot.ru
Понедельник, 24.09.2018, 17:29
Главная Мой профиль Регистрация Выход
  • НАШ МАГАЗИН
  • Вы вошли как Гость | Группа "Гости"Приветствую Вас, Гость
    [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Модератор форума: GRACH, Serg  
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Библиотека Проектов » 3D LED куб (Собираем куб из набора)
    3D LED куб
    SergДата: Суббота, 20.04.2013, 18:30 | Сообщение # 1
    Ампер
    Группа: Модераторы
    Сообщений: 510
    Репутация: 28
    Статус: Offline
    3D LED куб

     Данный комплект состоит из светодиодов, соединительных клемм и платы, которая по размерам совместима с Arduino.
    Процесс сборки выглядит примерно так:

    Отгибаем короткий вывод катода в сторону. И так  всех 64 светодиодов. Затем в фанерке сверлим отверстия диаметром 3 мм. с шагом 14 мм. Вставляем светодиоды, спаиваем катоды в линию .


    Затем подкладываем карандаш, загибаем аноды вперед. Карандаш помогает сформировать изгиб на уровне, немного выше катодов и избежать замыкания. Спаиваем катоды каждого ряда  в одну линию. В итоге  получится 4 ряда анодов и 4 катодов.  Это будет один уровень- грань куба. Нужно спаять 4 таких уровня.Не забываем пользоваться флюсом- светодиоды довольно хрупкие, корпус легко плавится от перегрева. Я успел испортить парочку ((((


    Затем впаиваем соединительные клеммы.



    Вставляем грани в ссоединительные клеммы.


    Спаиваем аноды каждого уровня вместе.


    Фото крупнее.


    Еще крупнее.


    Соединяем аноды к своим клеммам.

    Прикрепления: 0046347.jpg(259.9 Kb) · 9756948.jpg(308.5 Kb) · 8250166.jpg(195.8 Kb) · 5595352.jpg(185.4 Kb) · 3941646.jpg(204.1 Kb) · 5129262.jpg(214.0 Kb) · 7974574.jpg(233.9 Kb) · 1445596.jpg(264.9 Kb)
     
    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.

    И напоследок, видео... Это лишь малая часть всех эффектов.

    Прикрепления: LedCube.zip(5.5 Kb)
     
    Ivan-771Дата: Воскресенье, 21.04.2013, 08:04 | Сообщение # 3
    5 Вольт
    Группа: Пользователи
    Сообщений: 39
    Репутация: 0
    Статус: Offline
    А теперь, самая малость, показать в работе... whistling
     
    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

    В упор не вижу где стоят начальные уровни на аналоговых выходах... uhm
     
    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 
    и все зарабтало

     
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Библиотека Проектов » 3D LED куб (Собираем куб из набора)
    • Страница 1 из 1
    • 1
    Поиск:

    ДВ Робот - Чат