16 min read

毕业设计制作记录

2018/6/3

IMG_1728

IMG_1729

2018/6/2

后天毕设答辩,今天急急忙忙做了一个木盒子。当了一整天的木工。

IMG_1713

IMG_1715

IMG_1716

IMG_1718

2018/3/20

准备开题报告、文献翻译还有文献综述。

2018/3/19

终于把 opencv 编译安装上了。 ??

今天投了一份简历校招找工作了,在准备面试,所以没做太多的新东西。

2018/3/18

更新两张图

IMG_1576-1

IMG_1577

DHT11 温湿度传感器

新买的传感器,可以同时测出温度和湿度,用来代替以前用到的 DS18B20。

DHT11 工作原理资料 https://cdn-shop.adafruit.com/datasheets/DHT11-chinese.pdf

人体红外传感器

2018/3/17

昨天和朋友聊到我的毕设项目,给他展示了一下目前的进度和项目内容,被反馈说太没有技术含量了,于是决定要尝试自己用 opencv 实现 motion detect。

摄像头实时画面动态检测(Motion Detect)

本来准备今天做的,然后...编译 opencv 等了很久还报 error

https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/

所以这个等环境配置好了再做。_(:зゝ∠)_

RGB LED 灯

HomeKit 支持的设备类型有照明灯的控制,这里就直接用 RGB LED 代替了。(买不起正经的灯了)

大致接入了开关(Switch)和灯光颜色控制(Color Control)。

颜色是通过 LED,内部三种三原色灯泡亮灭实现的,因为现有的设备似乎不能调节亮度,所以实际上似乎只有红、蓝、绿、红绿、红蓝、蓝绿、红蓝绿这么几种颜色调节。

不打算拍照了,效果实在是太差劲了。到时候做一个盒子看能不能把这个 LED 放哪里做一个灯饰。

AirPlay 音响

之前安装好 AirPlay 相关软件之后,只试过 3.5mm 接口插入耳机插口试听,虽然有一定的底噪,但是勉强能用。本来以为能用的,今天去找了一个小音响,USB 供电,3.5mm 音频线,发现噪音特别的大,已经影响到基本的声音播放了。

整个人都方了。

可能需要再安装一个专门的声卡到树莓派上,但是去某宝搜索了一下发现,最便宜的都要 80+ 人民币,所以要好好考虑到底要不要这个 AirPlay 功能了。

2018/3/16

纯粹吐槽

Home-Assistant 这个开源项目的文档真是狗屎,我看了好久还是一脸懵逼,所以我决定暂时弃用这个项目。

烟雾检测报警

之前是把烟雾传感器的数值接入了空气质量的 HomeKit 配件中,就是传感器中用到了模拟信号的接口,这次把传感器中的数字信号也用上了,就是是否有检测到烟雾的存在,如果存在的话,就发送报警通知。

光敏电阻传感器

光敏传感器可以用来测量光照强度。

基本的连线和之前的烟雾传感器差不多,只是需要注意的是 AD/DA 转换器的 AIN0 口子已经被用了,所以这里光敏 DO 连接的 AIN1:

-----2018-03-16-16.23.30

代码也要相应的改成 ADC.read(1)

IMG_00E50F6BD990-1

关于数值计算

HomeKit 上 SmokeSensor 需要提供的数据单位是 勒克斯(Lux,通常简写为lx),但是实际上光敏电阻 AC 通过 AD 转换得来的数据并不是这个单位,所以我们需要进行一个单位换算。

我用到的这个光敏电阻传感器的数据值是光照越亮越大,数值越小,所以我就先用布包住传感器,测得了在没有光的情况下,数值最大为 255。然后手机上安装一个光照强度测试的 App,大致测出目前环境的光照,再做一个对比,通过调节传感器上的旋钮来控制灵敏度以及比例计算,最终得到勒克斯单位,最后测试还是有个位数值的误差。具体的计算过程可以查看项目源码。

2018/3/15

重要的取名

这个项目,按照一般的工程师思维,取名字很简单,依葫芦画瓢,自己名字前缀 YX 跟上 HomePod,名字就出来了,简单好懂。但是,似乎缺少一点感觉。我个人其实也很讨厌取一些简单直白的名字,相比之下更喜欢一些优雅的名字,比如之前做过的 MariaPartime 或者是 Picocaine

所以,我给这个项目取名 Jarvis,因为《钢铁侠》系列电影里人工智能系统给我的印象太深刻了。我也想有这么一只人工智能管家,经常都在想,在我有生之年人类能不能发明出这样的东西呢?我又能不能买得起呢?

音量控制

赞美开源,一行代码不用写,就能用 iPhone 调整树莓派音量了。

https://github.com/JosephDuffy/homebridge-pc-volume

烟雾传感器

