Физическое окружение человека все время «умнеет», подстраиваясь под запросы и требования хозяина. Речь, конечно же идет об автоматизированных и роботизированных вещах, облегчающих труд и выполняющих все те функции, которые существу разумному делать слишком долго, тяжело или нудно. Большая часть техники такого рода работает с управлением на основе микроконтроллеров, которые в свою очередь, можно назвать миниатюрными компьютерами, ориентированными на контроль другого, более простого оборудования.
Одним из наиболее распространенных на текущий момент, за счет удобства применения и ширины возможностей, можно назвать Arduino, недостатков у которого попросту не существует в качестве системы управления и DIY-проектов, и профессиональной техникой, используемой на крупных и серьезных производствах.
Единственный вопрос становящийся перед проектировщиками «умных» устройств, использующих микроконтроллеры – легкое ими управление человеком, то есть обеспечение простого интерфейса контроля. Одно из наиболее логичных из приходящих на ум решений – человеческий голос, отдавая команды, которыми пользователь абсолютно вербальным образом сможет управлять работой логического выключателя, конечно в рамках заложенной в того программы. Только сразу встает проблема получения голосовых последовательностей устройством. Что ж, есть и решение – платы захвата звука, среди которых в разрезе технологии Arduino сразу вспоминаются KY-037 и KY-038, унифицированные и отличающиеся только размером микрофона.
Датчик звука с цифровым и аналоговым выходами
Конечно, не стоит ждать от них записи MP3 или его полнофункциональной обработки. Но в нише восприятия голосовых команд названые платы-дополнения имеют полное право на существование.
Характеристики
Характеристики у обоих устройств KY-037 и KY-038 достаточно скромные, и отличающихся, как было сказано ранее, между собой только размером микрофона.

- питание — 3,5–5В;
- цифровой выход — есть, однобитный, работающий в режиме индикации наличия звука или тишины;
- аналоговый — присутствует, с градацией получаемого сигнала в 1024 уровня;
- вес — в среднем 12..13 грамм;
- предел чувствительности — до 5 метров;
Принципиальная схема и выводы устройства:

Сразу хочется заметить, что названые детекторы, регистрируют только достаточно громкие звуки и не очень чувствительны к их переходным состояниям, к примеру, используемым в словах или фразах. То есть, сделать выключатель или активатор реагирующий на хлопок и свист гораздо проще, чем запрограммировать систему распознавания голосовых команд с применением KY-037 или KY-038. Некоторые идеи по осуществлению требуемой функциональности будут представлены далее.
Обратите внимание на «регулятор чувствительности» отмеченный на фото платы. С его помощью можно варьировать значение характеристики, улучшая «слух» детектора, в установленных пределах.
Звуковой информатор с датчиком движения
Простые схемы использования
Чтобы продемонстрировать работу датчиков звука с Arduino можно собрать простую схему:

Резистор используемый в ней, берется номиналом в 220 Ом. Основная функциональность выражается в зажигании светодиода при обнаружении громких звуков и гашения его в случае тишины. Скетч:
// Диапазон минимальных и максимальных показателей, устанавливается
// для определения значения аналогового сигнала в тишине у платы
// захвата звука, все что будет отличаться служит указателем
// наличия изменений звукового фона. Определяется опытным путем.
const int SilenceMin = 625;
const int SilenceMax = 637;
// Задание портов IN_DIG цифровой вход с KY-037/038,
// IN_ANALOG аналоговый с нее же и OUT_LED пин управляющий светодиодом
const int OUT_LED = 9;
const int IN_ANALOG = A3;
const int IN_DIG = 1;
void setup() pinMode(OUT_LED, OUTPUT);
pinMode(IN_ANALOG, INPUT);
pinMode(IN_DIG, INPUT);
>
void loop() // Примечание от составителя: если использовать нижеприведенную
// конструкцию, светодиод будет включаться при любом изменении
// звукового фона. Для определения наличия именно команды
// стоит изменить строку на if (AnalogRead(IN_ANALOG) > SilenceMax) if (AnalogRead(IN_ANALOG) > SilenceMax || AnalogRead(IN_ANALOG) < SilenceMin) DigitalWrite(OUT_LED, HIGH);
Delay(250);
DigitalWrite(OUT_LED, LOW);
>
// Или проще, используя логические значения цифрового входа (вставляется вместо конструкции
// if <>
//
//if ( DigitalRead(IN_DIG) == HIGH ) //DigitalWrite(OUT_LED, HIGH);
//Delay(250);
//DigitalWrite(OUT_LED, LOW);
>
>
Изменяя время задержки, между включением и гашением светодиода, а также пробным путем выведя значения «тишины» SilenceMax и SilenceMin, можно добиться работы приведенной схемы в роли детектора движения по звуку. Конечно, качество определения у него будет низкое, но вполне позволяющее применять конструкцию в цепях управления освещением темных мест. Достаточно добавить фоторезистор для определения текущего уровня видимости, в роли которого можно использовать специальную плату Arduino или обычный радиоэлектронный компонент, подключаемый через делитель.

