Arduino温度采集+展示

前几天看到有同事用树莓派搞了一个温度采集的东东.
自己手痒也忍不住搞了一个,
不过思路稍有不同,
我用的是arduino,采集的数据是直接发送到自己的aliyun服务器上.

所需材料:

  • arduino uno
  • 面包板,杜邦线
  • LM35D温度传感器
  • 扩展网络模块

连接好后的效果(连线比较简单):

该传感器能够测量0-100°的温度
从0开始,每升高1度输出电压提高10mv(0.01v),
通过模拟口检测传感器的电压,就能计算出温度.
模拟口的数值从0~1024对应输入电压0~5v
所以输入电压的计算公式为: (5/1024)in,单位是v
换算成温度就是((5/1024)
in)/0.01

1
2
int in = analogRead(A0);    //读取A0口的电压值
float temp = ((5/1024)*in)/0.01 //计算温度

随后只要将采集的数据发送到服务器保留起来就大功告成了.
完整的代码(从ide的example中改改就行了):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <SPI.h>
#include <Ethernet.h>
#include <FloatToString.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(192.168.1.101);
EthernetClient client;
void setup() {

// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
//Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
for(;;)
;
}
// give the Ethernet shield a second to initialize:
delay(1000);
}
void loop()
{
int n = analogRead(A0); //读取A0口的电压值
float temp = ((5/1024)*in)/0.01 //计算温度
char buffer[25];
String tempStr = floatToString(buffer,temp,2); //arduino比较变态的的类型转换
if (client.connect(server, 8080)) {
client.println("GET /sendTempData.htm?key=securityKey&tempNum="+tempStr);
client.println();
}
delay(1000);
client.stop();
delay(1800000); //半小时采集一次
}

服务端的代码比较简单就不贴出来了.
原始数据是半小时采集一次,加工了一下按小时,按天聚合出最大值,最小值,平均值