co2傳感器在我們生活中運用得越來越廣泛,比如在智能家居中運用co2傳感器監測家里的co2濃度,在農業中用來監測蔬菜大棚的co2濃度,在交通運輸中也運用得非常的廣,幾乎涉及我們生活中得每一個行業中,言歸正傳。下面我們簡單的來談一下四方科技的紅外二氧化碳傳感器,其實所有的二氧化碳傳感器都差不多,就是參數的不一樣,所有了解一款,其他的也就了解了。
四方紅外二氧化碳CM106-05傳感器
CON4CON5
序號引腳描述序號引腳描述
1+5V電源輸入端(+5V 端)1+3.3V電源輸出端(+3.3V/100mA)
2GND電源輸入端(接地端)2RX串口接收端(+3.3V)
3A報警輸出端(預留)3TX串口發送端(+3.3V)
4PWM脈寬調制4R/TRS485 控制端(預留)
5CA手動校準端(預留)
◆UART 通訊協議
1 協議概述
1) 本協議數據,均為 16 進制數據。如 “46”為十進制的[70];
2) [xx]為單字節數據(無符號,0-255);雙字節數據高字節在前,低字節在后;
3) 波特率:9600, DataBits: 8, StopBits: 1, Parity: No。
2 串口通訊協議格式
上位機發送格式
起始符長度命令號數據 1……數據 n校驗和
HEADLENCMDDATA1……DATAnCS
11HXXHXXHXXH……XXHXXH
起始符上位機發送固定為[11H],模塊應答固定為[16H]
長度幀字節長度,=數據長度+1(包括 CMD+DATA)
命令號指令號
數據讀取或者寫入的數據,長度可變
校驗和數據累加和,=256-[(HEAD+LEN+CMD+DATA) mod (256)]
3 串口協議命令號表
編號功能名稱命令號功能描述
1讀取 CO2 測量結果0x01
2CO2 濃度值調零校準0x03
3讀取模塊軟件版本號0x1E
4 協議詳細描述
4.1 讀取 CO2 測量結果
發送:11 01 01 ED
應答:16 05 01 [DF1] [DF2] [DF3] [DF4] [CS]
功能:讀取 CO2 測量結果(單位:ppm)
說明:CO2 測量值 = [DF1]*256 + [DF2]
應答實例:
應答:16 05 01 02 58 00 00 8B // 對應 CO2 濃度為 600ppm
4.2 CO2 濃度值調零校準
發送:11 03 03 [DF1] [DF2] [CS]
應答:16 01 03 E6
功能:CO2 濃度值調零校準
說明:
1、 調零目標值= [DF1]*256 + [DF2]。單位為 ppm,范圍為(400 ~ 1500 ppm)
2、 進行 CO2 調零之前,請確認當前環境 CO2 值為調零目標值,穩定時間最少 2 分鐘以上。
例如:當需要將模塊調零到 600ppm 時,發送命令:11 03 03 02 58 8F
4.3 讀取模塊軟件版本號
發送:11 01 1E D0
應答:16 0C 1E [DF1] …… [DF11] [CS]
功能:讀取模塊固件版本號
說明:
1、 [DF1]……[DF10] 表示詳細版本號的 ASCII 碼
2、[DF11] 預留。
例如:當模塊版本號為 CM V0.0.20 時,應答數據如下:
應答:16 0C 1E 43 4D 20 56 30 2E 30 2E 32 30 00 97 //ASCII 碼對應為 CM V0.0.20
◆PWM 輸出
檢測量程:400~5000ppm
正向脈寬:(PPM/5)+2ms
PWM 輸出圖示
其資料大概就是這些
下面我們談一下在stm32程序中讀取co2測量結果
在co2.c 中的代碼為:
u8 Check_CO2[4] = {0x11,0x01,0x01,0xED};
void Check_co2(void)
{
UartSend(USART3,4,Check_CO2);
Delay_ms(5);
}
void AnalysisCO2(unsigned char* protocalData,unsigned int protocalLenth)
{
unsigned int i;
for(i = 0;i《protocalLenth+3;i++)
Debug (“%02x ”,protocalData [i]);
Debug (“\n”);
if(protocalData[0]==0x16 && protocalData [1] == 0x05 && protocalData[2] == 0x01)
{
environment.co2_standard =protocalData[3]*256 + protocalData[4]; //計算出二氧化碳的濃度
Debug (“shifang CO2=%d\n”,environment.co2_standard);
environment.environment_data[8]=protocalData[3];
environment.environment_data[9]=protocalData[4];
}
if(environment.ON_OFF_Flag==1) //開機情況下
{
CO2_Display(); //二氧化碳在LCD 屏上的顯示 (程序略)
}
}