Простой аналоговый датчик звука для Ардуино своими руками

Содержание

Подключение и настройка датчика звука KY-037

Простой аналоговый датчик звука для Ардуино своими руками

Сегодня разберемся, как работать с модулем датчика звука, он же датчик хлопков KY-037.

Такие датчики часто используются в охранных системах для обнаружения превышения установленного порога шума (обнаружение щелчков замков, шагов, звука двигателя и т.д.).

Модуль датчика звука KY-037 так же часто используют для автоматического управления освещением, реагирующим например, на хлопки в ладоши.

На плате мы видим сам датчик в виде микрофона и микросхему компаратора, которая определяет момент превышения порога громкости. А чувствительность этого самого момента (порога громкости), выставляется с помощью переменного резистора (потенциометра) установленного рядом с компаратором. Если порог звука будет превышен, на выходе D0 появится сигнал высокого уровня.

Давайте для начала подключим датчик звука KY-037 к плате Arduino. Возьмём, например отладочную плату Arduino Nano.

Пин G модуля датчика звука KY-037 подключаем к выводу GND платы Ардуино. Пин + датчика звука соединяем с выводом 5V платы Ардуино. Вывод D0 датчика, подключаем к цифровому выводу D5 платы Ардуино.

Настройка датчика звука KY-037

Подключаем плату Arduino Nano к компьютеру. На модуле датчика хлопков KY-037, должен сразу загореться индикатор питания L1. Необходимо сначала взять отвертку и подкрутить подстроечный резистор, настроив тем самым чувствительность датчика.

А в настройке чувствительности нам поможет индикатор срабатывания датчика L2. Если индикатор L2 при включении модуля тоже загорается, крутим подстроечный резистор против часовой стрелки до тех пор, пока не дойдем до момента затухания индикатора.

Если же индикатор L2 находится в выключенном состоянии при включении модуля, значит наоборот, крутим подстроечный резистор по часовой стрелке, пока не дойдем до момента, когда индикатор начнет загораться.

В итоге в этом месте, где чуть повернув подстроечный резистор в одну или другую сторону, индикатор стремиться потухнуть или загореться, нам нужно повернуть совсем немного против часовой стрелки, чтобы индикатор L2 потух, но при хлопках в ладоши пытался загораться.

Открываем программу Arduino IDE, создаем новый файл и вставляем в него код, который нам покажет каким образом приходит цифровой сигнал с вывода D0 в случаях превышения порога шума установленного с помощью подстроечного резистора.

const int sensorD0 = 5;  // Пин Arduino к которому подключен пин D0 датчика void setup () // Настройки  {  Serial.

begin (9600); // Инициализация SerialPort  } void loop () // Основной цикл программы  {  int sensorValue = digitalRead(sensorD0); // получаем сигнал от датчика  if (sensorValue == true) // Если пришел сигнал высокого уровня    Serial.println(sensorValue); // Выводим цифровое значение на терминал  }

Заливаем данный скетч и переходим в меню “Инструменты” – “Монитор порта”. Окно мониторинга порта будет пустым, но как только мы будем хлопать в ладоши, в окне появятся единицы, говорящие о наличии сигнала высокого уровня на выводе D0 модуля датчика звука.

Всё хорошо. Мы настроили датчик и убедились, что наша Ардуинка прекрасно принимает сигнал от него.

Включаем свет по хлопку и выключаем автоматически по таймеру

Разобрались, как подстроить датчик звука KY-037 и как он реагирует, если превышен установленный порог громкости. Теперь добавим в нашу схему обычный светодиод и напишем простой код, который будет при обнаружении шума зажигать светодиод и тушить его по истечении какого-то времени.

Светодиод подключаем к пину D2 платы Ардуино. Не забываем поставить любой резистор на землю (GND) светодиода. И загружаем следующий скетч.

const int sensorD0 = 5;  // Пин Arduino к которому подключен выход D0 датчикаconst int diod = 2; // Пин Arduino к которому подключен светодиод void setup ()   {  pinMode(diod, OUTPUT); // устанавливаем цифровой пин 2 в режим выхода     } void loop ()   {   int sensorValue = digitalRead(sensorD0); // получаем сигнал с датчика      if (sensorValue == 1) //если получен сигнал от датчика в виде единицы    {    digitalWrite(diod, HIGH); // включаем светодиод    delay(4000); // делаем паузу, чтобы светодиод горел 4 секунды    }  if (sensorValue == 0) // если приходит сигнал от датчика в виде нуля    digitalWrite(diod, LOW); // выключаем светодиод      }

Пробуем хлопнуть в ладоши. Видим, что светодиод загорелся, проработал 4 секунды и потух. Каждая строка подробно прокомментирована и где изменить время горения светодиода, думаю понятно.

