Анализатор-визуализатор спектра аудио сигнала на базе Arduino



Как вы думаете, что делают девушки, когда собираются вместе? Идут по магазинам, фотографируются, ходят по салонам красоты? Да, так и есть, но так делают далеко не все. В данной статье пойдёт речь о том, как две девушки решили собрать радиоэлектронное устройство своими руками.

Почему именно анализатор-визуализатор спектра?


Ведь программных решений данной задачи довольно много и вариантов аппаратной реализации так же немало. Во-первых, очень хотелось поработать с большим количеством светодиодов (т.к. мы уже собирали led-куб, каждый для себя, но в небольших размерах), во-вторых, применить на практике полученные знания по цифровой обработке сигналов и, в-третьих, в очередной раз попрактиковаться в работе с паяльником.

Разработка устройства


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

В качестве дисплея выбрали светодиодную матрицу 8х32. Можно было использоваться готовые led-матрицы 8х8 и собирать из них, но мы решили не отказывать себе в удовольствии посидеть вечерком с паяльником, и поэтому собирали дисплей сами из светодиодов.

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

Включение той или иной строки в столбце осуществляется с помощью открытия соответствующего ключа. Для уменьшения количества выходных пинов контроллера, выбор столбца происходит через дешифраторы (таким образом, мы можем сократить количество управляющих линий до 5).


В качестве интерфейса подключения к компьютеру (или другому устройству, способному передавать аудио сигнал) был выбран разъём TRS (mini-jack 3.5 mm).

Сборка устройства


Сборку устройства начинаем с того, что делаем макет лицевой панели устройства.



Материалом для лицевой панели был выбран чёрный пластик толщиной 5мм (т.к. диаметр линзы диода также 5мм). По разработанному макету размечаем, вырезаем лицевую панель под необходимый размер и просверливаем отверстия в пластике под светодиоды.





Таким образом получаем готовую лицевую панель, на которой можно уже собирать дисплей.



В качестве светодиодов для матрицы были использованы двухцветные (красный-зелёный) с общим катодом GNL-5019UEUGC. Перед началом сборки матрицы, руководствуясь правилом “лишний контроль не повредит” все светодиоды, а именно 270 шт. (брали с запасом на всякий случай), были проверены на работоспособность (для этого было собрано тестирующее устройство, включающее в себя разъём, резистор 200Ом и источник питания на 5В).



Дальше разгибаем светодиоды следующим образом. Аноды красного и зеленого диодов отгибаем в одну сторону (вправо), катод отгибаем в другую сторону, при этом следим, чтобы катод был ниже чем аноды. И затем под 90° загибаем катод вниз.



Сборку матрицы начинаем с правого нижнего угла, сборку производим по столбцам.





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



Готовая матрица выглядит следующим образом.



Вид сзади:



По разработанной схеме паяем схему управления строками и столбцами, распаиваем шлейфы и место под Arduino.



Было решено так же выводить не только амплитудно-частотны, но и фазо-частотный спектр, а также выбирать количества отсчетов для отображения (32,16,8,4). Для этого были добавлены 4 переключателя: один на выбор типа спектра, два на выбор количества отсчётов, и один на включение и выключение устройства.

Написание программы


В очередной раз руководствуемся нашим правилом и убеждаемся, что наш дисплей полностью в рабочем состоянии. Для этого пишем простую программу, которая полностью зажигает все светодиоды на дисплее. Естественно, по закону Мёрфи, нескольким светодиодам не хватало тока, и их необходимо было заменить.



Удостоверившись, что всё работает, мы приступили к написанию основного программного кода. Он состоит из трёх частей: инициализация необходимых переменных и считывание данных, получение спектра сигнала при помощи быстрого преобразования Фурье, вывод полученного спектра с необходимым форматированием на дисплей.

Сборка конечного устройства


В конце мы имеем лицевую панель, а под ней куча проводов, которые необходимо чем-то закрыть, да и переключатели нужно на чём-то закрепить. До этого были мысли сделать корпус из остатков пластика, но мы не вполне представляли, как это будет конкретно выглядеть и как это сделать. Решение проблемы пришло довольно неожиданно. Прогулявшись по строительному магазину, мы обнаружили пластиковый цветочный горшок, который на удивление идеально подошёл по размеру.



Дело оставалось за малым, разметить отверстия под разъёмы, кабели и переключатели, а также вырезать две боковые панели из пластика.



В итоге, собрав всё воедино, подключив устройство к компьютеру мы получили следующее:

Амплитудно-частотный спектр (32 отсчёта):



Амплитудно-частотный спектр (16 отсчётов):



Амплитудно-частотный спектр (8 отсчётов):



Амплитудно-частотный спектр (4 отсчёта):



Фазо-частотный спектр:



Вид задней панели:



Видео работы устройства


Для большей наглядности видео снималось в темноте. На видео устройство выводит амплитудно-частотный спектр, а затем на 7 секунде переключаем его в режим фазо-частотного спектра.



