Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Интерактивный зоомагазин Bark Back

Прольем свет (эээ, звук) на неуловимые тайны выходок ваших питомцев вдали от дома! Этот проект Интернета вещей (IoT) Bark Back отслеживает и загружает уровень шума в вашем доме в облако, чтобы вы могли проверить своих любимых питомцев. Лучшая часть:если он становится слишком громким (например, Фидо лает или поднимает какой-то другой шум), программа воспроизводит ваш собственный аудиофайл, чтобы помочь отвлечься и успокоить щенка.

В этом проекте используется Raspberry Pi для чтения платы подключения микрофона SparkFun MEMS и запуска аудиоплеера. Данные загружаются в службу CloudMQTT с использованием протокола связи MQTT.

Для демонстрации посмотрите видео ниже!

В этом руководстве

Из этого туториала Вы узнаете, как делать следующее:

Рекомендуемое чтение

Для создания этого проекта вам понадобится полностью настроенный Raspberry Pi 3 с подключением к Wi-Fi и ОС Raspbian. Также полезно знать некоторые аспекты программирования на Python, а также следующие три вещи:(1) использование и управление контактами Raspberry Pi GPIO, (2) связь MQTT и (3) аналоговые сигналы. Если что-то из этого вам незнакомо или вам просто любопытно (будь любопытным!)

Протокол связи MQTT

MQTT (передача телеметрии запросов сообщений) - популярный протокол связи IoT. Мы будем использовать клиентскую библиотеку Python для Paho и службу MQTT под названием CloudMQTT.

  1. Изучение коммуникационных протоколов для Интернета вещей
  2. Начало работы с CloudMQTT
  3. Обзор клиентской библиотеки Python Eclipse Paho MQTT

Коммутационная плата микрофона MEMS

Микрофон MEMS - это аналоговый микрофон, поэтому вам понадобится аналого-цифровой преобразователь MCP3002 («АЦП») для считывания аналогового сигнала с цифровых контактов GPIO Raspberry Pi.

  1. Начало работы с коммутационной платой для микрофонов SparkFun MEMS
  2. Техническое описание микрофона MEMS
  3. Техническое описание АЦП MCP3002

Материалы

Вам понадобятся следующие материалы.

Bark Back:наблюдайте за домашними животными и взаимодействуйте с ними! Список желаний SparkFun



Вам также понадобится следующее:

Подключение оборудования

Подключение 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:

2. Припаяйте провода к коммутационной плате микрофона MEMS. Подключитесь к MCP3002 и Raspberry Pi.

Конфигурация 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, сделайте следующее:

  1. Создайте учетную запись CloudMQTT (план «Милый кот» бесплатный).
  2. Создайте новый экземпляр MyCloud.
  3. В консоли создайте новое правило ACL.
  4. Вы можете отслеживать опубликованные сообщения в «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 micOut =read_spi (0) # Читать в канале CE0
if (micOut <1023):# Предотвратить ошибочные показания
if (micOut> maxAmp):
maxAmp =micOut
elif (micOut minAmp =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 работала правильно, введите следующие данные:

Не стесняйтесь корректировать и изменять код (и, пожалуйста, сделайте это) - ознакомьтесь с разделом Ресурсы и дальнейшие действия раздел для изменений и дополнений проекта.

Подробнее…

Интерактивный зоомагазин Bark Back


Производственный процесс

  1. Монитор окружающей среды и качества воздуха своими руками
  2. Сетевой монитор температуры и влажности Raspberry Pi
  3. Монитор температуры и влажности в домашних условиях (в комнате) с веб-диаграммой - Raspberry Pi
  4. Мониторинг температуры на Raspberry Pi
  5. Метеостанция Raspberry Pi 2
  6. Мониторинг температуры с помощью Raspberry Pi
  7. Отслеживание Raspberry Pi Ball
  8. Универсальный пульт дистанционного управления Raspberry Pi
  9. Датчик движения с использованием Raspberry Pi
  10. Кусочек Raspberry Pi