完整代碼請見“閱讀原文”~
本人是一名電氣工程師,主要是搞建筑電氣的也就是低壓,對電子電路這些東西很感興趣,但是工作很忙,業(yè)余時(shí)間比較少,投入在這一塊的精力也比較少,只是能夠利用arduino做一點(diǎn)點(diǎn)小玩意,有幸從硬禾的公眾號上得知了這個(gè)fastbond活動,很感興趣。于是就參加了。
? ?
01
項(xiàng)目介紹
我這次進(jìn)行的項(xiàng)目是第三個(gè)主題,環(huán)境監(jiān)測。出發(fā)點(diǎn)根據(jù)一定時(shí)間間隔監(jiān)測房間的照度、溫度和濕度。監(jiān)控結(jié)果可以用來分析房間的溫濕度隨室外溫度和光照情況的不同,所產(chǎn)生的變化。
事實(shí)上,建筑專業(yè)研究人員,可以通過這些數(shù)據(jù),對房屋的保溫情況做出評估。也可以根據(jù)這些數(shù)據(jù)控制空調(diào)、暖氣、電動窗簾等設(shè)施使得建筑環(huán)境更加舒適,更加節(jié)能環(huán)保。
受技術(shù)和時(shí)間的限制、我并沒有打板,整個(gè)裝置采用的現(xiàn)成模塊配合杜邦線連接而成。看上去比較散亂,要是能會打板就好了。這里給硬禾做個(gè)廣告。因?yàn)橛埠檀_確實(shí)實(shí)提供了打板的設(shè)計(jì)課,而且價(jià)格特別低,也就是一條煙錢。主要我就是沒時(shí)間啊,沒時(shí)間。。。
? ?
02
設(shè)計(jì)思路
設(shè)計(jì)思路是使用溫濕度測量模塊、單線溫度模塊、光敏模塊,按照一定時(shí)間間隔持續(xù)記錄室內(nèi)外環(huán)境,使用時(shí)鐘模塊確保arduino內(nèi)部時(shí)間累加器溢出或電源不小心斷電后后,當(dāng)前的時(shí)間信息依然保留。使用TF卡模塊記錄數(shù)據(jù)。Arduino UNO作為主控。編程軟件環(huán)境為arduino IDE。
? ?
03
項(xiàng)目使用模塊、器件介紹
主控板使用arduino uno,負(fù)責(zé)收集并轉(zhuǎn)換傳感器信號,并發(fā)送到串口和存儲至TF卡。傳感器使用DHT11和DS18b20(美信公司,溫度測量模塊,單線接口),用來測量室內(nèi)溫濕度和室外溫度。使用光敏電阻模塊+AD620芯片(ADI公司,放大器用于放大信號)測量環(huán)境光強(qiáng),使用DS1307模塊(美信、時(shí)鐘模塊)提供脫機(jī)記錄實(shí)時(shí)時(shí)間。另有一個(gè)TF卡讀卡器模塊,用于記錄數(shù)據(jù)。
整體搭建完是這樣子的:

?
04
項(xiàng)目源碼及注釋
#include#includeFile 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 A0const int chipSelect =4 ;uint32_t delayMS;//表示時(shí)間用的#include#include#include//18b20用#includeOneWire ds(5); // on pin 8 (a 4.7K resistor is necessary)//下面進(jìn)入setup函數(shù)----------------------------------------------------------------------------------void setup() {Serial.begin(9600);// dht傳感器初始設(shè)置,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!");//-----------}//表述時(shí)間的一個(gè)尾巴,沒這個(gè) 下面那個(gè)print2digits還不認(rèn)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;
(代碼較長,請點(diǎn)擊“閱讀原文”查看)
05
功能演示結(jié)果及說明

下面的截圖是串口監(jiān)視器監(jiān)視到的數(shù)據(jù),里面顯示文件打開錯誤,是因?yàn)榭ò纬鰜矸烹娔X里看記錄了。正常運(yùn)行是沒有問題的。

END
硬禾學(xué)堂
硬禾團(tuán)隊(duì)一直致力于給電子工程師和相關(guān)專業(yè)的同學(xué),帶來規(guī)范的核心技能課程,幫助大家在學(xué)習(xí)和工作的各個(gè)階段,都能有效地提升自己的職業(yè)能力。

硬禾學(xué)堂
我們一起在電子領(lǐng)域探索前進(jìn)
關(guān)注硬禾服務(wù)號,隨時(shí)直達(dá)課堂

點(diǎn)擊閱讀原文,獲取完整資源~