Определение частоты звука

Сюда постим если есть сомнения насчет выбора группы
Ответить
marinich_nikita
Сообщения: 3
Зарегистрирован: 25 фев 2015, 14:29

Определение частоты звука

Сообщение marinich_nikita »

Здравствуйте. Помогите, пожалуйста, решить одну проблему: необходимо с помощью ардуино определить частоту звука. Робот стоит в центре комнаты, есть 3 источника звука с разной частотой и в зависимости от частоты звука, робот должен делать те или иные действия(например, ехать к источнику). Очень нужно и как можно скорее, пожалуйста
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Определение частоты звука

Сообщение Mr.Kubikus »

Привет!

Аналогичную тему в разделе "Конструкторы FISCHERTECHNIK" удалил.

Если предположить, что источники звука будут работать не одновременно, то можно использовать следующий подход:

У микроконтроллера ATmega328P установленного на плате Arduino UNO имеется встроенный аппаратный 16-разрядный счетчик, который можно использовать для измерения времени между импульсами поступающими на вход контроллера. Это блок в документации называется "16-bit Timer/Counter1 with PWM". Нас будет интересовать только часть этого блока под названием "Input Capture Unit" - фиксатор событий.
IC Unit.png
IC Unit.png (31.57 КБ) 33973 просмотра
Фиксатор событий сохранят в регистр ICR1 текущее значение счетчика TCNT1 при поступлении на вход блока стробирующего сигнала со входа ICP1 или от встроенного аналогового компаратора ACO. Одновременного с записью устанавливается в 1 флаг прерывания ICF1 и если есть разрешение (ICIE1 = 1), то генерируется прерывание от фиксатора событий (Input Capture interrupt).

Теперь нам надо на бумаге посчитать периоды для интересующих нас частот F1, F2, F3 и задать диапазоны, попадание в которые будет означать присутствие нужного сигнала на входе.

Считаем период для каждой частоты по формуле:
T = 1/F;

Диапазоны:
T1L-T1H // Для F1
T2L-T2H // Для F2
T3L-T3H // Для F3

Теперь усиленный сигнал от микрофона надо пропустить через компаратор и затем подать на вход фиксатора событий. При поступлении на вход периодического сигнала с частотой F фиксатор событий будет сохранять в регистр ICR1 длительность периода T между импульсами входного сигнала. По прерыванию ICF1 надо считывать значение из регистра ICR1 и сохранять во входной буфер, который затем использовать для статистической обработки сигнала. Например, если значение, полученное путем усреднения выборки из 10 измерений, попадает в диапазон T1L-T1H - это означает, что на входе сигнал частотой F1. Аналогичное сравнение надо проводить для остальных интересующих нас частот.

Источники информации:
ATmega328P datasheet.
С уважением, Григорий
GitHub FB ВК
marinich_nikita
Сообщения: 3
Зарегистрирован: 25 фев 2015, 14:29

Re: Определение частоты звука

Сообщение marinich_nikita »

Спасибо, у меня как раз такая система, что подается только один из сигналов. А можно как то это сделать на Arduino Yun?
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Определение частоты звука

Сообщение Mr.Kubikus »

На плате Arduino YUN в качестве периферийного контроллера используется ATmega32u4. В нём имеется несколько фиксаторов событий (Input Capture Unit), которые работают также как в ATmega328P. Посмотрите документацию на МК ATmega32u4 раздел 14.5 стр. 115. Проблем с решением вашей задачи на Arduino YUN быть не должно.
С уважением, Григорий
GitHub FB ВК
marinich_nikita
Сообщения: 3
Зарегистрирован: 25 фев 2015, 14:29

Re: Определение частоты звука

Сообщение marinich_nikita »

Спасибо!
Ответить