arduino温湿度采集之DIY基于arduino的环境监测采集设计

电子说

1.2w人已加入

描述

       arduino功能强大,arduino温湿度采集方案的实现很简单,先给大家上成品图!往下翻会有:原件清单!接线图!源代码!欢迎大家提出宝贵改进意见。

  

      功能介绍:此设备用于采集土壤湿度、空气干湿度、气温、光照强度,通过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()

  {

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分