用Arduino制作一个S.M.A.R.T.智慧闹钟

易心STEAM编程
关注

此专题使用Arduino Yún及Google日历来自动设定闹钟,而且看起来超酷!

拥有一个连上网络,而且可以根据你的日历自动进行设定的闹钟,这样就不会错过早上的约会,也不会忘了设定闹钟,并且可以享受舒适的睡眠、解决调闹钟的噩梦。这个聪明的闹钟甚至可以查看你的电子信箱,并在朋友或家人发送重要email的时候将你唤醒。

材料

Arduino Yún开发板

2.8″ TFT 触控屏幕Arudino扩充板

USB喇叭,确认它能透过USB同时接收电源与音讯

MicroSD Card,所需储存空间至少需要15MB

USB连接线, Micro-B to A

USB AC电源供应器 , Enercell 5V/3.6A

工具

计算机及USB连接线,安装好Arduino IDE 1.5.6-r2 BETA,可从arduino.cc免费下载。

Arduino Yún是一个拥有双处理器的特殊Arduino开发板,其中一个处理器运行嵌入式的Linux系统,并透过Wi-Fi或以太接头链接至网络。另一个处理器则使用与Arduino Lreonardo微控制板相同的芯片,这让Arduino Yún依然可以使用大多数的Arduino扩充板及配件。

透过使用Arduino Yún,此专题可以透过Linux处理器链接至复杂的网络服务,并透过另一个处理器来与硬件—一个LCD触控屏幕—互动。

S.M.A.R.T.智能闹钟的软件使用了Temboo的服务,来链接上日历及电子邮件工具。Temboo是一个简化许多网络服务的平台,十分适用于Arduino Yún。在制作此专题前,你需要先在Temboo注册一个免费账户。

S.M.A.R.T.智慧闹钟目前是与Google日历及Gmail连动。如果你也没有Google账户,请在开始制作前注册一个。

除了这些账户,您需要的材料只有Arduino Yún、电源供应器、microSD卡、TFT触控屏幕Arduino扩充板,以及一个USB喇叭。TFT扩充板会显示时钟接口,同时透过USB喇叭播放闹铃。请确认USB喇叭可以透过USB接头同时接收电源以及音讯,因为有些喇叭必须透过另一条连接线来接收音讯,这就无法用在Arduino Yún上。此专题的软件包括了一个把你叫醒的恼人闹钟,不过你也可以换成你喜欢的MP3档案,在早上愉快地醒来。

在专题开始之前,你必须确认你的Arduino Yún已透过无线/有线方式连接上网络。此外,在开启电源前先将microSD卡插入开发板插槽,它便会将此专题使用的数据储存至你的microSD卡中。

以下是具体步骤

步骤1:设定Temdoo账户

在你开始进行任何硬件工作前,temboo上注册一个免费账户。

当你注册完毕,进入你的账户[Account]→应用页面[Applications],来取得你的账户名称、应用名称以及密钥(Key)。储存这些名称,因为我们会将它们使用在Arduino脚本程序代码中。

注意:在此专题中你需要建立几个账户,我们建议你在每个Temboo与Google步骤中取一些容易记忆的名称——并记得将它们纪录在你的记事本或是笔记本电脑中,以便使用。

步骤2:设定并连结Google日历

按照Temboo Google日历数据库的指示来将Temboo连结至你的日历账户:

在Google开发者后台(Google Developers Console:

中启用你的Calendar API。确认Calendar API的状态为「ON」。

接着建立一个新的Client ID(中文注:[凭证]→[新增凭证]→[客户端编号]→[建立客户端ID]),并选择「Web application」(网络应用程序)。按照Temboo提供的指引输入已授权的重新导向 URI(Authorized Redirect URI):

https://{你的Temboo账户名称}.temboolive.com/callback/google

也将已授权的 JavaScript 来源(Authorized JavaScript Origins)输入:

https://{你的Temboo账户名称}.temboolive.com

参考上面第二张图片,在此我的账户名称为「tdicola」,而你的会不一样。建立账号后请记下你预设页面上的Client ID跟密钥等设定值。

注意:Temboo的指引中并未提到你同时需要在Google开发者后台设定商品名称(Product Name)。你可以设定任何名称,例如「My App Name」,就像我在图三中做的一样。

执行名为「IntializeOAuth」的「choreo」(「choreo」指的是Temboo的程序快捷键,应用于各种API Request、SQL查询等。)输入你在前述步骤中取得的客户端ID(ClientID),并在Scope字段内输入相关网址

按下Run之后,查看下方OUTPUT区的Authorization URL,按下「允许」,然后你应会看到一个空白页面。

最后,执行FinalizeOAuth choreo

输入你在Google开发者后台取得的客户端ID与客户端密钥,以及InitializeOAuth choreo回传的Callback ID。按下Run,然后记下OUTPUT区Refresh Token字段中的值。

再次提醒,在继续下一步之前,确认你已经在上述步骤中获得以下几个值:客户端ID(Client ID)、客户端密钥(Client Secret,以及Refresh Token。

步骤3:储存Google日历用户数据

确认你的Google日历账户可运作,并执行Temboo的GetCalendar choreo:

输入你在前述步骤中取得的客户端ID(Client ID)、密钥(Client Secre)以及Refresh Token等值。在Calendar ID value的部分,输入你的Google账户名称(通常是你的email)。你可以参考图片中我的范例。

然后按下RUN,应会显示执行成功。如果发生任何错误,就回顾前面的步骤,确认你有取得所需的Client ID、Client Secret以及Refresh Token值。

按下右上角的Save Profile按钮,然后取个「GoogleCalendar」之类的名称。藉由储存这些信息,来让Arduino脚本程序代码可取得使用日历凭证的权限。

步骤4:设定Gmail权限

设定Gmail十分简单。在 Temboo的Inbox Feed choreo上进行设定:

输入你的Gmail帐户名称与密码,并按下RUN,检查是否执行成功。

按下Save Profie储存信息,就像刚才在Calendar account做的一样。然后取个「GoogleMail」之类的名称。

注意:如果choreo无法运行,而且你确认用户名称与密码无误的话,尝试连结到你Google账户的安全页面,检查Temboo是否已被不经意地标记为可疑。

步骤5:安装TFT Arduino链接库

安装Github 上参考的的TFT library fork,兼容于Arduino Yún:

将下载的压缩文件汇入Arduino IDE做为新的函式库。如果你不太熟悉函式库的汇入过程,请参考使用指南来查看更多详细信息。记得要使用Arduino IDE Version 1.5.6-r2 BETA(而非1.0.5)。

下载并解压缩下列触控屏幕函式库:

步骤6:将TFT扩充板连接至Arduino Yún

将TFT触控扩充板的排针接上Arduino的针脚,连接至Arduino Yún。

注意:扩充板不会完全齐平,以太网络接口可能会稍微超出去。不过这没关系,不应影响连接。您只需要注意扩充板有尽可能好好地接在Arduino上。

步骤7:格式化SD卡

SD卡必须正确格式化,以储存会使用到的声音档。

在MicroSD卡中建立一个名为arduino/www的文件夹在 microSD的根目录下。这让你透过Wi-Fi上传的东西可以上传到www文件夹中。

在原厂设定中,Yún 支持的文件系统包括FAT32(包括vFAT)、 EXT3/4、HFS(+)、 Reiser、Fuse以及NTFS。您可以安装额外的封包,如MSDOS、ISO、BtrFS、 MinixFS、UDF、XFS、CiFS、NFS,甚至是AutoFS。但不支援FAT64。

在预设情况下,Windows应会允许你将SD卡格式化为FAT32/vFAT/NTFS文件系统(对于vFAT它可能会显示「Extended FAT」,不过该选项可能不会出现在XP里。)

Mac OS还可以让你使用「HFS+」(「Mac OS Extended」)或是vFAT(「ExFAT」)。不过HFS+卡可能不太适合在Linux中运作,所以你最好还是使用FAT文件系统。

Linux使用者在以任何一个完全支持的文件系统格式化卡片的时候通常不太会遇到问题。

步骤8:安装Arduino Yún dependency

连接墙壁电源来启动你的Arduino Yún,并稍等2分钟让Linux处理器重启(所有程序编写都可以在无线的情况下完成,所以我们不建议你将开发板连接上计算机)。

当你启动Arduino Yún后,它会建立自己的Wi-Fi网络。在arduino.local/中打开Arduino Yún的Web面板,并将其配置到你家中的Wi-Fi无线网络。Arduino Yún将重新启动。将你的笔电也连接上Wi-Fi,再次开启Yún的Web面板,然后复制下IP地址。

现在使用SSH连接到Arduino Yún,以使用Linux命令提示字符。要有耐心,这可能需要25秒以上。

连接上Arduino Yún后,执行下列指令:opkg update && opkg install kmod-usb-audio madplayalsa-utils python-openssl

注意:此指令应该在同一行,没有任何换行符号。

步骤9:连接上USB喇叭

将USB喇叭连接至Arduino Yún的USB埠。

步骤10:设定S.M.A.R.T.智慧闹钟脚本程序代码

从Github下载S.M.A.R.T.闹钟的脚本程序代码

解压缩文件案并在Arduino IDE中开启。

调整#define的值来对应你的Temboo帐户信息。将TEMBOO_ACCOUNT设为你的TEMBOO账户名称,TEMBOO_APP调整为你的Temboo application name,TEMBOO_KEY为你的Tembooapplication key并将CALENDAR_ID调整为你的Google账号名称(与前面设定calendar choreo时相同。如果你使用了不一样的名称,将CALENDAR_CREDENTIALS和GMAIL_CREDENTIALS调整为你稍早在Save Profie时设定的名称。

你现在不用调整其他#define项目的值,不过你还是可以看看等下有哪些项目是你可以在程序代码中调整的。特别是ALARM_FILEvalue指向的MP3档案,用来做为闹铃声。如果你想改变闹铃声,就将你自己的MP3档上传到www子目录,并更新该项目的值。

步骤11:上传脚本程序代码

调整好#define的值之后,就将脚本程序代码上传到你的Arduino Yún上吧。请确认透过Wi-Fi上传时在Arduino IDE中选择的是「Arduino at (Arduino Yún)」埠。不要使用USB/序列端口,否则会无法安装Python script。

脚本程序代码上传完毕后(这可能需要5分钟左右,请耐心等候)。TFT的显示器应该会刷新为时钟图像,并透过两种不同的格式(表盘/数字)来显示当前时间。

注意:你可以透过调整Arduino Yún的web admin面板来设定时间

步骤12:使用闹钟

测试闹钟是否会根据Google日历提醒来自行进行设置,在你的Google日历上新增一项隔天一早的活动。预设情况下,闹钟只会查看中午前的行程,并在最早活动的一小时前响起。你可以藉由调整#define中的ALARM_LATEST_HOUR及ALARM_BUFFER_MINS值来调整闹钟的动作。

新增活动后,按下闹钟上的REFRESH钮。时钟应会更新,并在右上角显示响铃。闹钟会每两小时检查一次你的日历,并自行进行设定(这同样也可以在#define设置中更改)。

如果你启用响铃后想取消,请按下CANCEL按钮。这会移除响铃并且停止检查接下来24小时内的活动(直到你按下REFRESH)。

如果铃声响起,按下触控屏幕任一处即可停止。

注意:当你重启Arduino Yún,时间可能会显示错误。因为Yún必须连接至网络来取得当前时间。在重启Arduino Yún的几分钟后,按下REFRESH按钮来刷新时间。

步骤13:设定「WAKE UP」邮件

Yún会定期检查你Gmail中的未读信件,查看是否有标题包含了「WAKE UP」的讯息。这让你的家人或朋友可以在有需要立即关注的问题时透过邮件叫醒你。

为了测试此功能,请发送一封标题包含「WAKE UP」的邮件给自己(此关键词有大小写之分,再此全都设为大写。)按下REFRESH按钮强制时钟检查新邮件,这时响铃应会响起(按下触控屏幕任一处停止响铃。)

预设情况下,时钟会每两小时检查一次WAKE UP邮件。您可以在#define的ALARM_KEYWORD_MINS中修改此数值。

注意:每个邮件检查都会透过choreo来执行,你的免费Temboo账户允许每个月执行choreo 1,000次。

你也可以透过修改GMAIL_ALARM_KEYWORD的#define值来修改WAKE UP邮件的关键词。请注意这里是有区分大小写的!

现在你的S.M.A.R.T.智慧闹钟已经准备好叫醒你了,并且让你在该睡的时候可以好好睡一觉。

作者:Tony DiCola

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存