Датчик звука KY-037 включает свет по хлопку и выключает свет по хлопку

Давайте загрузим новый скетч, который по хлопку будет включать или выключать наш светодиод. Светодиод мы взяли для примера, нет ни каких проблем подсоединить вместо него модуль реле и тем самым включать или выключать любые бытовые приборы.

const int sensorD0 = 5;  // Пин Arduino к которому подключен выход D0 датчикаconst int diod = 2; // Пин Arduino к которому подключен светодиодint diodState = LOW; // Статус светодиода “выключен” void setup ()  {  pinMode(diod, OUTPUT); // устанавливаем цифровой пин 2 в режим выхода    }   void loop ()  {  int sensorValue = digitalRead(sensorD0); // получаем сигнал с датчика       if (sensorValue == 1 && diodState == LOW) //если порог громкости достигнут и светодиод был ВЫКЛЮЧЕН    {    digitalWrite(diod, HIGH); // включаем светодиод    diodState = HIGH; // устанавливаем статус светодиода “включен”    delay(100); // небольшая задержка для фильтрации помех    }  else // иначе    {    if (sensorValue == 1 && diodState == HIGH) // если порог громкости достигнут и светодиод был ВКЛЮЧЕН      {      digitalWrite(diod, LOW); // выключаем светодиод      diodState = LOW; // устанавливаем статус светодиода “выключен”      delay(100); // небольшая задержка для фильтрации помех      }    }      }

Хлопаем теперь один раз в ладоши, свет зажигается. Хлопаем повторно в ладоши, светодиод тухнет.

Включаем свет по двойному хлопку

Давайте усложним задачу и напишем код для работы датчика звука KY-037 по двойному хлопку. Тем самым сократим возможные случайные срабатывания от побочных звуков, которые могут возникать в режиме на один хлопок.

const int sensorD0 = 5;  // Пин Arduino к которому подключен выход D0 датчикаconst int diod = 2; // Пин Arduino к которому подключен светодиодint diodState = LOW; // Статус светодиода “выключен”long soundTime=0; // время первого хлопка void setup ()  {  pinMode(diod, OUTPUT); // устанавливаем цифровой пин 2 в режим выхода    }   void loop ()  {  int sensorValue = digitalRead(sensorD0); // получаем сигнал с датчика       if (sensorValue == 1 && diodState == LOW) //если порог громкости достигнут и светодиод был ВЫКЛЮЧЕН    {    long diodTime=millis(); // записываем текущее время     //если текущее время хлопка больше времени последнего хлопка на 100 миллисекунд     //и хлопок произошел не позже чем через 1000 миллисекунд после предыдущего    //считаем такой хлопок вторым УСПЕШНЫМ     if((millis()>soundTime) && ((diodTime-soundTime)>100) && ((diodTime-soundTime)

Источник: http://voltom.ru/project/96-podklyuchenie-i-nastrojka-datchika-zvuka-ky-037

Датчик движения своими руками на Arduino | Каталог самоделок

Простой аналоговый датчик звука для Ардуино своими руками

Вспомним, что основа данного проекта Arduino. Он выполняет ряд важнейших функций: считывает данные с ИК-датчика, обрабатывает сигналы, реагирует на движения, а USB оповещает компьютер о необходимости отправить сообщение. В этой статье рассмотрим два вопроса:

  1. Подключение  PIR-датчика к Arduino;
  2. Как настроить взаимосвязь между датчиком и автоматической отправкой e-mail.

Необходимо для проекта:

  • Arduino UNO (выбрать можно на Aliexpress).
  • PIR-датчик .
  • Бредбоард.
  • Связка проводов.

Все перечисленные элементы для сборки можно увидеть на фотографиях:

В первую очередь нужен ПК с подключением к интернету. Мы  использовали Raspberry Pi.

Подключаем PIR-датчик к набору Arduino:

Чтобы осуществить этот этап нужно взять провода, которые идут от датчика, и прикрепить их к платформе. Далее вам будет предоставлена фотография со схемой:

Работа со скетчем

При возникновении движения Arduino при помощи  USB Serial должен послать электронное сообщение. Конечно же, если при любом возникшем движении отправлять  e-mail, то почтовый ящик будет переполнен. Поэтому мы исправили это таким образом, если между двумя сигналами короткий промежуток времени, будет отправляться письмо с таким текстом:

int pirPin = 7;int minSecsBetweenEmails = 60; // 1 minlong lastSend = -minSecsBetweenEmails * 1000;void setup(){pinMode(pirPin, INPUT);Serial.begin(9600);}void loop(){long now = millis();if (digitalRead(pirPin) == HIGH){if (now > (lastSend + minSecsBetweenEmails * 1000)){Serial.println(“MOVEMENT”); lastSend = now;}else{Serial.println(“Too soon”); }}delay(500);}

