毕业设计制作记录

树莓派 Mar 16, 2018

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

附录二:开题报告

【占位】

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.