利用arduino+w5100模拟自动浇花并且乐联网实时查看数据
所需器件
Arduino uno 开发板
W5100
继电器
Dht11 温湿度传感器
微型水泵
实验目标
我们用空气中的温湿度模拟土壤,然后实现自动浇花
实验步骤
一. 安装电路
二. 下载库文件
三. 打开例程,修改代码
四. 注册乐联网账号,获取userkey码
五. 添加设备
六. 添加传感器
七. 下载实时数据传输工具
八. 桥接网络
九. 获取ip等信息
十. 生成数据
代码如下:
#include <dht11.h>
#include <LeweiClient.h>
#include <SPI.h>
#include <Ethernet.h>
//#include <Wire.h>
#define LW_USERKEY "6fe5fc0f7ead43e7944d180dcfb45283"
#define LW_GATEWAY "02"
#define POST_INTERVAL (10*1000)
//#define MY_NAME "UNO1"
// #define MY_DESC "UNO test case"
// char my_addre[50]="http://172.23.105.8/api";
// int port =8889;
IPAddress ip(172,23,114, 20);
IPAddress mydns(58,193,152,3);
IPAddress gw(172,23,115,254);
IPAddress subnet(255,255,254,0);
LeWeiClient *lwc;
dht11 DHT11;
#define DHT11PIN 2
double dewPoint(double celsius, double humidity)
{
double A0= 373.15/(273.15 + celsius);
double SUM = -7.90298 * (A0-1);
SUM += 5.02808 * log10(A0);
SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
SUM += log10(1013.246);
double VP = pow(10, SUM-3) * humidity;
double T = log(VP/0.61078); // temp var
return (241.88 * T) / (17.558-T);
}
double dewPointFast(double celsius, double humidity)
{
double a = 17.271;
double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity/100);
double Td = (b * temp) / (a - temp);
return Td;
}
int potPin = 4; //设置模拟口4为LM35的信号输入端口
float temperature = 0; //设置temperature为浮点变量
long val1=0; //设置val为长整数变量
long val2=0;
void setup()
{Serial.begin(9600);
delay(1000); //延时1000ms
pinMode(8, OUTPUT);
lwc = new LeWeiClient(LW_USERKEY, LW_GATEWAY,ip,mydns,gw,subnet);
}
void loop ()
{
int chk = DHT11.read(DHT11PIN);
val1 = analogRead(potPin); //val变量为从LM35信号口读取到的数值
temperature = (val1*0.0048828125*100); //把读取到的val转换为温度数值的10倍
val2=(float)DHT11.humidity;
//Serial.print("T1:");
Serial.print((float)DHT11.temperature, 2);
//Serial.print(temperature);
// Serial.print(";H1:");
Serial.print(",");
Serial.print((float)DHT11.humidity, 2);
Serial.print(",");
Serial.println(temperature);
//if (lwc) {
// Serial.print("*** start data collection ");
//t1,t2.. must using the same name setting on web server.
// lwc->append("T1",temperature);
// lwc->append("H1", (int)val2);
// Serial.print("*** data send ***");`` U
// lwc->send();
//Grammar changed by Wei&Anonymous ;)
// Serial.print("*** send completed ***");
// delay(POST_INTERVAL);
// }
if(temperature>25)
{ digitalWrite(8,LOW);
delay(500);}
else
{ digitalWrite(8,HIGH);
delay(500);}
delay(500);
}
|