最近一直想做一個可以檢測溫濕度的,光照強度,還有氣壓檢測的儀表。而且要精度高反應快的傳感器,在網上找了一圈,看的眼花繚亂,符合要求的價格都不低,無意中看到某寶看到一個溫濕度、氣壓、光照度三合一的傳感模塊,最重要的是模塊上面集成的溫濕度芯片是我首選的SHT20,還有光照強度傳感器BH1750. ,都符合自己的要求,這2款芯片在大學的時候就有所了解,算是溫度檢測和光照檢測領域里,精度高,體積非常小,性價比很高的一款。氣壓傳感器一般都是采用BMP180或者BMP085,這2個芯片也差不多的,現在用BMP180的感覺要多一些。非常符合設計需要。 再加上這個模塊是串口輸出,直接就可以讀取數據啦。哈哈哈,根本不需要自己去進行3個傳感器的驅動代碼編程,。(其實之前我也買個單獨的模塊回來,本來打算3個模塊并聯使用,,奈何程序花了好幾天時間都沒有調試通過,后來模塊直接都不知道丟哪里去了。)。于是果斷重新就此準備自己重新制作一個。 因為是模塊,沒有相關的顯示屏,硬著頭皮問賣家能不能拿送個顯示屏................結果和預想的一樣。需要單獨購買。好吧,又買了一塊單片機的板子,到手拼接后,開始查資料制作,于是出現了此貼。
從單片機板子和模塊到手后 到制作完成總共花了1天時間!附實物圖與相關程序,留給需要的人吧!其實還可以通過氣壓大小,有相應來計算出海拔高度。過段時間更新的時候我在上傳上來。。。。3合1模塊上的傳感器:CMCU-01 SHT20+BMP180+BH1750FVI
2.jpg (71.99 KB, 下載次數: 69)
下載附件
2019-2-22 18:36 上傳
1.jpg (95.98 KB, 下載次數: 64)
下載附件
2019-2-22 18:36 上傳
各傳感器的參數介紹:
================================================
SHT20是瑞士Sensirion 數字溫濕度傳感器。 SHT20數字溫濕度傳感器是眾多溫濕度傳感器中一款性價比高的產品,配有4C 代CMOSens®芯片。除了配有電容式相對濕度傳感器和能隙溫度傳感器外,該芯片還包含一個放大器、A/D 轉換器、OTP 內存和數字處理單元。用量以百萬計,且應用領域廣泛。該類傳感器適用于對成本極其敏感但又注重品質的大批量生產的行業。 同時具有很高的溫度精度和濕度精度。 SHT20系列模塊專為低功耗小體積應用設計,具有良好的品質、快的響應速度、抗干擾能力強、性價比高等優點、極低的功耗。懂行的人都知道它的優點。傳感器重要參數: 濕度測量范圍:0—100%RH
濕度精度范圍(10%RH to 95%RH): ±3%RH溫度測量范圍: -40℃—125℃ (-40 - +257°F)溫度精度范圍:±0.3℃濕度遲滯:±1%RH測量時間:50ms年漂移量:-0.5%RH/year響應時間:5 s
=================================================
BMP180是一款高精度、小體積、超低能耗的壓力傳感器,可以應用在移動設備中
它的性能卓越,絕對精度最低可以達到0.03hPa,并且耗電極低,只有3μA,采用強大的8-pin陶瓷無引線芯片承載(LCC)超薄封裝,可以通過I2C總線直接與各種微處理器相連
主要特點:
壓力范圍:300~1100hPa(海拔9000米~-500米),從這里可以看出來,該模塊還可以通過公式計算海拔高度哦~
低功耗:5μA,在標準模式
高精度:低功耗模式下,分辨率為0.06hPa(0.5米)
高線性模式下,分辨率為0.03hPa(0.25米)
======================================================BH1750FVI
采用ROHM原裝BH1750FVI芯片
光照度范圍:0-65535 lx (有沒有發現比光敏電阻強N倍?)
傳感器內置16bitAD轉換器
直接數字輸出,省略復雜的計算,省略標定
不區分環境光源
接近于視覺靈敏度的分光特性
可對廣泛的亮度進行1勒克斯的高精度測定
===============================================
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #include"LCD1602.h"
- #define uchar unsigned char // 以后unsigned char就可以用uchar代替
- #define uint unsigned int // 以后unsigned int 就可以用uint 代替
- uchar rxfalg=1;
- uchar Byte1,Byte2,Byte3,Byte4,Byte5,Byte6,Byte7,Byte8,Byte9,Byte10,Byte11,Byte12,Byte13,Byte14,Byte15,Byte15,Byte16;
- uint Light,Pressure,Temp; //定義的光照強度,氣壓,溫度。
- uchar Humi; //濕度
- /*********************************************************/
- // 毫秒級的延時函數,time是要延時的毫秒數
- /*********************************************************/
- void DelayMs(uint time)
- {
- uint i,j;
- for(i=0;i<time;i++)
- for(j=0;j<112;j++);
- }
- /*********************************************************/
- // 串口初始化
- /*********************************************************/
- void UartInit()
- {
- SCON = 0x50; // 配置串口寄存器
- TMOD = 0x20; // 配置定時器寄存器
- TH1 = 0xfd; // 計算波特率的值為9600
- TL1 = 0xfd; // 計算波特率的值為9600
- EA = 1; // 打開總中斷
- ES = 1; // 打開串口中斷
- TR1 = 1; // 啟動定時器
- }
- /*********************************************************/
- // 主函數
- /*********************************************************/
- void main(void)
- {
- LCDInt(); //液晶初始化
- UartInit(); // 串口初始化
- DelayMs(500);
- SetXY(0,0); // 光照
- LCDWriteDate('L');
- LCDWriteDate(':');
- SetXY(0,7);
- LCDWriteDate('L');
- LCDWriteDate('x');
-
- SetXY(1,0); // 氣壓
- LCDWriteDate('P');
- LCDWriteDate(':');
- SetXY(1,8);
- LCDWriteDate('K');
- LCDWriteDate('p');
-
-
- SetXY(0,10); // 溫度
- LCDWriteDate('T');
- LCDWriteDate(':');
- // SetXY(0,15); //
- // LCDWriteDate(0XDF);
-
- SetXY(1,11); //濕度
- LCDWriteDate('H');
- LCDWriteDate(':');
- SetXY(1,15); //
- LCDWriteDate('%');
-
-
- while(1)
- {
-
-
- if(rxfalg==0)
- {
- rxfalg=1;
-
- //光照強度
- SetXY(0,2); //
- LCDWriteDate(Light/10000+0x30);
- LCDWriteDate(Light%10000/1000+0x30);
- LCDWriteDate(Light%1000/100+0x30);
- LCDWriteDate(Light%100/10+0x30);
- LCDWriteDate(Light%10+0x30);
-
- //氣壓強度
- SetXY(1,2); //
- LCDWriteDate(Pressure/10000+0x30);
- LCDWriteDate(Pressure%10000/1000+0x30);
- LCDWriteDate(Pressure%1000/100+0x30);
- LCDWriteDate('.');
- LCDWriteDate(Pressure%100/10+0x30);
- LCDWriteDate(Pressure%10+0x30);
-
- //溫度
- SetXY(0,12); //
- LCDWriteDate(Temp/100+0x30);
- LCDWriteDate(Temp%100/10+0x30);
- LCDWriteDate('.');
- LCDWriteDate(Temp%10+0x30);
-
- //濕度
- SetXY(1,13); //
- LCDWriteDate(Humi/10+0x30);
- LCDWriteDate(Humi%10+0x30);
-
- }
-
- DelayMs(500);
- }
- }
- /*********************************************************/
- // 串口中斷服務程序
- /*********************************************************/
- void UartInt(void) interrupt 4
- {
- ES = 0; //關串口中斷,防止中斷嵌套
- while(!RI); // 固定位0XAA
- Byte1=SBUF;
- RI=0;
- while(!RI); // Byte2 預留
- Byte2=SBUF;
- RI=0;
-
- while(!RI); // Byte3 預留
- Byte3=SBUF;
- RI=0;
-
- while(!RI); // Byte4 預留
- Byte4=SBUF;
- RI=0;
-
- while(!RI); // Byte5 預留
- Byte5=SBUF;
- RI=0;
-
- while(!RI); // Byte6 光照強度高8位
- Byte6=SBUF;
- RI=0;
-
- while(!RI); // Byte7 光照強度低8位
- Byte7=SBUF;
- RI=0;
-
- while(!RI); // Byte8 氣壓高8位
- Byte8=SBUF;
- RI=0;
-
- while(!RI); // Byte9 氣壓低8位
- Byte9=SBUF;
- RI=0;
-
- while(!RI); // Byte10 溫度正負標志位
- Byte10=SBUF;
- RI=0;
-
- while(!RI); // Byte11 溫度高8位
- Byte11=SBUF;
- RI=0;
-
- while(!RI); // Byte12 溫度低8位
- Byte12=SBUF;
- RI=0;
-
- while(!RI); // Byte13 濕度
- Byte13=SBUF;
- RI=0;
-
- while(!RI); // Byte14 校驗和 高8位
- Byte14=SBUF;
- RI=0;
-
- while(!RI); // Byte15 校驗和 低8位
- Byte15=SBUF;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (5.61 KB, 下載次數: 56)
下載附件
2019-2-22 20:19 上傳
所有資料51hei提供下載:
程序,相關文檔資料測試通過.zip
(3.78 MB, 下載次數: 337)
2019-2-22 18:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|