Монк . - Программируем Arduino

Здесь есть возможность читать онлайн «Монк . - Программируем Arduino» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Год выпуска: 2017, ISBN: 2017, Издательство: Издательский дом Питер, Жанр: Базы данных, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Программируем Arduino: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Программируем Arduino»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Программируем Arduino — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Программируем Arduino», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Следующие два примера иллюстрируют код, действующий в плате Arduino Uno и выполняющий замеры аудиосигнала.

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

Этот пример плата Arduino Uno использует для получения текстового отображения частотного спектра. Исходный код можно найти в скетче sketch_13_06_FFT_Spectrum. Скетч слишком длинный, чтобы воспроизводить его здесь целиком, поэтому я буду демонстрировать лишь некоторые его фрагменты. Откройте скетч в Arduino IDE, чтобы заглядывать в него в ходе обсуждения.

Алгоритм БПФ использует два массива типа char. Этот тип выбран вместо типа byte по той простой причине, что в Arduino C тип byte представляет однобайтовые целые числа без знака, тогда как сигнал, подлежащий преобразованию, как предполагается, будет колебаться относительно значения 0. После применения алгоритма БПФ массив data будет содержать мощность каждой частотной составляющей в заданном диапазоне. Диапазон частот зависит от частоты выполнения замеров. Данный скетч выполняется с максимальной скоростью, на которую только способна плата Uno, и обеспечивает анализ полосы частот с верхней границей около 15 кГц, что для каждого из 63 равномерно распределенных частотных интервалов дает ширину 240 Гц.

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

ADCSRA &= ~PS_128; // сбросить масштаб 128

ADCSRA |= PS_16; // добавить масштаб 16 (1 МГц)

Функция loop содержит совсем немного кода:

void loop()

{

sampleWindowFull();

fix_fft(data, im, 7, 0);

updateData();

showSpectrum();

}

Функция sampleWindowFull заполняет временное окно 128 замерами данных. Я расскажу о ней чуть позже. Затем к данным применяется алгоритм БПФ. Параметр 7 — это логарифм по основанию 2 от числа замеров. Это значение всегда будет равно 7. Параметр 0 — это признак инверсии, который также всегда будет равен 0, что означает false. После применения алгоритма БПФ производится обновление значений в массивах. В заключение вызывается функция showSpectrum, отображающая частотную информацию.

Функция sampleWindowFull читает значение аналогового входа 128 раз и предполагает, что сигнал колеблется относительно средней точки 2,5 В, поэтому она вычитает 512 из прочитанного значения, в результате чего может получиться положительное или отрицательное значение. Затем оно масштабируется константой GAIN, чтобы немного усилить слабые сигналы. Далее 10-битный замер делением на 4 преобразуется в 8-битное значение, чтобы можно было уместить его в массив типа char. Массив im хранит мнимую часть сигнала, установленную в 0. Это внутренняя особенность алгоритма; желающие больше узнать об этом могут обратиться к статье https://ru.wikipedia.org/wiki/Быстрое_преобразование_Фурье.

void sampleWindowFull()

{

for (int i = 0; i < 128; i++)

{

int val = (analogRead(analogPin) — 512) * GAIN;

data[i] = val / 4;

im[i] = 0;

}

}

Функция updateData вычисляет амплитуду в каждом частотном интервале. Сила сигнала вычисляется как длина гипотенузы прямоугольного тре­угольника, двумя другими сторонами которого являются действительная и мнимая части сигнала (практическое применение теоремы Пифагора!):

void updateData()

{

for (int i = 0; i < 64; i++)

{

data[i] = sqrt(data[i] * data[i] + im[i] * im[i]);

}

}

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

Массив data можно было бы использовать, например, для управления высотой столбиков диаграммы на жидкокристаллическом дисплее. Подключить источник сигнала (например, аудиовыход MP3-плеера) можно с помощью той же схемы, обеспечивающей колебание сигнала относительно средней точки 2,5 В, что была показана ранее, на рис. 13.4.

Пример измерения частоты

В этом, втором примере плата Arduino Uno используется для вывода оценки частоты сигнала в монитор последовательного порта (sketch_13_07_FFT_Freq). Большая часть кода в этом скетче повторяет код из предыдущего примера. Главное отличие в том, что после обработки массива data определяется индекс элемента с наибольшим значением и используется для оценки частоты. Затем функция loop выводит это значение в монитор последовательного порта.

В заключение

Цифровая обработка сигналов — сложная тема, ей посвящено множество отдельных книг. Из-за ее сложности я коснулся только наиболее полезных приемов, которые можно попробовать применить при использовании платы Arduino.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Программируем Arduino»

Представляем Вашему вниманию похожие книги на «Программируем Arduino» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Программируем Arduino»

Обсуждение, отзывы о книге «Программируем Arduino» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x