电子说
功能介绍:此设备用于采集土壤湿度、空气干湿度、气温、光照强度,通过SD卡存储所采集的数据,可将数据输入excel、matlab进行数据分析,从而寻找最利于作物生长的生长环境。
后期计划增加K离子传感器、采用yeelink将数据采集至平台形成实时监控。
原件清单(某宝上全有):
1.arduino uno增强版(就是引脚旁边可以自己焊接上排针的那种)*1,19.9元
2.dht11温湿度传感器(也可买精度更高的dht22)*1,8.8元
3.GY-30光照传感器*1,9.9元
4.LCD1602屏幕*1,8.8元
5.10uF电容*1
6.100欧电阻*1
7.电位器*1,1元
8.SD卡模块*1,4.9
9.公母线、杜邦线*图片上那么多,5元吧
10.面包板*1,5.9
总价:64.2元
接线图!
说明书:
一、总体概述
装置分为6个部分,空气湿度、空气温度、土壤湿度、光照强度、SD卡,LCD屏。
二、温湿度检测模块
使用DHT11,相关参数如下:
由于添加了滤波电路,精度应该会有所提高。
三、土壤湿度传感器
未接触测量之前的显示应该为1022或者1023,这个值代表的是工作正常,将传感器插入土壤中即可使用,数字会变小。
需要特别注意的是传感器的DO口不接线。
四、光照传感器
光照传感器的读数在接电后前三秒是0,这是串口的初始化,三秒后可正常工作。传感器已标定,显示的数值代表国际单位制的光照强度流明(LX),其物理意义是:LX,照度的国际单位(SI),又称米烛光。1流明的光通量均匀分布在1平方米面积上的照度,就是一勒克斯。可以标作勒[克斯],简称勒。英为lux,简作lx 。
需要注意的是光照强度传感器的采集器是在外端黑色六引脚的贴片上,正常使用时,贴片不可被遮挡。
五、LCD屏
LCD屏幕加上了变阻器来控制屏幕的亮度,如果显示数字不清楚,可以通过调节变阻器来调节电压使其显示更清楚:
LCD屏幕显示的数据如下:
下面对数值进行说明:
SH(soil humidity,土壤湿度)
TEMP(temperature,温度),单位摄氏度
LX(illumination intensity,光照强度),这里直接用单位命名了。
AH(air humidity,空气湿度)
六、SD卡模块
SD卡模块目前还没有写代码,后期通过SD卡采集的数据可以导入excel进行处理。
接下来要做的事:
标定各个传感器
加入事件模块
编写SD卡代码
加入休眠功能,20分钟采集一次数据,6个小时存储一次数据
加入yeelink
将监测站进行封装
上代码(语言processing,平台IDE):
#include 《LiquidCrystal.h》
#include 《Wire.h》
int ASignal = A0;
LiquidCrystal lcd(12,11,5,4,3,2);
#include 《dht11.h》
dht11 DHT11;
#define DHT11PIN 7
#define ADDR 0b0100011
void setup()
{
pinMode(ASignal, INPUT);
Serial.begin(9600);
lcd.begin(16,2);
Wire.begin();
pinMode(13, OUTPUT);
Wire.beginTransmission(ADDR);
Wire.write(0b00000001);
Wire.endTransmission();
}
Serial.println(“ ”);
int chk = DHT11.read(DHT11PIN);
Serial.print(“read sensor”);
switch(chk)
{
case DHTLIB_OK:
Serial.println(“OK”);
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println(“Checksum error”);
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println(“Time out error”);
break;
default:
Serial.println(“Unknown error”);
break;
}
Serial.print(“Humidity(%):”);
Serial.println(DHT11.humidity);
Serial.print(“Temperature(oC):”);
Serial.println(DHT11.temperature);int sensorValue = analogRead(ASignal);
Serial.print(“soil exploration=”);
Serial.println(sensorValue);
int val = 0;
// reset
Wire.beginTransmission(ADDR);
Wire.write(0b00000111);
Wire.endTransmission();
digitalWrite(13, LOW);
delay(100);
Wire.beginTransmission(ADDR);
Wire.write(0b00100000);
Wire.endTransmission();
// typical read delay 120ms
delay(120);
Wire.requestFrom(ADDR, 2); // 2byte every time
for (val=0; Wire.available()》=1; ) {
char c = Wire.read();
//Serial.println(c, HEX);
val = (val 《《 8) + (c & 0xFF);
}
val = val / 1.2;
Serial.print(“lx: ”);
Serial.println(val);
Serial.println(“OK”);
digitalWrite(13, HIGH);
delay(100);
lcd.print(“SH:”);
lcd.setCursor(3,0);
lcd.print(sensorValue);
lcd.setCursor(8,0);
lcd.print(“TEMP:”);
lcd.print(DHT11.temperature);
lcd.setCursor(0,1);
lcd.print(“LX:”);
lcd.print(val);
lcd.setCursor(8,1);
lcd.print(“AH:”);
lcd.print(DHT11.humidity);
delay(3000);
lcd.clear();
}
void loop()
{
全部0条评论
快来发表一下你的评论吧 !