PMS5003T (攀藤G5T) 是一款數字式通用顆粒物濃度傳感器,PMS5003T 可以用於獲得單位體積內空氣中懸浮顆粒物的質量和數量,並以數字接口形式輸出。
原始 Code
http://jaihung.blogspot.tw/2017/02/pm2.html
原始 data sheet
https://www.amazon.com/clouddrive/share/XInzym7rUycKLEYsn3h9oZ1ojZyj2bs8ySLoo1vAlk?_encoding=UTF8&mgh=1&ref_=cd_ph_share_link_copy
此Lcd 原為OLED 0.96" 修改成 Nokia5110 LCD,原始code沒有0.5um、1um等的顆粒數目,查找原始 data sheet,其實可以show 出來,花了點時間,讓他show 出來,即可,啊!啊!又第一名了,這樣LCD show 的才是無塵室 10萬級的顆粒數。
LCD影像說明:
T:溫度
H:濕度
pm1 , pm2.5 , pm10:單位ug/m^3
2.5u, 1.0u, 0.5u, 0.3u:單位,數目/粒徑
--程式碼如下--
原始 Code
http://jaihung.blogspot.tw/2017/02/pm2.html
原始 data sheet
https://www.amazon.com/clouddrive/share/XInzym7rUycKLEYsn3h9oZ1ojZyj2bs8ySLoo1vAlk?_encoding=UTF8&mgh=1&ref_=cd_ph_share_link_copy
此Lcd 原為OLED 0.96" 修改成 Nokia5110 LCD,原始code沒有0.5um、1um等的顆粒數目,查找原始 data sheet,其實可以show 出來,花了點時間,讓他show 出來,即可,啊!啊!又第一名了,這樣LCD show 的才是無塵室 10萬級的顆粒數。
LCD影像說明:
T:溫度
H:濕度
pm1 , pm2.5 , pm10:單位ug/m^3
2.5u, 1.0u, 0.5u, 0.3u:單位,數目/粒徑
--程式碼如下--
/* * 由 pm3003-4改名 170830 * Sensor採用 psm5003T,非psm3003,採用psm3003程式碼修改 * G3-Arduino原始程式碼〈僅供參考〉 * line 40 count > 15 modify to count > 40 ,all data appear * --------------------------------------------------------- * 170811-增加nokia5110 lcd --------- * TTL 電平轉換模塊 四路排針 5V-3.3V * ----------------------------------------------------------- * 170811-修改 LCD 數字顯示問題--line 74,78,84 */ /* * Arduino pins connected to Nokia pins: CLK=8, red DIN(DN)=9, blue CE=6, yellow DC=5, green RST=7 orange VCC = %V black GND white BL =3.3v grey */ /* pm5003T 線 腳位 (TX綠 接 Arduino pin D2(rx) ) * (SET白 接 Arduino pin D4也可不接) vcc GND SET RX TX RESET 紫 橘 白 藍 綠 黃 */ #include <softwareserial.h> #include <U8glib.h> // U8glib for Nokia LCD #define backlight_pin 11 U8GLIB_PCD8544 u8g(8, 9, 6, 5, 7); SoftwareSerial mySerial(2, 3);//rx,tx long pmcf10=0; long pmcf25=0; long pmcf100=0; long pmat10=0; long pmat25=0; long pmat100=0; long pm03PNO =0; long pm05PNO =0; long pm10PNO =0; long pm25PNO =0; long Temperature =0; long Humidity =0; char buf[50]; void draw() { u8g.setFont(u8g_font_5x8); u8g.drawStr(0, 10, "T=");//Temperature 左1 u8g.setPrintPos(15, 10); u8g.print(int(Temperature/10)); u8g.drawStr(26, 10, "(^C)"); u8g.drawStr(48 ,10, "H=");//Humidity 右1 u8g.setPrintPos(60, 10); u8g.print(int(Humidity/10)); u8g.drawStr(70, 10, "(%)"); u8g.drawStr(0, 20, "PM1=");//pm1.0 左2 u8g.setPrintPos(20, 20); u8g.print(int(pmat10)); u8g.drawStr(40, 20, "PM2.5=");//PM2.5 右2 //u8g.setFont(u8g_font_6x10); //u8g.setFont(u8g_font_fub20); u8g.setPrintPos(70, 20); u8g.print(int(pmat25)); u8g.setFont(u8g_font_5x8); u8g.drawStr(0, 28, "PM10=");//PM10,0 左3 u8g.setPrintPos(24, 28); u8g.print(int(pmat100)); u8g.drawStr(40, 28, "2.5u=");//2.5u 右3 u8g.setPrintPos(70, 28); u8g.print(int(pm25PNO)); u8g.drawStr(0, 38, "1.0u=");//1.0u 左4 u8g.drawStr(24, 38, " ") ;//修改 LCD 數字顯示問題 u8g.setPrintPos(24, 38); u8g.print(int(pm10PNO)); u8g.drawStr(44, 38, "05u=");//0.5u 右4 u8g.drawStr(64, 38, " ") ;//修改 LCD 數字顯示問題 u8g.setPrintPos(64, 38);// u8g.print(int(pm05PNO)); u8g.drawStr(0, 48, "0.3u=");//0.3u 左5 u8g.drawStr(28, 48, " ") ;//修改 LCD 數字顯示問題 u8g.setPrintPos(28, 48); u8g.print(int(pm03PNO)); //u8g.drawStr(60, 47, "(ug/m3)"); } void setup() { // put your setup code here, to run once: Serial.begin(9600); mySerial.begin(9600); } /*u8g.firstPage(); do { draw(); u8g.setFont(u8g_font_5x8); u8g.drawStr(0, 52, "(Normal)"); } while( u8g.nextPage() ); */ void loop() { // put your main code here, to run repeatedly: int count = 0; unsigned char c; unsigned char high; while (mySerial.available()) { c = mySerial.read(); if((count==0 && c!=0x42) || (count==1 && c!=0x4d)){ Serial.println("check failed"); break; } if(count > 40){ Serial.println("complete"); break; } else if(count == 4 || count == 6 || count == 8 || count == 10 || count == 12 || count == 14|| count == 16|| count == 18|| count == 20|| count == 22|| count == 24|| count == 26|| count == 28 ) high = c; else if(count == 5){ pmcf10 = 256*high + c; Serial.print("CF=1, PM1.0="); Serial.print(pmcf10); Serial.println(" ug/m3"); } else if(count == 7){ pmcf25 = 256*high + c; Serial.print("CF=1, PM2.5="); Serial.print(pmcf25); Serial.println(" ug/m3"); } else if(count == 9){ pmcf100 = 256*high + c; Serial.print("CF=1, PM10="); Serial.print(pmcf100); Serial.println(" ug/m3"); } else if(count == 11){ pmat10 = 256*high + c; Serial.print("atmosphere, PM1.0="); Serial.print(pmat10); Serial.println(" ug/m3"); } else if(count == 13){ pmat25 = 256*high + c; Serial.print("atmosphere, PM2.5="); Serial.print(pmat25); Serial.println(" ug/m3"); } else if(count == 15){ pmat100 = 256*high + c; Serial.print("atmosphere, PM10="); Serial.print(pmat100); Serial.println(" ug/m3"); } else if(count == 17){ pm03PNO= 256*high + c; Serial.print("above0.3um, no="); Serial.print(pm03PNO); Serial.println(" number"); } else if(count == 19){ pm05PNO = 256*high + c; Serial.print("above0.5um, no="); Serial.print(pm05PNO); Serial.println(" number"); } else if(count == 21){ pm10PNO = 256*high + c; Serial.print("above 1.0um, no="); Serial.print(pm10PNO); Serial.println(" number"); } else if(count == 23){ pm25PNO = 256*high + c; Serial.print("above 2.5um, no="); Serial.print(pm25PNO); Serial.println(" number"); } else if(count == 25){ Temperature = 256*high + c; Serial.print("Temperature = "); Serial.print(Temperature/10); Serial.println(" ^C "); } else if(count == 27){ Humidity = 256*high + c; Serial.print("Humidity = "); Serial.print(Humidity/10) ; Serial.println(" % "); } count++; } while(mySerial.available()) mySerial.read(); Serial.println(); u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); delay(4000); }
這檢測儀器剛好可以應用在無塵室的檢驗
回覆刪除我歐洲客戶有需求
請問是否可以承接歐洲外銷訂單
寫得真好, 感謝分享 !!
回覆刪除