Точные показания с датчика (микрофон)

OTF
Offline
Зарегистрирован: 20.12.2015

Всем доброго времени суток! Нужна помощь в программировании. Собираюсь выводить показания микрофона с предусилителем на монитор порта, создал такой код:

float analogPin = 0;
float val = 0;
 
void setup()
{
   Serial.begin(9600);
}
void loop()
{
    val = analogRead(analogPin);  
    Serial.println(val,BIN);
    delay(1000);
}

В состоянии покоя датчик выдаёт значения  18.00 или 19.00. Если подуть, то 20.00 и выше. Проблема заключается в том, что значения всегда целые. Неужели всё так идеально? Хотелось бы, что бы выводилась и дробная часть чисел ( кроме .00 ).

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

аналоговый порт может отдавать значения в диапозоне 0..1023

OTF
Offline
Зарегистрирован: 20.12.2015

А как можно сделать так, чтобы отдавались ещё и дробные значения?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

OTF пишет:

А как можно сделать так, чтобы отдавались ещё и дробные значения?

можно , но зачем вам 0,000 ...... 1023,000 ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

OTF пишет:

Хотелось бы, что бы выводилась и дробная часть чисел ( кроме .00 ).

Вы смотрели какой тип возвращает analogRead?

Если Вам так уж хочется видеть дробные части, преобразуйте к float и поделите не 204,6 - получите напряжение в вольтах (приблизительно :))))

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SU-27-16 пишет:

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

Так ото ж! :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

OTF пишет:

void loop()

{
    val = analogRead(analogPin);  
    Serial.println(val,BIN);
    delay(1000);
}

В состоянии покоя датчик выдаёт значения  18.00 или 19.00. Если подуть, то 20.00 и выше. Проблема заключается в том, что значения всегда целые. Неужели всё так идеально? Хотелось бы, что бы выводилась и дробная часть чисел ( кроме .00 ).

Начнем с конца, хотя это здесь и не самое интересное.

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

А теперь - самое интересное.

Микрофон обычно имеет рабочий диапазон в районе от 20 Гц до 20 кГц. Т.е. способен фиксировать только переменный ток. Вы же делаете измерения раз в секунду, т.е. по теореме Котельникова-Шеннона можете измерить сигнал в диапазоне частот от 0 до 0.5 Гц. Т.е. по сути постоянный ток.

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

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

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

andriano ,   может быть совсем не так ?
это не оцифровка сигнала... Котельников здесь не при чём....
код фиксирует в момент опроса напругу от микрофона , всего-то
он не пригоден вообще для решения ни одной задачи
пригоден ! для определения уровня сигнала с микрофона выше заданного....

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

SU-27-16 пишет:

andriano ,   может быть совсем не так ?
это не оцифровка сигнала... Котельников здесь не при чём....
код фиксирует в момент опроса напругу от микрофона , всего-то
он не пригоден вообще для решения ни одной задачи
пригоден ! для определения уровня сигнала с микрофона выше заданного....

Не пригоден.

Сигнал с микрофона - переменный ток.

Уровенеь сигнала - его среднеквадратичное отклонение от некоторонго постоянного значения, называемого постоянной стсоставляющей.

Не пригоден, минимум, по двум причинам:

1. Отклонение может быть как в плюс, так и в минус.

2. Мгновенное значение ничего не говорит о среднеквадратичной величине.