Помогите улучшить led cube 4x4x4
- Войдите на сайт для отправки комментариев
Всех с наступившим!
Уважаемые, помогите идиоту, пожалуйста. Я только недавно начал ковыряться с Ардуино и ещё мало чего знаю и понимаю. Но у меня уже получилось собрать и запрограммировать свои 3х3х3 и 4х4х4 кубики. И захотелось мне большего: очень хочется к кубику х4 прикрутить микрофон (имеется), чтобы кубик светился в зависимости от громкости звука. Но возникла проблема: на моей Freaduino UNO v1.8.1 заняты все 20 портов под светодиоды и некуда приткнуть микрофон :(
Собственно, вопрос: можно ли как-то это решить?
Если что, у меня есть ещё один совсем китайский аналог UNO, у которого на корпусе написано DCcEle DCcduino UNO. Работает сие чудо аналогично фридуинке. Может как-то их вместе связать? Например, передать управление слоями китайцу, высвободив тем самым на фридуинке 4 порта под датчики? Только опять вопрос: как это сделать?
P.S.: поиском пользовался. Но либо я тупой, либо искать совсем не умею :) Если кому интересно, готов поделиться скетчем собственной разработки для х4 кубика.
Заранее спасибо за терпение и ответ.
http://arduino.ru/forum/apparatnye-voprosy/kakoi-maksimalnyi-tok-cherez-...
Эту тему я видел, спасибо. Ваш ответ там тоже прочитал. 5940 и 7219 под рукой нет, зато в загашнике обнаружился 74HC595N. Вы упоминали его по ссылке. Не подскажете, как его прикрутить к х4 кубику? Я сейчас буду насиловать Гугл на эту тему, но мало ли тут быстрее подскажет кто :)
Так, кажется я сам нашёл ответ :) http://arduino.ru/Tutorial/registr_74HC595
Буд пробовать. jeka_tm, спасибо за наводку!
Не, видимо я тупой :(
Подключил 74HC595 к своему кубику, освободив тем самым 1 вывод ардуинки. Но что-то я делаю не так... 4 контакта, отвечающих за слои кубика я подключил к 74HC595 (по http://arduino.ru/Tutorial/registr_74HC595). Попытался адаптировать свой скетч под новые условия и обломался по полной программе...
Вот такой код БЕЗ 74HC595 работает как надо:
С 74HC595 попробовал начать с простого:
В результате, при Layer = 0 горят все 4 слоя в первых 4 столбцах. Добавляя digitalWrite(LEDPin[X],HIGH) зажигаю выбранный столбец... Стоит написать Layer = 1, и начинаются чудеса: слои начинают загораться/гаснуть и постепенно все слои гаснут совсем. Возвращаю Layer = 0 и слои один за другим загораются снова, после чего опять горит первая плоскость...
Я не понимаю, что я делаю не так :( Помогите, пожалуйста, разобраться!
много кода читать. может стоит начать со схемы как было как стало
Было так (несколько кривых фоток получившегося девайса):
Вот по этому рисунку делал (сорри, картинка большевата для вставки).
Стало так:
Схему из статьи собирать пробовал - всё заработало...
ну оформи ты нормально. нарисуй схемы
Тогда подскажите, в чём вы красивые схемы рисуете? А то у меня только Paint/Photoshop да Visio есть. Но в них это будет долго и страшно.
splan например
Уфффффф. Блин, я схему рисовал дольше, чем паял этот кубик :) Получилось криво, простите, но, хочется верить, достаточно понятно: схема. Рисовал в sPlan 7.0.0.9, если что. Столбцы - это аноды светодиодов (к ним припаяны резисторы на 43 Ом, на схеме уже сил не было рисовать, простите), слои - катоды светодиодов. Светодиоды использованы вот такие.
Так лучше? Простите, но я схемы не рисовал никогда раньше (кроме как от руки) и у меня это плохо получается. Я бы лучше сайт с нуля поднял :(
вообще то в программе есть экспорт графики
но из этого я понял что каждый светодиод из слоя идет на свой пин, и например анод. и все аноды объеденены в столбце
а катоды объеденены у каждого слоя, чтобы включать нужные слои
для начала стоит сделать так. 2 74HC595 управляют одним слоем. катоды пока просто за земле (резисторы не показывал, надеюсь они у тебя есть или ты поигрался с питанием чтобы не попалить порты)
когда научишься управлять одним слоем добавляются остальные. каторы черзе полевики к земле. управлять ими лучше пинами ардуины чтобы не тормозило
контакты я просто указал. сделай как тебе удобнее. схему последовательного соеденения я думаю ты уже знаешь, так что ее тоже не рисовал
Спасибо! Направление понял. Как раз сгонял в магазин и купил ещё несколько 74HC595, да прочей мелочи. Буду пробовать.
Я вернулся с продолжением дурацкого вопроса :) После долгих мучений у меня получилось по совету jeka_tm подключить свой кубик с Ардуинке с использованием двух 74HC595. Я даже научился зажигать светодиоды в одном столбце. Только вот дальше снова затык из-за слабых знаний C/C++ и вообще слабых навыков программирования.
Вот такой код последовательно зажигает отдельные столбцы светодиодов:
Если вместо цикла
для thisLed задавать конкретное значение от 0 до 15, то зажигается выбранный столбец. Но у меня никак не получается зажечь одновременно несколько столбцов! Если я пишу
то вместо зажигания угловых столбцов, получаю горящий последний столбец и мигающие остальные угловые. Причём, даже если я часть void loop оставляю вот такой:
то всё равно столбцы зажигаются последовательно по одному... Я уже весь моск себе свернул, пытаясь понять этот прикол.
Собственно, вопрос: подскажите, как зажечь несколько столбцов одновременно?
После этого начну думать, как бы зажигать эти столбцы через терминал ардуиновский... А потом, если не свихнусь, буду сюда же bluetooth прикручивать для управления кубиком с телефона. Но это пока совсем заоблачная мечта :(
а если массив организовать 4 на 4 boolean
менять в нем значения и массив целиком отправлять. так и проще для понимания, и программировать
А можно с примером кода? Я же говорю, я почти полный ноль в программировании. Из школы остались смутные представления о Бейсике, в институте программирования практически не было, работая учителем пришлось чуть столкнуться с Паскалем, но... Мне как-то проще понять, разбирая конкретный код.
Если не трудно, покажите пример. Я-то сейчас пойду Гугл опять мучить на эту тему, но мало ли не найду нужного :)
Спасибо за помощь и терпение!
UPD: про сами массивы я почитал, но всё же не понял, как "организовать массив 4 на 4 boolean" :(
можно одномерный, можно двумерный. я например сделал одномерный, но для понимания оформил в виде 4х4
что то вроде этого должно получится
Чуть пришлось похимичить с кодом, а то ругалось на ошибки. В результате получилось вот так:
Беда в том, что нормально оно теперь реагирует только на 1 в указанных местах, зажигая при этом 8-й и 16-й столбцы (или один из них, если поставить одну 1). На единички в других местах не реагирует.
хз че у меня ругается. попробуй у себя откомпилировать
Вот в таком виде заработало:
Собственно, теперь получается зажигать нужные столбцы, супер! Не совсем понял, как именно оно работает, но буду разбираться дальше. Сейчас перепишу свои эффекты для кубика и буду пытаться присобачить сюда, например, микрофон. Чтобы от громкости звука срабатывали разные слои кубика.
так что ему не нравилось? что пины не через const int объявлены? если да то странно
работает просто. есть массив из 16 битов. потом просто собирается в одну переменную int (2 байта = 16 бит)
затем отправляется. сначала первый байт из 2 байтов, потом второй
и в массиве не слои, а строки или столбцы. весь массив этой слой. хотя как сделаешь конечно
но если слои горизонтально расположены то массив это слой
Стоит поменять объявление пинов на #define и его сразу начинает колбасить.
Так, я снова подвис. А как теперь динамически менять значение массива? Хотя... *ушёл пробовать*
UPD: да, там не слои. Я неудачно написал. Правильнее было бы написать так: строка 1 (ряды 1-4), строка 2 (ряды 5-8)...
тогда не так, а так
строка 1 (светодиоды 1-4), строка 2 (светодиоды 5-8)...
объяви это дело в функцию так. вроде так массив передается. может и не так
может надо объявлять массив byte и тогда будет работать. надо проверять
а значение массива менять просто mass[1] = 1; и это дело в цикл
массив по большому счету тебе нужен в начале. если будет какой нибудь конвертер картинок то массив не нужен, а все данные можно хранить в int как DATA
Я свихнусь с этим кубиком :(
Переткнул провода в схеме правильно и теперь массив нормально показывает зажигаемые светодиоды. Но появился новый вопрос:
Данный код последовательно зажигает вертикальный слой от одной стороны кубика к другой и обратно. После этого в монитор порта выводятся сплошные нули (и для массива, и для DATA). Вопрос: почему он не выполняет следующую часть программы и не повторяет потом программу заново? Пробовал всё это помещать в конструкцию
как делал при прямом подключении кубика к ардуинке - нифига не меняется.
хз. сам голову ломай. я с кубами не занимался. самое главное я тебе дал
:) Я не теряю надежду, что кто-нибудь ещё сюда заглянет и подскажет мысль дельную
jeka_tm, огромное спасибо за помощь!
Всем привет!
Благодаря помощи jeka_tm и одного моего старого знакомого, удалось сделать вот такое: https://www.youtube.com/watch?v=lGUCWdvnb0s
В описании к видео есть ссылка на код программы, но, на всякий случай, приведу её и здесь:
Постарался максимально прокомментировать код. Надеюсь, получилось нормально. Буду рад комментариям и замечаниям по данной программе!
Спасибо за внимание :)
UPD: забыл один момент. Пришлось подключить к ардуинке внешний БП от старого роутера, кажется, (12 В, 1 А). Связано это с тем, что, при питании от USB, когда загоралось много светодиодов, экран заметно терял яркость. С внешним БП такого не происходит. Если не ошибаюсь, USB всего 0,5 А выдаёт, чего явно было маловато моему чудовищу.
Здравствуйте, воспольщоалсявашим последнимкодом и есь проблема ((( почему-то не все светодиоды загораются, хотя замыканий нет. что может быь не так??
Здравствуйте, воспольщоалсявашим последнимкодом и есь проблема ((( почему-то не все светодиоды загораются, хотя замыканий нет. что может быь не так??
Как нистранно да (((
Вот так светодиоды подключены у меня в итоговой версии кубика. Возможно, у вас они подключены как-то иначе или не к тем пинам?
Вот последняя рабочая версия кода:
Попробуйте так.
Спасибо, попробую
Попробовал, ерунда какая-то, теперь лругие смветодиоды не работают (( - вы какой блок питания использовали??? У меня 5 v, 0,7 А
Если у вас всё так же, как у меня (с экраном), но лучше стоит взять помощнее БП. Я взял на 12 В / 1 А (от старого роутера D-Link, кажется). При 5 В БП у меня экран "проседал", когда все светодиоды загорались и Ардуинка временами в ребут убегала.
Да, ещё момент: у вас к 74HC595 всё подключено как у меня? Может здесь что-то не туда подключили? У меня такое было с POV-палочкой. Перепутал порядок подключения светодиодов и половина рисующейся буквы была перевёрнута :)
Не пробовали такой код переделывать как здесь http://www.instructables.com/id/The-4x4x4-LED-cube-Arduino/?ALLSTEPS ??? Ато здесь эффекты нравяться, а как сделать через сдвиговые регистры пока не знаю
Видел эту статью и программу-генератор, но не пробовал. Пока не до этого сейчас :( Скорее всего, все издевательства дальнейшие над этим кубиком будут уже летом.
выкладываю на всякий случай
Спасибо!
Только я не совсем понял: там написано "RGB куб", это правильно? Я, видимо, туплю конкретно, но не могли бы вы более подробно про него написать или ссылочкой поделиться? А то я плату вижу, но не очень понимаю что куда подключается и как это потом программится :)
))) да ошибочка. обычный куб. ссылка
программа позже будет, хз когда. схема как здесь пины только другие. и управление слоями также через регистр+полевики
светодиоды 5мм. собирается так. делается пластина из чего нибудь. сверлятся отверстия под корпус светодиода, чтобы они туда вставали пластиковой частью. шаг 13мм, выбран изза длины выводов, чтобы доп. проводников было поменьше
сначала если держать так светодиод от себя "под корень" под углом 90 градусов согнуть. затем плюсовой загнуть обратно в месте пересечения плюса и края корпуса светодиода. в итоге если светодиод держать вертикально минусы будут горизонтально а плюсы вертикально. минусы спаиваются. плюсы для припаивания к следующему слою. для жесткости минусы пропаиваются поперек тремя проволочками
картинка вид светодиодов снизу. самый нижний слой впаивается в плату
Спасибо!
да смысл тебе собирать. у тебя уже все сделано и работает))
это я изобретаю велосипед
Ну, вдруг я когда-нибудь решу другой кубик сделать :)
Правда, сначала надо бы разобраться с перепрошивкой ESP8266...
так у тебя уже вроде 2шт))) про перепрошивку не подскажу. знаю что через uart вроде прошивается
Не совсем 2 :) Один 3*3*3 и один 4*4*4.
А ещё у меня вот такое появилось: http://habrahabr.ru/post/258955/
да ты смотрю увлекся кубиками))
Не только кубиками :) http://alninyo.ru/news/54/
ссылка не работает
а нет. блокирует)
Не, это сервак упал :) Сервак домашний, под столом у друга в Москве стоит. Иногда падает :(
ну вот и мой куб заработал на 3шт 74HC595. используется 3 ноги ардуины
хардварный spi не стал делать, и так никаких морганий не увидел, а биты переставлять не хотелось, так как изза особенностей платы пришлось половину из двух байт разворачивать. да и еще управление слоями у меня 3 и 4 не по порядку, просто так спаять было удобнее
https://www.youtube.com/watch?v=TMSEihyWA2I
рисовать в этой программе
https://yadi.sk/d/3Pupj8oxhHrrF
скопировать получившийся массив в код и он будет отображаться
есть математические способы построения различных эффектов, но врядли руки дойдут. вот код, может кто то захочет приделать
эффекты писал не я. где то скопировал
Вот последняя рабочая версия кода:
Не могу понять как управлять диодами. А именно "int data" && "unsigned int start, int mask"
как расчиать нужное число что бы горели нужные мне диоды? например 4 центральных, или по диагонали. и т.д вообще не понимаю с этими цифрами)
как расчиать нужное число что бы горели нужные мне диоды? например 4 центральных, или по диагонали. и т.д вообще не понимаю с этими цифрами)
1 0 0 1
0 0 0 0
0 0 0 0
1 0 0 1
Записываем это состояние как число в двоичной системе (от 1 светодиода к 16-му): 1001000000001001. Переводим число в десятичную систему и получаем 36873. Это число и пишем как data.
UPD: только центральные - число 1632. Диагонали - число 38505.
Надо бы как-то это переделать в более человеческий вид. Только как-то не до того пока. Работает и ладно. Вот скоро сделаю кубик 5*5*5 (может быть), тогда и буду программить его как-то правильнее, что ли.