Автоматический Коммутатор Аудио Сигналов На Arduino
- Войдите на сайт для отправки комментариев
Всем привет, есть задача разработать автоматический коммутатор аудио сигналов (т.е. осуществляем переход на резерв в случае отсутсвия сигнала на основном канале), элементом коммутации служит реле, попробовал изготовить аналоговое устройство в лабораторных условиях всё работало нормально, а вот на реальном оборудовании возникли трудности, так как есть различные шумы на выходе.
Решил сделать всё на мк, но так как не имею опыта решил попросить помощи.
Планируемый алгоритм достаточно простой, мониторим уровень звука, если сигнал ниже заданного порога то, ждём 10-20 сек и даём команду перехода на резерв. Определить уровень можно попробовать на базе схемы VU meter (ссылка).
Подскажите пожалуйста как правильно отредактировать код, дабы получилось необходимое устройство.
Ну так покажите код, который не заработал в реальных условиях.
Устройство аналоговое, вообще не было мк. Сейчас хочу переделать на мк, но не знаю как это правильно сделать.
Пока ждал, сам написл код, посмотрите, возможно можно как то оптимизировать?
Тема старая, но...
if (val > 3)
{
digitalWrite (ledPin1, LOW);
count =0; // НЕВЕРНО
Счётчик ошибок нельзя сбрасывать в ноль каждый раз, когда на аналоговом входе появится сигнал с уровнем больше 3 условных единиц. Потому что ваш детектор будет реагировать на сигнал любой продолжительности так, как будто это хороший, годный сигнал. А это не так.
Правильнее будет уменьшать счётчик ошибок на некоторое значение, которое подберёте экспериментально, каждый раз, когда на аналоговом входе появляется сигнал. По достижению нуля считать, что сигнал высокостабилен и выполнять необходимые вам действия.
Тема старая, но...
if (val > 3)
{
digitalWrite (ledPin1, LOW);
count =0; // НЕВЕРНО
Счётчик ошибок нельзя сбрасывать в ноль каждый раз, когда на аналоговом входе появится сигнал с уровнем больше 3 условных единиц. Потому что ваш детектор будет реагировать на сигнал любой продолжительности так, как будто это хороший, годный сигнал. А это не так.
Правильнее будет уменьшать счётчик ошибок на некоторое значение, которое подберёте экспериментально, каждый раз, когда на аналоговом входе появляется сигнал. По достижению нуля считать, что сигнал высокостабилен и выполнять необходимые вам действия.
На самом деле устройство (в 5-ти экземплярах) уже более года успешно работает в боевых условиях , т.е можно предположить что все работает правильно. Конечно были исправления предыдущего кода, но основная логика не изменилась.
По поводу "сигнала любой длины", как известно звуковой сигнал это фактически переменный ток, т.е. он не может быть "любой длины" он постоянно меняется с "частотой звука".
Хм... Ну если вы так ставите вопрос...
Рассмотрим далеко не гипотетическую ситауцию - пропадание сигнала на выходе спутникового тюнера в связи с дурной погодой, тучи там, зеркало тарелки снегом залепило итд.
В таких случаях сигнал может кратковременно восстанавливаться, на секунду, другую (или на меньшее время). При этом сам сигнал категорически не пригоден для его трансляции в эфир, кому нужны эти цифровые покрякивания?
Так как ваш код не анализирует качество сигнала, а анализирует лишь его наличие, или отсутствие, он будет считать, что пригодный для ретрансляции сигнал присутствует и будет гнать в эфир кашу, вместо звука.
По поводу определений - "сигнал любой длины" читать как "аудиосигнал такой длительности, которой достаточно для того, чтобы ваш код смог его распознать как пригодный для ретрансляции".
Но я не настаиваю, ваша радиостанция, ваши решения. Доказывать вам ошибочность вашего подхода я не стану, со временем вы и сами это поймёте.
Теперь я вас понял :), да такое теоретически возможно, пока такое не наблюдали, как правило проблемы чаще возникают с самим тюнером, или компом который врезает рекламу, если будет возможность перепрошью ардуинки.
Спасибо за критику.
Решением проблемы может стать декремент счётчика ошибок при появлении сигнала, а не его обнуление.
Допустим мы взяли пороговым значением, после которого возникает ошибка, отсутствие сигнала в течение 10 секунд.
В момент каждого детектирования тишины (в вашем случае val < 3) прибавляем к счётчику ошибок единицу.
В момент каждого детектирования звука val > 3 отнимаем от счётчика некое значение, хоть ту же единицу.
В итоге кратковременные появления сигнала, или какие-нибудь помехи, не будут обнулять счётчик, а значит он, в итоге, достигнет порогового значения и ардуино переключит вещание на резерв. Конечно это займёт больше 10 секунд, так как счётчик будет 'ездить' туда-сюда при появлении\пропадании звука, но при таком алгоритме верятность переключения на резерв гораздо выше, чем при алгоритме, обнуляющем счётчик.
Вот моя реализация:
Переключает спутниковый тюнер между преднастроенными каналами по кругу, если звука нет ни на одном из преднастроенных каналов, подключает в качестве источника сигнала онлайн-трансляцию головной радиостанции. Если звука нет вообще нигде, то отрабатывает аварийный плейер на компе (но это уже к артдуине не относится). Во время забора сигнала с онлайна крутит тюнер, каждые десять секунд жмыкая на кнопку переключения каналов, если звук появится и он нормальный, то переключает вещание на спутник и переходит в исходное состояние. Индикаторов сигнала итп в коде нет, добавлять по вкусу. :)
Ээээ, а где тут спойлеры? А то эта простыня меня самого напугала.
Переключение каналов реализовано просто замыканием контактов?
Кстати у себя в проекте я еще и raspberry юзал, для удаленного контроля, ребута тюнера, компа ну и + с нее же у меня идет онлаин вещание(резерв), а вообще если бы я сейчас делал, многое сделал бы иначе :).
Да, банальное реле, замыкающее кнопку на тюнере. Тюнер тупой, поэтому так. Да и вообще - чем проще, чем надёжней. Точно так же поключается онлайн-трансляция, с помощь двухканального реле. Источником сигнала служит допотопный комп, наличие сигнала с онлайна, перезапуск плейера, если сигнала нет, отправка уведомлений по почте итп. возложено на Pira CZ Silence Detector.
Вся эта байда, вдобавок ко всему, запитана через один здоровый контактор, который управляется с сотового телефона. Звонишь, жмёшь кнопку и он - ба-бах! - вырубает питание по студии на 40 секунд (ну это если по отдельности срубить проблему не выходит).
если комп вырубится (зависнет), то об отсутсвии вещания можно так и не узнать, хотя если комутатор сигнала стоит и после компа, это частично проблему решит, но опять таки не будет региональной рекламы, а это чревато :).
Кстати ещё одна причина использования тупого тюнера заместо новомодных виснущих линуксовых боксов - наилютейшая стабильность. Он у меня годами не выключается и не перезапускается.
у нас приходится использовать "новомодный виснущий линукс", ибо сигнал идет в закрытых PID-х, а для того что б не платить много денег за подъем, кодируем звук в AC3, тут либо ставить професиональный тюнер либо что то на линуксе, но професиональный стоит денег почти как все оборудование на удаленной точке (без учета передатчика :)).
если комп вырубится (зависнет), то об отсутсвии вещания можно так и не узнать, хотя если комутатор сигнала стоит и после компа, это частично проблему решит, но опять таки не будет региональной рекламы, а это чревато :).
Узнаю, узнаю. ;) У меня это дело контролируется не одним компом, а цепочкой.
1 - сам источник онлайн-сигнала
2 - эфирные компы
3 - айскаст-сервер
4-5-6-7-8 - компы-ретрансляторы по области
Ктонить да и свистнет. Да и вообще, я как-то не помню зависаний критичных компов за последний год, подбирались тщательно, плюс никаких замен на новые до выработки ресурса (читай пока не задымят).
Региональная реклама будет палюбас, так как во-первых онлайн-сигнал это тот-же сигнал, что и со спутника, только идёт по нету. То есть в нём все влёты-вылеты, все ДТМФ-метки и прочая есть. А во-вторых вещалка настроена так, что если не отдетектила метку влёта в местный рекламный блок, то спустя 5 минут она жёстко рвёт сигнал и выводит местную врезку. Некрасиво, зато претензий нет.
всмысле виснет комп который врезает рекламу, т.е. 4 5 6 7 8.
у нас приходится использовать "новомодный виснущий линукс", ибо сигнал идет в закрытых PID-х, а для того что б не платить много денег за подъем, кодируем звук в AC3, тут либо ставить професиональный тюнер либо что то на линуксе, но професиональный стоит денег почти как все оборудование на удаленной точке (без учета передатчика :)).
То есть вы сами поднимаете сигнал на спутник? Головная радиостанция? Ууууу!
у нас 2 радиостанции, и 2 телеканала, подъем сигнала осуществляется в Киеве на сириус, до Киева по выделенный линии :)
Дальше стоит обсуждать в личке, не будем засорять тему, кому то может пригодится.
всмысле виснет комп который врезает рекламу, т.е. 4 5 6 7 8.
Аааа. Ну пока не замечены в этом. Да и перекрёстную пинговалку можно нарисовать, хотя не панацея конечно. Удалённые 'студии' пока контролирую вручную, пару раз в сутки смотрю их состояние LiteManager'ом, в случае необходимости жёстко ребутаю по питанию. Может, когда разберусь с ардуиной полчше, чего и наваяю. Я его себе 4 дня назад только купил, как раз под создание детектора-коммутатора. У меня сейчас есть такой-же, но на компе отдельном, а это как-то громоздко, вот и решил автономный модуль собрать.
Ок, если что, стучите в личку.
Могу отдать свои наработки, есть разводки печатных плат, чертежы корпусов для лазерной резки, фотки готовых устройств, ну и всякие сопутсвущие мелочи.
Спасибо, но я как-то на макетной гетинаксине всё леплю, может оно и выглядит хуже, зато этап разработка-внедрение драматически сокращается. Корпуса беру у китайцев, серенькие, невзрачные и дешёвые. Всё равно им в тумбочке лежать. :) А так не откажусь посмотреть, будет, думаю, мне полезно. Ещё раз спасибо.
лички тут нет, скайп ***.
постучал в скайп
нету, свой дайте
vktr36