Как видно по схеме, в ней используются два резистора – R1 на 10 кОм и R2 220 Ом. Светодиод LED в финальном варианте можно заменить на релейную группу, для подачи питания на «взрослые» лампы 220В. Скетч, управляющий всем перечисленным хозяйством:
#DEFINE D1 1
#DEFINE D3 3
#DEFINE A2 2
#DEFINE A4 4
// Характеристики «тишины»
const int SilenceMin = 625;
const int SilenceMax = 637;
// Задание портов: IN_DIG цифровой вход с KY-037/038, IN_ANALOG аналоговый с нее же
// OUT_LED пин управляющий светодиодом, IN_FLASH сигнал от фоторезистора.
const int IN_DIG = D1;
const int OUT_LED = D3;
const int IN_LIGHT = A2;
const int IN_ANALOG = A4;
void setup() pinMode(OUT_LED, OUTPUT);
pinMode(IN_ANALOG, INPUT);
pinMode(IN_DIG, INPUT);
pinMode(IN_LIGHT, INPUT);
>
void loop() if ( DigitalRead(IN_DIG) == HIGH DigitalRead(IN_LIGHT) == LOW ) // При подключении фоторезистора, как на схеме в темноте он будет давать
// минимальный сигнал, так-как его сопротивление во мраке максимально.
// На свету будет поступать высокий уровень на вход Ардуино и этот
// блок кода не сработает
DigitalWrite(OUT_LED, HIGH);
delay(10000); // долгая задержка
DigitalWrite(OUT_LED, LOW);
>
Задержка подбирается экспериментально, в зависимости от конкретной чувствительности KY-037 или KY-038, а также их настроек, производимых регулятором на плате устройства.
Некоторая информация о голосовом распознавании
Здесь будут представлены общие идеи, позволяющие впоследствии создать систему голосового командного управления, естественно с ограничениями, накладываемыми мощностью Arduino.

Первое, что нужно учесть при проектировании – обращение к самому конкретному устройству, чтобы его функционирование не начиналось или прерывалось от случайно сказанного слова. То есть, перед отдачей команды нужно будет произносить не похожий на нее идентификатор конкретного контролера. К примеру: «К7 Включение». Описанное, кстати хорошо тем, что нет похожести согласно произносимых звуков.
Структура слова
Основное, на что нужно обратить внимание при проектировании систем распознавания звука – сама фонетика языка. В русском, есть гласные и согласные буквы. Последние еще и бывают шипящего, звонкого и глухого произношения. Устройства улавливающие звуковые волны, наиболее слышат, как раз, первые, вторые и третьи, а вот к последним «глуховаты».
Поэтому, собственно и программировать конечный аппарат требуется именно на их определение, а не слова в целом. Опять же. Каждый человек обладает определенной дикцией и высотой тона голоса. Посудите сами, послушав, как одно и то же слово произносится мужчиной или женщиной. К тому же некоторые люди быстро проговаривают текст, другие медленнее.
Все названые факторы требуется учесть при написании скетча обработки.

Еще одно ограничение, накладываемое платам KY-037 и KY-038 – падение уровня улавливаемого сигнала в зависимости от расстояния до его источника. То есть, нужно предусмотреть сравнение именно разниц поступающих пиков, а не конкретных значений.
Некоторые рекомендации
Определение лучше производить, выявив высоту тонов и длительность произношения в каждом конкретном случае, под индивидуальные характеристики голоса человека. Впоследствии, ввести в скетч усреднение полученных данных на аналоговом входе, алгоритмы которых легко можно найти через поисковые системы. Последнее действие нужно для случаев, когда оператор охрип, осип, устал или находится под действием еще каких-либо факторов, изменяющих вокальные характеристики.

