На склад поступили жидко-кристаллические индикаторы и дисплеи от KSE

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

Paul Bishop

Основной целью проекта является использование ЖК дисплея от неисправного портативного DVD плеера совместно с платформой Arduino в качестве модуля визуального отображения данных и информации. Разработанное устройство представляет собой анализатор спектра реального времени, источником сигнала является электретный микрофон, подключенный к микроконтроллеру. Автор использовал портативный DVD плеер с неисправной механической частью, однако сам ЖК дисплей и обслуживающая его электроника была исправна, что позволяет подавать на дисплей стандартный NTSC композитный видеосигнал. Источником питания выступала встроенная в плеер аккумуляторная батарея, но возможно использовать питание с платформы Arduino.

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Анализатор спектра на базе Arduino

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

Основой устройства, как было отмечено выше, является платформа Arduino. Была примененная 5 В версия Adafruit Boarduino (DC Boarduino). Плата представляет собой компактный модуль с установленным микроконтроллером Atmel ATMega328P с рабочей частотой 16 МГц. Дополнительно установлен регулятор напряжения LM7805, коннекторы с сигналами линий ввода/вывода, коннектор интерфейса внутрисхемного программирования, кнопка «Сброс».

Внешний вид контроллера Arduino (DC Boarduino)

Контроллер DC Boarduino

Следует обратить внимание, что установлен именно микроконтроллер ATmega328, который имеет в 2 раза больший объем памяти программ, ОЗУ и EEPROM по сравнению с ATmega168 (более ранние версии платформы выполнены на ATmega168), объема памяти которого не хватит для запуска данного приложения.

Принципиальная схема Adafruit Boarduino

Принципиальная схема Boarduino
Кликните для увеличения

В качестве источника аудиосигнала применен электретный микрофон. Однако величина сигнала с микрофона недостаточна, чтобы подключить его непосредственно к микроконтроллеру. Для усиления сигнала был собран простейший предварительный усилитель на NPN транзисторе 2N3904.

Принципиальная схема подключения дискретных элементов и микрофона к Arduino

Принципиальная схема подключения микрофона к плате Arduino
Кликните для увеличения


Сигнал с предварительного усилителя подается на вывод Analog 0 платы Arduino, что соответствует каналу 0 АЦП микроконтроллера. Для генерации видеосигнала используется два вывода микроконтроллера и два резистора.

Программное обеспечение микроконтроллера

Для генерации монохромного композитного видеосигнала NTSC используется готовая программная библиотека TVout для Arduino. По умолчанию рабочее разрешение устанавливается 128×96 точек. Стоит отметить также, что не гарантируется корректная работа данной библиотеки при ее применении в другой интегрированной среде разработки.

Следующий момент в программном обеспечении – сбор и обработка данных для дальнейшего отображения на дисплее.

Сбор данных – стандартная процедура получения данных от аналого-цифрового преобразователя микроконтроллера. Далее, для проведения спектрального анализа, нам необходимо делать выборки сигнала во времени и затем выполнить преобразование Фурье, благодаря которому получается замечательная картина сигнала. Если выполнение данной процедуры зациклить, то получится визуальный анализатор спектра звукового сигнала.

Для реализации алгоритма быстрого преобразования Фурье (FFT, Fast Fourier transform) в проекте был использован код представленный пользователем на форуме Arduino. Данный программный код представляет собой библиотеку, которая выполняет выборки сигнала и 8-разрядное быстрое преобразование Фурье, причем написана полностью на Си с применением некоторых программных приемов оптимизации по размеру кода. Данные файлы можно сохранить в качестве библиотеки для использования в своих проектах и разработках.

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

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

Внешний вид макетной платы

макетная плата анализатора спектра

Листинг (Arduino)

    #include TVout.h 
    #include fix_fft.h 
    TVout TV;
char im[128], data[128], lastpass[64];
char x=32, ylim=90;
int i=0,val;
void setup()
{
TV.begin(_NTSC,128,96); // Initialize TV output, 128x96.
TV.print_str(2,2," Realtime Arduino"); // TVout lib uses x,y for print
TV.print_str(2,11," Spectrum Analyzer"); // statements. 8x8 default font.
analogReference(DEFAULT); // Use default (5v) aref voltage.
for (int z=0; z<64; z++) {lastpass[z]=80;}; // fill the lastpass[] array with dummy data
};
void loop()
{
for (i=0; i < 128; i++){ // We don't go for clean timing here, it's
val = analogRead(0); // better to get somewhat dirty data fast
data[i] = val/4 -128; // than to get data that's lab-accurate
im[i] = 0; // but too slow, for this application.
};

fix_fft(data,im,7,0);

for (i=1; i< 64;i++){ // In the current design, 60Hz and noise
data[i] = sqrt(data[i] * data[i] + im[i] * im[i]); // in general are a problem. Future designs
TV.draw_line(i+x,lastpass[i],i+x,ylim,0); // and code may fix this, but for now, I
TV.draw_line(i+x,ylim,i+x,ylim-data[i],1); // skip displaying the 0-500hz band completely.
lastpass[i]=ylim-data[i]; // if you insist, initialize the loop with 0
}; // rather than 1.
};

blurtime.blogspot.com

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: Arduino Realtime Audio Spectrum Analyzer with Video out!

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя