Ничего не найдено :(
    В гостях у Самоделкина! » Электроника » Arduino » Графический анализатор звука на Arduino

    Графический анализатор звука на Arduino

    Графический анализатор звука на Arduino

    Добрый вечер. Сегодня я поделюсь с вами инструкцией по изготовлению графического анализатора спектра ауди сигнала. Звучит заумно, но на практике очень крутая и красивая вещь. Этот анализатор станет отличным украшением любой вечеринки, комнаты геймера или простого человека. Я думаю вы много раз видели, как работает подобный графический анализатор. Подобные украшения есть во многих компьютерных проигрывателях, например, Winamp. Все они выглядят очень эффектно. Единственный минус – все они на экране монитора, яркости маловато и очень мелкие, тем более не будешь ведь вешать монитор на стену, подключенный к компьютеру, ради цветомузыки. Поэтому мы будем делать наш анализатор отдельным устройством. В качестве контролера, как всегда, Arduino. Сам графический анализатор будет сделан на основе ленты из адресных светодиодов WS2812. Из ленты WS2812 мы будем собирать матрицу 16х16 светодиодов. В принципе эту же матрицу можете использовать и по-другому назначения, например, для вывода текста или просто красивых эффектов, все будет зависеть от скетча, который вы зальете в Arduino.

    Ну и по мелочам нам понадобится:

    - Arduino (подойдет любая)
    - Адресные светодиоды WS2812 256 шт. (9 метров ленты, можно купить на ledrus.org)
    - Блок питания 5V минимум 3А
    - Резистор 220 Ом 1шт.
    - Резистор 10 кОм 3 шт.
    - Переменный резистор 10 кОм 1 шт.
    - Керамический конденсатор 10nF
    - Лист фанеры толщиной 3 мм
    - Лист светофильтра
    - Матовый пластик
    - Канцелярский двусторонний скотч, толщиной 9 мм.
    - Штекер стереоджек 3,5 мм 1 шт.
    - Тройник стереоджек
    - Соединительные провода
    - Стартовый профиль для ПВХ панелей толщиной 10 мм.
    - Ножовка по металлу
    - Термоклеевой пистолет
    - Набор юного «пайщика» (паяльник, припой, канифоль)

    Шаг 1 Собираем матрицу WS2812.
    Итак, начнем. Для основы возьмем фанеру толщиной 3 мм, подойдёт и 4 мм. Шестимиллиметровая будет уже слишком тяжелая. Из этой фанеры вырезаем квадрат 540 х 540 мм.


    Теперь разлинуем нашу фанерку, чтобы приклеить ленту ровно. Отступаем от верха 17 мм и проводим первую линию. Затем проводим линии через каждые 33 мм. Вдоль этих линий будем клеить ленту. От левого и правого краев отступаем 19 мм и проводим перпендикулярные линии, эти линии будут указывать на положение первого и последнего в линии светодиода.


    Для этой матрицы нам будут нужны адресные светодиоды WS2812. Я не просто так каждый раз, когда речь идет о WS2812, уточняю что они адресные. Есть люди, желающие сэкономить, и покупающие обычную ленту с RGB светодиодами. На такой ленте матрицу не сделаешь. Лента бывает разной плотности. Плотности измеряется в количестве светодиодов на метр ленты. Они бывают 30, 60, 144 светодиодов на метр. Для этой матрицы нам нужна лента плотность 30 светодиодов на метр. Матрица будет размером 16 х 16, то есть 256 светодиодов всего. Ленты надо купить 9 м, это получится 270 светодиодов, немного останется, но сомневаюсь, что вам продадут ленту ровно 256 светодиодов. Разрезаем ленту на отрезки по 16 светодиодов. Обратите внимание, у ленты есть направление. Контакт Din указывает на вход сигнала, Do – соответственно выход. Клеим первый отрезок ровно по первой линии, край первого светодиода должен совпадать с перпендикулярной линией. Если с первого раза не получится приклеить ровно, ленту можно аккуратно отодрать. В таком случае для приклеивания во второй раз, необходимо наклеить на ленту канцелярский двусторонний скотч, толщиной 9 мм. Второй отрезок клеим в обратном направлении. И так далее. В конечном итоге, если идти по направлению сигнала (от Din к Do) у вас должен получиться зигзаг. Приклеив все 16 полос в зигзаге образном порядке, можно приступить к припаиванию проводов. Контакты питания соединяем параллельно.


    Лучше всего это делать в начала полос, но не с самого края, чтобы проще было припаивать сигнальный провод. Сигнальный провод припаиваем, соединяя полоски в одну ленту. То есть от Do первой полосы к Din второй, от Do второй к Din третьей и так далее.


    К первой полосе, со стороны контакта Din, припаиваем все три провода, лучше взять с запасов. Место пайки этих провод лучше зафиксировать термоклеем, чтобы не отодрать провода в случае неожиданностей.


    Переходим к самому интересному. Нам нужно накрыть светодиоды, чтобы получить нормальный внешний вид, и рассеивать яркий свет светодиодов. Здесь нам понадобится лист пластика размером 540 х 540 мм. Толщина пластика 2 - 5 мм. Пластик должен быть матовый или, как его иногда называют, «молочный». Такой пластик можно купить. А можно поступить как я. Найти не рабочий ЖК – телевизор или монитор. Разобрав матрицу одного из таких устройств, можно добыть из него рассеиватель или светофильтр


    А также из такой матрицы можно достать пластик, подходящий для нашей матрицы


    При резке пластика, не используйте электролобзик. Так как при резке электролобзик, пластик будет сильно греться и плавиться. И куски пластика, налипшего на полотно для резки, будут ломать заготовку. Резать надо аккуратно, медленно, ручной ножовкой по металлу, так как на такой ножовке, мелкие зубцы. Накрываем светодиоды, вначале светофильтром.


    Сверху накрываем вырезанным пластиком.


    По краям, нашей почти готовой матрицы, надеваем стартовый профиль для ПВХ панелей толщиной 10 мм. Такой профиль продается в строительных магазинах. Провода от матрицы выводим через ближайший к проводам угол.


    Шаг 2 Подготовка питания.
    Светодиодная лента WS2812 очень прожорлива. Один такой светодиод при максимальной яркости и включенных всех трех цветах потребляет 0,06 А. Воспользуемся калькулятором. 256 х 0,06 = 15,36 А. Это по максимуму. В действительности максимальная яркость очень режет глаза, я в скетче ставлю яркость 15 (при диапазоне 0 – 255) и этого достаточно. Все три цвета вместе дают просто белое свечение. Поэтому тоже редко используется. Лента питается от 5 В. Я рекомендую блок питания не менее 3 А, на 5 вольт соответственно. Как минимум такой


    Если вы хотите использовать матрицу на максиму яркости или есть планы на изменение скетча, лучше взять блок питания с запасом. Я рекомендую использовать старый, но рабочий блок питания от стационарного компьютера. У него есть все необходимые напряжения, да и мощности хватит


    Нам надо лишь его немного переделать. Замыкаем зеленый провод (PC_ON) на землю GND (COM). Это нужно для включения блока питания. Можно вывести удобную кнопку, чтобы каждый раз не замыкать проводком. Фиолетовый провод- это дежурные 5 В (+5VSB), к нему нельзя подключаться, так сила тока там слишком мала. Подключаться надо к красным проводам (+5VDC). Если хотите получать и 12 B, подключайтесь к желтым проводам (+12VDC или 12V1 DC).


    Также лучше сразу вывести нужные провода в одну колодку, для быстрого подключения.


    Шаг 3 Подготовка Arduino и прочей электрики.
    Берем нашу Arduino. Нам подойдет любая версия. Я буду все делать на Arduino Nano. Нам необходимо подавать на Arduino ауди сигнал. Для этого будем разделять источник сигнала на два. Допустим мы будем брать звук от компьютера. Чтобы была возможность и прослушивать звук через колонки и анализатор работал, купим в ближайшем радиомагазине тройник стереоджека.


    Тройник вставляем в компьютер, один конец подключаем к колонкам, второй к Arduino. Собираем все по схеме.


    В конечном итоге, вместе с матрицей и блоком питания, схема будет выглядеть так.


    Шаг 4 Подготовка и заливка скетча.
    Для правки и заливки скетча вам понадобится Arduino IDE. Скачивайте ее с официального сайта.

    Теперь собственно скачиваем скетч. Заливать мы будем слегка правленый мною скетч от гуру Arduino разработки – AlexaGyver. Именно он вдохновил меня на создании этого графического анализатора.
    analiz_ws2812_16x16.rar

    Для правильной работы скетча понадобятся библиотеки. Для удобства я добавил все необходимые библиотеки в один архив. Скачиваем их все одним архивом.
    libraries.rar

    В архиве находятся следующие библиотеки: Adafruit-GFX-Library-master, arduino-Max72xxPanel-master, FastLED-master, FHT, LedControl-master, LiquidCrystal, LiquidCrystal_I2C-master. Все их необходимо скопировать в папку «libraries», находящуюся в корне директории с установленной Arduino IDE. Распаковав архив, и добавив все библиотеки в Arduino IDE, можно переходить к компиляции и заливки скетч в Arduino.


    Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

    Цветомузыка на Arduino

    Новогодняя ёлочная звезда на адресных светодиодах и ATtiny85

    8
    Идея
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    8.3
    Описание
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    8.4
    Исполнение
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Итоговая оценка: 8.21 из 10 (голосов: 11 / История оценок)

    Добавить комментарий

    28 комментариев
    maxim0512 #81405 Автор
    Гость Вадим,


    Доброе утро. 

    Количество столбцов меняется в самом нанале скетча. Переменную posOffses не надо менять. 

    Гость Вадим #81373

    Добрый день!

    Хотелось бы сделать программу универсальной для разного количества ширины и высоты матрицы,

    пытаюсь сделать хотя бы ширину вместо 16  - 18 столбцов и все идет не так как нужно.

    При изменении количества столбцов нужно ли менять массив posOffset[17]? 

    Если несложно дайте указания в этом направлении.

    Заранее большое спасибо! 


    Гость Андрей #72331

    Здравствуйте, подскажите пожалуйста, что нужно изменить в скетче для подключения адресной матрицы 8х32 чтобы было 32 полосы?

    Chupa #60814
    А вот как бы можно было использовать блютуз вместо звуковых проводов?
    maxim0512 #52824 Автор
    Адам,
    Добрый вечер. Думаю 3мм фанеры будет достаточно. 
    Адам #52789
    maxim0512,
    Если пластик 2мм толщиной, размер 540×540мм, какой толщины могут быть варианты фанеры?
    maxim0512 #52786 Автор
    Адам,
    Добрый день. У меня используется стартовый профиль 10 мм, думаю 8 мм будет мало. Но все зависит от толщины пластика, померьте для верности. 
    Адам #52781
    maxim0512,
    Стартовый профиль для пфх панелей пойдёт 8 мм?
    maxim0512 #52549 Автор
    Адам, я уже ответил. Для матрицы 16х16 пластика 500х500 будет мало. Вам надо или пластик больше или уменьшить матрицу до 15х15
    Адам #52525
    Цитата: maxim0512
    Если это размер пластика
    да, пластик
    maxim0512 #52512 Автор
    Адам,
    Если это размер пластика, то для матрицы 16х16 будет мало. Но вы можете сделать 15х15.
    Адам #52498
    maxim0512,
    А 500 на 500 пойдёт?
    maxim0512 #52459 Автор
    Адам,
    Обычно достаточно. Я использовал дополнительный от того же телевизора чтобы точки были были больше, но без него тоже нормано выглядит. 
    Адам #52454
    maxim0512,
    И ещё вопрос, будет ли достаточно только матового оргстекла?
    pogranec #52232
    Адам,
    Да на Али полно акрила. Или прозрачный можно взять и шлифануть
    maxim0512 #52228 Автор
    Адам,
    Не могу вам подсказать. Я сам пластик доставал из телевизора
    Адам #52225
    maxim0512,
    А где купить лист светофильтра и матовый пластик? У меня в городе нигде такого нет, в интернете я что-то не нашёл (ну разве что на OLX нашёл, там в б/у состоянии продают от телевизоров)
    maxim0512 #52202 Автор
    Адам,
    Добрый день. Разъём блока питания и ответная часть на матрице могут быть практически любыми. Проще всего найти подходящий блок питания (5 вольт, минимум 3 ампера) и купить ответную часть для штекер на нем, которую и при паять к матрице. 
    Адам #52198
    Здравствуйте, я немного не понял по по схеме на картинке со схемой, там где светодиодная матрица, там нарисован какой-то разъём возле неё, блок питания нужно с таким разъёмом покупать?
    Гость Александр #47207
    Цитата: maxim0512
    Гость Александр,
    Проверил новый скетч, на матрице 16 х 16, с точкой подключения внизу слева, направлений вправо, зигзагообразная. Все работает хорошо. Вам надо только указать ширину и высоту матрицы в строках

    #define WIDTH 16 // ширина матрицы (число диодов)
    #define HEIGHT 16 // высота матрицы (число диодов)

    Надеюсь у вас все получиться. Удачи.

    Большое спасибо за скетч, не ожидал такой быстрой помощи! Перепаяю схему, залью скетч, попробую. А возможно добавлю еще одну Arduino - будет лампа, цветомузыка и анализатор, так-как цветомузыка в лампе тоже понравилась.
    maxim0512 #47200 Автор
    Гость Александр,
    Проверил новый скетч, на матрице 16 х 16, с точкой подключения внизу слева, направлений вправо, зигзагообразная. Все работает хорошо. Вам надо только указать ширину и высоту матрицы в строках

    #define WIDTH 16 // ширина матрицы (число диодов)
    #define HEIGHT 16 // высота матрицы (число диодов)

    Надеюсь у вас все получиться. Удачи.
    maxim0512 #47108 Автор
    Гость Александр,
    Написал скетч для вашей матрицы. Попробуйте. Мне не на чем провести испытания.
    Скачать: https://cloud.mail.ru/public/2yBf/4eLSMaqu5
    Гость Александр #47093
    Цитата: maxim0512
    Гость Александр,
    В данный момент я не могу заниматься написание кода для анализатора. Чтобы ваша матрица работала правильно надо переписывать участок кода, где выводиться отображение столбцов на ленту:

    if (pos % 2 != 0) // если чётная строка
    leds[pos * WIDTH + j] = color; // заливаем в прямом порядке
    else // если нечётная
    leds[pos * WIDTH + WIDTH - j - 1] = color; // заливаем в обратном порядке

    и точки максимума

    if (maxLevel[pos] >= 0 && MAX_DOTS) {
    if (pos % 2 != 0) // если чётная строка
    leds[pos * WIDTH + maxLevel[pos]] = MAX_COLOR; // заливаем в прямом порядке
    else // если нечётная
    leds[pos * WIDTH + WIDTH - maxLevel[pos] - 1] = MAX_COLOR; // заливаем в обратном порядке
    }

    Спасибо за помощь! Я в принципе на эти строки кода и посматривал, и так понял что под каждую матрицу нужен будет свой код, универсального наверно не получиться. В написании кода я "нулёвый", наверное придется изучать, разбираться, эксперементировать. Пока буду изучать переделал с анализатора на цветомузыку с микрофоном AlexGyver, тоже ничего так смотрится, но хочется анализатор. Может у Вас появиться возможность поправить код, буду очень благодарен.
    maxim0512 #47091 Автор
    Гость Александр,
    В данный момент я не могу заниматься написание кода для анализатора. Чтобы ваша матрица работала правильно надо переписывать участок кода, где выводиться отображение столбцов на ленту:

    if (pos % 2 != 0) // если чётная строка
    leds[pos * WIDTH + j] = color; // заливаем в прямом порядке
    else // если нечётная
    leds[pos * WIDTH + WIDTH - j - 1] = color; // заливаем в обратном порядке

    и точки максимума

    if (maxLevel[pos] >= 0 && MAX_DOTS) {
    if (pos % 2 != 0) // если чётная строка
    leds[pos * WIDTH + maxLevel[pos]] = MAX_COLOR; // заливаем в прямом порядке
    else // если нечётная
    leds[pos * WIDTH + WIDTH - maxLevel[pos] - 1] = MAX_COLOR; // заливаем в обратном порядке
    }
    Гость Александр #47080
    Цитата: maxim0512
    Гость Александр,
    Добрый день. В теории можно добавить, но я эти не занимался.
    У меня только два варианта.
    Первый для зигзагообразной матрицы, лента расположена столбцами, подключение верхний левый угол. Второй для линейной матрицы, лента расположена горизонтальна, подключение нижний правый угол.

    Спасибо за быстрый ответ! Мне нужно для зигзагообразной матрицы, подключение нижний левый угол, направление ленты вправо. Есть готовый проект лампа AlexGyver на ESP8266, куда добавил анализатор звука на Arduino через переключатель, но столбики прыгают слева направо.
    maxim0512 #47012 Автор
    Гость Александр,
    Добрый день. В теории можно добавить, но я эти не занимался.
    У меня только два варианта.
    Первый для зигзагообразной матрицы, лента расположена столбцами, подключение верхний левый угол. Второй для линейной матрицы, лента расположена горизонтальна, подключение нижний правый угол.
    Гость Александр #46988
    Доброго времени суток! А возможно ли в скетче добавить в настройках матрицы выбор угла подключения и направление ленты из угла? Есть готовый проект, и не хочется все разбирать чтобы перевернуть матрицу. Заранее спасибо за ответ!
    Гость Игорь #46052
    Спасибо, очень понравилось.

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Последние комментарии

    Все комментарии