Заголовок сообщения: Глюки записи Ардуино Диктофона
Добавлено: Чт дек 12, 2019 15:51:51
Вымогатель припоя
Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06 Сообщений: 542 Откуда: Николаев / Украина
Рейтинг сообщения:0
Всем привет! Нашел интересный проект Ардуино микрофона: https://www.youtube.com/watch?v=WV5bLv1erxk Скетч (немного мной модифицированный, но все же содержит Много мусора!): Спойлер
#define chipSelect 10 /* Поменял на 10-pln */ unsigned long fileSize = 0L; unsigned long waveChunk = 16; unsigned int waveType = 1; unsigned int numChannels = 1; unsigned long sampleRate = 22050; unsigned long bytesPerSec = 22050; unsigned int blockAlign = 1; unsigned int bitsPerSample = 8; unsigned long dataSize = 0L; unsigned long recByteCount = 0L; unsigned long recByteSaved = 0L;
#define ledStart 2 /* PIN LED Start */ #define ledStop 3 /* PIN LED Stop */ int recPressed = 0; int stopPressed = 0; unsigned long oldTime = 0L; unsigned long newTime = 0L; byte buf00[512]; // buffer array 1 byte buf01[512]; // buffer array 2 byte byte1, byte2, byte3, byte4; unsigned int bufByteCount; byte bufWrite;
/*_____________*/
char NameRecord[10]; /* Имя нового - записываемого файла на SD-карту. */ int RecordNumber; /* Номер записи - храним в EEPROM. в диапазоне от 0 до 32767. */
unsigned long TimeIntervalStopRecording; /* Время - интервал - остановки записи - time interval stop recording */ byte OnOffRecord; /* подготовка - к старту записи */
/*_____________*/
void setup() { // THIS RUNS ONCE pinMode(10, OUTPUT); pinMode(ledStart, OUTPUT); pinMode(ledStop, OUTPUT);
/* Функция analogReference определяет опорное напряжение относительно которого происходят аналоговые измерения в analogRead().
EXTERNAL: внешний источник опорного напряжения, подключенный к выводу AREF.
1. Чтобы уменьшить шумы во время записи. 2. Возможность аппаратного изменения звукового порога, срабатывания авто записи, подключив переменный резистор к (выводу-AREF). */
analogReference(EXTERNAL);
/*_____________*/
Setup_timer2(); Setup_ADC();
/* Если SD-карта не обнаружена - включаем ledStop и ledStart*/
if (!sd.begin(chipSelect, SPI_FULL_SPEED)) { // if error, flash LED twice per second, until reset. while (1) { delay(50); digitalWrite(ledStop, LOW); digitalWrite(ledStart, LOW); } }
digitalWrite(ledStop, LOW);
/* Читаем значение (int - (2-byte) из EEPROM (ячейки - №0 и №1). И записываем в RecordNumber. */
EEPROM.get(0, RecordNumber); // delay(50);
OnOffRecord = EEPROM.read(5); /* Подготовка - к старту записи */ // delay(50); }
/* Останавливаем запись - по таймеру */ /* Продолжительность записи 10 секунд - можно изменять */ if (OnOffRecord == 1 && millis() - TimeIntervalStopRecording >= 10000) { StopRec(); /* launch StopRec method - Останавливаем запись. */ /* Блокируем повторный старт записи. */ EEPROM.write(5, 0); OnOffRecord = 0; }
/*_____________*/
if (recByteCount % 1024 == 512 && recPressed == 1) { rec.write(buf00, 512); // save buf01 to card recByteSaved += 512; } if (recByteCount % 1024 == 0 && recPressed == 1) { rec.write(buf01, 512); // save buf02 to card recByteSaved += 512; }
/*_____________*/
/* Подготовка к старту записи "Активация по голосу (VAS)." Запись начнётся, как только сигнал, поступающий с микрофона, превышает определенный уровень. */
/* Если уровень микрофона превысит порог 1023. порог - можно изменять! программно, И аппаратно - с помощью переменного резистора - "делитель напряжения" подключённого к выводу AREF, изменяем опорное напряжение "analogRead" */ if (recPressed == 0 && analogRead(A5) == 1023) {
EEPROM.write(5, 1); /* подготовка - к старту записи */
if (RecordNumber == 32767)RecordNumber = 0;
/* Записываем значение (int - (2-byte) в EEPROM (ячейки - №0 и №1). Переменная RecordNumber - увеличенная на 1. */
EEPROM.put(0, RecordNumber + 1); // delay(100);
/* После окончания записи, в памяти контроллера остаются данные. И за этого следующая запись бывает качеством хуже. Поэтому (Делаем программную перезагрузку) перед стартом новой записи. */
void StartRec() { // begin recording process /* Для конвертации из int в char / из RecordNumber в NameRecord */ //String str; //declaring string. char str[] = "01.wav"; //str = String(RecordNumber); //converting integer into a string. //str = str & ".wav" ; sprintf(NameRecord,"%d.wav", RecordNumber); //str.toCharArray(NameRecord, 6); //passing the value of the string to the character array.
void Setup_timer2() { TCCR2B = _BV(CS21); // Timer2 Clock Prescaler to : 8 TCCR2A = _BV(WGM21); // Interupt frequency = 16MHz / (8 x 90 + 1) = 22191Hz OCR2A = 90; // Compare Match register set to 90 }
void Setup_ADC() { ADMUX = 0x65; // set ADC to read pin A5, ADLAR to 1 (left adjust) cbi(ADCSRA, ADPS2); // set prescaler to 8 / ADC clock = 2MHz sbi(ADCSRA, ADPS1); sbi(ADCSRA, ADPS0); }
ISR(TIMER2_COMPA_vect) {
sbi(ADCSRA, ADSC); // start ADC sample while (bit_is_set(ADCSRA, ADSC)); // wait until ADSC bit goes low = new sample ready recByteCount++; // increment sample counter bufByteCount++; if (bufByteCount == 512 && bufWrite == 0) { bufByteCount = 0; bufWrite = 1; } else if (bufByteCount == 512 & bufWrite == 1) { bufByteCount = 0; bufWrite = 0; }
if (bufWrite == 0) { buf00[bufByteCount] = ADCH; } if (bufWrite == 1) { buf01[bufByteCount] = ADCH; } }
Собрал, вроде работает, но есть одна странность: если питать ардуино от компьютера, то почти нет посторонних шумов. А если запитать от аккумулятора, то запись получается просто ужасной! Вот ссылка на Гугл диск с примерами записи: https://drive.google.com/open?id=1K6Brj ... gVOv9GfAN5
Файл 69.wav - запись с питанием от компьютера. Усиление микрофона стоит почти на минимуме. Файл 101.wav - запись от аккумулятора (4.1 вольт). Схема устройства крайне простая: MicroSD подключена по SPI, к пину А5 подключен выход микрофонного усилителя MAX4466, светодиоды к пинам 2 и 3, и TL431 в качестве опорника. Пробовал собирать на Arduino UNO и на PRO MINI - в обоих случаях результат одинаков - питается от компьютера - запись по-лучше, а если от аккумулятора - запись плохая, много шумов и "рипит"... Аккумуляторы пробовал разные. Пробовал разные флешки, как "НоНейм" - так и качественные с 10-й скоростью.
Не могу понять почему идут шумы при работе от аккумулятора... по идее должно быть наоборот... Может у вас есть идеи?
_________________ Сделать своими руками всегда интересней чем просто купить и пользоваться
Как всегда - СХЕМЫ НЕТ... Проверяем акустику - усилитель (или ТОН2) на выход микрофонного усилителя. И определяем КИТО ЕСТЬ ИСТОЧНИК возмутительства. Не факт, что тракт микорфона кошерстно выполнен (в том числе и по питающим проводочкам). Сам режим с компом... Есть вероятность снятия части внешних помех через 0 питающей проводки. Часто раньше одной из рекомендаций по уменьшению посторонних шумов было "...переверните вилку в розетке..." Оцифровка и запись на флэш - это уже второй этап. Однако и там надо правила разводки линий и номиналов уровня сигнала соблюдать надо - цифра и аналог весьма различаются. Вспомним и еще одну старозабытую методу - палец на входе УНЧ = Фоновый шум. Негоже устройство за оголенные проводки брать - мало ли чего в качестве антенны и/или детектирующих внешние радиочастотные поля элементов внезапно образуются там, где не ожидалось.
Заголовок сообщения: Re: Глюки записи Ардуино Диктофона
Добавлено: Чт дек 12, 2019 16:57:42
Вымогатель припоя
Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06 Сообщений: 542 Откуда: Николаев / Украина
Рейтинг сообщения:0
Сейчас вообще, не зависимо от источника питания, стало постоянно с шумом записывать. Хм... буду смотреть. Похоже где-то какой-то контакт барахлит...
Добавлено after 12 minutes 50 seconds: В общем сам микрофонный усилитель очень сильно ловит наводки... Собирал все на матерке. Для тестов все отключил, и подключил микрофон на прямую к колонке - шумов практически нет. Подношу руки к усилителю или к колонке - появляются наводки. Стал собирать схему... каждый новый подключенный провод дает наводки. Получается вся схема - одна сплошная антенна для наводок Микрофонный усилитель у меня вот такой: https://www.ebay.com/itm/Electret-Micro ... 2749.l2649
_________________ Сделать своими руками всегда интересней чем просто купить и пользоваться
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
С теми платками... ничего сказать не могу за отсутствием под рукой... В остальном - пока сигнал не будет усилен и отфильтрован от помех (до уровня хотя-бы 1 вольта) это раздел аналоговой техники. Экранировка, выделение сигнала и прочие... Сегодня вроде бы эти задачи должны решать спецмодули - однако не попробовав - не выяснить чего там причина.
Заголовок сообщения: Re: Глюки записи Ардуино Диктофона
Добавлено: Чт дек 12, 2019 22:27:24
Вымогатель припоя
Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06 Сообщений: 542 Откуда: Николаев / Украина
Рейтинг сообщения:0
На всякий случай, вот срисовал схему модуля:
Добавлено after 2 hours 8 minutes 19 seconds: В общем... пульсации в основном записываются от работающей Ардуино. Стоит включить запись на флешку ток сразу же микрофон начинает сильно шуметь. Посторонние шумы можно свести к минимуму если питать микрофон и Ардуино от отдельных источников питания... Вот теперь стал вопрос: как правильно развязать микрофон и Ардуино?
_________________ Сделать своими руками всегда интересней чем просто купить и пользоваться
Может это ардуина шумит? верней её питание. Если питание от импульсного БП, а платка полностью аналоговая - шумы от ИБП будут проходить через землю (экран) из Дуины обратно в платку и усиливаться там. Экранировка в этом случае не поможет. так как это не магнитная помеха, а электрическая. Слышали о КЗ земной петли? Эффект прохождения помехи по земляному проводу при неправильном подключении общей точки.
_________________ 90% времени уходит на отыскание неисправности,остальное - ждать когда нагреется паяльник!
1) От дросселя в земле в таких случаях больше вреда чем пользы. 2) В случае с аккумулятором/батареей, шунтирующий электролитический конденсатор необходимой ёмкости обязателен (из-за более высокого, по сравнению со стабилизированными источниками питания, внутреннего сопротивления). 3) Схема смещения ОУ в рабочую точку неправильная, ОУ через такой делитель будет собирать все помехи/пульсации с шины питания, и усиливать их вместе с полезным сигналом.
_________________ Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. Всегда с уважением, Александр.
Заголовок сообщения: Re: Глюки записи Ардуино Диктофона
Добавлено: Пт дек 13, 2019 10:15:54
Друг Кота
Карма: 107
Рейтинг сообщений: 1225
Зарегистрирован: Вс май 25, 2008 19:47:47 Сообщений: 4330 Откуда: РФ
Рейтинг сообщения:0 Медали: 5
BOB51, на этой платке вполне себе "спецкристалл", в даташите указано что это именно микрофонный усилитель. А вот схема включения мне кажется весьма странной
Судя по схеме от топикстартера - обычный ОУ. Даже не по схеме диф усилителя собран... (там хоть какое-то подавление синфазной помехи на начальном этапе)... То же самое с успехом любой низковольтный ОУ выполнит. А вот 9814 то уже чуток получше....
Хотя... при нынешнем изобилии всяческих радиочастотных устройств... может и такое не пройти. Корпус изолирующий все равно делать придется... касательно экранировки - то при малом сигнале еще весьма эффективно, а при размахе от 1 вольта уже как бы и не особо требуется...
Помехи идут по аналогу - как их сгладить? Вместе с полезным сигналом? Надо избавляться от помех ДО усиления!
Добавлено after 3 minutes 48 seconds: Микрофон какой? Обычный электретный капсуль? типа как от магнитофона? У него бывает корпус заземлён на один из выводорв, а бывает - нет. Нужно проверить или сделать пружинную обойму для контакта корпуса микрофона и заземлить на входе. Спойлер
_________________ 90% времени уходит на отыскание неисправности,остальное - ждать когда нагреется паяльник!
Выше написал наиболее возможные причины. Возможные варианты решения: 1) Удалить дроссель в земляной шине питания заменив на нулевой резистор. 2) Зашунтировать аккумулятор конденсатором с низким E.S.R, например 2200мкФ. х 6,3В. с материнской платы. 3) Цепь смещения ОУ в рабочую точку переделать по Фэн-шуй, т.е. уменьшить резисторы делителя R3, R4 до 470кОм., разрезать дорожку идущую на выв.1 и к разделительному конденсатору С3, а вместо этого впаять ещё один резистор на 470кОм. между точкой соединения R3, R4 и конденсатором С3 и выв.1. Сверху на R4 напаять блокировочный конденсатор 47...100нФ. Спойлер
P.S Так же не повредит электролитический конденсатор 47...100мкФ. сразу после дросселя и вновь впаянного нуль-резистора. Ввиду низкого потребления усилителем дроссель можно заменить на резистор 220...330 Ом., дополнительный конденсатор 100мкФ. в таком случае обязателен. Подключение земли и питания на оба модуля тоже должно быть по Фэн-шуй.
Заголовок сообщения: Re: Глюки записи Ардуино Диктофона
Добавлено: Вт дек 17, 2019 23:12:11
Вымогатель припоя
Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06 Сообщений: 542 Откуда: Николаев / Украина
Рейтинг сообщения:0
Походу замучил я свой микрофонный усилитель.... Сейчас на выходе присутствует только верхняя полуволна звука. Нижняя отсутствует. Делал все как посоветовал korob. Кстати, схема модуля полностью соответствует схеме из даташита (за исключением дросселей), и конденсаторов по-больше стоит... Разрезал дорожку, впаял резистор поставил на макетку (на ней все тестировал), но вставит неправильно. На выход пошло GND, +3.8 (от аккумулятора) попало на GND, а пин VCC к ардуино. Понял это секунд через пять. Подключил правильно. Протестировал. Звук очень плохой (еще бы! пол волны нет!). Вернул на модуле все как было - не помогло... Кстати, до этого с помехами боролся диодом + электролитом на 100 мкф. Но небольшое шипение все равно присутствовало. По поводу модуля: есть смысл пытаться его реанимировать, или он 100% испортился?
_________________ Сделать своими руками всегда интересней чем просто купить и пользоваться
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения