Интерактивный зоомагазин Bark Back
Прольем свет (эээ, звук) на неуловимые тайны выходок ваших питомцев вдали от дома! Этот проект Интернета вещей (IoT) Bark Back отслеживает и загружает уровень шума в вашем доме в облако, чтобы вы могли проверить своих любимых питомцев. Лучшая часть:если он становится слишком громким (например, Фидо лает или поднимает какой-то другой шум), программа воспроизводит ваш собственный аудиофайл, чтобы помочь отвлечься и успокоить щенка.
В этом проекте используется Raspberry Pi для чтения платы подключения микрофона SparkFun MEMS и запуска аудиоплеера. Данные загружаются в службу CloudMQTT с использованием протокола связи MQTT.
Для демонстрации посмотрите видео ниже!
В этом руководстве
Из этого туториала Вы узнаете, как делать следующее:
- Подключите микрофон SparkFun MEMS и прочитайте его с помощью Raspberry Pi 3.
- Загрузите уровень громкости в службу CloudMQTT.
- Используйте порог громкости, чтобы ваш пес снова лаял, если он / она становится слишком шумным.
Рекомендуемое чтение
Для создания этого проекта вам понадобится полностью настроенный Raspberry Pi 3 с подключением к Wi-Fi и ОС Raspbian. Также полезно знать некоторые аспекты программирования на Python, а также следующие три вещи:(1) использование и управление контактами Raspberry Pi GPIO, (2) связь MQTT и (3) аналоговые сигналы. Если что-то из этого вам незнакомо или вам просто любопытно (будь любопытным!)
Протокол связи MQTT
MQTT (передача телеметрии запросов сообщений) - популярный протокол связи IoT. Мы будем использовать клиентскую библиотеку Python для Paho и службу MQTT под названием CloudMQTT.
- Изучение коммуникационных протоколов для Интернета вещей
- Начало работы с CloudMQTT
- Обзор клиентской библиотеки Python Eclipse Paho MQTT
Коммутационная плата микрофона MEMS
Микрофон MEMS - это аналоговый микрофон, поэтому вам понадобится аналого-цифровой преобразователь MCP3002 («АЦП») для считывания аналогового сигнала с цифровых контактов GPIO Raspberry Pi.
- Начало работы с коммутационной платой для микрофонов SparkFun MEMS
- Техническое описание микрофона MEMS
- Техническое описание АЦП MCP3002
Материалы
Вам понадобятся следующие материалы.
Bark Back:наблюдайте за домашними животными и взаимодействуйте с ними! Список желаний SparkFun
Вам также понадобится следующее:
- Кабель питания MicroUSB
- Кабель HDMI
- USB-клавиатура
- USB-мышь
- Динамики с портом для наушников 1/8 дюйма.
Подключение оборудования
Подключение Pi к другому оборудованию. Нажмите на электрическую схему, чтобы увидеть ее поближе.
Вот распиновка Raspberry Pi 2 (и 3) модели B:
1. Подключите MCP3002 к Raspberry Pi.
MCP3002 крупным планом
Есть четыре контакта SPI для связи SPI:последовательные часы («SCL»), главный вход, выход подчиненного («MISO»), главный выход, подчиненный вход («MOSI») и выбор микросхемы («CS»). Эти контакты соответствуют контакту 11 GPIO Raspberry Pi (SCLK), контакту 9 GPIO (MISO), контакту 10 GPIO (MOSI) и контакту 8 GPIO (CE0) соответственно.
Вот распиновка MCP302:
Выполните следующие соединения с контактами MCP3002:
- Подключите контакт 1 к контакту 8 Raspberry Pi GPIO (CE0)
- Подключите контакт 2 к аналоговому выходу коммутационной платы микрофона MEMS.
- Подключите контакт 4 к GND.
- Подключите контакт 5 к контакту 10 Raspberry Pi GPIO (MOSI).
- Подключите контакт 6 к контакту 9 Raspberry Pi GPIO (MISO).
- Подключите контакт 7 к контакту 11 Raspberry Pi GPIO (SCLK).
- Подключите контакт 8 к выходу Raspberry Pi 3,3 В
2. Припаяйте провода к коммутационной плате микрофона MEMS. Подключитесь к MCP3002 и Raspberry Pi.
- Подключите Vcc к Raspberry Pi 3.3V.
- Подключите GND к Raspberry Pi GND.
- Подключите AUD к контакту 2 MCP3002
Конфигурация Pi
RPi подключен!
Шаг 1. Проверьте и установите обновления
Проверьте наличие и установите обновления:
sudo apt-get update
sudo apt-get upgrade
sudo reboot
Шаг 2. Настройка интерфейса SPI для микрофона MEMS + MCP3002
Установите пакет Python Dev:
sudo apt-get install python-dev
Создайте подпапку и установите интерфейс последовательного порта («SPI»):
mkdir py-spidev
git clone git://github.com/doceme/py-spidev
sudo python setup. py установить
Если у вас возникнут какие-либо проблемы, вот документация SPI-Dev.
Шаг 3. Воспроизведение звуков с помощью OMXPlayer
OMXPlayer - это аудио- и видеоплеер, предварительно загруженный в ОС Raspbian (у-у!). Он работает с большинством типов звуковых файлов, включая:.wav, .mp3 и .m4a. Мы будем использовать это, чтобы воспроизвести звуки нашего «лая».
В терминале проверьте OMXPlayer с помощью следующей команды:
omxplayer /home/pi/…/SongFilePath/SongFileName.mp3
Если это не сработает, попробуйте принудительно запустить его через локальное устройство аудиовыхода:
omxplayer -o local /home/pi/…/SongFilePath/SongFileName.mp3
Шаг 4. Настройте сервер CloudMQTT
Теперь мы настроили сервер MQTT! Чтобы сделать это с помощью CloudMQTT, сделайте следующее:
- Создайте учетную запись CloudMQTT (план «Милый кот» бесплатный).
- Создайте новый экземпляр MyCloud.
- В консоли создайте новое правило ACL.
- Вы можете отслеживать опубликованные сообщения в «Websocket UI» консоли CloudMQTT.
Наконец, установите клиентскую библиотеку Python MQTT Paho:
pip install paho-mqtt
Настройка программного обеспечения
Наша цель с Bark Back двоякая:(1) запускать аудиофайл, когда собака лает, и (2) отправлять данные об уровне громкости на сервер.
Но для начала нам нужны звуки «лая»! Вы можете легко записывать звуки в GarageBand (или на своем смартфоне) и отправлять их на Raspberry Pi. Сохраните файлы в легкодоступном месте (например, на рабочем столе).
Теперь вы готовы написать программу Bark Back Python! … Или просто воспользуйтесь моим:
Вот репозиторий GitHub для этого проекта. Вы также можете скопировать и вставить приведенный ниже код (имейте в виду, что это Python!).
########################## ########################
#Bark Back:отслеживайте и взаимодействуйте с домашними животными! ##
##### ############################################
# Код написан jenfoxbot <[email protected]>
# Код с открытым исходным кодом, лицензия на кофе / пиво.
# Пожалуйста, сохраните заголовок +, если вам нравится контент,
# купи мне кофе и / или пиво, если столкнешься со мной!
######################################## ####################
# Большое спасибо людям, которые создают и документируют библиотеки
# и функции, используемые в этом проекте.
# Библиотеки
#SPI
import spidev
#OMXPlayer
from threading import Thread
import subprocess
#MQTT
import paho.mqtt.client as paho
# Other
import random, time, os, urlparse
import time
songList =[«SongFile1», # например. «/Home/pi/Desktop/SongFile.mp3»
«SongFile2»,
«SongFile3»,
«SongFile4»]
creds ={
‘CloudMQTT URL’:‘INSERT_CLOUDMQTT_URL’, # например. 'https://m10.cloudmqtt.com'
'пользователь':'INSERT_CLOUDMQTT_USERNAME',
'пароль':'INSERT__CLOUDMQTT_PASSWORD',
'host':'INSERT_CLOUDMQTT_SERVER'
'порт':'INSERT_CLOUDMQTT_PORT',
'тема':'INSERT_ACL_TOPIC'
}
########################################################################### ######
# Чтение коммутационной платы микрофона SparkFun MEMS
############################ ##########################
# Запустить протокол SPI.
spi =spidev.SpiDev ()
spi.open (0,0) # Это вывод CE0 (GPIO 08) на RPi, для CE1 используйте (0,1)
# Функция для чтения в канале CE0
def read_spi (channel):
spidata =spi.xfer2 ([96,0]) ## отправка 2 байтов данных (96 и 0)
data =((spidata [0] &3) <<8) + spidata [1]
вернуть данные
# Функция для расчета амплитуды от пика до пика с микрофона MEMS
def PTPAmp ():
sampleTime =0,05 # Частота дискретизации 50 мс
startTime =time.time ()
PTPAmp =0
maxAmp =0
minAmp =1023
while (time.time () - startTime
if (micOut <1023):# Предотвратить ошибочные показания
if (micOut> maxAmp):
maxAmp =micOut
elif (micOut
PTPAmp =maxAmp - minAmp # Вычислить размах амплитуды.
return PTPAmp
# Функция сопоставления размаха усилителя с единицей громкости от 0 до 10
def VolumeUnit (data, fromLow, fromHigh, toLow, toHigh):
return (data - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow
########################################################################### ######
# Класс для управления OMXPlayer для аудио
############################ ##########################
class OMXPlayer ():
def call_omxplayer (self):
print («играет» + self.file_path + '\ n')
pid =subprocess.Popen (['omxplayer', '-o', 'local',
self.file_path], stderr =subprocess.PIPE,
stdout =subprocess.PIPE)
self.is_running =False
def play_song (self):
если не self.is_running:
self.song_thread =Thread (target =self.call_omxplayer, args =())
self.song_thread.start ()
self.is_running =True
def __init __ (self, file_path):
self.file_path =file_path
self.is_running =False
self.play_song ()
# Функция для выбора случайной песни из списка
def pickRandom (songList):
return (random.choice (songList))
########################################################################### ######
# Сервер CloudMQTT
########################################### ######################
# Определение обратных вызовов событий
def on_connect (mosq, obj, rc):
print ("Rc:" + str (rc))
def on_message (mosq, obj, msg):
print (msg.topic + »« + str (msg.qos) + »« + str (msg.payload))
def on_publish (mosq, obj, mid):
print («mid:» + str (mid))
def on_subscribe (mosq, obj, mid, grant_qos):
print («Подписка:« + str (mid) + »« + str (grant_qos))
def on_log (mosq, obj, level, string):
print (строка)
########################################################################### ######
# Основная функция
################################ ######################
def main ():
# Вызов клиентского сервера Python для Paho
mqttc =paho. Client ()
# Назначить обратные вызовы событий
mqttc.on_message =on_message
mqttc.on_connect =on_connect
mqttc.on_publish =on_publish
mqttc.on_subscribe =on_subscribe
# Раскомментируйте, чтобы включить сообщения отладки
# mqttc.on_log =on_log
# Разбираем CLOUDMQTT_URL (или откат к localhost)
url_str =os.environ.get (creds ['CloudMQTT URL'], 'mqtt:// localhost:1883')
url =urlparse.urlparse (url_str )
# Connect
mqttc.username_pw_set (creds [‘user’], creds [‘password’])
mqttc.connect (creds [‘host’], creds [‘port’])
# Начать подписку с уровнем QoS 0
mqttc.subscribe (creds [‘topic’], 0)
while True:
# 1. Найдите значение АЦП для полного размаха микрофона MEMS
PTPamp =PTPAmp ()
# 2. Вычислить ptp amp (Вольт)
PTPampV =round (((PTPamp * 3.3) / 1024), 2)
# 3. Сопоставьте ptp amp (значение АЦП) с единицей объема от 0 до 10
VolUnit =VolumeUnit (PTPamp, 0, 700, 0, 10)
# Для отладки
print (PTPamp, VolUnit)
№4. Если Volume Unit больше 7, воспроизведите одну из песен
if (VolUnit> 7):
playBack =pickRandom (songList)
OMXPlayer (playBack)
time.sleep ( 0,1)
№5. Загрузить данные на сервер CloudMQTT
mqttc.publish («Volume», str (VolUnit))
rc =True
пока rc:
rc =mqttc.loop ()
time.sleep (0.1)
print («rc:« + str (rc)) »
попробуйте:
while True:
передать
кроме KeyboardInterrupt:
myprocess.kill ()
если __name__ ==‘__main__’:
main ()
Чтобы система Bark Back работала правильно, введите следующие данные:
- songList :Укажите путь к файлу и имя файла для каждой песни, которую хотите воспроизвести.
- кредиты :Введите информацию о CloudMQTT в этот словарь.
Не стесняйтесь корректировать и изменять код (и, пожалуйста, сделайте это) - ознакомьтесь с разделом Ресурсы и дальнейшие действия раздел для изменений и дополнений проекта.
Подробнее…
Интерактивный зоомагазин Bark Back
Производственный процесс
- Монитор окружающей среды и качества воздуха своими руками
- Сетевой монитор температуры и влажности Raspberry Pi
- Монитор температуры и влажности в домашних условиях (в комнате) с веб-диаграммой - Raspberry Pi
- Мониторинг температуры на Raspberry Pi
- Метеостанция Raspberry Pi 2
- Мониторинг температуры с помощью Raspberry Pi
- Отслеживание Raspberry Pi Ball
- Универсальный пульт дистанционного управления Raspberry Pi
- Датчик движения с использованием Raspberry Pi
- Кусочек Raspberry Pi