Разбор последовательности звуков проводится не точным соответствием, а логическими условиями, по причине пропуска некоторых в разговорной речи. То есть, предположим, существует массив, содержащий последовательность значений гласных и шипящих, аналогичных используемым в самой команде. Тогда разбор голоса будет выглядеть следующим образом:
Просьба обратить внимание, что приведенный кусок кода служит только целям ознакомления и понимания принципов разбора. Разницу пиков, о которых говорилось ранее, алгоритм не проверяет, сравнивая только конкретные значения.
#DEFINE D1 1
#DEFINE D3 3
#DEFINE A2 2
#DEFINE A4 4
// Характеристики «тишины»
const int SilenceMin = 625;
const int SilenceMax = 637;
const int IN_DIG = D1;
const int IN_ANALOG = A4;
// команда «включение» последний байт для блокирования ошибки
const int command_on[]=;
int tPOS=0; // текущее положение в разбираемом слове
void loop() int flag=0, GFONEM=ReadAnalog(IN_ANALOG), FOUND_COMMAND_ON = 0;
if (GFONEM==command_on[0]) < // совпадение первого звука последовательности, разбираем
flag=1;
while (flag>0) Delay(50); // пауза между произносимыми звуками, подбирается экспериментально
GFONEM=ReadAnalog(IN_ANALOG);
if (GFONEM>MinFONEM) < // ограничитель уровня именно гласных и шипящих,
// они будут выше, чем согласные
if (GFONEM==command_on[tPOS] || GFONEM==command_on[tPOS+1]) // все ок, идем по команде «включение», проверяя
// текущий звук или возможно следующий
FOUND_COMMAND_ON = 1;
> else FOUND_COMMAND_ON = 0;
flag = 1;
>
if ( tPOS == 5 ) < flag = 1 ); // найден последний звук, можно выходить
tPOS++;
>
>
>
if (FOUND_COMMAND_ON == 1) // выполнение действий при команде «включение»
// .
>
>
Для качественного распознавания речи используют различные более сложные алгоритмы. Например нейросетевой с предварительным разложением в ряд Фурье:
- Разделить фразу на отдельные слова, отслеживая промежутки тишины;
- Разложить запись каждого отдельного слово в ряд Фурье — таким образом определятся коэффициенты, соответствующие отдельным частотным составляющим;
- Пропустить вычисленные в п.2 коэффициенты через нейросеть, которая на выходе даст значение слов.
Чтобы такая нейросеть могла «распознавать» слова, подаваемые на её вход, предварительно она должна быть обучена!

Для выполнения такого обучения на вход сети подают эталонное слово, а затем с помощью специальных алгоритмов (например, обратного распространения ошибки) подбирают значения структурных коэффициентов нейронной сети, при которых нейросеть выдаёт правильное значение на выход.
Источник: osensorax.ru
Датчик звука Ардуино подключение (KY-038)
Рассмотрим в этом обзоре датчик звука Arduino ky-038 (ky-037), как подключить датчик звука к микроконтроллеру Arduino. Разберем программу автоматического включения света от хлопков в ладоши, схему и программу для сенсора шума с выводом информации на последовательный порт монитора Arduino IDE. Рассмотрим на примере использование в скетче типа данных boolean, который часто используется в языке программирования C++.
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- датчик звука ky-038
- светодиоды и резисторы
- макетная плата
- коннекторы
Датчик Arduino ky-037 (ky-038) состоит из платы (смотри рисунок ниже), на которой установлены контакты для подключения к плате Arduino Uno или Nano, усилителя звука, потенциометра и электронного микрофона, чувствительного к звукам со всех направлений. С помощью переменного резистора (потенциометра) можно настроить чувствительность микрофона на сенсоре и выбрать, при каком уровне шума будет срабатывать датчик.
Датчик звука Arduino принцип работы, распиновка

