亲爱的读者朋友们,**我总算交完本学期最后一个作业啦!!!**怀着激动兴奋的心情,我认为非常有必要更新一下公众号。
近期准备做个第三学期课程总结系列,该系列的第一篇,就来谈谈我刚交完的这个**【超级】大作业**,也就是 FIT5140 Advanced Mobile Systems 的 Final assignment(这门课没有考试哦,所以这个作业占总分 50%)。
作业要求是 2-4 人组队,作业的复杂度随着人数的增加而增加,一开始我有点犹豫要不要组 4 人队(因为老师一直强调:如果是 4 个人的队伍,你们的 app 必须很复杂!!!)。
但是后来我跟 Peter 同学(嗯,就是之前采访过的那位学霸小哥)商量了一下,觉得人多可以把 application 的功能做的多一些,不管对于是自己能力的培养,还是以后的求职都有好处,分数倒是次要了。
于是乎,我和 Michael, Peter, Fred 就这么组队成功了。
组队之后的第一件事,就是确定我们的项目主题。目前物联网 IoT 很火,也有很多有趣的项目,比如智能检测土壤湿度给植物浇水,智能防盗系统,智能调节室温,还可以检测宠物跑到哪里,智能倒车系统(本课程 Lecturer 之一正在做的项目),智能厨房(本课程 Lecturer 之二感兴趣的项目)。。。。
我们最后选定的主题,和我个人的经历比较有关,是关于新手父母急需的 baby monitor 系统。
我们家里之前用过带显示屏的那种监控器,一般用在宝宝睡着的时候,让父母可以在厨房或者客厅看宝宝睡眠的情况,如果发现有声音或者其他动静可以马上去照顾宝宝。不过呢,我们当时用的监控器是单独的一个设备,和手机没有产生任何关联,也就是说,大人要随身带着一个显示屏,其实还挺麻烦的。
我们的项目想提供的解决方案就是,父母直接下载 SmartBaby,然后宝宝房间的传感器就可以跟 app 进行交互,父母可以在手机上看到宝宝的视频,并且收到跟宝宝有关的提示(比如宝宝哭了闹了),是不是很方便呢~
该项目 (SmartBaby) 大致包括以下内容:
利用传感器检测宝宝所处环境的温湿度,给父母推送相关通知;
为了保证宝宝的安全,我们还可以通过声音传感器、移动传感器,以及摄像头来查看宝宝是否安全的待在自己的小床里面;
父母可以通过 app 远程控制宝宝房间的蜂鸣器和 Led 灯,给宝宝播放音乐或者展示灯光秀,哄宝宝开心;
app 的功能:记录宝宝身高体重头围并且和标准范围进行对比;记录宝宝疫苗注射情况;添加宝宝日记等等。
**涉及到的技术:**nodeJS+expressJS,serialPort,MQTT,Firebase Realtime Database, Firebase Storage, Firebase Authentication,实时视频
**硬件:**Raspberry Pi(+摄像头模块),Arduino UNO, Arduino Nano, 面包板数块,公母线,motion sensor, sound sensor, led, buzzer, temperature&humidity sensor, led lights……
**项目开发时间:**满打满算,两周左右。从一开始的方案设计,资料查找,开始 coding,整合代码,到最后的撰写报告(上周日总算交稿了,✌️)。
话不多说,先看看 submission 的版本吧~(有很多地方还是可以做得更好,但是时间有限,加上各门考试排的很紧张,做成这样我们都已经挺满意了~)
app 首页中显示的是用户当前宝宝的信息,包括身高体重头围,用户可以切换到不同的 tab 去使用其他功能。
Baby Information 里面可以记录宝宝的身高体重头围。
Environment Information 里面可以直观的看到宝宝房间的相关信息。
用户可以添加多个宝宝哦,宝宝的出生时间和血型都可以记录下来~
如果想查看自己所有的宝宝,并且进行当前宝宝的切换,可以点击【switch】进行操作。
用户可以直接在首页记录宝宝的身高体重头围,并且查看宝宝的生长情况是否符合标准,曲线图还可以一键保存到相册哦!
用户可以给宝宝们添加日记(文字+图片),日记会上传到 firebase,图片会传到 firebase storage,也就是说只要用同一个账号登录,在不同的设备都能看到同样的信息,因为数据存在云端。
每个宝宝的日记可以单独记录,只要在主页 switch 就可以查看当前宝宝的成长日记啦~
考虑到 baby diary 的数量可能很多,所以我做了pagination 的处理,第一次只 load 最近的 12 条,用户如果滑到 tableview 的底部再 load 另一部分。并且因为图片下载比较慢,所以会先 check 用户本地是否已有这个图片,有的话就不从 firebase 下载了。
每条日记还会根据宝宝出生日期和当前日期计算出宝宝现在的年龄(精确到天)。
在这个页面里,用户可以看到宝宝的实时视频哦!
还可以给宝宝播放音乐和灯光秀,让宝宝开心~
emmm,测试小白鼠一只。
(播放音乐和灯光秀都是通过连接在 arduino 上的 buzzer 和 led 灯完成的,naughty boy 其实就是葫芦娃,哈哈哈~)
疫苗列表是从 expressJS 搭建的 api service 拿到的,当前宝宝第一次拿到疫苗 list 的时候,系统会把这个 list upload 到这个宝宝的 firebase 里面,然后根据宝宝的出生年龄和疫苗规定的时间,用不同的颜色来代表宝宝是否已经逾期注册疫苗(灰色表示已注册,红色表示逾期,绿色表示待注射)。
用户可以添加个人资料,上传头像。
还可以在这里修改宝宝的信息~
因为我们是做 baby monitor,所以用户随时随地都应该能收到一些推送通知,包括软件在后台运行,甚至软件关闭的情况。但是我们查了资料发现只有先加入 apple developer 才能在软件关闭的时候发送通知,所以这次只做了前台+后台运行的情况。
在这个页面,用户可以设置是否接收相关通知,并且自定义舒适的温度和湿度。如果 sensor 感知到的温湿度不在该范围内,用户就会收到通知。
宝宝醒了会有推送提示,并且根据声音传感器的数据来计算 sound level,level 越高说明宝宝声音越高。
同时还有 motion sensor,可以感知到小床里面的宝宝是不是逃走了。。。
房间的温湿度范围可以由用户自由设定,一旦超过或低于设定的值,会推送一次贴心通知。
非常有爱的团队~大家都很给力,合作非常愉快,项目也基本上按照预期完成了~
关于这个项目,我自己的部分多多少少还是有些遗憾的,例如:
还是那句老话,软件开发没有最好,只有更好。
不论如何,第一个版本还是挺满意的~ 以后继续加油!
PS:这门课是 FIT5046 的后置课,如果对 app 开发有兴趣的话,建议先选 5046 然后再选 5140,能学到很多东西!!而且看到自己的项目超级有成就感对不对!