完整代码请见“阅读原文”~
本人是一名电气工程师,主要是搞建筑电气的也就是低压,对电子电路这些东西很感兴趣,但是工作很忙,业余时间比较少,投入在这一块的精力也比较少,只是能够利用arduino做一点点小玩意,有幸从硬禾的公众号上得知了这个fastbond活动,很感兴趣。于是就参加了。
01
项目介绍
我这次进行的项目是第三个主题,环境监测。出发点根据一定时间间隔监测房间的照度、温度和湿度。监控结果可以用来分析房间的温湿度随室外温度和光照情况的不同,所产生的变化。
事实上,建筑专业研究人员,可以通过这些数据,对房屋的保温情况做出评估。也可以根据这些数据控制空调、暖气、电动窗帘等设施使得建筑环境更加舒适,更加节能环保。
受技术和时间的限制、我并没有打板,整个装置采用的现成模块配合杜邦线连接而成。看上去比较散乱,要是能会打板就好了。这里给硬禾做个广告。因为硬禾确确实实提供了打板的设计课,而且价格特别低,也就是一条烟钱。主要我就是没时间啊,没时间。。。
02
设计思路
设计思路是使用温湿度测量模块、单线温度模块、光敏模块,按照一定时间间隔持续记录室内外环境,使用时钟模块确保arduino内部时间累加器溢出或电源不小心断电后后,当前的时间信息依然保留。使用TF卡模块记录数据。Arduino UNO作为主控。编程软件环境为arduino IDE。
03
项目使用模块、器件介绍
主控板使用arduino uno,负责收集并转换传感器信号,并发送到串口和存储至TF卡。传感器使用DHT11和DS18b20(美信公司,温度测量模块,单线接口),用来测量室内温湿度和室外温度。使用光敏电阻模块+AD620芯片(ADI公司,放大器用于放大信号)测量环境光强,使用DS1307模块(美信、时钟模块)提供脱机记录实时时间。另有一个TF卡读卡器模块,用于记录数据。
整体搭建完是这样子的:
04
项目源码及注释
#include
#include
File dataFile ;
#include
#include
#include
#define DHTPIN 2 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT_Unified dht(DHTPIN, DHTTYPE);
#define LIGHT_PIN A0
const int chipSelect =4 ;
uint32_t delayMS;
//表示时间用的
#include
#include
#include
//18b20用
#include
OneWire ds(5); // on pin 8 (a 4.7K resistor is necessary)
//下面进入setup函数----------------------------------------------------------------------------------
void setup() {
Serial.begin(9600);
// dht传感器初始设置,Initialize device.
dht.begin();
Serial.println(F("DHTxx Unified Sensor Example"));
// Print temperature sensor details.
sensor_t sensor;
dht.temperature().getSensor(&sensor);
Serial.println(F("------------------------------------"));
Serial.println(F("Temperature Sensor"));
Serial.print (F("Sensor Type: ")); Serial.println(sensor.name);
Serial.print (F("Driver Ver: ")); Serial.println(sensor.version);
Serial.print (F("Unique ID: ")); Serial.println(sensor.sensor_id);
Serial.print (F("Max Value: ")); Serial.print(sensor.max_value); Serial.println(F("°C"));
Serial.print (F("Min Value: ")); Serial.print(sensor.min_value); Serial.println(F("°C"));
Serial.print (F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("°C"));
Serial.println(F("------------------------------------"));
// Print humidity sensor details.
dht.humidity().getSensor(&sensor);
Serial.println(F("Humidity Sensor"));
Serial.print (F("Sensor Type: ")); Serial.println(sensor.name);
Serial.print (F("Driver Ver: ")); Serial.println(sensor.version);
Serial.print (F("Unique ID: ")); Serial.println(sensor.sensor_id);
Serial.print (F("Max Value: ")); Serial.print(sensor.max_value); Serial.println(F("%"));
Serial.print (F("Min Value: ")); Serial.print(sensor.min_value); Serial.println(F("%"));
Serial.print (F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("%"));
Serial.println(F("------------------------------------"));
// Set delay between sensor readings based on sensor details.
delayMS = sensor.min_delay / 1000;
pinMode(10,OUTPUT);
Serial.println("Initializing SD cad");
if(!SD.begin(chipSelect))
{
Serial.println("Initializing failed!");
//while (1);
}
Serial.println("Initializing done!");
//-----------
}
//表述时间的一个尾巴,没这个 下面那个print2digits还不认
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}
void loop() {
//用于18b20的-----------------------------------------------------------------
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius;
(代码较长,请点击“阅读原文”查看)
05
功能演示结果及说明
下面的截图是串口监视器监视到的数据,里面显示文件打开错误,是因为卡拔出来放电脑里看记录了。正常运行是没有问题的。
END
硬禾学堂
硬禾团队一直致力于给电子工程师和相关专业的同学,带来规范的核心技能课程,帮助大家在学习和工作的各个阶段,都能有效地提升自己的职业能力。
硬禾学堂
我们一起在电子领域探索前进
关注硬禾服务号,随时直达课堂
点击阅读原文,获取完整资源~