Аналоговое чтение с шумом — Arduino Uno VS ESP12e
Я тестировал аналоговый выход микрофона (Max9814) с помощью Arduino Uno и получил хорошие результаты. Выходной сигнал микрофона преобразуется в звук и становится громким и четким.
Настройка: (от Макса до Uno)
- Подключите Vdd к 3,3 В
- Прикрепите GND к GND
- Вывод на A0
Однако, когда я попытался настроить его с помощью ESP12e вместо Uno, я получил много «шума» и вообще никакого четкого звука.
Здесь я использовал следующую настройку: (от Max до ESP)
- Подключите Vdd к VCC (VCC измеряется мультиметром при 3,3 В)
- Прикрепите GND к GND
- Вывод на AD0
Небольшой «шаг в сторону»
Проблема возникла в том, что аналоговый выход микрофона выдавал напряжение около 1,24, в то время как аналог ESP12e имеет максимальное входное напряжение 1 В. Из-за этого аналоговое чтение постоянно работало. По этой причине я установил резистор сопротивлением 10 кОм между выводами OUT и AD0 в сочетании с резистором сопротивлением 20 кОм между GND и AD0. В результате были получены хорошие аналоговые показания (вместо 1024, постоянно около 400-500).
Однако, как упоминалось ранее, между ними много шума, и звук нечеткий. (Я также пробовал работать с «образцами окон», вот «механизм фильтрации», который можно найти на многих сайтах/вопросах и который отлично работает):
//(глобальная логика настроена на взятие n выборок и последующую печать строки)
//Попыталось от 5 до 20
//Также вместо просто сэмплов попробовал вариант микрос вместо просто сэмплов, который также можно найти на многих сайтах, чтобы создать временное окно для записи.
unsigned int sample = analogRead(A0);
if (sample < 1024) { // отбрасываем ложные показания
if (sample > signalMax) {
signalMax = sample; // сохраняем только максимальные уровни
} else if(sample < signalMin) {
signalMin = sample; // сохраняем только минимальные уровни
}
}
unsigned int peakToPeak = signalMax - signalMin; // макс - мин = амплитуда пик-пик
Serial.println(peakToPeak);
Кто-нибудь знает, почему Arduino дает такой чистый и хороший звук, а ESP12e - нет. (Аналоговые значения, похоже, не сильно различаются по уровням)
@Revils, 👍0
1 ответ
Лучший ответ:
ESP8266 представляет собой невероятно (электрически) шумную среду.
Поскольку вы не можете использовать ничего, кроме внутреннего опорного напряжения, которое, в свою очередь, приводится в действие внутренним шумовым источником питания, вы не можете получить ничего, даже отдаленно приближающегося к стабильным показаниям.
Рекомендуется полностью отключить WiFI («Спящий режим модема») при считывании показаний АЦП, чтобы уменьшить шум.
Однако ADC никогда не предназначался для такого рода работ. Его основная роль заключается в контроле напряжения батареи вашего оборудования, и поэтому он не особо заботится о шуме, поскольку вы можете усреднить количество выборок для большей точности (чего вы не можете сделать со звуком).
- Не удается заставить Wi-Fi модуль esp8266-12 всегда точно считывать входящее напряжение analogRead
- AT-команда не отвечает на последовательный монитор
- Отправка данных Arduino в MySQL с помощью phpMyAdmin и XAMPP на Windows10
- Arduino выводит значения мусора на serial monitor с ESP8266
- ошибка: espcomm_upload_mem failed при загрузке скетча
- фатальная ошибка ESP8266WiFi.h: Такого файла или каталога нет
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
То есть это означает, что я должен подключить (каким-то образом?), например, Arduino к ESP и «пропустить» данные через esp, чтобы отправить их?, @Revils
Конечно, вы можете это сделать. Вы также можете подключить к ESP8266 внешний чип АЦП с подходящим стабильным опорным напряжением., @Majenko
О, это очень хорошее замечание. Что-то вроде этого?: Аналого-цифровой преобразователь — MCP3002, @Revils
Конечно. Это почти то же самое, что и АЦП в Arduino., @Majenko
Спасибо за отзыв, очень приятно!, @Revils