«MinSecsBetweenEmails» – эта переменная может переключаться на другие значения, которые будут удобны пользователю. К примеру, можно установить интервал, который равен одной минуте – это будет означать, что следующий  e-mail будет отправлен только через 60 секунд.

«LastSend» поможет отследить время, в которое было отправлено последнее сообщение. Инициализация данной переменной происходит с отрицательным числом, которое равно миллисекундам, что указаны в «MinSecsBetweenEmails». В итоге, мы получаем гарантию того, что после запуска скетча в Arduino сразу же запустится PIR-датчик.

За счет чего мы можем высчитать миллисекунды, сравнить их число со временем последнего срабатывания датчика? Все благодаря встроенной функции под названием Millis. В том случае, если обнаружено движение, но прошло  мало времени с последнего активизации датчика будет отправлено письма с текстом «Too soon».

Эту функцию сначала надо проверить. Для этого открывается Serial Monitor. Далее рассмотрим, как он выглядит:

После того, как вы убеждены в исправной работе, можно записывать программу на Python, его используют для обрабатывания сигналов от платформы.

Как установить PySerial и Python:

Операционная система Linux имеет автоматически установленный Python. Система Windows не обладает такой характеристикой, поэтому программу необходимо установить самостоятельно. PySerial исполняет роль библиотеки, она поможет поддерживать связываться с Arduino.

Установка Python:

Python 3 нередко вызывает затруднения при работе с PySerial, особенно если вы используете Windows. Чтобы этого избежать, можно вместо третьей версии скачать Python 2.

Завершив установку программы в меню «Пуск» можно обнаружить особую группу. Когда мы перейдем к процессу установки библиотеки, нам понадобится сотрудничество с Python, применив командную строку. Поэтому лучше сразу добавить к PATH нужный каталог. Далее можно увидеть вспомогательную фотографию:

Для добавления каталога нам потребуется: открыть панель управления, в ней найти раздел «System Properties». Потом нажимаем клавишу, которая называется «Переменная среда» (Environment Variabes), перед нами всплывет окно. В его нижней части должен находиться «Path», который нужно выбрать.

Теперь кликнем на «Edit» – Изменение и завершаем процесс нажатием «значения переменной». Нельзя удалять текст, который получили, к нему следует дописать такую надпись – «;C:\Python27». Не забываем после каждой папки, что указана в тексте ставить «;». Теперь проверяем правильно ли осуществлен ввод «Path». Для этого в командную строку вводим слово «python».

Если ошибок не возникло, то на экране появится следующая картинка:

Установить  PySerial:

Независимо от используемой операционной системы, скачиваем .tar.gz установочный пакет для PySerial 2.6 с . Этот сайт может помочь это сделать – https://pypi.python.org/pypi/pyserial. Получаем файл с именем pyserial-2.6.tar.gz. Если используется Windows, то будет нужна распаковка файлов в выбранную папку.

