Распознавание короткой последовательности тонов через микрофон.

Тема в разделе "ESP8266, ESP32", создана пользователем Gomez, 31 янв 2025.

  1. Gomez

    Gomez Гик

    Хочу сделать себе устройство, которое прерывает зарядку смартфона на 80% (нет, само не может, рутовать пока не буду, оно ещё слишком свежее для разблокировки загрузчика и т. д.).
    Есть приложения, которые подают звуковой сигнал (mp3, какой укажешь) при достижении нужного уровня зарядки. И вот этот сигнал бы распознать esp32, а дальше уже всё просто.

    Начал гуглить эту тему, всё сводится к AI-алгоритмам, машинному обучению и прочему, да и в основном, теория. Можно ли как-то упростить задачу для распознавания одной-единственной простой последовательности нот, типа 5 нот, как в фильме "Близкие контакты третьего рода" а не слов, произносимых разными людьми с разными интонациями, как нужно для голосового управления?
    Да хоть двух нот, никто в той комнате, где я заряжаю телефон, на флейте не играет. :)

    Можно, конечно, сделать совсем просто - поставить как мелодию любой громкий "бдыщь", микрофон, который будет располагаться в 20 см от телефона, спокойно зарегистрирует всплеск громкости и всё. Единственное, что я теряю при ложном срабатывании, например, чихнув, это отключенную зарядку раньше времени. Но это как-то неспортивно. :rolleyes:

    Мне видится самым простым и реализуемым выходом даже не частотный анализ, а ... эээ... амплитудный. Ну определенные паузы между "есть звук - нет звука".
    Пара букв из морзянки да хоть SOS "... --- ...", или "пум-пум....пум!" из We will rock you.

    P.S. Вот главное сформулировать.
    Сказал про морзянку и нашёл про морзянку.
    https://github.com/G6EJD/ESP32-Morse-Decoder

    Всем спасибо. Попробую.

    Хотя распознавание простой мелодии было бы благозвучнее. Да и вообще тема интересная - получение команд от мобильного не через блюпуп. Совершенно любые утили умеют проигрывать мелодии.
     
    Последнее редактирование: 1 фев 2025
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Местные гуру кисло реагируют на идеи с микрофоном. Щас же всё надо завязать на Алису, Вай-фай, интернет и тп. А тут ты задарма хочешь пользоваться годами, никому не платить, рекламу не смотреть и не быть отслеживаем в своих действиях. Это типа регресс(анти-прогресс).
    А насчет темы:
    Звук достаточно легко опознаётся программно и аппаратно. Гуглите темы ДТМФ и БПФ (или для предопределенных частот - более быстрым преобразованием Гёрцеля). Для Ардуины есть готовые библиотеки. На Али продается модуль приема ДТМФ. Я брал за 30руб с доставкой. Ск. щас - не знаю.
     
    Последнее редактирование: 2 фев 2025
    Gomez нравится это.
  3. ИгорьК

    ИгорьК Гуру

    И все почему...

    SmartSelect_20250202_104037_Device care.jpg

    SmartSelect_20250202_104103_Device care.jpg

    Но... если развивать идею, то в предложенную цепочку решения я бы включил не только распознавание звуков, но передачу лазером, нагрев паяльником, поджигание костра на горе и запуск сигнальных ракет.
     
    parovoZZ нравится это.
  4. Airbus

    Airbus Радиохулиган Модератор

    Зачем изобретать Велосипед?
     
  5. Gomez

    Gomez Гик

    Как я понимаю, у вас Самсунг. Там есть, но это есть не на всех телефонах, на моем нет. Да и какая разница, хоть сигнальную ракету хочу запустить по звуковой команде. Абстрагируйтесь от телефона.

    А если не изобретать, форум можно закрывать. На 99% вопросов ответит и напишет код ChatGPT и ДикПик. :)
     
    Airbus нравится это.
  6. Airbus

    Airbus Радиохулиган Модератор

    Немнго не понял что хотите сделать. Почему не хотите заряжать телефон до 100%?Проблемы с зарядкой или контроллером заряда телефона? Теперь по теме—делаете активный фильтр на ОУ он отфильтровывает звуковой сигнал определенной частоты. Далее чтоб избежать ложняков можно сделать чек длительности сигнала на той же Тини13. Можно три сигнала определенной звуковой частоты—фильтрует ОУ на входе и потом МК проверяет количество сигналов и их длительность. Если все совпало—запускаетеракету!
     
    Последнее редактирование: 2 фев 2025
  7. Airbus

    Airbus Радиохулиган Модератор

    Можно поиграться с DTMF как Вам посоветовали выше. Я раньше когда то так делал. Копеечная плата подключена к реле с триггером на 555ТМ2.
    В руках бипер—такая штучка которая при нажатии на цифры издает звук. Как в телефонах.
    [​IMG]
    Ходишь по комнате нажимаешь разные кнопки и разные релюхи весело щелкают в разных углах. Но тут проблема получить DTMF сигнал с Вашего телефона.А декодировать как два пальца
     
    Последнее редактирование: 2 фев 2025
  8. Airbus

    Airbus Радиохулиган Модератор

    [​IMG]
    Такая вот плата декодер
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Извращался с созданием расширенного ДТМФ.
     

    Вложения:

    • DTMF test.zip
      Размер файла:
      8,1 КБ
      Просмотров:
      22
    • DTMF_Freqs_My.jpg
      DTMF_Freqs_My.jpg
      Размер файла:
      37,3 КБ
      Просмотров:
      24
  10. parovoZZ

    parovoZZ Гуру

    у меня хуявей. Заряжает до 90 процентов и останавливается. Надо больше - кнопку нажал и погнали дальше.
     
    Gomez и Airbus нравится это.
  11. Airbus

    Airbus Радиохулиган Модератор

    У меня Айфон—заряжает 100% и останавливается
     
  12. parovoZZ

    parovoZZ Гуру

    поэтому я и не купил айфон. Не умеет он щадить батарейку
     
  13. Airbus

    Airbus Радиохулиган Модератор

    Это он тебе сказал? Или сам догадался?
     
  14. parovoZZ

    parovoZZ Гуру

    это ты сказал
     
  15. Gomez

    Gomez Гик

    Ariadna-on-Line, спасибо за наводку на DTMF, я уже и забыл про такое...
    В общем, стало получаться вот по такому руководству:
    https://forum.arduino.cc/t/dtmf-decoder-library/118979/75
    На Arduino Nano (последняя завалялась :D) и микрофонным модулем MAX4466
    Три цифры с микрофоном практически в упор к источнику звука различает хорошо.
    Во многих руководствах считывают с выхода на наушники телефона, так, конечно, проще. С аналоговым микрофоном и аналоговым входом там помех - мама не горюй. Разве что хлопки руками распознавать (видимо, подобные модули в основном для этого).
    Зачем там резисторный делитель, не понял, видимо, не на микрофонный модуль рассчитано было. Но я в схемотехнике не силён. :)

    Там пишется "...2 резистора между Vcc и землей, чтобы напряжение в средней точке было Vcc/2", но я обошёлся одним конденсатором пока.
     
    Последнее редактирование: 4 фев 2025
  16. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. Звук - синусоида с плюсовыми и минусовыми полупериодами. А оцифровщик Ардуины не способен оцифровать минусовые значения. Поэтому приходится сдвигать рабочую точку. А программе указывать насколько сдвинули. В идеале надо ставить на середину диапазона. Вот два резистора это и делают. В программе это - #define ADC_MIDPOINT 512
    2. Алгоритм Гёрцеля работает с заданными частотами. Заметил - чтобы измерить Мощность (магнитуду) частоты (например) 1000 Гц - надо задать частоту примерно на 9% НИЖЕ, то бишь 910 Гц. И так для всех частот. Не знаю, может это специфика только моей библиотеки.
    3. Чувствительность платки с микрофончиком - весьма высокая. На ней резистор установки усиления есть. Приходится уменьшать, иначе она слышит даже как моргаешь. Не надо там ниче никуда приближать.
    4. Резисторы делителя (2 шт.) можно любые от 10К до 100К. Лучше - 51К.
    5. Резистор 1К на входе поставьте обязательно. Выход усилителя очень хилый - пробивается от всяких нештаток. Зря его производители не ставят.
     

    Вложения:

    • Вход.png
      Вход.png
      Размер файла:
      14,3 КБ
      Просмотров:
      17
    Последнее редактирование: 5 фев 2025
    Gomez нравится это.
  17. Gomez

    Gomez Гик

    Спасибо! Всё сделал по схеме, чувствительность, правда, выросла не сильно, хотя конденсатор 1000 мкф по питанию микрофонного модуля дальность увеличил. Видимо, всё же очень много шумов на аналоговом входе, если делать что-то, "слышащее" намного лучше, надо, видимо, применять микрофоны c I2S.
    Но в моём случае, когда телефон заряжается всегда в своей подставке, и так всё работает чётко и с первого раза. :cool:

    charging.jpg
     
  18. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Не знаю что у вас не чувствительного. На плате усилителя стоит регулятор усиления (2-102). У меня слышал как я моргаю. Декодировать пытался.
    ПС. По-умолчанию он стоит на минимуме усиления - 2.
     

    Вложения:

    • MAXMIC.png
      MAXMIC.png
      Размер файла:
      217,5 КБ
      Просмотров:
      12
    Последнее редактирование: 14 фев 2025
  19. Gomez

    Gomez Гик

    Да-да, он. Не знаю, у меня именно Ардуины закончились (думал, что и не понадобятся больше), а так стоило провести эксперимент на других. Может, на этой, последней, дело с кварцем или с чем-то ещё. Тут бы помог осциллограф, которого нет и и которым пользоваться не умею. :rolleyes:
    Но моргание - не частотный же сигнал, а вот всякие спектроанализаторы, загруженные в эту "схему", дают рандомные показатели звуковой частоты по всему диапазону. :D Сойдёмся на том, что где-то брак, но всё оставалось в единичных экземплярах и перетыканием не проверить.
    Выполняет задачу на максимальном усилении для моих условий с первого раза (а в оповещении в mp3 я намонтировал 5 DTMF "42", а между ними трели для моего уха, если уж автоматика подведёт :)) и ладно.
     
  20. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Выложте сюды ваш код. Мож увидим бяку. Еще раз повторяю. У меня тоже чувствительность была хреновая, пока не допер, что дело не в электронике, а в коде. Точнее - в задании частот опознавания Гёрцеля. И не потребовался осциллограф. Только симулятор Протеус.
    ПС. Тоже повозился с этим Гёрцелем. Есть две библиотеки - Goertzel и Goertzel-master. Вот с Goertzel-master так и не добился нормальной работы. Опознавало очень плохо.
     
    Последнее редактирование: 15 фев 2025