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


    Спасибо за внимание.

    З.Ы. Пересматривая перед публикацией статью увидел край подставки под кружки. Чую будут вопросы «что под кружкой?».
    Вот:

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

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 37

      +5
      Было бы хорошо добавить скетч и видео работы куба в пост.
        +1
        Видео добавил. Скетч уже завтра.
        +1
        Добавил скетч. Как и говорил — ничего интересного. Раз в полгода — год что-то меняю, добавляю, удаляю.
        +5
        Поролон! Какая замечательная идея. Я мучилась с доской.
          +2
          Я тоже с доской (кубик 8х8х8), только не мучился %) А еще мне достался какой-то кривой китайский контроллер, который с разбегу не программируется. В общем, жду долгих зимних вечеров, чтобы с этим разобраться.

          Тут видео процесса сборки-пайки слоя, если кому интересно

            0
            что за чудо-паяльник?
              0
              Самый обычный китайский, с алиэкспресса. С довольно-таки абстрактным терморегулятором (градуировка там совершенно от балды) и со сменными наконечниками удивительно нестандартного размера (ни один комплект насадок не подошел, в том числе, купленный у того же продавца).
          0
          Так и до голограммы недалеко
          А вообще, видео не помешало бы
            0
            Вряд ли можно сделать такой дисплей, скажем, хотя бы 300*300*300 — посчитайте, сколько нужно светодиодов и какого это будет размера. Да и управлять надо будет каждым светодиодом отдельно, значит, схема крайне усложняется и нужен какой-то контроллер.
              0
              А как работают диодные мониторы? Контроллёр правит десятками тысяч диодов
            0
            Любой диод из матрицы 4х4х4 конечно зажечь так можно, но далеко не все комбинации таким способом можно реализовать. Или я ошибаюсь?
              +1
              динамическая индикация
                0
                Светодиод светит ещё какое-то время после прекращения подачи питания (инертность люминофора), ну а дёргать даже кубик 8*8*8 и даже не напрямую такой кучей ножек контроллера, а через сдвиговые регистры, вполне реально так, чтобы человеческий глаз не заметил подвоха.
                  +1
                  <Зануда>
                  В светодиодах нет люминофора. Исключение иногда составляют сверхъяркие белые.
                  </Зануда>
                    0
                    Но даже высокочастотное моргание светодиода глаз воспринимает, в силу собственной инертности, как непрерывное свечение.
                +27
                Я вот тогда не поленился заказать 1000 светодиодов с ebay…

                Осторожно, 3 месяца кропотливой работы с паяльником по вечерам

                  +1
                  С софтом что делали? Я заказал кит из китая, собрал, пару месяцев пишу свою супер-либу для кубиков, все никак не допишу. Думаю если зимой будет нечего делать 5к заказать, для куба на 16.
                    0
                    Так в том мануале на www.instructables.com/id/Led-Cube-8x8x8/ же есть прошивка. Я ее и брал. Просто через какой-то программатор за 50 рублей прошил. Даже заработало.
                      +2
                      А, понял, не разобрал по видео, думал с компа эффекты идут. Я пошел в другую сторону — это же теплый светодиодный восьмибитный 3d-дисплей. Можно показывать часы, погоду, нотификацию почты, эквалайзер, использовать под тетрис, змейку и т.д. Играться в связке с компом мне показалось повеселей, поэтому интересуюсь не писал ли кто чего для этого.
                    0
                    Очень круто.
                      +2
                      В родной школе друг вёл кружок по радиоэлектронике — у него ученики (школьники 8-10 класс) собирали кубик 8*8*8, только не по мануалу какому-то, а проектируя с нуля (естественно, совместно с ним).
                      +4
                      >Загибаем катод на 90 градусов
                      Не очень хорошо гнуть выводы вплотную к корпусу — можно повредить внутренний контакт. Даже если сразу не оторвется, то механические напряжения могут сделать это потом.
                      Правильнее сгибать вывод светодиода так, чтобы участок от корпуса до выступа и сам выступ оставались прямыми. При этом не прилагать усилия к корпусу.

                      Хотя, китайские светодиоды довольно устойчивы.
                      Не посчитайте за занудство.
                        0
                        Даже если сразу не оторвется, то механические напряжения могут сделать это потом.

                        Кстати да. Включал свой куб спустя месяц, пара светодиодов перестало работать.
                          +1
                          в диодах с линзой 5мм достаточно большой кусочек ножки запаян в корпус. Вполне хватает чтобы без усилия согнуть. Вот крутить согнутую ножку это уже плохая идея.
                          +1
                          Неплохо, но в перспективе к такому камню можно например и FFT/FHT преобразование прикрутить, для зрелищности. Думаю свободного места внутри дофига осталось.
                            0
                            Места полно. Но я скорее буду прикручивать всякие уведомления с компьютера. Почта, погода, да и бинарные часы никто не отменял. Если вообще буду. Любая поделка должна приносить удовольствие, а мне просто нравится как моргают диоды. :)
                            0
                            Очень аккуратная работа. Мой же куб получился ужасно кривой, что даже не хочется это показывать :)
                              0
                              Расскажите как RGB кубики собирать. Я в свое время что то придумал, но застрял на этапе распрямления стальной проволоки, продваемой в катушках, отложил и так пока к этому и не вернулся.
                              Со своей стороны дарю идею: Для хорошего смешения цветов, лучшего вида и увеличения конструкции без увеличеия числа диодов — идеально подходит простая вата.
                                0
                                типа такого?



                                при RGB просто параллельно идут дополнительные линии. Очень сильно страдает внешний вид — хуже видны внутренние диоды.
                                  0
                                  www.youtube.com/watch?v=zS5oZPJVh_o
                                  вот, кстати, RGB кубик с мануалом
                                    0
                                    по ссылке сделано неоптимально, автор сам об этом говорит.

                                    >>Очень сильно страдает внешний вид — хуже видны внутренние диоды.
                                    вот по этому я и возился с проволокой и ватой :) Вата увеличивает объем в несколько раз, смешивает и рассеивает свет. Н фоне таких плафонов проволоку не видно вообще. Правда куб до пояса получается.
                                  0
                                  Вот только сегодня была мысль, для определенных целей, запустить матрицу 10*10 ИК светодиодов на форсаже 1А, смутил временно ток в 100А :)
                                  А вообще не впечатляют эти кубы никак.
                                  Ну я не знаю, столько же лазеров и размер с комнату ©, размер с комнату и тысячии светодиодов ©, размер с комнату и 3D рисунки лазерами на стенах.
                                  Вообще круче на выбранной точке пространства, может тумана, при появлении такой технологии.
                                    0
                                    Автор, поделитесь схемой и более точным описание резисторов и транзисторов.
                                    Заранее спасибо.
                                      0
                                      Резисторы 220Ом… видно на фото… а вообще надо считать. Зависит от светодиодов.
                                      Транзисторы не вспомню. Взяты первые попавшиеся одинаковые… Подойдут любые, если с ним можно сделать транзисторный ключ… хоть реле :) будет щёлкать забавно наверно, в ущерб скорости переключения…
                                      Схемы не было ибо: 16х подключить светодиод к выходу, 4х подключить ключ к выходу…

                                    Only users with full accounts can post comments. Log in, please.