Это не стандартный файл формата ZIP, придется сделать дополнительные действия – скачать 7-zip (это можно сделать здесь – http://www.7-zip.org/). Для системы Linux необходимо воспользоваться терминальной сессией, в ней дать команду «CD», указать название той папки, в которую скачали  pyserial-2.6.tar.gz.

Чтобы выполнить распаковку нужно ввести:

$ tar -xzf pyserial-2.6.tar.gz

После этого потребуется выполнить команду:

sudo python setup.py install

Python

Потребуется создать отдельную программу для работы с Python. Нужно скопировать код в файл с таким именем – «movement.py». В Linux можно использовать «нано» редактор, а для системы  Windows необходимо создать файл, используя редактор Python «IDLE ». Он доступен в меню «Пуск».

import timeimport serialimport smtplibTO = 'putyour@email.here'GMAIL_USER = 'putyour@email.here'GMAIL_PASS = 'putyourpasswordhere'SUBJECT = 'Intrusion!!'TEXT = 'Your PIR sensor detected movement'ser = serial.Serial('COM4', 9600)def send_email():print(“Sending Email”)smtpserver = smtplib.SMTP(“smtp.gmail.com”,587)smtpserver.ehlo() smtpserver.starttls()smtpserver.ehlo smtpserver.login(GMAIL_USER, GMAIL_PASS)header = 'To:' + TO + '' + 'From: ' + GMAIL_USERheader = header + '' + 'Subject:' + SUBJECT + ''print headermsg = header + '' + TEXT + ' \'smtpserver.sendmail(GMAIL_USER, TO, msg)smtpserver.close()while True:message = ser.readline()print(message)if message[0] == 'M' :send_email()time.sleep(0.5)

Это показано на следующей картинке:

После изменений, программа запуститься при помощи командной строки:

python movement.py

Итак, установка завершена.

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

Прикрепленные файлы: Скетчи и коды.  

 Доронин Виталий, Липецк.

Источник: https://volt-index.ru/electronika-dlya-nachinayushih/datchik-dvizheniya-svoimi-rukami-na-arduino.html

Особенности выбора датчика звука и схема подключения устройства к Ардуино

Простой аналоговый датчик звука для Ардуино своими руками

Светильники, оснащенные датчиком звука, способны различать шум шагов и голоса, благодаря чему они включают освещение лишь на период, когда человек находится в зоне их действия.

Таким образом, они значительно экономят электроэнергию, а соответственно, и бюджет. Датчик звука позволяет получить аналоговое значение, которое соответствуют уровню громкости звука.

Такой модуль обладает высокой чувствительностью.

Что из себя представляют датчики звука?

Устройства этого типа на рынке систем безопасности появились еще в начале 90х, но по-прежнему остаются актуальными. Однако за прошедшее время они изменились: стали более совершенными, повысилась точность фиксации, снизилось число ложных срабатываний.

В таком устройстве роль чувствительного элемента играет микрофон, внутрь которого встроен специальный предусилитель. П

роцесс функционирования устройства заключается в трансформации сигнала с микрофона на усилитель, который осуществляет проверку питания и воспроизводит предупреждающие сигналы.
Также в механизм датчика входят и другие электронные устройства, которые отвечают за деление сигнала с последующим их анализом.

Этот механизм имеет высокую надежность и отличается экономичностью, он способен уменьшить затраты на электричество. Если в комнате порог шума превышает определенное значение, тогда свет включается автоматически и горит на протяжении нескольких секунд. Если же звуки в помещении отсутствуют — свет выключится через 10-15 секунд.

Зачем нужен и где используется?

Датчики данного вида чаще всего используются при освещении мест общего пользования: тамбурах, подъездах жилых многоэтажных домов, общественных туалетах и т.д. Нередко приборы могут применять в системах охранных сигнализаций. Звуковые устройства отлично работают со всеми типами ламп: светодиодными, люминесцентными.

Действие звукового датчика:

  1. Шумовые датчики включают освещение в помещении в темное время суток при наличии резких звуков, таких как кашель, звук каблуков, хлопок и т.д.
  2. Акустический датчик выключает свет примерно через 20-30 секунд после последних звуковых сигналов. Это обеспечивает свечение лампы на весь период пребывания людей в помещении.

Снижение расхода электроэнергии при использовании датчика звука достигается:

  1. За счет выключения осветительного прибора после покидания людьми помещения.
  2. За счет выключения осветительного прибора при достижении естественного уровня освещения. Многие приборы имеют настройки включения относительно уровня освещенности.

Таким образом, датчики звука — это эффективное решение, способствующее экономии освещения в общественных местах.

Как работает: устройство и принцип действия

Датчик получает сигнал о том, что в зоне его действия присутствует человек. После получения этой информации он выполняет одновременное включение времени и реле, которое включает лампу. Реле времени оснащено специальной системой регулировки, позволяющей самостоятельно задать диапазон срабатывания.

Когда установленное время истекает, реле выключает реле лампы, и в случае отсутствия какого-либо движения свет гаснет. Если установленное время еще не истекло и зафиксировано движение, тогда начинается новый отсчет. Помимо этого, прибор способен отслеживать уровень освещенности, его также можно отрегулировать.

Когда в помещении светло, осветительный прибор не включится.

Отзывы о датчиках шума: плюсы и минусы

Согласно отзывам пользователей, шумовые датчики имеют ряд преимуществ:

  • Невысокая стоимость.
  • Большой радиус действия.
  • Прием сигналов не зависит от месторасположения источника шума.

Единственным недостатком устройств является невозможность их размещения в местах, где много шума в зоне их действия.

Производители и популярные модели: рейтинг лучших и цены и стоимость

Сегодня на рынке представлено множество моделей шумовых датчиков, наиболее популярные из них.

Звуковой датчик LM393

Характеристики:

  • Используется для акустического управления светом.
  • Встроен фоточувствительный датчик.
  • Главный чип — LM393, встроен конденсаторный микрофон electret.
  • Одноканальный выходной сигнал.
  • Выходной эффективный сигнал невысокого уровня.
  • Индикация выходного сигнала.
  • Фиксирует интенсивность звукового окружения.
  • Рабочее напряжение устройства — DC 3.3-5 В.
  • Размер — approx.4,5 (L) x 0,9 (w) x 1,7 (H) см.

Цена — 180 руб.

Детектор шума LM386

Характеристики:

  • Высокий уровень обнаружения шума.
  • Бортовой аудио усилитель мощности.
  • Регулируемая амплитуда напряжения для аналогового вывода.
  • сигнал усиления в пределах 200.
  • Индикатор выходного сигнала
  • Мощность — 3,3 В ~ 5,3 В.
  • Размер монтажных отверстий — 2.0 мм
  • Размер — 39,0 мм x 21,0 мм.

Цена — 195 руб.

Звуковой индикатор XD-74

Характеристики:

  • Может распознавать только отсутствие звука или наличие (на основе принципа вибрации).
  • Устройство не распознает размер звука либо определенные частоты звука.
  • Предусмотрено фиксированное отверстие для легкой установки (для болта).
  • Напряжение работы — 3,3 В-5 В.
  • Выходная форма переключения выхода s -0 и 1 High-Low.
  • Маленький размер печатной платы — 3,2 см x 1,7 см.

Цена — 570 руб.

FC-04

Характеристики:

  • Датчик отлично реагирует на звуки ударов, щелчков, вибрации, звук открывающегося замка. Устройство плохо реагирует на речь. Питание устройства может быть взято с основной платы Arduino.
  • Датчик звука FC-04 функционирует с системами на базе Arduino (питание 3,3 или 5 В).
  • Индикатор срабатывания и включения датчика.
  • Два светодиода.
  • Вилка разъема из 3-х контактов с подписью для каждого контакта.
  • Максимальная температура окружающего воздуха во время работы прибора от 0 до — 70 °C.
  • Ток потребления — 1,4 мА.
  • Питание — 2,7-5,5 В.
  • Размеры — плата 32 X 18,5 мм, отверстия для монтажа 4 мм, модуль 47 X 10 X 18,5 мм.
  • Выход модуля подключается к микроконтроллеру.

Цена — 250 руб.

Устройство обнаружения звука Trema-модуль v2.0

Характеристики:

  • Trema — аналоговый модуль, выход «S» (Signal) подключается ко всем аналоговым входам Arduino.
  • Схема установки модуля при подключении — Trema Set Shield.
  • Потребляемый ток — от 3,3 до 3,7 мА (зависит исключительно от уровня громкости).
  • Входное напряжение — 5 В постоянного тока.
  • Частотный диапазон -35 Гц … 10 кГц.
  • Чувствительность — -40 дБ ± 2 дБ.
  • Напряжение подается на выводы «G» (GND) и «V» (Vcc) модуля.
  • Габариты — 30×30 мм.

Цена — 350 руб.

Какого производителя и какой тип лучше выбрать: ТОП-3

Выбор звукового датчика зависит от характеристик, производителя и стоимости.

Что учитывать при выборе устройства?

Большой выбор современных моделей шумовых датчиков предусматривает возможность приобретения устройств с учетом акустики контролируемого объекта. Это позволяет максимально исключить ложные срабатывания.

Выбирая прибор, стоит уделить внимание следующим параметрам:

  • Радиус действия.
  • Вид и площадь обслуживаемой поверхности.
  • Ток потребления.
  • Чувствительность.
  • Частотный диапазон.

3 лучших модели

К наиболее популярным моделям относятся:

  1. LM393 со встроенным фоточувствительным датчиком и невысокой стоимостью — 180 руб.
  2. Trema-модуль v0 с высокими характеристиками и возможностью подключения практически ко всем аналоговым входам Arduino. Цена — 350 руб.
  3. LM386 с высоким уровнем обнаружения шума и регулируемой амплитудой напряжения для аналогового вывода. Цена — 195 руб.

Как подключить датчик звука к Ардуино?

Подключить датчик звука к Ардуино довольно просто. Он состоит из:

  • усилителя звука,
  • платы с смонтированными выходами,
  • подстроечного резистора
  • электронного микрофона, который чувствителен к приходящему звуку.

Переменным резистором (регулятором чувствительности) можно выбирать, от какого конкретно звука будет срабатывать устройство.

Плата расширения для Arduino переводит звуковые колебания в цифровой сигнал. Во время колебаний мембраны в микрофоне под воздействием звуковых волн изменяется емкость конденсатора, вследствие чего изменяется напряжение на выходах датчика звука. Оно соответствует звуковому сигналу.

Датчик звука для Ардуино имеет подписанные выходы (у каждого производителя это обозначение может отличаться), однако проблем с подключением устройства к Ардуино практически никогда не возникает. Питание прибора производится от 5V, выход (AO, S или OUT) подключается к любому входу на Arduino Uno, выход DO — к Pin 0.

Для подключения понадобятся следующие детали:

  • Плата Arduino Uno.
  • USB-кабель.
  • Макетная плата.
  • Провода «папка-мамка» и «папка-папка».
  • 1 датчик звука.
  • 1 резистор 220 Ом.
  • 1 светодиод.

Стоимость

Цена на популярные модели датчиков звука зависит от их характеристик и производителя.

Так, стоимость датчика LM393 варьируется от 145 до 200 рублей.

Более дорогая модель шумового устройства Trema-модуль v2.0 обойдется от 280 до 370 рублей.

Где купить датчик звука для квартиры и дома?

Приобрести данные изделия можно на интернет-площадках и практически во всех городах на территории России.

В москве

  1. ООО «Айрдуино», Леснорядский переулок, 18 оф.2 Тел.: 8 (499) 500-14-56.
  2. ООО «Arduinomegakit» , ул. Малая Семеновская, дом 3А стр.1 Тел.: +7 (499) 502-84-00.
  3. Магазин «ТерраЭлектроника», ул. Дербеневская, дом 1 Тел.: +7 (495) 221-78-04

В санкт-петербурге

  1. Магазин «Умные Модули», пр. Луначарского д. 11, корп. 1 Тел: (812) 980 85 55.
  2. Магазин «RoboShop», ул. Гончарная, д.13 Тел.: 7 (812) 318-4574.
  3. ООО «ТД Промэлектроника», ул. Новочеркасский бульвар, 31 Тел.: (499) 357-22-33.

Учитывая вышеперечисленные показатели можно укомплектовать систему охраны шумовым оборудованием, которое обеспечит высокую безопасность и, следовательно, поможет сохранить имущество. Довольно сложно выбрать одну модель устройства и оценить ее как лучшую, поскольку каждая из них имеет свои преимущества и характерные особенности.

Назначение каждого датчика звука напрямую зависит от параметров объекта и результата, который ожидает пользователь.

Источник: https://vidsyst.com/datchik/zvuka.html

Ардуино: динамик

Простой аналоговый датчик звука для Ардуино своими руками

На самых первых уроках мы познакомились со светодиодами, которые часто используются в электронике как индикаторы состояния.

Самым простым примером может служить индикатор питания, с помощью которого прибор сообщает пользователю, что он включен. Очень часто вместе со световой индикацией, в устройствах применяется звуковая индикация.

Во многих электронных приборах есть источник звука, который как и световой индикатор помогает пользователю в работе.

Обычно в электронике используются два типа источников звука:

  • громкоговоритель (динамик);
  • звукоизлучатель (зуммер).

В этом уроке мы поговорим о динамике. Разберем подробно его устройство и попробуем проиграть мелодию на Ардуино!

1. Громкоговоритель, он же динамик

Все громкоговорители можно разделить на два подтипа: электродинамический и пьезоэлектрический. Именно от названия первого подтипа пошло хорошо известное нам название динамик.

Наверное каждый из нас хотя бы раз в жизни разбирал какой-нибудь старый динамик. Внутри него обязательно есть постоянный магнит, который прочно склеен с металлическим диском и цилиндрическим якорем по середине.

Кроме магнита в динамике еще есть небольшая электромагнитная (или звуковая) катушка, намотанная тонким лакированным проводом. Катушка приклеена к гофрированному подвесу и к диффузору. Все эти части изображены на схеме разреза динамика.

Человеку, знакомому со школьным курсом физики не составит труда догадаться как работает это устройство. Мы знаем, что если подать на звуковую катушку напряжение, то в её витках возникнет электрический ток (ну это уж совсем очевидно). Согласно закону Ампера, на проводник с током, находящийся в магнитном поле будет действовать сила Ампера.

Направление этой силы можно легко вычислить с помощью правила левой руки: если вектор манитного поля направлен в ладонь, а пальцы направлены по току (вдоль витков провода), то большой палец будет указывать направление силы. Именно сила Ампера то притягивает катушку к основанию якоря, то отталкивает от него, в зависимости от направления электрического тока.

То есть подавая на катушку переменный ток, мы заставим её колебаться. Звуковая катушка прочно соединена с диффузором, так что он тоже начнет колебаться. Движение же большого диффузора приведёт к колебанию большой массы воздуха, что мы и называем звуковой волной!

2. Генератор звука на транзисторах

Современные динамики могут иметь очень маленький размер. В нашем уроке мы будем использовать миниатюрный динамик, который мы даже разобрали для наглядности.

В отличие от своих старших собратьев, он имеет немного иную конструкцию. В этом динамике катушка прочно закреплена на основании, а колеблется вместо неё тонкая металлическая мембрана. По кругу же как и прежде размещается постоянный магнит.

Сделаем простейший генератор звука на двух транзисторах. Схема генератора представляет собой так называемый несимметричный мультивибратор, который при подаче питания будет формировать периодический импульсный сигнал.

Принципиальная схема генератора звука на транзисторах

В схеме есть:

  • NPN транзистор 2n2222;
  • PNP транзистор 2n2907;
  • резистор с номиналом от 10 до 100 К;
  • конденсатор 100 нФ.

Внешний вид макета

Собираем сначала схему и в самом конце подключаем к ней батарейку.

В текущем варианте динамик будет издавать пронзительный писк на высокой частоте. Изменить частоту звука можно с помощью конденсатора C1. Если параллельно с C1 подключить еще один или два точно таких же конденсаторов на 100 нФ, частота звука станет ниже.

3. Подключение динамика к Ардуино

Теперь мы знаем как заставить динамик издавать один тон без использования микроконтроллера. Но такой простой генератор может понадобиться разве что сигнального гудка на автомобиле. Нам же больше интересно проигрывать мелодии, речь и разные звуковые сэмплы, с помощью которых робот может общаться с человеком. В этом нам поможет Ардуино.

Подключим динамик к Ардуино по следующей схеме.

Принципиальная схема подключения динамика к Ардуино

Внешний вид макета

4. Программа электронного метронома

Метроном — это устройство, которое задает ритм для музыканта. То есть нам потребуется издавать краткий звук с заданным периодом, скажем в 1 секунду.

Для генерации звука заданной частоты воспользуемся функцией tone, которая имеет следующий формат:

tone( контакт, частота [, длительность] );

  • здесь контакт — номер вывода Ардуино к которому подключён динамик;
  • частота — частота генерируемого звука в герцах;
  • длительность — длительность звука в миллисекундах (параметр необязательный).

Как только мы вызовем функцию tone, Ардуино начнет генерировать импульсный сигнал и будет делать это, пока мы принудительно не выключим генерацию с помощью другой функции — noTone:

noTone( контакт );

Аргумент контакт — это номер вывода Ардуино к которому подключён динамик.

Примечание. Важно учитывать, что Ардуино может одновременно генерировать только один тон на одном контакте. Если вызовем функцию tone для одного контакта, и пока идет генерация попытаемся вызвать tone для другого контакта, то последний вызов будет попросту проигнорирован.

Программа метронома идентична программе для мигания светодиодом, за исключением того, что мы вместо функции digitalWrite применяем tone и noTone.
const byte dynPin = 2; void setup() { pinMode( dynPin, OUTPUT ); // настраиваем контакт №2 на выход} void loop() { tone( dynPin, 100 ); // генерируем звук с частотой 100 Гц delay( 100 ); // пауза 500 миллисекунд noTone( dynPin ); // выключаем звук delay( 900 ); // снова пауза 500 мс}

Загружаем программу на Ардуино и внимаем ритмичному звуку метронома. Следующий пример по-сложнее — будем играть мелодию!

5. Играем ноты на Ардуино

Теперь, когда мы умеем генерировать звук любой частоты, попробуем проиграть последовательно десять нот.

const int dynPin = 2; int numTones = 10;// Ноты C,C#,D,D#,E,F,F#,G,G#,Aint tones[10] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440}; void setup(){ pinMode( dynPin, OUTPUT );} void loop(){ for( int i = 0; i < numTones; i++ ){ tone( dynPin, tones[i] ); delay( 500 ); } noTone( dynPin );}

Для удобства хранения последовательности нот мы использовали массив tones. В следующем примере мы будем проигрывать десятки нот, и без массива наша программа стала бы через чур громоздкой и непонятной.

6. Мелодия из Звёздных войн на Ардуино

Наконец, попробуем воспроизвести полноценную мелодию из известной всем космической саги.

const byte dynPin = 2;const byte COUNT_NOTES = 39; // частоты нотint tones[COUNT_NOTES] = { 392, 392, 392, 311, 466, 392, 311, 466, 392, 587, 587, 587, 622, 466, 369, 311, 466, 392, 784, 392, 392, 784, 739, 698, 659, 622, 659, 415, 554, 523, 493, 466, 440, 466, 311, 369, 311, 466, 392}; // длительности нотint durations[COUNT_NOTES] = { 350, 350, 350, 250, 100, 350, 250, 100, 700, 350, 350, 350, 250, 100, 350, 250, 100, 700, 350, 250, 100, 350, 250, 100, 100, 100, 450, 150, 350, 250, 100, 100, 100, 450, 150, 350, 250, 100, 750}; void setup() { pinMode( dynPin, OUTPUT ); // Настраиваем контакт на выход } void loop() { for (int i = 0; i

Источник: http://robotclass.ru/tutorials/arduino-speaker/

Фильтрация шумов аналогового сигнала на Arduino

Простой аналоговый датчик звука для Ардуино своими руками

Любой аналоговый датчик, соединительные провода, да и сам аналоговый вход контроллера вносят в результирующее измеренное значение множество шумов. Они мешают нам получить реальное значение параметра с повторяемой точностью.

Подключив датчик к контроллеру, увидим постоянно скачущие значения физической величины. Если нам нужно управлять каким-либо исполнительным механизмом в зависимости от величины такого прыгающего значения, то механизм может вести себя довольно неадекватно. Так что любой аналоговый сигнал рекомендуется сглаживать при помощи программного фильтра.

Давайте рассмотрим два интересных способа программной фильтрации этих шумов. 

Следующая программа для контроллера Arduino считывает аналоговый вход и выводит в монитор порта нефильтрованное значение, и два значения отфильтрованные двумя разными способами.

int sensorPin = A0; // номер аналогового входа // функция считывает аналоговый вход заданное количество раз// и возвращает отфильтрованное значениеint readMean(int pin, int samples){ // переменная для хранения суммы считанных значений int sum = 0; // чтение и складывание значений for (int i = 0; i < samples; i++){ sum = sum + analogRead(pin); } // делим сумму значений на количество измерений sum = sum/samples; // возвращаем среднее значение return sum;} // функция считывает аналоговый вход заданное количество раз// и возвращает медианное отфильтрованное значениеint readMedian (int pin, int samples){ // массив для хранения данных int raw[samples]; // считываем вход и помещаем величину в ячейки массива for (int i = 0; i < samples; i++){ raw[i] = analogRead(pin); } // сортируем массив по возрастанию значений в ячейках int temp = 0; // временная переменная for (int i = 0; i < samples; i++){ for (int j = 0; j < samples - 1; j++){ if (raw[j] > raw[j + 1]){ temp = raw[j]; raw[j] = raw[j + 1]; raw[j + 1] = temp; } } } // возвращаем значение средней ячейки массива return raw[samples/2];}void setup(){ Serial.begin(9600);}void loop(){ // выводим значение на аналоговом входе в монитор порта Serial.print(analogRead(sensorPin)); Serial.print(” “); // выводим среднеизмеренное значение Serial.print(readMean(sensorPin, 15)); Serial.print(” “); // выводим медианное отфильтрованное значение Serial.println(readMedian(sensorPin, 15)); delay(100);

}

Изобретено множество программных фильтров, но мы здесь рассматриваем два самых испоьзуемых типа: фильтр по среднему значению и медианный фильтр.

Первый – фильтр по среднеизмеренному значению

Данный алгоритм собирает несколько значений и вычисляет по ним среднее значение. Он довольно хорошо убирает шум, но требует больших затрат времени цикла от контроллера.

Из-за того, что необходимо сделать несколько выборок сигнала с аналогового входа. Таким образом увеличивается время ответа при опросе входного значения главной программой.

Но медленное получение значения лучше чем скачущее значение.

1) Объявляем функцию с двумя параметрами: первый содержит номер аналогового входа Arduino, куда подключен датчик; а второй задает количество выборок.2) Далее мы циклически считываем значение аналогового входа и каждый раз прибавляем его к переменной sumint sum = 0;for (int i = 0; i < samples; i++){sum = sum + analogRead(pin);}3) Дальше находим среднее значение. Сумму всех значений выборок делим на количество выборок

