使用 Arduino Uno 和 IBM IoT Foundation 构建云就绪的温度传感器,第 1 部分: 构建电路并设置环境

像我一样,许多人的家里都拥有丰富的科技。这个互联设备网络的中心,是我的家用 WiFi 路由器,它通过一个有线调制解调器连接到Internet。所以,在您突然听到全屋子的人都在尖叫时,因为笔记本电脑、平板电脑、游戏盒子、DVR 和所有其他连网设备都无法使用,因为 WiFi路由器已停止工作,您就知道某个东西出毛病了。

在过去,我尝试过多种方法来改善这种情形:我将路由器更换为了一个新型号,更新了固件,更换了有线调制解调器,还让有线公司检查了同轴线的信号 —所有这些都是徒劳的。Internet社区中遇到类似问题的人一致认为,路由器或调制解调器(或者二者)可能太热了。这对我似乎不可能,因为在我安装这些机器的配线箱中没感觉到多热,但我对温度的评估不是科学的采样。我需要一种方式来找到发生故障时或之前一刻配线箱的温度,看看是否存在什么关联。我需要对此进行试验。

像其他许多的工程师一样,我使用 Arduino 开源电子平台的功能已有多年。Arduino 是 2005年推出的一个单主板微控制器(由它的创建者根据意大利北部城镇 Ivrea 的一个酒吧命名)。Arduino 使用一种基于 Java™ 语言的语言(叫做Processing)而编写。Arduino 社区非常庞大,网络上拥有数百个使用该主板从各种传感器获取度量结果并控制各种传动装置的例子。所以在我考虑我的问题时,我注意到了桌旁一个未用的Arduino Uno 主板,我抽屉里的 Arduino 以太网扩展卡,以及上一周刚到的等待用于一个项目的全新的温度传感器。在我思考 IBM Internet of Things (IoT) Foundation和 IBM® Bluemix™ 中用于 IoT 开发的功能时,我的项目的概念就开始成形了。图 1 显示了我想要构建的整个项目。

图 1. 项目的概念设计演示
项目的概念设计演示

在该设计中,Arduino 主板(连接到一个温度传感器)通过 MTTQ 协议定期将温度(华氏度和摄氏度)和湿度信息发送到 IoT Foundation,并使用 Bluemix中的功能将这些信息描绘成图表。IoT Foundation 支持在一个实时图表上描绘此数据。在这个 4 部分系列中,您将完成整个这个项目。

开始使用 Arduino
如果想要理解并构建我构建的相同传感器,首先需要拥有一些 Arduino 主板或 Arduino 克隆。但是请小心,许多主板(比如 IntelGalileo)声称库和内部电子设备的容错性上存在着巨大的差异,这会使使用 “兼容的” 主板有时变得很难。我喜爱 Arduino Uno R3,它是 “经典” Arduino的最新修订版,基于 ATMega128 芯片组。很容易从 Radio Shack 等实体店和 Amazon 及其他在线零售商那里以不到 30 美元的价格获得这个主板。

图 2 是 UnoR3 的顶面的照片
图 2. Arduino Uno
Arduino Uno R3 的顶面的照片

首次使用该主板时,请访问 Arduino 网站,这是 Arduino社区的大本营,包含有关这些主板、它们的功能和编写来利用它们的软件的丰富信息和文档。对于这次快速的 “烹调”之旅,我将从该主板的顶部开始,带您逐步了解它的外缘,从本教程的角度介绍该主板的最重要部分。

最顶部的一排引脚孔洞用于从数字设备读取值或控制数字设备。而底部的一排孔洞,一半由读取或写入模拟值的引脚插入,剩余孔洞提供不同类型的功率和地面连接。主板底部左侧,是一个 5V电源插孔,如果希望在该主板未连接到计算机时为您的项目供电,可以使用此插孔。主板左侧的插孔上方的另一个插孔是一个 USB 插口。此插口可用于与您为主板编程的计算机进行通信,也可用于在连接USB 线时为主板供电。最后,主板左侧顶部是重置按钮 — 仅在软件出现故障时使用。

Arduino 社区的一个优势是,事实上只有基本的主板向开源社区发布了其规范,最终导致它的许多版本,人们还为它构建了许多不同的 扩展卡。用于此项目的版本是以太网扩展卡的 R3 版,它提供了通过标准 RJ45 接口以 10 或 100MB 速度访问以太网的能力。ArduinoUno 的许多零售商也提供了该版本,价格为大约 30 美元。图 3 显示了以太网扩展卡。
图 3. Arduino 以太网扩展卡
Arduino 以太网扩展卡

这些主板的一个灵巧设计是一个主板可插入另一个中 — 所以一个项目可在底部有一个 Arduino,在中部有一个以太网或 WiFi扩展卡,或许在顶部还有一个车载扩展卡(用于机器人控制)或一个用于特殊传感器的额外的扩展卡。从图 4 中的照片,可以了解这些主板堆叠起来的样子。

图 4. Arduino Uno 和以太网扩展卡相连
Arduino Uno 和以太网扩展卡

堆叠这些主板后,您可能认为已准备好了,但是请等等:首先必须下载并安装 Arduino IDE,可以从 Arduino网站 上的下载链接获取它,而且它兼容 Mac、Windows® 和 Linux®。如果愿意的话,您可以尝试一个更新的 beta版本,但对于本教程,我将使用目前已发布的 IDE 版本,也就是 Arduino 1.0.5。

下载该 IDE(通常为 ZIP 或 TAR 文件的形式,具体情况取决于计算机的操作系统),并按照说明在您计算机上安装该 IDE 和 USB 驱动程序。然后可以可插入 USB线来为主板供电(以及常常用于完成驱动程序安装),插入以太网线,打开该 IDE,开始试用该 IDE 随带的库示例 — 但对于该示例,现在还为时过早。

构建电路
出于此项目的用途,还要获取另外一些硬件。第一个是一个标准的原型设计 “电路试验板”。如果您是电气工程师或电子产品爱好者,您肯定已熟悉这些硬件。如果不是,那么需要购买一个与图 5中所示的相类似的电路板。

图 5. 原型设计电路试验板
电路试验板

我之前提到的这些零售商以约 5 美元的价格单独出售它们,或者在它们包含在一组跨接线(这是另一组必要的硬件)中时以高达 10-15美元的价格出售。如果您缺乏经验:电路试验板的工作方式是,每一端带编号的每排引脚都以电气方式连接在一起,所以第 1 排中的引脚 a 到 e都连接到某一端。如果将一个电力组件(比如一个电阻)的引出线插入第 1 排中的引脚 e 中,则可将一条导线插入第 1 排中的引脚 d中,然后,这个导线会连接到另一排中的另一个组件。通过使用电路试验板,可以临时快速地对电子电路进行原型设计 — 一种试验不同组件之间的连接的快速且轻松的方式。

您将如何进行连线呢?Arduino 和以太网扩展卡能够从顶部的任何数字引脚读取数字度量结果(1 或 0)。然后可以在 Processing中编写程序来将这些读数(或这些读数的解释)发送到其他计算机。具体来讲,您想要的是一个温度读数 — 对于此,需要一个温度传感器。

有一些兼容 Arduino 的温度传感器可供使用,我在项目中使用的是 Virtuabotix DHT11 温度和湿度传感器。您可以从 Virtuabotix 网站 或 Amazon 以不到 10 美元的价格获得它。这个奇特的 4 引脚的小东西如图 6 所示。

图 6. DHT11 温度和湿度传感器
Virtuabotix DHT11 温度和湿度传感器的照片

收到 DHT11 传感器后,它应该附带了一组引脚分配文档来介绍传感器上的所有引脚的用途,如果没有,可以在 Virtuabotix 网站 上找到此信息。在访问 Virtuabotix 网站时,下载 Virtuabotix DHT11 的 Arduino 库(它打包为 ZIP文件)。它们可以通过同一个页面上的下载链接获得。将它们提取到 Arduino IDE 目录结构的 Libraries 子目录中。重新启动 Arduino IDE 时,可以看到DHT11 示例已可供使用,就像内置的以太网扩展卡和其他设备的示例一样。

现在您已经拥有所有物理配件,是时候将您的项目连接起来了。图 7 中的布线图显示了您需要建立的所有连接。
图 7. 项目的布线图
布线图

我们回顾一下各部分的连线。Arduino 放在底部,以太网扩展卡放在它之上(参见 图 4 查看堆叠示例)。我将 DHT11
插入到电路试验板上的一列未用的引脚中。请注意,具有网格的 DHT11 前部(不是带有标签的一边)面向前面。DHT11 的接地引脚(在网格面向前面时,最右侧的一个引脚)通过黑线连接到Arduino 上的 GND 引脚。DHT11 上的 VDD 引脚(最左侧的引脚)通过红线连接到 Arduino 上的 5V 电源引脚。最后,DTA 引脚(左起第二个)连接到Arduino 上的数字引脚 3。请记住引脚编号 —引脚 3— 因为这在您编写引用 DHT11 的软件时很重要。您的最终配置应类似于图 8。

图 8. 完成的原型布线
原型布线

此刻,单独测试一下这些组件是一个不错的想法。您可能希望首先测试您计算机中的 USB 驱动程序是否已正确安装,看看它是否能够成功地与 Arduino 进行通信。打开 ArduinoIDE 并单击 File > Examples > 01.Basics > Blink,如图 9 所示。

图 9. Blink 菜单选项
Blink 菜单选项

Blink sketch(Arduino 中的程序称为 sketch)是一个简单的程序,可用于测试与 Arduino 的通信。它的目的是让Arduino 主板上的一个内置 LED 灯以每秒一次的频率闪烁。如果正确安装了 USB 设备驱动程序,您应能够单击 Tools > Board选择主板类型(例如,如果使用 Uno,可单击该选项)并从 SerialPort 菜单选择您的串行端口(请参阅您的操作系统工具,比如 Windows设备管理器,了解您使用的串行端口的名称或编号)。如果其中一个选择不可用,那么请在 Arduino 网站上寻求帮助。选择主板和串行端口后,可以单击Upload 按钮(向右箭头,工具栏中左起第二个按钮)将该 sketch 上传到主板,如图 10 所示。

图 10. 具有 Upload 按钮的 Blink sketch
Arduino IDE

如果显示消息 Done uploading 且看到 LED 开始闪烁,则表明您已经成功与 Arduino 进行通信。如果不是这样,请再次在 Arduino 网站 上寻求帮助。在证明可以连接到 Arduino 之后,应该单击Examples > Ethernet > Web Server 尝试一个或多个以太网扩展卡示例。让 Web 服务器示例正常运行的一个难处在于,您可能需要更改它使用的两个参数。在靠近示例 sketch 的顶部,可以看到以下代码行:

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);

在较新的以太网扩展卡上,MAC 地址记录在一个粘贴到该扩展卡的标签上。(对于较老的主板,需要伪造一个 MAC 地址。)更改代码中的 mac[]变量值,使之与标签上显示的 MAC 地址相匹配。类似地,还需要将 IP 地址更改为您本地网络上一个开放的地址。执行这些更改后,将 sketch保存为一个新名称,然后上传它。它现在应该能够工作了。最后,如果下载 DHT11 库并解压到了正确的目录,您应能够单击 Examples > DHT11 >dht11_functions 并加载该 sketch。在靠近该 sketch 的顶部的地方,可以看到以下代码:

void setup()
{
  DHT11.attach(2);
  Serial.begin(9600);
  Serial.println("DHT11 TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
}

还记得您将 DHT11 DTA 引脚连接到了 Arduino 上的引脚 3 了吗?这是因为引脚 2 是供以太网扩展卡使用的,是不可用的。所以我将DHT11.attach(2) 行中的 2 更改为 3,将该 sketch保存为一个不同的名称,然后上传它。打开 Serial Monitor(单击 Tools > SerialMonitor),您会看到来自程序的输出在屏幕上滚动显示温度和湿度数据。

结束语
现在您已证明所有部分都能正常工作,可以继续学习本系列的下一部分了。在 第 2 部分 中,我将解释 IoT 的通信协议(MQTT)并讨论 MQTT 的 Arduino 客户端库,以及一些在本地测试 MQTT 程序的提示和技巧。我还将讨论IBM IoT Foundation 的功能,展示如何将一个在 Arduino 上运行的程序连接到 IoT Foundation,并将所有部分衔接起来,展示传感器数据如何传入,针对IoT 而格式化,以及发送到云。

标签: arduino uno, 温度传感器, ibm iot foundation, 电路, iot