SG-2 烟雾传感器,有 DC (数字信号)和 AC (模拟信号)两种输出口,之前综合设计的时候也用这个传感器,但是当时组队另外一个组员负责接线连接设备,可能偷懒吧,只用了 DC 的口子,这样传感器就只能输出两种状态,一种是烟雾浓度不够,一种是检测到大量的烟雾。实际上可以从 AC 口接出来到 AD/DA 转换电路里,这样就可以获得到一个烟雾浓度值。

具体的连线:

-----2018-03-16-00.14.29

IMG_1570-1

代码就不贴出来了,等到毕业设计答辩结束之后,会开源在 GitHub 上的。

摄像头

出于成本的考虑,只能买这种便宜的摄像头设备先用着了。

不过让我觉得很惊讶的是,居然树莓派摄像头配件还有这种长镜头(相对)的,虽然还是 500w 像素的而且画面效果很差劲。另外就是购买的时候看到还有红外夜视版,没想太多就买了,试了一下晚上灯全关掉也能有不错的画面效果,算是买对了。(到时候答辩的时候就靠这个夜视功能来弥补500w像素的不足啦,吹起来吹起来~)

IMG_1572-1

设备排线连接很简单,就是软件配置有一点麻烦。找到的好几个摄像头相关的 homebridge 插件都是 ffmpeg 和 rtsp 推流形式的,自己尝试配置了一下 rtsp,一直没有成功有各种各样的问题。最好干脆直接用了一个功能最简单的插件。

https://github.com/moritzmhmk/homebridge-camera-rpi

本来是想要做一下运动检测加拍照推送通知的,目前表示要先缓一缓了。

IMG_1571

远程访问

因为是基于 HomeKit 搭建的一套智能环境,自然是要受限于苹果的设定,如果想要设备能够外网远程访问,需要一台 HomePod 或者 Apple TV 又或者是一台 iPad 放在家里内网环境,这样出门在外通过外网就能访问到家里的设备的数据了。

不过实际测试,就算是 iPhone 和 iPad 设备都在内网环境下,如果设置了 iPad 作为家庭中枢,似乎 iPhone 获取数据的似乎就只能远程访问了,这样就出现一个问题,就是实时摄像头的画面在这个时候会非常的卡顿,基本不能用。(在学校实验室测试的,100M 下行 8M上行网络,所以猜测应该是苹果的服务器在中国连接很慢吧?)

可能到时候毕业设计答辩只能先关闭 iPad 作为家庭中枢设置了。

2018/3/14

配置好了温度传感器,可以在“家庭”应用里实时显示室温。

IMG_61B6968F19ED-1

传感器使用的是 DS18B20 这款温度传感器。DS18B20 通过 1-Wire®总线通信,只需要一条数据线 (和地线) 即可与处理器进行数据传输。

具体的连线:

-----2018-03-16-00.24.28

因为是单总线通信,在树莓派上使用我们还需要一些配置。

首先是在 /boot/config.txt 这个文件末尾里面添加总线信息:

...

# Custom
dtoverlay=w1-gpio

PS: 需要注意的是,这个配置需要重启系统生效。

然后我们需要运行两条命令启用之前设置的总线模块:

sudo modprobe w1-gpio
sudo modprobe w1-therm

如果需要开机自动启用,可以将模块名字写入 /etc/modules

这样我们就可以获取到温度传感器获取到的温度信息了。

DS18B20 这个传感器接线比较简单,总共三个接口,VCC 接入 5V,GND 接地,SIG 接入 G4 就行。

IMG_1566-1

这个程序主要的实现方法就是读取 /sys/bus/w1/devices/28-01c9dd07010c/w1_slave 这个文件里的温度信息。

-----2018-03-14-21.28.15

图中的 t=18375 就是当前获取到的温度值。

2018/3/13

似乎再过几天就要检查文档工作了,所以今天先把开题报告写好。

2018/3/11

AirPlay

将树莓派作为一个 AirPlay 终端,可以 iPhone 操作,然后树莓派作为音响播放音乐。

可以直接使用 shairport 这个开源项目来实现,Debian/Ubuntu 系统软件库已经有了这个软件,所以直接安装就好了,不需要手动编译。

README https://github.com/mikebrady/shairport-sync

sudo apt install shairport-sync

然后需要编辑一下配置文件 /etc/shairport-sync.conf,做一些个性化配置。

general =
{
        name = "YXHomePod";
}

比如说在 iPhone 上能搜索到树莓派这个设备时显示的名字。

IMG_1558

但是实际上目前只是能用的状态,可能后面有空会去优化一下播放效果。然后树莓派上板子本身是有 3.5mm 音频接口的,但是实际是直接连i/o口还是用3.5mm接口好有待考证。

2018/3/9

买的树莓派开发套装到货了。

Raspberry Pi 3 Model B 以及一大堆传感器组件。

IMG_1555

显示屏还在考虑要不要买一个。

基本环境搭建

目前树莓派官方最新的系统是基于 Debian 9 stretch 的修改版,本来想要试试在树莓派上装 Arch 作死的,后来发现最新的官方系统还行,就直接用了。

-----2018-03-11-15.35.33

