物联网综合应用实践项目——语音控制家居设备总结

前言

昨天已经答辩完成,本次总结不是贴代码之类的,而是对这个过程思路再进行一个梳理。

我们做的项目是「语音控制家居设备」。在杨老师的《数据挖掘》课需要做实验项目的时候,我就想做这个项目,这个项目是在微软创新杯上看到一个电子科大的团队,当时我很感兴趣,就想着自己也是物联网专业的学生,相关课程也都学过,肯定自己也能做出来。然而并没有在杨老师的实验项目上完成这个项目,是因为时间没有利用好以及遇到了一定的困难。

于是,在物联网综合应用实践课又开始做了,结合之前遇到的问题,想了两个方案,最终在现有环境以及小组成员的共同商讨下,决定用方案二(围绕树莓派),而不是方案一(围绕微软以及 ZigBee),尽管我更倾向于方案一。

基于语音控制的智能家居中控平台

对,就是这个略显「夸张」的名字。

大致就是通过树莓派语音输入,然后将语音识别为中文,进行语义理解(最终只是草率的写了几个 if-else,这里有待改进),然后发送信号进行控制台灯等设备,同时收集一些家庭环境信息数据(传感器传回来的)。Web 平台可视化展示数据,数据挖掘分析部分数据。

准备

硬件

  • 树莓派
  • 有声卡的麦克风模块(树莓派没有音频输入)
  • 传感器:温湿度传感器、MQ-5 Gas Sensor
  • 控制设备:USB 风扇、USB LED 灯

软件服务

  • Python GPIO 编程控制设备
  • Python 监测传感器数据,使用 MQTT 传输分发数据并存储至数据库
  • 语音识别,语义理解简单实现
  • 数据挖掘
  • Web 平台

实现

一共有四个功能:

  • 语音控制家居设备(最重要的)
  • 家庭环境信息监测
  • Web 平台展示家庭信息
  • 数据挖掘

语音控制家居设备

这一块分为四个部分:语音输入、语音识别、语音理解、控制设备。

(一) 语音输入

语音输入上我们使用了按键来控制,就是按下然后松开就开始录音,规定具体的秒数,同时按键的接法要根据按键的内部电路去接,按键的四个引脚还要测试到底是哪两个引脚才是合适的。

关于安装pyaudio的过程我就不说了,实在是太麻烦了,索性最后成功了,还换了台树莓派才解决最后一个问题,真是搞不懂。这一块除了安装麻烦,其它的都很简单,网上也有现成的代码。

(二) 语音识别

使用的是 IBM 的 API,同时也测试了百度和讯飞,跟 IBM 比起来就是一坨 shit,没有测试谷歌的,因为懒得在树莓派上配置科学上网这些。这部分很简单。

(三) 语义理解

这部分我就更不想说了,因为我没有接入别人的 SDK,只是图方便节约时间就自己写了几个 if-else 来完成,虽然最终效果非常好。这部分更简单。

(四) 控制设备

虽然所有的代码都是我一个人写,但是圣文兄在硬件研究这一块对我的帮助很大,没有他就不能完成,无论什么和圣文兄交谈都可以受益匪浅。

我们买的控制设备是 USB 风扇和 USB LED 灯,最开始我就在想是否可以像控制 GPIO 那样控制 USB 接口,我始终觉得没有这么开放化。果然查了一下资料,发现完全不可用,所有的 USB 口只能一块控制而不能单独控制,这样就没有意义了。于是我和圣文兄想着直接把设备的 USB 头剪开,把它们的引线直接连在 GPIO 上用 GPIO 来控制,反正这种设备也没有什么输入,是完全可行的。经过测试,我们的想法是对的,这让我对硬件的有些知识(其实是常识)有了一定的了解。

家庭环境信息监测

传感器只有温度传感器、烟雾传感器,我们也要用更多的传感器感知信息,但是树莓派只能接收数字信号不能接收模拟信号,所以在所有我们想用的传感器中只有这两个符合要求。

收集数据的时候,温湿度传感器就不说了很简单,在写烟雾传感器的代码时让我拾起了很多知识(其实是本来就不应该忘的,惭愧惭愧),在测试烟雾传感器的时候也挺有趣的,最终在这一块没有问题,很简单这一块。

用 MQTT 订阅发布数据使其分发到各个部分的时候遇到了一些细节上的问题,不过都解决了,我甚至觉得这一块的代码写得比较优雅,哈哈哈哈哈哈。

Web 平台展示家庭信息

这一部分不是我做的,但是后面产生了无数次想自己来的想法,要不是考虑到手头上事情还很多以及分工问题,我确实是想自己来写的。我对志钰兄在这一块的完成上确实比较失望,直到最后都有一个很基本的功能都没有完成,这个后端几乎什么逻辑都没有,就是数据导入,为了减轻他的难度,甚至没有让他用 MQTT 了,可是很简单的问题他依然没有解决。说简单那确实是一个简单的问题,虽然我也去帮他看了我也没有办法,我的想法是他连一些测试都没有测试,最开始也告诉他了比较好的实现方式是什么,但是他选择了另外一种方式,从最后的结果来看这个方式出了很多问题,他也解决不了。最后因为没有时间了他不想再解决了,这个问题是这次项目唯一一个遗憾,虽然这样说有点太过于正式,但是我确实很认真对待,也确实认为这是唯一的瑕疵。

数据挖掘

数据挖掘部分是为了丰富应用层,并且这学期也学了,恰好可以学以致用两全其美,主要挖掘了两个方面:

  • 1) 时间(早中晚),房屋人数,气压,室内温度,室内湿度,人的行为(开风扇,开空调,都开,都不开);(3000 条)
  • 2) 水、电、气,季节;(365 条)

数据挖掘部分完成得有点「做作」,因为没有数据,只能自己模拟生成确实不好挖掘,并且也没有投入多大的精力以及没有做全面的分析,所以我认为挖出来的知识并没有多大意义,没有参考价值,但是作为这次课程来说,还是挺丰富的。

总结

这次项目从表面来看只是一次作业,但是对我个人而言我觉得很有意义,从最开始产生这个想法,再决定去做,然后遭遇一个致命问题,最后换了个方案完成,我觉得比我之前参见的任何一个比赛做的项目感觉都要好,这并不是从项目本身来说,而是从整个过程,一步一步进行,单个测试,遇到问题解决问题,再测试,最后拉通测试。不仅没有烂尾,反而比较完美的完成了。

每一个项目都应该如此呀。