Модуль KY-038 Arduino характеристики (datasheet)
- Напряжение питания: 3.3 – 5 В
- Диапазон частот микрофона: 100 – 10000 Гц
- Чувствительность микрофона: 46 ± 2.0, ( 0 дБ = 1 В / Pa ) на 1 кГц
- Рабочая температура: от 0°C до 70°C
Этот модуль позволяет преобразовывать звуковые волны в цифровой сигнал. Когда мембрана микрофона колеблется под воздействием звуковых волн, емкость его конденсатора изменяется, что приводит к изменению напряжения на выходах датчика звука Arduino ky-038 (ky-037), соответствующего звуковому сигналу. Модуль, изображенный на рисунке выше, может генерировать как цифровой, так и аналоговый сигнал.
Как подключить датчик звука к Ардуино ky-038 (ky-037)

Датчик звука Arduino имеет подписанные выходы на плате (обозначение может быть разным у каждого производителя), но у вас не должно возникнуть проблем с подключением датчика к микроконтроллеру Arduino. Датчик питается от 5 Вольт, выход (OUT, S или AO) подключается к любому аналоговому входу на плате Arduino. Контакт DO подключается к цифровому пину, если вы хотите получить цифровой сигнал с датчика микрофона.
Скетч для датчика звука Ардуино (микрофона)
#define RED 10 #define ORG 11 #define GRN 12 #define SOUND A1 void setup() < Serial.begin(9600); pinMode(GRN, OUTPUT); pinMode(ORG, OUTPUT); pinMode(RED, OUTPUT); pinMode(SOUND, INPUT); >void loop() < Serial.println(analogRead(SOUND)); if(analogRead(SOUND) < 50) < digitalWrite(GRN, HIGH); digitalWrite(ORG, LOW); digitalWrite(RED, LOW); >if(analogRead(SOUND) > 50 and analogRead(SOUND) < 100) < digitalWrite(GRN, HIGH); digitalWrite(ORG, HIGH); digitalWrite(RED, LOW); >if(analogRead(SOUND) > 100) < digitalWrite(GRN, HIGH); digitalWrite(ORG, HIGH); digitalWrite(RED, HIGH); >delay(50); >
Заключение. В модуль ky-037 встроен микрофон, а также электроника, позволяющая использовать 2 выхода (аналоговый и цифровой) для обнаружения окружающих звуков с Arduino или совместимого модуля. Цифровой выход выдает высокий или низкий уровень в зависимости от порогового уровня окружающего шума, а аналоговый выход модуля выдает напряжение, изменяющееся в реальном времени в зависимости от шума в помещении.
Источник: arduino-site.ru
Взаимодействие Arduino с датчиком звука и управление устройствами с помощью хлопков
Не хотите добавить в свой следующий проект возможность слышать? Эти звуковые датчики недороги, просты во взаимодействии и способны обнаруживать звуки голоса, хлопки или стук в дверь. Вы можете использовать их для различных проектов, реагирующих на звуки, например, чтобы активировать освещение.

Вы знаете, как работают электретные микрофоны?
Внутри микрофона находится тонкая диафрагма, которая на самом деле представляет собой одну из пластин конденсатора. Вторая пластина – это задняя стенка, которая расположена близко к диафрагме и параллельна ей.
Когда вы говорите в микрофон, звуковые волны, создаваемые вашим голосом, ударяют диафрагму, заставляя ее вибрировать.
Когда в ответ на звук диафрагма начинает вибрировать, по мере того, как пластины становятся ближе друг к другу или дальше друг от друга, начинает изменяться и емкость.
При изменениях емкости изменяется и напряжение на пластинах, что позволяет измерить амплитуду звука.
Обзор аппаратного обеспечения
Звуковой датчик представляет собой небольшую плату, которая объединяет микрофон (50 Гц – 10 кГц) и схему обработки для преобразования звуковых волн в электрические сигналы.
Этот электрический сигнал подается на встроенный высокоточный компаратор LM393 для его оцифровки и выводится на выход (вывод OUT).

Для регулировки чувствительности выходного сигнала модуль содержит встроенный потенциометр.
С помощью этого потенциометра вы можете установить пороговое значение. Таким образом, когда амплитуда звука превысит это пороговое значение, модуль выдаст низкий логический уровень, в остальных случаях будет выдаваться высокий логический уровень.
Эта настройка очень полезна, когда вы хотите запустить какое-то действие при достижении определенного порога. Например, когда амплитуда звука пересекает пороговое значение (при обнаружении стука), вы можете активировать реле для управления освещением. Вот вам идея!
Совет: поворачивайте движок потенциометра против часовой стрелки, чтобы увеличить чувствительность, и по часовой стрелке, чтобы ее уменьшить.