Список необходимых элементов


  1. Светодиоды GNL-5019UEUGC – 256 шт. (Для дисплея)
  2. Транзисторы n-p-n KT863A – 8 шт. (Для управления строками)
  3. Транзисторы p-n-p С32740 – 32 шт. (Для управления столбцами)
  4. Резисторы 1кОм – 32 шт. (Для ограничения тока базы p-n-p транзисторов)
  5. Дешифраторы 3/8 IN74AC138 – 4 шт. (Для выбора столбца)
  6. Дешифраторы 2/4 IN74AC139 – 1 шт. (Для каскадирования дешифраторов)
  7. Монтажная плата 5х10см – 2 шт.
  8. Шлейфы
  9. Arduino Pro micro – 1 шт.
  10. Разъём mini-jack 3.5мм – 1 шт.
  11. Переключатель – 4 шт.
  12. Чёрный пластик 720*490*5 мм – 1 лист. (Для лицевой панели)
  13. Горшок цветочный чёрный 550*200*150 мм – 1 шт. (Для корпуса)
Поделиться публикацией

Комментарии 47

    +5
    Ну кто тут сможет удержаться и не плюсануть? Жаль мало фотографий участников проекта.
      0
      участниц, но действительно — мало. Технические девочки сильно редкость и еще более сильная радость )
      +4
      Классно) Почему-то устройства, собранные девушками всегда выглядят очень аккуратно.
      P.S. а где исходники
        0
        Полностью согласен!!!
        Сколько в свое время ездил по «ящикам» и могу с уверенностью сказать что если бы не прекрасные руки монтажниц, терпеливые и прекрасные головы наладчиц не было бы у нас космоса и оборонки :)
          0
          Да, так все и есть, вы абсолютно правы.
          Причем, ладно бы еще неаккуратно у мальчиков было, часто дело вообще до грязи и ржавчины доходит. Вот как здесь, например: https://www.facebook.com/pastindicator/posts/863706450429165
          (надеюсь, тэг не нужен?)
        0
        Плюсую. Проделывание дырочек можно было бы заказать на лазерной резке. Дрелью ровно не сделаешь.
          +2
          Что самое интересное — у них есть сверлильный станок судя по одному из фото.

          Что значит «дрелью ровно не сделаешь»? Если руки растут не из Ж — то руками никаких проблем сделать ровно.
            +1
            Когда у тебя решетка из дырочек, то отклонение на треть миллиметра уже хорошо видно. Без станка такие вещи очень тяжело делать.
              0
              Главное сделать разметку металлической линейкой и накернить. После этого не попасть невозможно.
                +1
                Ну, не буду с вами спорить. Лично у меня никогда не получалось. То на сотом отвевстии неверно накернишь, то сверло чуть в сторону поведет.
            0
            У любого девайса есть свой бюджет, да и самостоятельное изготовление с помощью имеющегося в распоряжении инструмента могло быть основной целью проекта. А так, проще купить готовый девайс, будет еще ровнее.
              0
              Да не так это уж и дорого — лазерная резка. Максимум, рублей 500. Заказать изготовление различных деталей у профессионалов не равнозначно покупки девайса целиком. Ардуину и светодиоды чай не сами в печи выплавляли.
                0
                В общей сложности у нас на всё устройство ушело около 30$, так что это бы занимало существенную часть. Не спрю, было бы ровнее значительно. Но практический опыт ничто не заменит
                  0
                  Ну, я со своей меркой подхожу, конечно. Мне для DIY и печатную плату за 50$ заказать не жалко. :) Не, девайс у вас получился то, что надо. Просто есть вещи, которые практически невозможно сделать вручную аккуратно. В частности, это — решетки из дырочек.
                    0
                    Вполне можно аккуратно прорезать. Разумеется со сверльным станком и предварительной разметкой. Пластик-то уж точно
            +8
            А код где?
              +2
              А можно по подробнее, как вы получаете спектр на ардуине? Можно даже показать исходник… Ведь в ардуине мало памяти и не слишком быстрый процессор, поэтому преобразование фурье не такая и простая штука для нее. За какое время происходит преобразование и для какой выборки?
                0
                Чан давным давно все это реализовал http://elm-chan.org/works/akilcd/report_e.html
                  +1
                  мне интересно, как конкретно в этом проекте :) так как тут ардуина, нужно еще выделять время на отрисовку столбиков, с какими практическими проблемами столкнулись и т.д.
                    0
                    Полагаю, что так же, как и у остальных ардуино-поделок: берем либу, дописываем две строчки, и вуаля.
                    Вот, например, абсолютно аналогичная железка (даже чуть посложнее), на Uno
                    www.youtube.com/watch?v=jJ7lzkrQIFk

                    Использовалось, видимо, вот это github.com/mike95826/makefurt/tree/master/arduino-libraries
                    Да, под видео есть еще ссылка на гуглкод, но там куча мусорных файлов в исходниках.
                    0
                    Да, тоже про него сразу вспомнил.
                  0
                  Девчонки с ножовкой и паяльником — это невероятно круто!
                  Жаль, у меня плюсануть не получается
                    +1
                    Что вы понимаете под «фазо-частотный спектр»? И зачем Вам он вообще может быть полезен?
                      0
                      Ну, амплитудо-частотный в таких устройствах тоже не особо полезен. Так, для красоты… но, что понимается под этим в данном случае, да, интересно.
                      0
                      Отлично! Места на передней панели много, еще можно добавить динамики, разъемы USB и флешек всяких, питание от аккумулятора и будет БумБокс)
                        +1
                        Продолжайте крушить стереотипы. У вас это прекрасно получается. Кстати, делал что то подобное в виде куба на примерно таком-же наборе элементов, но, определенно, меньше понимал в принципе их работы, чем автор поста.
                          +5
                          Ни программы, ни схемы. Кто в итоге спектр-то считает?
                          и уж тогда не «Амплитудно-частотный спектр», а
                          Спектральная плотность мощности (СПМ).
                            0
                            Амплитудно-частотная характеристика спектра ведь и есть модуль спектральной плотности мощности?
                              +1
                              Нет. АЧХ — это характеристика тракта. Спектр — характеристика СИГНАЛА.
                              При прохождении сигнала через тракт, его спектр будет соответствовать АЧХ тракта, только если на входе будет белый шум.

                              Как это АЧХ может быть модулем СПМ? компоненты СПМ вычисляются как «корень из суммы квадратов реальной и мнимой компоненты преобразования Фурье»
                            0
                            Было бы интересно посмотреть софт и схему ардуины. И как вообще её хватает на такую обработку?
                              0
                              тяжело вздыхаю и иду варить борщ…
                                0
                                  0
                                  А зачем копипастить? Нельзя было просто добавить всю библиотеку?
                                  https://github.com/mike95826/makefurt/blob/master/arduino-libraries/FixFFT/fix_fft.cpp
                                  https://github.com/Vichkarichka/Analyzer-visualizer-audio-spectrum/blob/master/code/fft.cpp
                                    0
                                    Изначально планировали писать библиотеку сами, но после тщетных попыток адаптировать наш код под ардуино мы вытащили из данной либы только то, что нам было необходимо.
                                    0
                                    Добавьте ссылку в пост, пожалуйста.
                                    +1
                                    Сверхизвращенство, мне подобное было делать лень, проще было взять WS-ки: www.youtube.com/watch?v=4ldsFIbf8aU
                                    Подача/расположение/формы панелей в любой комбинации…
                                      0
                                      Нет, я конечно тоже похвастаюсь своим творением
                                      https://www.youtube.com/watch?v=hdeJQqIIclo
                                      https://www.youtube.com/watch?v=l7EDhozF0PI
                                      сначала хотел предложить, как альтернативу разработки из статьи,
                                      но
                                      для осмысленного управления ws нужен как минимум stm32, на ардуино боюсь ничего толкового не выйдет
                                      плюс хороший блок питания на 5В 3А — это применительно для поделки из видео
                                      плюс нужно писать прошивку — тут не отделаешься простым копированием ардуиновской либы
                                      ну и конечно — бюджет. на видео строка из 5 метров ленты, одна лента уже дороже 30$ выходит
                                        0
                                        1. на дунях — это всё прекрасно делается, без проблем и на более маломощных МК… надо только понимать, что происходит, чтобы не выходило казусов.
                                        2. у меня на видео 16х16х3=768 светодиодов питаются от обычного USB (500мА), яркость с избытком.
                                        3. ну на счет кода — это дело уже вообще для каждого сугубо личное…
                                        4. поглядел ваши видюшки, простите, но картинки у вас не плавные, рисуются рывками.
                                      0
                                      Есть женщины в русских селениях!
                                      Безусловный плюс
                                        0
                                        Реализация FFT могла бы стать изюминкой этого проекта)
                                          0
                                          А зачем было брать двухцветные светодиоды, если они всегда горят только одним цветом? Монохромными и управлять было бы проще, и паять меньше, и стоят они дешевле.
                                            0
                                            Изначально планировалось брать не двухцветные а RGB, но количество светодиодов 256 да ещё и RGB это очень дорогое удовольствие. Мы нашли очень хороший вариант, дешёвые светодиоды и двухцветные. Почему такие, мы хотели смешивать цвета, и менять цвет к примеру по нажатию тумблера или по интенсивности музыки.
                                          0
                                          Присоединяюсь к вопросу о ФЧХ и ее смысле в данном контексте?
                                          Ну и заметка на полях — все великолепно и замечательно, при этом применение специализированных микросхем драйверов с токовым выходом сильно увеличило бы цену девайса, особенно если рассматривать цену владения — с учетом места на плате, разводки платы, количества точек пайки и сопутствующих факторов?
                                          Кстати, по поводу FFT — если число точек по частоте не превосходит определенного значения, то СКП дает намного лучшие результаты, по моим оценкам это число точек в районе 3 и лежит, так что девушки молодцы, что не стали усложнять программу сверх необходимого.
                                            0
                                            Никто не знает где можно купить уже готовую схему с каким нибудь led экранчиком или заказать у кого?
                                              0
                                              Девчонки молодцы, здорово.

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                              Самое читаемое