亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Bark Ba​​ck 交互式宠物监视器

离家出走时,揭开宠物滑稽动作的神秘面纱(呃,声音)!这个物联网 (IoT) Bark Ba​​ck 项目会监控您家中的噪音水平并将其上传到云端,以便您可以查看您心爱的宠物。最好的部分:如果声音太大(即 Fido 正在吠叫或制造其他骚动),程序会播放您自己的“吠叫”音频文件,以帮助分散小狗的注意力并使其安静下来。

该项目使用 Raspberry Pi 读取 SparkFun MEMS 麦克风分线板并触发音频播放器。数据通过MQTT通信协议上传到CloudMQTT服务。

如需演示,请查看下面的视频!

包含在本教程中

本教程将向您展示如何执行以下操作:

推荐阅读

要构建这个项目,你需要一个完全配置的、连接 WiFi 的 Raspberry Pi 3 和 Raspbian 操作系统。了解一些 Python 编程以及以下三件事也很有帮助:(1) 使用和控制 Raspberry Pi GPIO 引脚,(2) MQTT 通信和 (3) 模拟信号。如果您不熟悉其中任何一个,或者您只是好奇(好奇!)

MQTT 通信协议

MQTT(消息查询遥测传输)是一种流行的物联网通信协议。我们将使用 Paho Client Python 库和名为 CloudMQTT 的 MQTT 服务。

  1. 探索物联网通信协议
  2. 开始使用 CloudMQTT
  3. Eclipse Paho MQTT Python 客户端库概述

MEMS 麦克风分线板

MEMS 麦克风是一个模拟麦克风,因此您需要 MCP3002 模数转换器 (“ADC”) 来读取带有 Raspberry Pi 数字 GPIO 引脚的模拟信号。

  1. SparkFun MEMS 麦克风分线板使用入门
  2. MEMS 麦克风数据表
  3. MCP3002 ADC 数据表

材料

您需要以下材料才能继续学习。

Bark Ba​​ck:监控宠物并与宠物互动! SparkFun 愿望清单



您还需要以下内容:

硬件连接

将 Pi 连接到其他硬件。点击接线图仔细查看。

这是 Raspberry Pi 2(和 3)B 型引脚图:

1.将 MCP3002 连接到 Raspberry Pi。

MCP3002 特写

SPI 通信有四个 SPI 引脚:串行时钟(“SCL”)、主输入从输出(“MISO”)、主输出从输入(“MOSI”)和片选(“CS”)。这些引脚分别对应于树莓派 GPIO 引脚 11 (SCLK)、GPIO 引脚 9 (MISO)、GPIO 引脚 10 (MOSI) 和 GPIO 引脚 8 (CE0)。

这是 MCP302 引脚排列图:

与 MCP3002 引脚进行以下连接:

2.将导线焊接到 MEMS 麦克风分线板。连接到 MCP3002 和 Raspberry Pi。

Pi 配置

RPi 连接起来了!

第 1 步:检查和安装更新

检查并安装更新:
sudo apt-get update
sudo apt-get upgrade
sudo reboot

第 2 步:为 MEMS 麦克风 + MCP3002 设置 SPI 接口

安装 Python 开发包:
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。我们将使用它来播放我们的“bark back”声音。

在终端中,使用以下命令测试 OMXPlayer:
omxplayer /home/pi/.../SongFilePath/SongFileName.mp3

如果这不起作用,请尝试将其强制通过本地音频输出设备:
omxplayer -o local /home/pi/.../SongFilePath/SongFileName.mp3

第 4 步:配置 CloudMQTT 服务器

现在我们设置了一个 MQTT 服务器!要使用 CloudMQTT 执行此操作,请执行以下操作:

  1. 设置 CloudMQTT 帐户(“Cute Cat”计划是免费的)。
  2. 创建一个新的 MyCloud 实例。
  3. 在控制台中,创建一个新的 ACL 规则。
  4. 您可以在 CloudMQTT 控制台的“Websocket UI”中监控已发布的消息。

最后,安装 MQTT Paho Client Python 库:
pip install paho-mqtt