Помимо этого, модуль имеет два светодиода. Индикатор питания загорится, когда на модуль подается напряжение питания. Светодиод состояния загорится, когда на цифровом выходе будет низкий логический уровень.
Распиновка звукового датчика
У данного датчика звука только три вывода:

Вывод VCC подает питание на датчик. Рекомендуется питать датчик напряжением от 3,3 до 5 В.
GND для подключения земли.
Вывод OUT выдает высокий логический уровень, когда тихо, и низкий логический уровень, когда обнаруживается звук. Вы можете подключить его к любому цифровому выводу Arduino или напрямую к 5-вольтовому реле или другому подобному устройству.
Подключение звукового датчика с Arduino
Давайте подключим звуковой датчик к Arduino. Подключение довольно простое. Для начала подключите вывод VCC на модуле к выводу 5V на Arduino, а вывод GND на модуле – к выводу GND Arduino. Теперь подключите вывод OUT к цифровому выводу 7 на Arduino. Вот и всё!
На следующем рисунке показана схема соединений.

Калибровка датчика звука
Для получения точных показаний с вашего звукового датчика, рекомендуется сначала его откалибровать.
Для калибровки цифрового выхода (OUT) модуль содержит встроенный потенциометр.
Поворачивая движок потенциометра, вы можете установить пороговое значение. Таким образом, когда уровень звука превышает пороговое значение, светодиод статуса загорается, а на цифровой выход (OUT) выдается низкий логический уровень.
Теперь, чтобы откалибровать датчик, хлопайте рядом с микрофоном и подстраивайте потенциометр, пока вы не увидите, что светодиод состояния на модуле мигает в ответ на ваши хлопки.
Теперь ваш датчик откалиброван и готов к использованию.
Простой пример: обнаружение звука
Теперь, когда всё подключено, вам понадобится скетч, чтобы проверить эту схему в работе.
Следующий пример обнаруживает хлопки или щелчки и выводит сообщение в мониторе последовательного порта. Попробуйте скетч в работе, а затем мы рассмотрим его подробнее.
#define sensorPin 7 // Переменная для хранения времени, когда произошло последнее событие unsigned long lastEvent = 0; void setup() < // Настраиваекм вывод, к которому подключен датчик, как вход pinMode(sensorPin, INPUT); Serial.begin(9600); >void loop() < // Прочитать показания датчика int sensorData = digitalRead(sensorPin); // Если на вывод подан низкий логический уровень, то звук обнаружен if (sensorData == LOW) < // Если прошло 25 мс с момента последнего состояния низкого логического уровня, // это значит, что обнаружен хлопок, а не какие-либо ложные звуки if (millis() — lastEvent >25) < Serial.println(«Clap detected!»); >// Запомнить, когда произошло последнее событие lastEvent = millis(); > >
Если всё в порядке, то при обнаружении хлопка вы должны увидеть вывод в мониторе последовательного порта, похожий на приведенный ниже.