为了让连接在树莓派上的一系列传感器的数据能方便查看,准备连接到 iOS 的 HomeKit 上,需要 HomeBridge 这一套开源项目,另外为了方便管理传感器,还需要 HomeAssistant 这个开源项目。

Home Assistant

Home Assistant 是一套基于 Python 的完整智能家居系统,对设备的支持度很高。不管是众多名牌智能家居品牌还是自己自制的一些设备,都能够统一连接到这个平台上去,统一管理。这套系统本身也是网页管理页面。

Home Assistant 的安装非常简单,如果你不需要其他更多的一些定制,直接通过下面的一行命令就可以。

pip3 install homeassistant

为了隔离 Python 的依赖安装,可以在 Python 的虚拟环境中安装运行

python3 -m venv homeassistant
cd homeassistant
source bin/activate
python3 -m pip install --upgrade homeassistant
# hass --open-ui

为了能让树莓派长期稳定自动化运行,可以把运行脚本写进 systemd 的配置文件,这样就可以开机自动启动这些服务。

vim /etc/systemd/system/home-assistant@pi.service

[Unit]
Description=Home Assistant
After=network-online.target

[Service]
Type=simple
User=pi
ExecStart=/home/pi/homeassistant/bin/hass -c "/home/pi/.homeassistant"

[Install]
WantedBy=multi-user.target

然后通过以下命令就可以启动停止这个服务

sudo systemctl start home-assistant@pi.service # 启动
sudo systemctl stop home-assistant@pi.service # 停止
sudo systemctl enable home-assistant@pi.service # 开机自动启动
sudo systemctl disable home-assistant@pi.service # 取消开机自动启动

然后我们就可以通过 http://127.0.0.1:8123 网页访问到 Home Assistant。

https://home-assistant.io/

Homebridge

Homebridge is a lightweight NodeJS server you can run on your home network that emulates the iOS HomeKit API. It supports Plugins, which are community-contributed modules that provide a basic bridge from HomeKit to various 3rd-party APIs provided by manufacturers of "smart home" devices.

Homebridge 是一个可以模拟 iOS HomeKit API 的轻量服务器,这套程序是通过 Node.js 构建的。这个项目支持一个由开源社区支持的插件,这些提供了第三方物联网设备 API 与苹果 HomeKit 桥接功能。

README https://github.com/nfarina/homebridge

安装:

# 安装依赖 Linux
sudo apt-get install libavahi-compat-libdnssd-dev
# 安装 Homebridge
sudo npm install -g --unsafe-perm homebridge

为了能让服务跑起来,还需要写一个最基础的配置文件,定义一下我们准备打造的 HomeKit 设备的一些基本信息。

{
	"bridge": {
		"name": "Shin's Home",
		"username": "B3:F4:A9:3C:0D:41",
		"port": "52203",
		"pin":"520-10-520"
	},
	"description": "shincurry.IOT.windisco.com",
	"accessories": [{
	    "accessory": "RaspberryPiTemperature",
	    "name": "RaspberryPi CPU Temperature",
	    "updateInterval": 1000
	}],
	"platforms": {
		"platform": "HomeAssistant",
		"name": "HomeAssistant",
		"host": "http://127.0.0.1:8123",
        "password": "",
        "supported_types": ["binary_sensor", "cover", "fan", "input_boolean", "light", "lock", "media_player", "scene", "sensor", "switch"],
        "logging": true
	}
}

2018/3/1

导师提到毕设进度,才想起还有这个要做,于是开始做准备。

首先是课题选择,二本学校这种毕设其实水水就过的感觉,问了一下我的朋友们,也都是打算选个简单的做了能够就行,于是选择了老生长谈的智能家居方向。打算做一个类似 Google Home、Apple HomePod 或者 Amazon Alexa 的东西,当然了,是尽量往那个方向上去做。

设备选购,因为硬件方面几乎不懂,所以选用树莓派3B,大量的配件简单地处理一下连线,剩下的就是代码实现了。

附录一:专业相关的一些吐槽

我大学填报的是物联网工程专业,要问为什么,当时高中刚毕业人还年轻,觉得电路板什么很炫酷。实际上的情况是,我低估了像我校这种垃圾二本学校的学习劝退能力。

物联网是不可能学的了!这辈子都不可能学物联网了!电路又不会画,就是写写软件,才能维持了生活这样子。打开 WebStorm 和回家了一样,上课我们都不回去,就平时老师说要点名了过去上上这样子。软件的感觉么,写软件时比焊电路板的感觉好多了!单片机 C 好无聊的,没有语法糖,也没有框架可以用。入了前端的坑,里面个个都是人才,界面又好看,呜哇哦,动画又可爱,超喜欢前端的。

我觉得这篇知乎的回答说得很好,引用一下:

什么是物联网?其发展前景如何? - 袁karlno的回答 - 知乎
https://www.zhihu.com/question/19751763/answer/95871992

附录二:开题报告

【占位】