olegue тебе же сказали... задача творческая ! На сматфоне запустить диктофон... это не творчество.
shaaimars звук (в качестве 16 бит 44.1 кГц) ардуина не потянет. максимум что ардуина потянет - звук (в качестве 10 бит 44.1 кГц).
записывая каждый "сеанс" в отдельный файл на sd-карту - это ардуина потянет.
периодически вытаскивать эти файлы на смартфон через bluetoth - в ардуино нет bluetoth.))
кодек... не пробовал... может и потянет))
по I2S шине передать байты ардуине (?) - в ардуино нет I2S))
1) Как часто можно создавать файлы на sd карте? Если делать это каждые 1-2 секунды, никакого затыка не будет? если правильно настроить... никакого затыка не будет.
2) Как расчитать, хватит ли аппаратных возможностей конкретного контроллера не только на запись звука по сигналу открытия шумодава, но еще и на передачу данных с sd карты через bluetoth модуль по запросу от смартфона? Собственно это самый главный вопрос, ибо не хочется ошибиться с покупкой ненужного для данного проекта железа.
смотреть надо... в протеусе))
надо понимать что ардуина изначально не расчитана на запись звука... поэтому придётся долго колдовать))
olegue тебе же сказали... задача творческая ! На сматфоне запустить диктофон... это не творчество.
Роман, я внимательно и очень вдумчиво несколько раз перечитал пост уважаемого shaaimars, и написал лишь то что в сухом остатке. А так да, первым желанием было растолковать все как есть, но пока это преждевременно.
На сматфоне запустить диктофон в режиме VOX и он будет записывать болтовню УКВистов пока Вас нет дома.
Такая схема уже частично была реализована, у нее есть много недостатков, которые всплывают при длительном использовании - отсутствие контроля над ОС (которая может просто завершить процесс спустя некоторое время, или зависнуть), большое энергопотребление. Плюс я не уверен, что смогу нормально наладить связь между двумя смартфонами, чтобы с одного на другой перекидывать файлы.
максимум что ардуина потянет - звук (в качестве 10 бит 44.1 кГц).
Это я уже успел узнать. Планируется использовать отдельную плату-кодек, большинство из которых нынче выдают I2S сигнал.... который не поддерживается ардуинами??? Получается, я перепутал ветку форума, и мне нужно брать сразу что-то ардуино-совместимое на основе esp32 или ARM-процессоров?
P.S. Я правильно понимаю, что теоретически реализовать это возможно и на atmega 128, но не имеет смысла ввиду отсутсвия аппаратной поддержки 16 бит и i2s, и легче просто взять что-то помощнее да в сборе со всем необходимым? Но что конкретно? Слишком большой выбор, эх
Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy.
Мой бывший коллега давненько реализовывал подобный проект. Для получения 16 бит строился АЦП R-2R на выходных портах и использовался внутренний компаратор. Писал на АСМе, и в решаемой задаче для используемых переменных хватало имеющихся регистров. Это позволило обойтись без пуш/поп при выполнении подпрограмм. А также полностью использовать имеющуюся оперативку под буферы данных. Позднее к проекту добавился эзернет и "на вырост" была взята мега 128.
К 2029 году в России прогнозируется увеличение числа зарядных станций до 40 000. При этом отечественный рынок электротранспорта имеет климатические, потребительские и географические особенности. Для успешной разработки и построения инфраструктуры станций заряда в России идеальным вариантом является использование решений и электронных компонентов китайских производителей – лидеров индустрии электротранспорта и возобновляемой энергетики, которые уже представлены в КОМПЭЛ.
я внимательно и очень вдумчиво несколько раз перечитал...
тогда... за понимание ! ))
shaaimars писал(а):
я не уверен, что смогу нормально наладить связь между двумя смартфонами
больших проблем не вижу...
shaaimars писал(а):
Планируется использовать отдельную плату-кодек, большинство из которых нынче выдают I2S сигнал....
ну... если надо сжать файл... тогда можно)) хотя для обычной рации можно использовать и простой PCM без сжатия... там же данных не много.
теоретически реализовать это возможно и на atmega 128, и на atmega 328... atmega 328 лучше - частота выше - 20 мгц против 16 мгц у atmega 128. а поддержку 16 бит и i2s можно сделать на чём угодно)) но не имеет смысла ввиду низкого быстродейстия и низкого качества звука...
esp32 лучше. esp32 даёт звук (в качестве 12 бит 44.1 кГц) против звук (в качестве 10 бит 44.1 кГц) у atmega 328... esp32 - частота выше - 240 мгц и два ядра против 20 мгц у atmega 328. esp32 энергопотребление в спячке ~2,5 микроампер... не намного больше чем у atmega 328 ~0,1 микроампер... esp32 есть bluetoth. и т.д.
хотя не ясно зачем bluetoth... ви-фи работает дальше и быстрей. у меня всё работает по ви-фи... и управление... и передача звука... и передача файлов... и т.д.
Карма: 14
Рейтинг сообщений: 121
Зарегистрирован: Сб май 21, 2016 11:04:52 Сообщений: 2960 Откуда: Беларусь
Рейтинг сообщения:0
shaaimars, Вы будете писать узкополосных УКВистов, позвольте узнать зачем Вам звук 16 бит, да и еще с таким конским сэмплрэйтом 44.1 кгц? Ардуино прекрасно справится с задачей записи на флэшку по SPI звука 8 бит 16кгц. Одна минута займет 8*16*60 =7.6 мБ места. Останется лишь вопрос передачи этих данных в телефон с целью прослушивания. 1. Вариант. Вынимаем флэшку и ставим в телефон. А другую флэшку ставим в устройство записи. Из недостатков: отсутсвтие творчества. Но я думаю, что по факту запуска первой части проекта творческий запал или спадет на нет или будут существенно скоректирован исходя из полученного опыта. 2. Здесь был упомянут Bluetooth. Отлично! Давайте помечтаем! Такой вариант я ранее не рассматривал. Но можно подключить плату HC-06 по UART, и скорость там, ну пускай 115200, мечтать так мечтать. Опустим проблемы сопряжение с телефоном, пускай их как бы нет. Теперь нужно что бы устройство все новые файлы (а точнее, сэмплы) по этому каналу передало в телефон. Намечается какой-то андроид блютуз сокет, ну должнен кто-то управлять этими байтами и заголовками и печь из них файлы. 3. И здесь появлятеся Роман и говорит: Олег, ты ж купил Ethernet Shield W5100 и все коды есть. Когда мы наконец увидим результат, то.е файлы на компе.
Добавлено after 29 minutes 42 seconds: Ну да, блютуз это конечно не серьезно. Счас я подумаю как толкнуть на выход готовый файл по http или ftp. Это хорошая тема, либо через sim800 либо через esp8266. Оба варианта так себе. Ресурс делить придется если накладка произойдет. В умелых руках получилась бы конфетка, но кому это счас интересно.
Вроде бы их используют в первую очередь как специальный быстродействующий 16-и-более-битный АЦП для качественной записи звука, ввиду отсутствия такового в esp32 и тем более в мегах. Поправьте меня, если не так.
Вы будете писать узкополосных УКВистов, позвольте узнать зачем Вам звук 16 бит, да и еще с таким конским сэмплрэйтом 44.1 кгц?
Чтобы не потерять качество записи. Все же связь, которую я хочу записать, не 8-битная, а обычная аналоговая. Количество занимаемой памяти не имеет значения. Имеет значение лишь то, сможет ли МК все это обработать, и смогут ли мои кривые ручонки все это собрать и запрограммировать в нечто рабочее
Ой, да я пока что даже не думал об этом. Первоначальная цель - сделать запись звука в автономном устройстве с адекватным потреблением и стабильной работой на протяжении длительного времени. А блютуз или вифи - это на будущее
Добавлено after 3 minutes 42 seconds: и питание вероятно тоже можно со станции ввязть. Питание флэшки 3.3 , вполне вероятно что и общее питания такое же будет.
15 баксов если в пересчете с наших.
Добавлено after 1 minute 37 seconds: Но с "творчеством" опять беда, Кроме поключения к станции не за што и руки зацепить.
Добавлено after 2 hours 46 minutes 24 seconds:
еще более функциональная игрушка. Доступ к записанным файлам по usb (вероятно по OTG тоже можно), Можно покумекать как передать на удаленное устройство.
Вроде бы их используют в первую очередь как специальный быстродействующий 16-и-более-битный АЦП для качественной записи звука, ввиду отсутствия такового в esp32 и тем более в мегах. Поправьте меня, если не так.
не понял...
1. звук подаём на любой АЦП. На выходе АЦП получаем PCM. esp32 даёт звук 12 бит. atmega328 даёт звук 10 бит. телефон даёт звук 16 бит. комп даёт звук 16 бит. ... есть ещё мини ПК
но нам надо минимальное потребление... тогда остаётся esp32 или atmega328.
2. далее PCM поступает на блок сжатия... где кодек сжимает звук. к примеру кодек MP3 сжимает звук в ~10 раз. только не думаю что это надо для простой рации...
3. а далее пишем на обычную флешку... esp32 или atmega328 сойдёт)).
4. делее слушаем звук с флешки на компе или телефоне... по изернет или ви-фи.
всё просто)) вроде ))
Добавлено after 8 minutes 3 seconds: с ардуино на комп по протоколу http мы передавали в соседней теме... фото...
Ну, я бы поспорил. Даже установить IDE на ноут не смог - пришлось ставить на ПК. Пока все железки не приехали, но уже возник один маааааленький вопросик - а нужно ли сбрасывать 0.3 вольта разницы между лог уровнями esp32 и моей рацией (которую я очень боюсь спалить)? И если да, то вопрос - что выбрать? На вскидку есть 3 варианта - делитель на резисторах, диод Шоттки, и буферная микросхема - вот только где бы найти такую, которая на выходе даст именно 3 вольта?
Это, конечно, какая-то жесть. Вооружившись обрывочными примерами, разномастными библиотеками, в отсутствие нормального дебага в ардуино ide, решил я открыть для себя творческое пространство, так сказать.
Имеем 0) Рацию Yaesu vx-3r с распаянными проводками, а именно аудиовыход на наушники и выход на управляющий транзистор индикатора открытия шумодава. 1) Модуль с аудио АЦП/ЦАП под названием WM8960 (описание платы + даташит по ссылке). 2) Полный аналог платы DevKitC v4, с модулем esp32-wroom 32u (прошу прощения за формальный оффтоп, я все же не знаю куда тыкнуть этот пост, ибо в ветке ARM про ESP всего пара тем) 3) Sd адаптер
Имеем прямые руки и паяльник, фигачим паука из проводов и плат СпойлерНа жпс модуль не обращать внимание, это на будущее (если оно настанет, с таким то прогрессом) Пайка проверена, порты не перепутаны, все работает и моргает лампочками
Задача номер раз: записать по открытию шумодава хотя бы 5-секундный аудиофайл в формате WAV Стратегия: брать куски кода из рабочих примеров для каждой из подзадач (работа с модулем ацп, работа с сд картой, и т.д.)
Модуль ацп проверен на работоспособность с помощью примера от Sparkfuns. Вкратце суть примера - орешь на микрофон и слышишь себя в наушниках Отсюда были взяты куски по работе с файловой системой и SD картой. Итого имеем следующего Франкенштейна Спойлер
if (codec.begin() == false) //Begin communication over I2C { Serial.println("The I2S device did not respond. Please check wiring."); while (1) ; // Freeze } Serial.println("I2S device is connected properly.");
codec_setup();
// Set up I2S i2s_install(); i2s_setpin(); i2s_start(I2S_PORT); }
void loop() { // Get I2S data and place in data buffer esp_err_t result = i2s_read(I2S_PORT, &sBuffer, bufferLen, &bytesIn, portMAX_DELAY); testcounter++; if (result == ESP_OK) {
// Продолжение записи если флаг = 1 if (is_recording) { // Запись
audio_data_size += fContent.write(sBuffer, bufferLen*2); // Если сигнала на запись нет, убираем флаг, прекращаем запись и меняем header if (digitalRead(33) == 0) { is_recording = false; Serial.println("recording ended"); CreateWavHeader(header, audio_data_size); fContent.seek(0); fContent.write((const byte *)header, sizeof(header)); fContent.close(); SD.end(); Serial.println("File closed, card demounted succesfully"); } }
// Если флага записи нет else { // Если есть сигнал на запись, создаем файл и ставим флаг на запись if (digitalRead(33) == 1) { is_recording = true; file_num++; if (!SD.begin()) { Serial.println("Card Mount Failed"); } else { Serial.println("Card mounted successfully"); } fContent = SD.open("/file" + String(file_num, DEC) + ".wav", FILE_WRITE); fContent.write((const byte *)header, sizeof(header)); Serial.println("file" + String(file_num, DEC) + " file created, recording started"); } } // Send what we just received back to the codec esp_err_t result_w = i2s_write(I2S_PORT, &sBuffer, bytesIn, &bytesOut, portMAX_DELAY);
// If there was an I2S write error, let us know on the serial terminal if (result_w != ESP_OK) { Serial.print("I2S write error."); } } // DelayMicroseconds(300); // Only hear to demonstrate how much time you have // to do things. // Do not do much in this main loop, or the audio won't pass through correctly. // With default settings (64 samples in buffer), you can spend up to 300 // microseconds doing something in between passing each buffer of data // You can tweak the buffer length to get more time if you need it. // When bufferlength is 64, then you get ~300 microseconds // When bufferlength is 128, then you get ~600 microseconds // Note, as you increase bufferlength, then you are increasing latency between // ADC input to DAC output. // Latency may or may not be desired, depending on the project. }
void codec_setup() { // General setup needed codec.enableVREF(); codec.enableVMID();
// Setup signal flow to the ADC
codec.enableLMIC(); codec.enableRMIC();
// Connect from INPUT1 to "n" (aka inverting) inputs of PGAs. codec.connectLMN1(); codec.connectRMN1();
// Disable mutes on PGA inputs (aka INTPUT1) codec.disableLINMUTE(); codec.disableRINMUTE();
// Set pga volumes codec.setLINVOLDB(0.00); // Valid options are -17.25dB to +30dB (0.75dB steps) codec.setRINVOLDB(0.00); // Valid options are -17.25dB to +30dB (0.75dB steps)
// Set input boosts to get inputs 1 to the boost mixers codec.setLMICBOOST(WM8960_MIC_BOOST_GAIN_0DB); codec.setRMICBOOST(WM8960_MIC_BOOST_GAIN_0DB);
// Connect from MIC inputs (aka pga output) to boost mixers codec.connectLMIC2B(); codec.connectRMIC2B();
// Disconnect LB2LO (booster to output mixer (analog bypass) // For this example, we are going to pass audio throught the ADC and DAC codec.disableLB2LO(); codec.disableRB2RO();
// Connect from DAC outputs to output mixer codec.enableLD2LO(); codec.enableRD2RO();
// Set gainstage between booster mixer and output mixer // For this loopback example, we are going to keep these as low as they go codec.setLB2LOVOL(WM8960_OUTPUT_MIXER_GAIN_NEG_21DB); codec.setRB2ROVOL(WM8960_OUTPUT_MIXER_GAIN_NEG_21DB);
// CLOCK STUFF, These settings will get you 44.1KHz sample rate, and class-d // freq at 705.6kHz codec.enablePLL(); // Needed for class-d amp clock codec.setPLLPRESCALE(WM8960_PLLPRESCALE_DIV_2); codec.setSMD(WM8960_PLL_MODE_FRACTIONAL); codec.setCLKSEL(WM8960_CLKSEL_PLL); codec.setSYSCLKDIV(WM8960_SYSCLK_DIV_BY_2); codec.setBCLKDIV(4); codec.setDCLKDIV(WM8960_DCLKDIV_16); codec.setPLLN(7); codec.setPLLK(0x86, 0xC2, 0x26); // PLLK=86C226h //codec.setADCDIV(0); // Default is 000 (what we need for 44.1KHz) //codec.setDACDIV(0); // Default is 000 (what we need for 44.1KHz) codec.setWL(WM8960_WL_16BIT);
codec.enablePeripheralMode(); //codec.enableMasterMode(); //codec.setALRCGPIO(); // Note, should not be changed while ADC is enabled.
// Enable ADCs and DACs codec.enableAdcLeft(); codec.enableAdcRight(); codec.enableDacLeft(); codec.enableDacRight(); codec.disableDacMute();
//codec.enableLoopBack(); // Loopback sends ADC data directly into DAC codec.disableLoopBack();
// Default is "soft mute" on, so we must disable mute to make channels active codec.disableDacMute();
codec.enableHeadphones(); codec.enableOUT3MIX(); // Provides VMID as buffer for headphone ground
Serial.println("Volume set to +0dB"); codec.setHeadphoneVolumeDB(0.00);
Serial.println("Codec Setup complete. Listen to left/right INPUT1 on Headphone outputs."); }
TL;DR Дабы не тратить время уважаемых форумчан, скажу вкратце - в примере есть буфер аудиоданных sBuffer, который наполняется данными с i2s_read(), и далее отправляется обратно на i2s_write(). Я попытался его впихнуть на SD карту через fContent.write, на что тот ругнулся, т.к. буфер изначально это массив типа uint16, а файл принимает только байты. Возможных решений много, но если просто изменить тип буфера на uint8, то функция "слышать себя в наушниках" никуда не пропадает и работает прекрасно. Казалось бы, все решено!?
Ага, как бы не так. Вот пример записи какого-то местного FM-радио - https://voca.ro/19Le1GeaxIgM (ГРОМКО!!!) Вроде что-то слышно, а вроде и нифига не слышно. При этом в наушниках во время записи слышно хорошо! Картинка этого же файла на audacity. Спойлер Начало файла в hex СпойлерПервые 3 строки с переводом в ascii
Код:
52 49 46 46 a4 64 21 00 57 41 56 45 66 6d 74 20 R I F F d ! W A V E f m t 10 00 00 00 01 00 02 00 44 ac 00 00 10 b1 02 00 D 04 00 10 00 64 61 74 61 80 64 21 00 16 00 01 80 d a t a d ! 16 80 00 80 13 00 00 80 12 00 03 80 0b 00 01 00 03 00 04 00 f8 ff 01 00 f3 ff 02 80 f2 ff 02 80 f0 7f 01 80 ee ff 03 00 f0 ff 01 00 f2 7f 04 80 fa ff 03 80 f9 7f 03 80 f9 7f 02 80 f7 ff 00 80 f6 7f 03 80 f4 7f 01 80 f4 7f 05 80 f5 ff 00 00
Туда-сюда, туда-сюда. В чем проблема, так и не понял. Есть идея побитово сравнить данные в буфере и данные на карте, но что-то слишком уж тяжело для меня это сделать (вывод бинарных данных с еспшки это какое-то иезуитство), поэтому обращаюсь сюда. Какой-то алгоритм делает из хороших данных, которые отправляются на АЦП и воспроизводятся в наушниках, плохие. Памагити
чем помочь ?)) там всё на готовых библиотеках... кто будет разбираться в библиотеках ?
и ваще... у меня всё заточено под интернет)) лучше подключить рацию к интернету и писать на комп... он же сервер)) причём на компе жесткий диск... терабайт)) устанешь писать)) и да... ESP32 это позволяет... и да... никаких выходов шумодава не требуется... делает проще - ESP32 непрерывно цифрует звук или шум с рации... когда появляется звук и пропадает шум - автоматом включается запись... всё))
Добавлено after 3 minutes 42 seconds: а давайте подключим рацию к интернету ! будем записывать звук с рации и передавать запись на комп... всё по той же рации... вместо модема ))
есть готовые рации DMR которые работают как модем... но они дорогие... от 500 баксов)) дешевле сделать самому... из обычной аналоговой. вот это уже прикольно будет))
Добавлено after 38 minutes 45 seconds: а что у нас с потовой передачей звука ?
-через бесплатный Wi-Fi... работает хорошо)) -через 3G работает плохо...
через бесплатный Wi-Fi надо ещё протестить... в разных местах... )) сейчас бесплатный Wi-Fi есть во многих местах города... в парках... в метро... и т.д.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения