Jeffrey Cross
Jeffrey Cross

如何 - 制作“网络数据表”

古董电压表显示网络当前的空气质量 - 汤姆伊戈...

让计算机失望的一件事是他们拥有多么微不足道的性格。古董仪器的信息显示,如维多利亚时钟摆钟,气压计和指南针,以及巴贝奇的计算引擎,都有现代计算机缺乏的存在。

我尽可能地挖掘iPod的外观,但即使是今天最好的制造设计也不符合那种古老的黄铜和硬木手工制作的爱情。桌面小部件取代了对时钟,气压计和股票行情的需求,而Ambient Orb等多功能显示硬件也可以执行这些功能。但由于这些东西很少存在并且很容易重新配置,因此很容易忘记它们正在显示的信息。仪表的突然暴跌是否意味着我的谷歌股票陷入困境,或明天会下雨?

包括我自己在内的许多极客都出于审美原因狂热地收集旧乐器来抵制这种趋势。我一直在玩古董乐器来显示来自新来源的数据。我有一些美丽的木质电压表和20世纪初的电流表,我从我大学的物理系垃圾中救了出来。它们工作得很好,但它们不像我目前的万用表那么便携,所以我没有使用它们,这对于这种引以为豪的功能性仪器来说是一个悲剧。所以我决定从Ambient Devices(ambientdevices.com)那里得到一个提示,并将其中一个变成空气质量监测器。

首先,我提出了基本系统。我使用的仪表是一个模拟电压表,范围从0-3V DC。这是一个很好的微控制器控制范围,所以我决定使用我目前最喜欢的微控制器模块Arduino(arduino.cc)。建立一个空气质量监测站似乎比我想做的工作更多,但幸运的是,美国各地的本地区域数据可在线获取。

AirNow(airnow.gov)是一个机构间网站,报告全国当地监测站的空气质量指数(AQI)。我将使用Lantronix串口到以太网模块(lantronix.com)将微控制器连接到互联网,然后从我的城市纽约市的AirNow页面中提取数据。

脉冲宽度调制

系统布局很有意义(图A),但微控制器需要向仪表发送变化的电压,微控制器无法输出模拟电压。然而,它们可以产生一系列非常快速的开关脉冲,可以对其进行滤波以得到平均电压。每个脉冲的导通时间与关断时间的比率越高,平均电压越高(图B)。这种技术被称为 脉冲宽度调制 (PWM)。

为使PWM信号显示为模拟信号,接收脉冲的设备必须比脉冲速率反应更慢。例如,您可以脉冲宽度调制LED的调光效果,因为人眼无法检测到的开关转换速度超过30Hz。

模拟电压表对变化的电压反应很慢,因此PWM也适用于我们的古董显示器。为了驱动仪表,我将其正极端子连接到微控制器的输出引脚,将其负极引脚连接到地。然后我可以通过脉冲宽度调制微输出引脚来控制其读数。

1:1缩放

仪表显示从0到150,AQI从0到500.但EPA认为150测量的空气“对所有人都不健康”,所以我决定将我的仪表设置为显示原始AQI,没有任何缩放。如果我看到针头挂在高端,我会知道我不应该呼吸。

解析AirNow页面

下一步是将AirNow网站上的数据转换成微控制器可以读取的某种形式。微控制器可以轻松读取短字符串并将ASCII转换为二进制,但是很难解析网页上的所有文本并找到正确的字符串。所以我决定在我自己的服务器上编写一个程序来解析AirNow页面,只提取纽约的当前AQI读数,并将其保存在微控制器可以读取的地方。然后,微控制器可以通过串口转以太网转换器请求TCP连接并读入数据。

AirNow的页面格式很好,可以提取数据(图C)。 AQI编号在文本中清晰显示,如果从页面源中删除所有HTML标记,则它始终显示在“AQI在hh:mm AM / PM:观察到的AQI”行之后的一行上。我写了一个简短的PHP脚本来阅读页面,删除HTML,并找到这两行。当它这样做时,它会自动返回AQI值:

< AQI: 43>

在我的服务器上,cron作业定期运行PHP脚本,并将返回的值写入可通过超文本传输​​协议(HTTP)访问的文件中。

串口转以太网接口

下一步是将微控制器连接到串口转以太网转换器,然后连接到网络。我使用了Lantronix的Xport设备,这很容易。与其他Lantronix设备一样,Xport具有TCP / IP堆栈以及内置于以太网端的简单Web和telnet接口。在串行端,它使用与大多数微控制器相同的TTL串行协议,包括Arduino,因此将它们连接起来只需将微型传输线连接到转换器的接收线,反之亦然(图E)。我在这个项目中使用了Xport,因为我有一个专为它设计的定制印刷电路板,但是如果你是这些设备的新手,你可能想要从Lantronix Micro开始。 Micro具有更简单的连接器,可通过IDE连接器和带状电缆连接到无焊面包板。

在将Lantronix设备连接到网络之前,您必须对其进行配置。 Lantronix有一个适用于Windows的可下载配置实用程序DeviceInstaller。对于非Windows用户,我在makezine.com/11/diycircuits_meter上有几个可以完成这项工作的程序(一个用于Java,一个用于处理)。

在启用DHCP的网络上,Lantronix设备将自动获取地址。一旦知道设备的地址,就可以远程登录它以配置其串行端口和网络设置。以下是我用于此项目的设置:

***基本参数IP地址192.168.0.23,网关192.168.0.1,网络掩码255.255.255.000(8位)***通道1波特率9600,I / F模式4C,流程00端口10001远程IP地址:---无---,端口00000连接模式:D4 Disconn模式:00冲洗模式:00

通讯和代码

然后,微控制器通过向Lantronix设备发送一个连接字符串来连接到Web服务器,该字符串指定服务器的数字地址和端口号:

C204.15.193.131 / 80

建立连接后,Lantronix设备返回“C”进行确认。之后,任何方向发送的任何数据都会通过串行端口连接直接通过微控制器和服务器之间。

我的微控制器的完整Arduino代码在makezine.com/11/diycircuits_meter上在线。它使用如下方法连接到网络:

void xportConnect(){//发送服务器地址和//等待“C”字节返回。 //在下面填写服务器的数字地址:Serial.print(“C204.193.131 / 80”); status =连接; }

然后它等待Lantronix设备以“C”返回:

if(status == connected){//读取串口:if(Serial.available()){inByte = Serial.read(); if(inByte == 67){//''C'in ascii status = connected; }}}

连接后,它会发送一个HTTP请求,如下所示:

void httpRequest(){//发出HTTP GET请求。填写您的CGI脚本版本的路径:Serial.print(“GET / ~myaccount / scraper.php HTTP / 1.1n”); //填写服务器名称:Serial.print(“HOST:www.myserver.comnn”); status =请求; }

服务器回复:

HTTP / 1.1 200 OK日期:2006年4月14日星期五21:31:37 GMT服务器:Apache / 2.0.52(红帽)内容长度:10连接:关闭内容类型:text / html; charset = UTF-8 <AQI:65>

当您从浏览器调用此PHP脚本时,您不会在顶部看到标题内容,因为浏览器会为您删除它。在Arduino程序中,我通过忽略<符号前的所有字节来删除标题。然后我只从剩余的字符串中取出数字字符,将它们转换为二进制值,然后我得到了空气质量指数值。

最后一步是脉冲宽度调制仪表。这在Arduino中很简单,使用模拟写命令:

void setMeter(int desiredValue){int airQualityValue = 0; //如果该值不会与仪表挂钩,则将其转换为仪表刻度并将其发送出去:if(desiredValue <= meterScale){airQualityValue = desiredValue * meterMax / meterScale;模拟写入(meterPin,airQualityValue); }}

Das Blinkenlights

作为点睛之笔,我在4个Arduino的数字输出中添加了LED,这样我就可以监控连接的进度。悬挂在Arduino数字I / O引脚6-9上的LED分别指示状态为Disconnected,Connected,Connecting和Requesting。

这里的所有都是它的!唯一剩下的步骤是为容纳电子设备的仪表建立一个错误的基础。一旦完成,您就有了一种有吸引力的方式来跟踪当地的空气质量,并且您已经将一台制作精良的仪器重新投入到有用的服务中。


Tom Igoe在纽约大学的互动电信计划(ITP)教授物理计算和可持续技术开发。他希望有一天能和猴子一起工作。


参考文献:

制作:Arduino Arduino入门套件Arduino入门

http://airnow.gov

http://ambientdevices.com

http://arduino.cc

http://lantronix.com

https://makezine.com/11/diycircuits_meter

http://itp.nyu.edu/itp/


从MAKE 11 - 页面133.获取MAKE,订阅或购买单卷。

分享

发表评论