Создать аудиодетектор

Создать аудиодетектор
Создать аудиодетектор
Anonim

Построить аудиодетектор

Обнаружение звука с электретным микрофоном и микроконтроллером TI CC3200 Wifi.

Рекомендуемый уровень

промежуточный

Требования

  • CC3200 Демо-плата

    Обновлено до последней прошивки для поддержки Energia, здесь.

  • Energia - Arduino IDE Clone от TI

    Использовать в статье: v. 0101E00016

  • Электретный микрофон

    • Используется в статье: BOB-09964

      * Эта плата требует модификации для работы с CC3200

  • Перемычки
  • Устройство, способное запускать Python с UDP-сервером

    Используется в этой статье: ПК под управлением Windows 8 с Python 2.7

Настройка оборудования

Изменение микрофона

К сожалению, CC3200 может считывать только напряжения на уровне 1.45В на контактах АЦП. Поскольку мы будем включать микрофон с 3, 3 В, нам необходимо изменить схему на выходное напряжение 1, 45 / 2 = 0, 725 В, если нет звука. Резисторы R2 и R3 в схеме для делителя напряжения, который устанавливает точку смещения. Чтобы изменить его на 0, 725 В, мы можем вычислить новый резистор на основе общего уравнения делителя напряжения. Это позволяет изменить резистор R3 на 2.82k. Ближайшее значение 1% составляет 2, 8 тыс., А самое близкое 5% - 3 тыс. Я бы рекомендовал использовать резистор 2.8k, если вы можете его найти. Значение не является чрезвычайно критическим, если у вас нет много резисторов, которые могут вращаться вокруг, вы можете ввести искажение в сигнал, если смещение слишком низкое или высокое напряжение.

Подключение проводов

Вывод CC3200 здесь.

CC3200 BOB-09964
Контакт 1 - 3v3 Мощность VCC
Контакт 22 - GND GND
Контакт 23 - ADC_CH0 АВД
Image
Image

Тестирование соединения

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

  1. Загрузите следующий zip-файл и распакуйте в каталог.
  2. Откройте эскиз в Energia.

    1. Файл> Открыть> audio_RMS_print.ino
    2. Убедитесь, что вы выбрали правильную плату в меню «Сервис»> «Совет»> «Пусковая установка» с CC3200 80 МГц.
  3. Запрограммируйте доску.

    Файл> Загрузить или кнопку со стрелкой

  4. Вы должны увидеть гистограмму в терминале в зависимости от звука. * Примечание. Встроенный терминал не обрабатывает «/ r» для отображения графика. Вместо этого я рекомендую Tera Term.

    Image
    Image

Скачать код

Передача через WiFi

Следующий код добавляет функцию WiFi к аудиодетектору.

  1. Загрузите следующий zip-файл и распакуйте в каталог.
  2. Откройте эскиз в Energia.

    1. Файл> Открыть> audio_RMS_print.ino
    2. Убедитесь, что вы выбрали правильную плату в меню «Сервис»> «Совет»> «Пусковая установка» с CC3200 80 МГц.
  3. Измените сетевые константы ниже
  4. Запрограммируйте доску.
  5. Файл> Загрузить или кнопку со стрелкой.
  6. CC3200 теперь будет передавать через UDP каждый раз, когда будет измерено новое среднее значение.

/*network settings*/ char ssid() = "yourSSID"; //SSID of network char password() = "yourpassword"; //password for wireless network char UDP_server_IP() = "yourserverpassword"; //IP address of UDP server to send data to int UDP_server_port = 9999;

Скачать код

Настройка Python UDP Server

Следующий код запускает UDP-сервер с указанным IP-адресом и портом. Он ожидает, что два байта передаются с каждым пакетом UDP. Он преобразует два байта в число int16 и преобразует его в гистограмму, отображаемую на консоли. Выполнение этого скрипта, в то время как CC3200 запускает указанный выше код, отображает гистограмму, когда звук воспроизводится возле микрофона.

Image
Image

import SocketServer import struct import sys class MyUDPHandler(SocketServer. BaseRequestHandler): def handle(self): data = self.request(0).strip() socket = self.request(1) try: moving_average = struct.unpack('h', data)(0) bar_chart = moving_average print "\r \r", while bar_chart > 0: sys.stdout.write('#') bar_chart = bar_chart - 200 except: pass if __name__ == "__main__": server = SocketServer. UDPServer((HOST, PORT), MyUDPHandler) server.serve_forever()

Скачать код

Добавление уведомлений по электронной почте

  1. Убедитесь, что у вас есть учетная запись Gmail, которая позволяет «Меньше защищенных приложений» общаться.

    Image
    Image
  2. Отрегулируйте «EMAIL_THRESHOLD» на энергию звука, на которую вы хотите отправить электронное письмо.
  3. Добавьте свои имя пользователя и пароль к переменным в верхней части файла.
  4. Выполните скрипт. При достижении порогового значения вы должны увидеть следующее. Если вы хотите продолжать отправлять электронные письма навсегда, удалите переменную «уже_sent_once».

    Image
    Image
  5. Электронная почта в папке «Входящие»:

    Image
    Image

import SocketServer import struct import sys import smtplib from email.mime.text import MIMEText HOST, PORT = "yourip", 9999 EMAIL_THRESHOLD = 600 email_address = "youremail" password = "yourpass" already_sent_once = 0 moving_average = 0 class MyUDPHandler(SocketServer. BaseRequestHandler): def handle(self): global already_sent_once, moving_average data = self.request(0).strip() socket = self.request(1) try: moving_average = struct.unpack('h', data)(0) bar_chart = moving_average print "\r \r", while bar_chart > 0: sys.stdout.write('#') bar_chart = bar_chart - 200 except: pass if moving_average > EMAIL_THRESHOLD and already_sent_once == 0: already_sent_once = 1 print "Sending email, audio above threshold: " + str(moving_average) msg = MIMEText("Audio is at level: " + str(moving_average)) msg('Subject') = 'Audio above threshold' msg('From') = email_address msg('To') = email_address s = smtplib. SMTP('smtp.gmail.com:587') s.ehlo() s.starttls() s.login(email_address, password) s.sendmail(email_address, email_address, msg.as_string()) s.quit() if __name__ == "__main__": server = SocketServer. UDPServer((HOST, PORT), MyUDPHandler) server.serve_forever()

Скачать код

видео

Попробуйте этот проект сами! Получить спецификацию.