Построить аудиодетектор
Обнаружение звука с электретным микрофоном и микроконтроллером TI CC3200 Wifi.
Рекомендуемый уровень
промежуточный
Требования
- CC3200 Демо-плата
Обновлено до последней прошивки для поддержки Energia, здесь.
- Energia - Arduino IDE Clone от TI
Использовать в статье: v. 0101E00016
- Электретный микрофон
- Используется в статье: BOB-09964
* Эта плата требует модификации для работы с CC3200
- Используется в статье: BOB-09964
- Перемычки
- Устройство, способное запускать 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 | АВД |

Тестирование соединения
В приведенном ниже коде используется выборка микрофона. Он вычисляет скользящее среднее значения RMS от микрофона. Затем он печатает гистограмму на последовательном терминале, указывающую, сколько звуковой энергии есть.
- Загрузите следующий zip-файл и распакуйте в каталог.
- Откройте эскиз в Energia.
- Файл> Открыть> audio_RMS_print.ino
- Убедитесь, что вы выбрали правильную плату в меню «Сервис»> «Совет»> «Пусковая установка» с CC3200 80 МГц.
- Запрограммируйте доску.
Файл> Загрузить или кнопку со стрелкой
-
Вы должны увидеть гистограмму в терминале в зависимости от звука. * Примечание. Встроенный терминал не обрабатывает «/ r» для отображения графика. Вместо этого я рекомендую Tera Term.
Image
Скачать код
Передача через WiFi
Следующий код добавляет функцию WiFi к аудиодетектору.
- Загрузите следующий zip-файл и распакуйте в каталог.
- Откройте эскиз в Energia.
- Файл> Открыть> audio_RMS_print.ino
- Убедитесь, что вы выбрали правильную плату в меню «Сервис»> «Совет»> «Пусковая установка» с CC3200 80 МГц.
- Измените сетевые константы ниже
- Запрограммируйте доску.
- Файл> Загрузить или кнопку со стрелкой.
- 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 запускает указанный выше код, отображает гистограмму, когда звук воспроизводится возле микрофона.

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()
Скачать код
Добавление уведомлений по электронной почте
-
Убедитесь, что у вас есть учетная запись Gmail, которая позволяет «Меньше защищенных приложений» общаться.
Image - Отрегулируйте «EMAIL_THRESHOLD» на энергию звука, на которую вы хотите отправить электронное письмо.
- Добавьте свои имя пользователя и пароль к переменным в верхней части файла.
-
Выполните скрипт. При достижении порогового значения вы должны увидеть следующее. Если вы хотите продолжать отправлять электронные письма навсегда, удалите переменную «уже_sent_once».
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()
Скачать код
видео
Попробуйте этот проект сами! Получить спецификацию.