这个DIY项目向您展示了如何将一个从商店里买来的牙刷支架变为一个物联网家具。英特尔® Edison开发板提供的小规格的尺寸和计算能力鼓励健康的习惯——使用你的牙刷和牙膏。
为英特尔Edison开发板编程可能用到你已经掌握的技能。因为这块开发板具备内置无线功能并运行node.js连接硬件,你可以使用JavaScript*为其编程。这意味着大多数网络程序员能够使用英特尔Edison开发板快速开始物联网编程。
下面的步骤列出了怎样添加开关、屏幕和传感器从而将任何一个牙刷支架变为一个鼓励每个人健康的计时器T.E.E.T.H.。源代码展示了一个简单的node.js项目如何控制那些功能并连接到因特网进行云分析和电子邮件发送。图1显示了完整的项目。
使用T.E.E.T.H.智能牙刷计时器
首先将你的牙刷从支架中取出。这样激活了等待你开始刷牙的计时器。随后一个美国牙科协会*推荐的两分钟倒计时启动并且一个LED屏幕显示鼓励的文字。屏幕变换颜色直到你结束刷牙为止。不要担心如果你闭着眼睛刷牙。声音播放会从开始到结束提示你。当你放回牙刷(或你离开房间并关灯)后计时器停止。在此之后,支架将你的时间数据存储到云端。如果你已经达到目标,它还会发送一封祝贺电子邮件。最终你能够登录云端查看每支在支架里的牙刷的进度。你可以监控这些物联网数据来鼓励家里的每个人养成健康习惯。
购买和计划
项目预期搭建时间:2-3小时
费用:$75 - $100
图2显示了项目所用部件。
图2——T.E.E.T.H项目所用部件
材料
- 牙刷支架
- 英特尔Edison计算模块
- 英特尔Edison扩展板
- 杠杆开关(每支牙刷一个)
- 塑料平台(每支牙刷一个)
- 10K电阻(通孔,每支牙刷一个)
- Grove – LCD RGB背光(http://www.seeedstudio.com/depot/Grove-LCD-RGB-Backlight-p-1643.html?cPath=34_36)
- 光敏电阻光线传感器
- 压电陶瓷蜂鸣器
- 带USB接口的充电电池
- 硅黏合剂或密封剂
- 项目代码
- 连接线
工具
- 英特尔® XDK IoT Edition和USB线缆的计算机
- 电烙铁和焊锡
- 根据您的支架的切割工具
步骤
1. 准备支架
我选择了一个竹制的牙刷支架,这样我能轻松地钻出所需的孔用来挂载配件及走线以隐藏线缆。你需要的工具取决于支架制作的材料。或者取而代之你可能想要制作一个底座。
在前面挂载LED屏幕
在支架顶部切出一个足够容纳整个LCD组件的洞。随后在切下来的部分为屏幕本身切出一个小一些的洞。用竹子碎屑和胶水填补缺损,而后组装回支架(图3)。
图3——挂载LED屏幕
或者,你可以简单地将整个模块用螺丝钉拧在外部。这取决于你的审美。无论你如何做,记住要点是确保您的LED线缆能够接到将被挂载到背部的英特尔Edison扩展板。
底部加入杠杆开关
任何检测动作的传感器在这里都能用。我选择了杠杆开关而不是类似红外传感器之类的东西来降低能耗。不过,一支牙刷仅重约15克,因此你需要一个非常敏感的开关。
由于开关很小,我还增加了一个平台使得牙刷放置在支架中的任何位置都能触发开关。我的平台是从一个塑料工具箱隔板上切下来的。(看上去我总是有的比用的多,因此切出一个合适的平台很快也很便宜。)你还要焊接一根连接线到开关。将一根线接到地/公共针脚,另一根接到NC(通常关闭)针脚。
图4——挂载杠杆开关
因为触碰杠杆的背面不会触发开关,我挂载好开关以至背面实际上在牙刷支架隔板里面(图4)。至于LCD屏幕,确保你的线缆能够接触到扩展板。我在支架背面钻了洞来隐藏(大部分)线缆。
在前方添加光线探测器,在后方添加蜂鸣器
通过焊接一根足够长能接到支架背面扩展板位置的连接线准备好光线探测器和蜂鸣器。我在前面钻了一个适合光线探测器大小的孔(图5)。位于前面的位置使得传感器能够精确地读取到房间里的环境灯光。我在背面为蜂鸣器切出了一个大一些的洞。蜂鸣器在背面对牙刷支架原本的样子影响有限,还能防止在早上声音太响。
图5——孔洞及挂载蜂鸣器和光线探测器
暴露的电子器件做防水
因为这个项目一定会被弄湿,为你的连接采取一些防备措施。使用硅胶或者其它防水的黏合剂来覆盖暴露的电子器件和线缆(图6)。譬如我在LCD组件背面用了许多硅胶。但是确保杠杆开关不被覆盖以使得它们仍然能够保持良好的接触。
图6——使用硅胶和另一种黏合剂做防水
将组件连线至扩展板
我第一次建造这个项目时使用了一块面包板来测试我的开发板和连接(图7)。你可能在完成最后的步骤前要做同样的事情。
图7——扩展板连线、电池和LCD屏幕
按照图表将组件连接至开发板上的针脚(图8)。大多数情况下它们能直接连接,但是我加入了10K下拉电阻来降低开关的噪音及防止错读。
图8——扩展板连接
将英特尔Edison计算模块添加到扩展板上,你的项目的硬件部分基本上完工了。我们很快会装上电池。现在你的项目看上去应该类似下面的样子。
图9——硬件安装基本完工
2. 准备英特尔Edison开发板和云服务
英特尔物联网开发人员社区上有英特尔Edison开发板启动运行的文档。按照下面的指令将你的计算机连接到开发板上:http://intel.com/Edison/getstarted
设置无线
因为项目使用Wi-Fi* 连接到云端并且发送邮件,你还要将板子设置好连接到无线路由器。这个步骤只需要简单地使用一个英特尔Edison开发板上自带的应用,还可以从上面的入门链接找到更多的信息。
创建一个物联网分析帐号
这个项目使用英特尔® 物联网开发套件基于云的分析来存储数据。你可以从下面的网站创建一个帐号: https://dashboard.us.enableiot.com/v1/ui/auth#/login
将组件添加至云
在物联网分析表中完成你的英特尔Edison开发板注册后,你必须通过创建定制的组件来为你的数据准备云。你将为每支牙刷创建一个定制的组件。你为组件起的名字就是在报告中将显示的名字。按照这些指令创建你的组件:https://software.intel.com/en-us/intel-iot-developer-kit-cloud-based-analytics-user-guide
在英特尔Edison开发板上注册组件
当物联网分析表上创建好组件后,你需要在开发板上注册这些组件。你在这个步骤使用的名称就是把数据发送到云端的源代码中使用的名称。在开发板上注册组件请参考同样的指令:https://software.intel.com/en-us/intel-iot-developer-kit-cloud-based-analytics-user-guide
在英特尔Edison开发板上启动英特尔代理
英特尔Edison开发板使用一个内置服务来与云通信。代码必须运行这个服务来连接或者发送数据。当完成上面链接中的指令后,你可以发出这个指令测试开发板是否能连接到云端并且发送数据到你指定的组件。
3. 英特尔Edison开发板编程
当硬件部分完成以及服务准备好后,现在是时间进行开发板T.E.E.T.H. 源代码编程了。
通过英特尔® XDK IoT Edition连接开发板
英特尔XDK IoT Edition是帮助你在开发板上创建node.js项目的开发环境。它包含很多示例项目和样例。它的文档能在这里找到:https://software.intel.com/en-us/html5/documentation/getting-started-with-intel-xdk-iot-edition
载入程序
下载或复制这个项目在GitHub上的源代码。文件采用一个小规模的node.js项目的结构,https://github.com/ncarver/TEETH。
- readme.md ——文档和许可信息
- package.json —— 定义附属库文件的项目描述符
- main.js —— 运行T.E.E.T.H.的全部代码
- node_modules —— 当你首次创建项目代码时创建的带有附属库文件的目录
配置SMTP服务
在main.js的顶部定义了许多常量。你将要更新它们中的许多个来匹配你的家庭环境和你的偏好。至少,你需要改变MAIL.user、 MAIL.pass和MAIL.brushTo的值。这些属性定义了SMTP邮件服务如何连接到因特网以及T.E.E.T.H电子邮件应该发送到哪里。
图10——配置MAIL.user、MAIL.pass、 MAIL.brushTo
使用注册过的分析组件名称
使用你在常量区域里的物联网分析表中注册的名称,METRICS.brushComponent。这是一个包含所有你的项目中使用的组件的数组。对于我来说,它有两个部分。
图11——物联网分析表
添加更多的牙刷
如果你搭建了一个容纳两支以上牙刷的支架,你需要改变代码的常量区域来反映这个事实。当出现特定牙刷值的时候,代码使用数组结构。按照这些常量为每支牙刷添加额外的数组元素:METRICS.brushComponent、MAIL. brushTo.PINS.brushSwitch、SCREEN_MSG.brushName、TIME.brushPreptime和TIME.brushGoaltime。
4. 理解代码
尽管这个项目可能由多个文件组成,其中每个模块一个文件,我感觉还是只有一个main.js文件显得更简单。这个项目不需要很多代码,因此更多的文件可能使本身简单的项目变得复杂。
所需的库文件
作为一个node.js项目,代码依赖于与硬件、分析守护进程和电子邮件通信的其它模块。
常量
这是唯一需要编辑的区域。按照需求修改这些常量值来改变颜色、屏幕消息、邮件文字,甚至时间间隔。
计时器
为了简单化,所有计时器都被保存在一个全局对象中。这样允许setTimeout和setInterval的方法调用总是能访问计时器。
Logger
Logger类输出控制台消息,按照一种传统方式限定基于错误、警告和信息的输出。
Sensors
有了Sensors类,你会发现代码和通用输入输出针脚之间交互是多么简单。牙刷开关和光敏电阻值从这里被读取。
Buzzer
Buzzer类中的大多数代码被用来播放作为计时器开始和结束的轻快的鸟叫声。
Screen
Screen类负责所有LCD屏幕的指令,它通常有两种功能:显示文字消息和改变背景颜色。
Mailer
Mailer类使用所需的node_module使用SMTP来发送电子邮件。它包括一些当发送尝试失败时的错误检查。
Metrics
Metrics类是帮助的最后部分。它使用一个开发板上的本地套接字发送分析数据到iotkit-agent守护进程。如果连接时发生错误,报错信息被发送至控制台以便调试。
Teeth
这是包含项目全部逻辑的主类。Teeth通过调用Sensors类监控开关和光线,Buzzer类发出声音警告,Screen类显示消息,Mailer类发送邮件,Metrics类更新物联网列表。如果想修改你的版本的特征,这是需要更新的代码。
5. 测试
趁着开发板和牙刷支架还连接在电脑上时花点时间做些测试。这是在你的环境下查看控制台输出和调试代码的最简单的方法。
确认传感器和显示
使用英特尔XDK IoT Edition中的安装/创建按钮将代码发送到开发板并运行NPM来创建节点项目。按下运行按钮启动T.E.E.T.H。
通过使用一根牙刷触发支架内的每一个杠杆开关来测试支架。你应该看到LCD屏幕点亮并且能够跟踪控制台输出。同时,蜂鸣器应该响起。如果你遮盖住光线传感器,计时器应该关闭。
检查邮件
让计时器运行到结束以执行发送电子邮件功能。根据你的服务而定,你应该在几分钟内从收件箱中收到一封电子邮件。
查看分析
最后需要确认的是分析部分。使用你的支架上所有的牙刷来测试每个开关。登录到表中确认你看到了每个定制的组件的数据。
6. 加入电源
你终于准备好将英特尔Edison开发板从你的计算机上卸载下来,并将牙刷支架作为一个独立的物联网设备放回到浴室洗脸盆。
安装电池
使用一个带有USB连线的可充电的电池为扩展板提供电力(图12)。我使用的是一个会议上的展台礼品。它原本是为手机充电的但在这个项目中同样工作得非常出色。我保留了USB接口以方便充电。
图12——安装电池
完成英特尔Edison开发板封装
记住这个项目会被弄湿。采取预防措施保护你的电池和开发板以及其它任何暴露的电子器件。这是我最终版本的图片。
更进一步
在这个项目里,我们只是刚刚开始利用英特尔Edison平台的无线互联网和云数据的可能性。这些源代码能够被简便地修改以使用其它技术。例如,你可能想用微信代替电子邮件。或者你可能使用其它诸如Xively* 的云服务来代替物联网分析。就连发送给扬声器的开始和结束声音都能替换成你喜欢的mp3文件。你可以通过将node.js模块替换为其它你想使用的模块来实现这些调整。
还有,智能牙刷支架可以更加智能。类似Nest* 遇到T.E.E.T.H。 目前,数据流向仅向云端输出,但是通过将这些数据当作计时器的输入使用将使其变成一个学习工具。例如,如果你看上去从来没有完成整两分钟,那么计时器可以通过给你设定更低的目标来增加一点点每次的成功。与其使用一个固定的准备时间,一个对刷牙环境声音有反应的传感器可以适应你的习惯。即使不做任何调整,这仍是一个将物联网带进你家里一个重要房间的非常棒的项目。把它当成浴室2.0运动的一部分。
关于作者
Nathan Carver comes to the IoT space on a crooked path. Formerly a Ringling Brothers clown, he is now VP of Engineering at Crisp Media, a mobile ad company where he works with web and big data technologies. Previous work includes running a professional services department, founding a software company, performing in Singer and Saw (https://www.youtube.com/watch?v=Eb6xqXZKDhE), and sailing on the Hudson River. He lives in NYC and other projects are available on https://github.com/ncarver.