Объяснение
Скетч начинается с объявления вывода Arduino, к которому подключен вывод OUT датчика.
#define sensorPin 7
Затем мы определяем переменную с именем lastEvent , которая хранит время с момента обнаружения хлопка. Это поможет нам устранить ложные срабатывания.
unsigned long lastEvent = 0;
В функции setup() мы определяем сигнальный вывод, к которому подключен датчик, как входной. А также настраиваем последовательную связь с компьютером.
pinMode(sensorPin, INPUT); Serial.begin(9600);
В функции loop() мы сначала читаем состояние цифрового вывода датчика.
int sensorData = digitalRead(sensorPin);
Когда датчик обнаруживает какой-либо звук, достаточно громкий, чтобы пересечь пороговое значение, логический уровень выходного сигнала становится низким. Но мы должны убедиться, что звук вызван хлопками, а не случайным фоновым шумом. Итак, мы ждем 25 миллисекунд. Если логический уровень на выводе остается низким в течение более 25 миллисекунд, мы заявляем, что обнаружен хлопок.
if (sensorData == LOW) < if (millis() — lastEvent >25) < Serial.println(«Clap detected!»); >lastEvent = millis(); >
Управление устройствами с помощью хлопков
В нашем следующем проекте мы будем использовать звуковой датчик в качестве «детектора хлопков», который включает устройства, питающиеся от сети переменного тока, хлопком в ладоши.
В данном проекте для управления питанием устройств используется одноканальный модуль реле, который будет коммутировать переменное напряжение сети 220 В.
Схема соединений
Схема соединений в этом проекте очень проста.
Предупреждение:
Данная схема взаимодействует с ВЫСОКИМ переменным напряжением сети 220 В. Неправильное подключение или использование может привести к серьезным травмам или смерти. Поэтому данный проект предназначен для людей, имеющих опыт работы и знающих о мерах техники безопасности при работе с высоким переменным напряжением.
Сначала необходимо подать питание на датчик и модуль реле. Подключите их выводы VCC к выводу 5V на Arduino, и выводы GND к выводу GND на Arduino.
Затем подключите выходной вывод (OUT) звукового датчика к цифровому выводу 7 на Arduino, а управляющий вывод (IN) на модуле реле к цифровому выводу 8 Arduino.
Вам также необходимо поместить модуль реле в линию питания устройства, которым вы хотите управлять. Вам придется разрезать один провод в кабеле питания и подключить один конец отрезанного провода (идущий от вилки) к выводу COM (общий) модуля реле, а другой к выводу NO (нормально разомкнутый).
Схема соединений показана на следующем рисунке.

Код Arduino
Ниже приведен скетч для управления устройствами с помощью хлопков.
#define sensorPin 7 #define relayPin 8 // Переменная для хранения времени, когда произошло последнее событие unsigned long lastEvent = 0; // Переменная для хранения состояния реле boolean relayState = false; void setup() < pinMode(relayPin, OUTPUT); // Настроить вывод, подключенный к реле, как выход pinMode(sensorPin, INPUT); // Настроить вывод, подключенный к датчику, как вход >void loop() < // Прочитать показания датчика int sensorData = digitalRead(sensorPin); // Если на вывод подан низкий логический уровень, то звук обнаружен if (sensorData == LOW) < // Если прошло 25 мс с момента последнего состояния низкого логического уровня, // это значит, что обнаружен хлопок, а не какие-либо ложные звуки if (millis() — lastEvent >25) < // изменить переменную состояния реле и установить состояние на выходе relayState = !relayState; digitalWrite(relayPin, relayState ? HIGH : LOW); >// Запомнить, когда произошло последнее событие lastEvent = millis(); > >
После того, как вы загрузили программу в Arduino, и всё включили, датчик должен включать или выключать управляемое устройство каждый раз, когда вы хлопаете.
Объяснение
Если вы сравните этот скетч с предыдущим, вы заметите много общего, кроме нескольких вещей.
В начале мы объявляем вывод Arduino, к которому подключен вывод управления реле (IN). Мы также определили новую переменную relayState для хранения состояния реле.
#define relayPin 8 boolean relayState = false;
В функции setup() мы настраиваем вывод relayPin как выходной.
pinMode(relayPin, OUTPUT);
Теперь, когда мы обнаруживаем звук хлопка, вместо того, чтобы печатать сообщение в мониторе последовательного порта, мы просто переключаем состояние реле.
relayState = !relayState; digitalWrite(relayPin, relayState ? HIGH : LOW);
Исправление проблем
Если датчик звука работает неправильно, попробуйте выполнить следующие действия.
- Дважды проверьте, что источник питания обеспечивает чистое напряжение питания. Поскольку звуковой датчик – это аналоговая схема, он более чувствителен к шуму, создаваемому блоком питания.
- Электретный микрофон в звуковом датчике также чувствителен к механическим вибрациям и шуму ветра. Установка с помощью эластичных/упругих материалов может помочь поглотить вибрацию.
- Диапазон чувствительности этого звукового датчика очень мал, возможно, всего 10 дюймов (примерно 25 см), поэтому, чтобы получить хорошую реакцию, вам нужно создавать шум намного ближе.
Теги
Сохранить или поделиться
На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.
В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.
Источник: radioprog.ru