软件设置

Bark Ba​​ck 的目标有两个:(1) 在狗吠时触发音频文件;(2) 将音量级别数据发送到服务器。

但首先我们需要播放一些“bark back”的声音!您可以轻松地在 GarageBand(或智能手机)中录制声音并将它们发送到 Raspberry Pi。将文件保存在易于访问的位置(例如桌面)。

现在您已准备好编写 Bark Ba​​ck Python 程序! ……或者就用我的:

这是该项目的 GitHub 存储库。您也可以复制并粘贴下面的代码(请记住这是 Python!)。
######################### ########################
#Bark Ba​​ck:监控和与宠物互动!##
##### ############################################
# jenfoxbot 编写的代码 <[email protected]>
# 代码是开源的,咖啡/啤酒制品许可证。
# 如果您喜欢内容,请保留标题 +,
#如果你遇到我,请给我买杯咖啡和/或啤酒!
############################## #####################

# 非常感谢创建和记录本项目中使用的库
# 和函数的人们。

#Libraries
#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”, #e.g. “/home/pi/Desktop/SongFile.mp3”
“SongFile2”,
“SongFile3”,
“SongFile4”]

creds ={
‘CloudMQTT URL’:‘INSERT_CLOUDMQTT_URL’, #e.g. 'https://m10.cloudmqtt.com'
'用户':'INSERT_CLOUDMQTT_USERNAME',
'密码':'INSERT__CLOUDMQTT_PASSWORD',
'主机':'INSERT_CLOUDMQTT_SERVER'
'端口':'INSERT_CLOUDMQTT_PORT',
'主题':'INSERT_ACL_TOPIC'
}

############################################### ######
# 阅读 SparkFun MEMS 麦克风分线板
########################### ##########################
#启动SPI协议。
spi =spidev.SpiDev()
spi.open(0,0) #这是树莓派上的CE0 Pin (GPIO 08),对于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 #Sample Rate of 50 ms
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 #计算峰峰值。
返回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):
打印(“播放” + 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(granted_qos))

def on_log(mosq, obj, level, string):
print(string)

############################################### ######
# 主要功能
############################## ######################
def main():
#Call Paho Python 客户端服务器
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(或回退到本地主机)
url_str =os.environ.get(creds['CloudMQTT URL'], 'mqtt://localhost:1883')
url =urlparse.urlparse(url_str) )

# 连接
mqttc.username_pw_set(creds[‘user’], creds[‘password’])
mqttc.connect(creds[‘host’], creds[‘port’])

# 开始订阅,QoS级别为0
mqttc.subscribe(creds[‘topic’], 0)

虽然是真的:
#1。找到 MEMS 麦克风峰峰值放大器的 ADC 值
PTPamp =PTPAmp()
#2。计算 ptp amp (Volts)
PTPampV =round(((PTPamp*3.3) / 1024), 2)
#3。将 ptp amp(ADC 值)映射到 0 到 10 之间的 Volume Unit
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
while rc:
rc =mqttc.loop()
time.sleep(0.1)
print(“rc:” + str(rc))

try:
while True:
pass
除了KeyboardInterrupt:
myprocess.kill()

if __name__ ==‘__main__’:
main()

为了让 Bark Ba​​ck 系统正常工作,请填写以下内容:

随意(并且请这样做)调整和修改代码 - 查看资源和进一步 项目变化和补充部分。

阅读更多信息...

Bark Ba​​ck 交互式宠物监视器


制造工艺

  1. DIY 环境和空气质量监测器
  2. Raspberry Pi 温湿度网络监视器
  3. 带有基于 Web 的图表的家庭(房间)温度和湿度监视器 – Raspberry Pi
  4. Raspberry Pi 上的温度监控
  5. Raspberry Pi 2 气象站
  6. 使用 Raspberry Pi 监测温度
  7. Raspberry Pi Ball 跟踪
  8. Raspberry Pi Universal Remote
  9. 使用 Raspberry Pi 的运动传感器
  10. 一片树莓派
  11. Cycle Chaser
  12. ThingSpeak 温度监视器与 Raspberry Pi