sum = sum/samples;

Второй фильтр – медианный

Алгоритм этого программного фильтра немного сложнее, но действеннее. Он не делает математических вычислений над выборками. Фильтр основан на допущении, что выбросы шума расположены равномерно как в позитивную сторону так и в негативную по отношению к реальному значению.

Этот алгоритм считывает ряд значений с аналогового входа контроллера Arduino, сортирует их по возрастанию и выбирает значение, стоящее в центре полученного списка.

В общем случае, если выбросы шума расположены равномерно с двух сторон от реального значения, то получим точную величину.

1) Объявляем функцию медианного фильтра, принимающую номер аналогового входа и количество выборокint readMedian (int pin, int samples){2) Дальше объявляем массив для хранения данных и в цикле заполняем этот массив считываемыми с аналогового входа даннымиint raw[samples];for (int i = 0; i < samples; i++){raw[i] = analogRead(pin);

}

Дальше алгоритм делает сортировку массива по значению. Для этого используется так называемый пузырьковый алгоритм. Он выстроит ячейки массива по порядку от меньших значений до больших.

И в конце функции возвращаем значение средней ячейки отсортированного массива.

return raw[samples/2];

Основной цикл программы

В основном цикле программы мы просто циклически выводим полученные данные в монитор порта, чтобы проследить за изменениями измеряемого параметра во времени. В одну строку программа должна выводить нефильтрованное значение и два фильтрованных разными алгоритмами значения. Таким образом мы сможем оценить качество фильтрации разными способами.

Здесь задано считывание 15 выборок, но вы можете поэкспериментировать и с другим количеством, наблюдая за изменением качества фильтрации сигнала.

Serial.print(analogRead(sensorPin));Serial.print(” “);Serial.print(readMean(sensorPin, 15));Serial.print(” “);Serial.println(readMedian(sensorPin, 15));

delay(100);

Источник: http://geekmatic.in.ua/filtracia_shumov_analogovogo_signala

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.