毕业设计制作记录
2018/6/3
2018/6/2
后天毕设答辩,今天急急忙忙做了一个木盒子。当了一整天的木工。
2018/3/20
准备开题报告、文献翻译还有文献综述。
2018/3/19
终于把 opencv 编译安装上了。 ??
今天投了一份简历校招找工作了,在准备面试,所以没做太多的新东西。
2018/3/18
更新两张图
DHT11 温湿度传感器
新买的传感器,可以同时测出温度和湿度,用来代替以前用到的 DS18B20。
DHT11 工作原理资料 https://cdn-shop.adafruit.com/datasheets/DHT11-chinese.pdf
人体红外传感器
2018/3/17
昨天和朋友聊到我的毕设项目,给他展示了一下目前的进度和项目内容,被反馈说太没有技术含量了,于是决定要尝试自己用 opencv 实现 motion detect。
摄像头实时画面动态检测(Motion Detect)
本来准备今天做的,然后...编译 opencv 等了很久还报 error
所以这个等环境配置好了再做。_(:зゝ∠)_
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:
代码也要相应的改成 ADC.read(1)
关于数值计算
HomeKit 上 SmokeSensor 需要提供的数据单位是 勒克斯(Lux,通常简写为lx),但是实际上光敏电阻 AC 通过 AD 转换得来的数据并不是这个单位,所以我们需要进行一个单位换算。
我用到的这个光敏电阻传感器的数据值是光照越亮越大,数值越小,所以我就先用布包住传感器,测得了在没有光的情况下,数值最大为 255。然后手机上安装一个光照强度测试的 App,大致测出目前环境的光照,再做一个对比,通过调节传感器上的旋钮来控制灵敏度以及比例计算,最终得到勒克斯单位,最后测试还是有个位数值的误差。具体的计算过程可以查看项目源码。
2018/3/15
重要的取名
这个项目,按照一般的工程师思维,取名字很简单,依葫芦画瓢,自己名字前缀 YX
跟上 HomePod
,名字就出来了,简单好懂。但是,似乎缺少一点感觉。我个人其实也很讨厌取一些简单直白的名字,相比之下更喜欢一些优雅的名字,比如之前做过的 Maria
、Partime
或者是 Picocaine
。
所以,我给这个项目取名 Jarvis
,因为《钢铁侠》系列电影里人工智能系统给我的印象太深刻了。我也想有这么一只人工智能管家,经常都在想,在我有生之年人类能不能发明出这样的东西呢?我又能不能买得起呢?
音量控制
赞美开源,一行代码不用写,就能用 iPhone 调整树莓派音量了。
https://github.com/JosephDuffy/homebridge-pc-volume
烟雾传感器
SG-2 烟雾传感器,有 DC (数字信号)和 AC (模拟信号)两种输出口,之前综合设计的时候也用这个传感器,但是当时组队另外一个组员负责接线连接设备,可能偷懒吧,只用了 DC 的口子,这样传感器就只能输出两种状态,一种是烟雾浓度不够,一种是检测到大量的烟雾。实际上可以从 AC 口接出来到 AD/DA 转换电路里,这样就可以获得到一个烟雾浓度值。
具体的连线:
代码就不贴出来了,等到毕业设计答辩结束之后,会开源在 GitHub 上的。
摄像头
出于成本的考虑,只能买这种便宜的摄像头设备先用着了。
不过让我觉得很惊讶的是,居然树莓派摄像头配件还有这种长镜头(相对)的,虽然还是 500w 像素的而且画面效果很差劲。另外就是购买的时候看到还有红外夜视版,没想太多就买了,试了一下晚上灯全关掉也能有不错的画面效果,算是买对了。(到时候答辩的时候就靠这个夜视功能来弥补500w像素的不足啦,吹起来吹起来~)
设备排线连接很简单,就是软件配置有一点麻烦。找到的好几个摄像头相关的 homebridge 插件都是 ffmpeg 和 rtsp 推流形式的,自己尝试配置了一下 rtsp,一直没有成功有各种各样的问题。最好干脆直接用了一个功能最简单的插件。
https://github.com/moritzmhmk/homebridge-camera-rpi
本来是想要做一下运动检测加拍照推送通知的,目前表示要先缓一缓了。
远程访问
因为是基于 HomeKit 搭建的一套智能环境,自然是要受限于苹果的设定,如果想要设备能够外网远程访问,需要一台 HomePod 或者 Apple TV 又或者是一台 iPad 放在家里内网环境,这样出门在外通过外网就能访问到家里的设备的数据了。
不过实际测试,就算是 iPhone 和 iPad 设备都在内网环境下,如果设置了 iPad 作为家庭中枢,似乎 iPhone 获取数据的似乎就只能远程访问了,这样就出现一个问题,就是实时摄像头的画面在这个时候会非常的卡顿,基本不能用。(在学校实验室测试的,100M 下行 8M上行网络,所以猜测应该是苹果的服务器在中国连接很慢吧?)
可能到时候毕业设计答辩只能先关闭 iPad 作为家庭中枢设置了。
2018/3/14
配置好了温度传感器,可以在“家庭”应用里实时显示室温。
传感器使用的是 DS18B20 这款温度传感器。DS18B20 通过 1-Wire®总线通信,只需要一条数据线 (和地线) 即可与处理器进行数据传输。
具体的连线:
因为是单总线通信,在树莓派上使用我们还需要一些配置。
首先是在 /boot/config.txt
这个文件末尾里面添加总线信息:
...
# Custom
dtoverlay=w1-gpio
PS: 需要注意的是,这个配置需要重启系统生效。
然后我们需要运行两条命令启用之前设置的总线模块:
sudo modprobe w1-gpio
sudo modprobe w1-therm
如果需要开机自动启用,可以将模块名字写入 /etc/modules
这样我们就可以获取到温度传感器获取到的温度信息了。
DS18B20 这个传感器接线比较简单,总共三个接口,VCC 接入 5V,GND 接地,SIG 接入 G4 就行。
这个程序主要的实现方法就是读取 /sys/bus/w1/devices/28-01c9dd07010c/w1_slave
这个文件里的温度信息。
图中的 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 上能搜索到树莓派这个设备时显示的名字。
但是实际上目前只是能用的状态,可能后面有空会去优化一下播放效果。然后树莓派上板子本身是有 3.5mm 音频接口的,但是实际是直接连i/o口还是用3.5mm接口好有待考证。
2018/3/9
买的树莓派开发套装到货了。
Raspberry Pi 3 Model B 以及一大堆传感器组件。
显示屏还在考虑要不要买一个。
基本环境搭建
目前树莓派官方最新的系统是基于 Debian 9 stretch 的修改版,本来想要试试在树莓派上装 Arch 作死的,后来发现最新的官方系统还行,就直接用了。
为了让连接在树莓派上的一系列传感器的数据能方便查看,准备连接到 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。
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
附录二:开题报告
【占位】