pm2.5空氣品質感測器製作研習
文章推薦指數: 80 %
夏普GP2Y1051AU0F PM2.5 附線 ... 程式庫提供的範例DHTtester ... starttime; // Arduino夏普GP2Y1051AU0F的串口讀取_源代碼_Weesky維天監製// 作者ID:Weesky ; .
pm2.5空氣品質感測器製作研習
1.製作前的準備
關於空氣品質傳感器實作前的準備,需要先了解一些基本課程,並且要準備製作的材料與工具:
1.先備:Arduino基礎、ESP8266wifi模組基礎介紹、雲端資料夾下載資料(研習的短連結也是連到一樣的google雲端硬碟)
2.準備工具:小螺絲起子、剪刀、小尖嘴鉗、電鑽(實作研習場地提供)
3.材料:(以下實作研習皆會配發)
NO.
項目
必要
1
變壓器9V0.8A5.5*2.1mm
https://item.taobao.com/item.htm?spm=a1z09.2.0.0.45b32e8dmFL72I&id=547410078902&_u=p2f65kek22d0
1
2
夏普GP2Y1051AU0FPM2.5附線
https://item.taobao.com/item.htm?spm=a230r.1.14.21.187f4bb9aa0Y3j&id=563801882710&ns=1&abbucket=7#detail
1
3
蜂鳴器5VSOT塑封
1
4
USB轉ESP8266WIFI模組轉接板
5
麵包板400孔長8.5CM寬5.5CM
1
6
9V電池扣
7
ArduinoUNOR3開發板附傳輸線
1
8
單排針長17MM1*40PIN
1
9
2路繼電器模組
1
10
麵包板專用線140條盒裝
1
11
直流電源座5.5*2.1MM
12
40P彩色杜邦線母對母20CM
1
13
面包板電源模組
14
ESP8266WIFI無線模組
1
15
DHT22溫濕度傳感器
1
16
LED(5個紅綠黃藍白各1)
1
17
K&J雙層活動收納盒K-813
18
GP9v方形電池
19
10KOM電阻(色碼:棕黑橙)
1
以上部分必要材料也是可以自行調整增刪
PS:第一次5/13研習的老師回娘家,將會配發以上新增之材料,請老師多多運用。
詳見:4-15/13研習老師回娘家,拿好康~
pm2.5空氣品質感測器製作研習
2.空氣污染指標定義
PM2.5是什麼?(行政院環保署)
空氣中存在許多污染物,其中漂浮在空氣中類似灰塵的粒狀物稱為懸浮微粒(particulatematter,PM),PM粒徑大小有別,小於或等於2.5微米(μm)的粒子,就稱為PM2.5,通稱細懸浮微粒,單位以微克/立方公尺(μg/m3)表示之,它的直徑還不到人的頭髮絲粗細的1/28,非常微細可穿透肺部氣泡,並直接進入血管中隨著血液循環全身,故對人體及生態所造成之影響是不容忽視的。
粒徑(μm)
粒徑大小說明
<100
稱總懸浮微粒(TSP),約為海灘沙粒,可懸浮於空氣中。
<10
稱懸浮微粒(PM10),約為沙子直徑的1/10,容易通過鼻腔之鼻毛與彎道到達喉嚨
2.5~10
稱粗懸浮微粒(PM2.5-10),約頭髮直徑的1/8~1/20大小,可以被吸入並附著於人體的呼吸系統
<2.5
稱細懸浮微粒(PM2.5),約頭髮直徑的1/28,可穿透肺部氣泡,直接進入血管中隨著血液循環全身。
空氣污染指標的定義(行政院環保署)
空氣污染指標為依據監測資料將當日空氣中懸浮微粒(PM10)(粒徑10微米以下之細微粒)、二氧化硫(SO2)、二氧化氮(NO2)、一氧化碳(CO)及臭氧(O3)濃度等數值,以其對人體健康的影響程度,分別換算出不同污染物之副指標值,再以當日各副指標之最大值為該測站當日之空氣污染指標值(PSI)。
污染物濃度與污染副指標值對照表
污染物
PM10
SO2
CO
O3
NO2
統計方式
24小時
平均值
24小時
平均值
24小時內
最大8小時平均值
24小時內
最大小時值
24小時內
最大小時值
單位
μg/m3
ppb
ppm
ppb
ppb
PSI值
50
50
30
4.5
60
-
100
150
140
9
120
-
200
350
300
15
200
600
300
420
600
30
400
1200
400
500
800
40
500
1600
500
600
1000
50
600
2000
日PSI值與健康影響
空氣污染指標
(PSI)
0~50
51~100
101~199
200~299
>=300
對健康的影響
良好
普通
不良
非常不良
有害
Good
Moderate
Unhealthful
VeryUnhealthful
Hazardous
狀態色塊
人體健康影響
對一般民眾身體健康無影響。
對敏感族群健康無立即影響。
對敏感族群會有輕微症狀惡化的現象,如臭氧濃度在此範圍,眼鼻會略有刺激感。
對敏感族群會有明顯惡化的現象,降低其運動能力;一般大眾則視身體狀況,可能產生各種不同的症狀。
對敏感族群除了不適症狀顯著惡化並造成某些疾病提早開始;減低正常人的運動能力。
pm2.5空氣品質感測器製作研習
3.電路實作
本次實作電路的順序為
1.四 LED空氣汙染等級顯示
2.警告蜂鳴器
3.DTH22溫溼度感應器
4.ESP8266WiFi 模組
5.二路繼電器
6.Sharp空污傳感器(GP2Y1051二代)
7.裝入外殼,設備固定
pm2.5空氣品質感測器製作研習
3-1四LED空氣汙染等級顯示
將4個LED綠、黃、紅、藍(代表紫)接上麵包板,利用ArduinoDigital接腳8、9、10、11,來控制燈號明滅,代表教育部空汙旗的四個顏色標示。
麵包板需先將電源接上,由Arduino的3.3v及5v,分別接到麵包板上下的紅色標示區域,GND也分別各拉一條到藍色標示區域,如此電路若需要電源或接地,只要接到旁邊即可。
需要材料:
Arduinouno開發版*1
小麵包版*1
長杜邦線*4
短杜邦線 *4
LED(綠、黃、紅、藍) *4
麵包板跳線灰色*3
麵包板跳線藍色*1
(通常麵包板跳線同一長度顏色相同,在這次材料中灰色跳2格,藍色跳5格)
LED沒串接電阻容易燒壞,請自行加裝一個220OM的電阻,可直接用電阻取代藍色跳線。
參考資料:
Arduino第一課:LED串流電阻的學問
pm2.5空氣品質感測器製作研習
3-2警告蜂鳴器
汙染嚴重,感測值>200ug/m3 時,發出警告蜂鳴聲,利用ArduinoDigital接腳13 來控制蜂鳴器發聲。
蜂鳴器接在13腳位,也會有特別效果,在插電或一些動作時,13腳位預設接到Arduino板上的LED,會有一些操作提示燈號,因此接了蜂鳴器就會發出一些提示聲。
需要材料:
蜂鳴器(有源) *1
短杜邦線 *1
麵包板跳線黃色*1
測試程式:buzzer_test.ino、pitches.h (兩檔案須放在同一資料夾)
buzzer_test.ino
#include"pitches.h"
//notesinthemelody:
intmelody[]={
NOTE_C5,NOTE_D5,NOTE_E5,NOTE_F5,NOTE_G5,NOTE_A5,NOTE_B5,NOTE_C6};
intduration=500;//500miliseconds
voidsetup(){
}
voidloop(){
for(intthisNote=0;thisNote<8;thisNote++){
//在pin13上輸出聲音,每個音階響0.5秒
tone(13,melody[thisNote],duration);
//間隔一段時間後再播放下一個音階
delay(1000);
}
//兩秒後重新播放
delay(2000);
}
pitches.h
/*************************************************
*PublicConstants
*************************************************/
#defineNOTE_B031
#defineNOTE_C133
#defineNOTE_CS135
#defineNOTE_D137
#defineNOTE_DS139
#defineNOTE_E141
#defineNOTE_F144
#defineNOTE_FS146
#defineNOTE_G149
#defineNOTE_GS152
#defineNOTE_A155
#defineNOTE_AS158
#defineNOTE_B162
#defineNOTE_C265
#defineNOTE_CS269
#defineNOTE_D273
#defineNOTE_DS278
#defineNOTE_E282
#defineNOTE_F287
#defineNOTE_FS293
#defineNOTE_G298
#defineNOTE_GS2104
#defineNOTE_A2110
#defineNOTE_AS2117
#defineNOTE_B2123
#defineNOTE_C3131
#defineNOTE_CS3139
#defineNOTE_D3147
#defineNOTE_DS3156
#defineNOTE_E3165
#defineNOTE_F3175
#defineNOTE_FS3185
#defineNOTE_G3196
#defineNOTE_GS3208
#defineNOTE_A3220
#defineNOTE_AS3233
#defineNOTE_B3247
#defineNOTE_C4262
#defineNOTE_CS4277
#defineNOTE_D4294
#defineNOTE_DS4311
#defineNOTE_E4330
#defineNOTE_F4349
#defineNOTE_FS4370
#defineNOTE_G4392
#defineNOTE_GS4415
#defineNOTE_A4440
#defineNOTE_AS4466
#defineNOTE_B4494
#defineNOTE_C5523
#defineNOTE_CS5554
#defineNOTE_D5587
#defineNOTE_DS5622
#defineNOTE_E5659
#defineNOTE_F5698
#defineNOTE_FS5740
#defineNOTE_G5784
#defineNOTE_GS5831
#defineNOTE_A5880
#defineNOTE_AS5932
#defineNOTE_B5988
#defineNOTE_C61047
#defineNOTE_CS61109
#defineNOTE_D61175
#defineNOTE_DS61245
#defineNOTE_E61319
#defineNOTE_F61397
#defineNOTE_FS61480
#defineNOTE_G61568
#defineNOTE_GS61661
#defineNOTE_A61760
#defineNOTE_AS61865
#defineNOTE_B61976
#defineNOTE_C72093
#defineNOTE_CS72217
#defineNOTE_D72349
#defineNOTE_DS72489
#defineNOTE_E72637
#defineNOTE_F72794
#defineNOTE_FS72960
#defineNOTE_G73136
#defineNOTE_GS73322
#defineNOTE_A73520
#defineNOTE_AS73729
#defineNOTE_B73951
#defineNOTE_C84186
#defineNOTE_CS84435
#defineNOTE_D84699
#defineNOTE_DS84978
若檔案下載正確,開啟buzzer_test.ino時,畫面如下
pm2.5空氣品質感測器製作研習
3-3DTH22溫溼度感應器
DHT22為相當優秀溫度、濕度的感測器,很多智慧家電皆有它的蹤跡,價格還算便宜...
連接DHT22需在其第1、2腳位,串接一電阻(1kOM),第1腳接5v,第2腳接ArduinoDigital7,第4腳接地
需要材料:
DHT22溫濕度傳感器*1
10kOM電阻*1
麵包板跳線橘色*1
麵包板跳線紅色*1(需修剪長度)
DHT22的程式庫需另外下載,請在ArduinoIDE程式的[草稿碼]→[匯入程式庫]→[管理程式庫...]
搜尋DHT22,[選擇版本]點選最新版本,按 [安裝]
測試程式:
[檔案]→[範例]→[DHTsensorlibrary]→[DHTtester]
修改程式:
#defineDHTPIN7//研習使用ArduinoDigital7,請修改為7
程式庫提供的範例DHTtester
//ExampletestingsketchforvariousDHThumidity/temperaturesensors
//Writtenbyladyada,publicdomain
#include"DHT.h"
#defineDHTPIN7//研習使用ArduinoDigital7,請修改為7
//Uncommentwhatevertypeyou'reusing!
//#defineDHTTYPEDHT11//DHT11
#defineDHTTYPEDHT22//DHT22(AM2302),AM2321
//#defineDHTTYPEDHT21//DHT21(AM2301)
//Connectpin1(ontheleft)ofthesensorto+5V
//NOTE:Ifusingaboardwith3.3VlogiclikeanArduinoDueconnectpin1
//to3.3Vinsteadof5V!
//Connectpin2ofthesensortowhateveryourDHTPINis
//Connectpin4(ontheright)ofthesensortoGROUND
//Connecta10Kresistorfrompin2(data)topin1(power)ofthesensor
//InitializeDHTsensor.
//Notethatolderversionsofthislibrarytookanoptionalthirdparameterto
//tweakthetimingsforfasterprocessors.Thisparameterisnolongerneeded
//asthecurrentDHTreadingalgorithmadjustsitselftoworkonfasterprocs.
DHTdht(DHTPIN,DHTTYPE);
voidsetup(){
Serial.begin(9600);
Serial.println("DHTxxtest!");
dht.begin();
}
voidloop(){
//Waitafewsecondsbetweenmeasurements.
delay(2000);
//Readingtemperatureorhumiditytakesabout250milliseconds!
//Sensorreadingsmayalsobeupto2seconds'old'(itsaveryslowsensor)
floath=dht.readHumidity();
//ReadtemperatureasCelsius(thedefault)
floatt=dht.readTemperature();
//ReadtemperatureasFahrenheit(isFahrenheit=true)
floatf=dht.readTemperature(true);
//Checkifanyreadsfailedandexitearly(totryagain).
if(isnan(h)||isnan(t)||isnan(f)){
Serial.println("FailedtoreadfromDHTsensor!");
return;
}
//ComputeheatindexinFahrenheit(thedefault)
floathif=dht.computeHeatIndex(f,h);
//ComputeheatindexinCelsius(isFahreheit=false)
floathic=dht.computeHeatIndex(t,h,false);
Serial.print("Humidity:");
Serial.print(h);
Serial.print("%\t");
Serial.print("Temperature:");
Serial.print(t);
Serial.print("*C");
Serial.print(f);
Serial.print("*F\t");
Serial.print("Heatindex:");
Serial.print(hic);
Serial.print("*C");
Serial.print(hif);
Serial.println("*F");
}
pm2.5空氣品質感測器製作研習
3-4ESP8266WiFi模組
ESP8266 WiFi模組,可以說是一個超優質的發明,帶領Maker進入IOT世界,甚至可以代替Arduino當作主要控制器使用,今天我們將它當作Arduino與無線網路連接的介面。
以下列出ESP8266的一些重點事項:
1.接線要小心
網路上的說明圖片或電路圖皆是8266的正面喔!但接腳在反面,接線要特別注意!!
2. 無法直接插上麵包板
麵包板的凹洞連通設計,不適合esp8266的接腳直插,需要使用轉接板
小狐狸事務所:ESP8266轉接板
3.降版燒錄,需外接足夠電源
目前ESP8266單純當作WiFi使用時,大多會重新燒錄降版韌體。
目前購買的8266,內建的韌體預設BaudRate(鮑率)115200,降版改用9600會較穩定(聽說),所以需要將ESP8266重新燒錄降版的韌體,網路上大多使用USBtoTTL轉接器,之前5/13研習也是,但燒錄需要外接足夠電流源,接線又很複雜,一有錯誤皆無法完成,甚至燒壞8266晶片。
另有老師測試,用115200來跑也都滿正常的!哈哈!那就真不知道5/13研習大家都在忙甚麼了?!不過,還是有備無患!特別找到更好的工具,USBto8266轉接器,燒錄直上,不需外接電源!另外再幫大家銲接一個燒錄模式切換開關!這樣的組合只有在這裡研習才拿得到的喔~~
USBto8266轉接器外觀
燒錄方式請見ESP8266講義:
1-1ESP8266燒錄說明
1-2用USBto8266轉接板燒錄(降版)
4.接法
ESP8266的資料傳輸,一般都是使用軟體模擬序列埠(SoftwareSerial)來連接,將ArduinoDigital4、5模擬成序列埠的RX與TX,將ESP8266的TX(藍線)接4(RX)、RX(黃線)接5(TX),這樣用軟體Serial就可以與ESP8266溝通。
再來需接3.3v(紅線、橘線),接地(黑線)
需要材料:
ESP8266WiFi模組*1
長杜邦線*5
ESP8266接腳定義如下:(網路上的說明圖片或電路圖皆是8266的正面喔!但接腳卻在反面,接線要特別注意!!)
請以電路圖相同顏色的線來接,方便記憶與除錯!!
pm2.5空氣品質感測器製作研習
3-5二路繼電器
由二路繼電器接收ArduinoDigital接腳6(紫線) 來控制重置ESP8266,接腳12(棕線)來控制電器(排風扇、警示燈、空氣清淨機),
二路繼電器需接5v(紅線)與接地(黑線),執行控制8266的部分是將relay1的C埠(綠線)接地,NO埠(灰線)接8266的RST腳。
需要材料:
二路繼電器*1
長杜邦線*6
繼電器的三個接腳說明:
NC:NormalClose常閉接點,繼電器未啟動時NC與C接點是通的,啟動後變成不通(開路)。
C:Common共同接點
NO:NormalOpen常開接點,繼電器未啟動時NC與C接點是不通的,啟動後是接通的(閉路)。
pm2.5空氣品質感測器製作研習
3-6Sharp空污傳感器(GP2Y1051二代)
最後一個元件接Sharp空污傳感器(GP2Y1051二代),因為Arduino上傳程式時,若有接著傳感器,上傳會失敗,所以最後再來裝。
資料線(黃)接ArduinoDigital0接腳,5v(紅線)和接地(黑線)直接接到麵包板上,這樣就可以了。
需要材料:
SharpGP2Y1051傳感器*1(含3pin排線紅黑黃)
杜邦頭壓接請參考DanielLiu
pm2.5空氣品質感測器製作研習
3-7裝入外殼,設備固定
本次研習後,希望能夠方便學校固定設備回傳資料,故準備一硬質塑膠盒(K&J雙層活動收納盒K-813),在研習現場直接安置所有零件設備,請老師盡量在研習中完成。
放置到外殼中
標示打孔的位置
用手電鑽打孔結果,Sharp空污感測器、DHT22感測器要拉到盒子外面,以熱熔膠固定。
安裝好將Sharp空污傳感器、DHT22溫濕度感應器拉出外殼,並且用熱熔膠固定,如下圖
pm2.5空氣品質感測器製作研習
4.程式編撰上傳
呼~接線終於完成,雖然辛苦,可是一定收穫滿滿,最後就是將程式寫入Arduino就OK囉!當然也已經幫大家寫好範本可以直接匯入,不過還是需要小改一下,加油。
pm2.5空氣品質感測器製作研習
4-1修改sample程式
一開始從網路搜尋而來,修改了很多次幾乎內容全改,本來想把一些版權宣告刪掉因為怕太亂,不過秉持自由軟體開源精神,就都先保留囉!若有哪些程試片段版權是別人的,也麻煩告知喔!
程式路徑與檔名為:
雲端→空污感測實務課程→Arduino程式→1050722→LED4_Buzzer_DHT22_ESP8266_Relay_air2_sample
請將以下資訊修改完,才能上傳Arduino,這樣回傳的資料才不會大家都一樣。
1.修改自己學校的無線網路名稱、密碼:例如名稱jljhs-dlink-1密碼jljhs123
雙斜線//內容後是註解,可保留中心電腦教室測試的無線網路名稱密碼,在前面加雙斜線註解掉就好。
2.修改自己的學校代碼
3.修改設備編號(若同校有兩個以上的老師參加研習,自行決定用哪個編號0~255)
4.修改自己學校的GPS,參考以下文件,或參考「用GoogleMap取得GPS座標」教學影片。
雲端→台南市國中小基本資料.doc
完整程式碼:
#include
//v1.1改進了算法,這樣看起來數值高了些。
對於愛好者操作更容易了。
//請不要在採樣週期裡面添加延遲delay這樣的。
不然串口寄存器只有64Byte,很可能被塞滿。
//修改者:ng344
//增加溫濕度感測、2-way-relay、ESP8266、LED警示
voidsetup()
{
Serial.begin(2400);
dht.begin();
WiFiSerial.begin(9600);
starttime=millis();//設定Sharp感測器開始的擷取時間
sendtoWiFi("AT");
delay(1000);
if(WiFiSerial.find("OK"))
{
Serial.println("RECEIVED:OKafterATCommand\nDatareadytosent!");
connectWiFi();
}
else{
Serial.println("fale");
}
pinMode(LED_G,OUTPUT);
pinMode(LED_Y,OUTPUT);
pinMode(LED_R,OUTPUT);
pinMode(LED_B,OUTPUT);
pinMode(RST,OUTPUT);
pinMode(Relay2,OUTPUT);
pinMode(Buzzer,OUTPUT);
digitalWrite(LED_G,LOW);
digitalWrite(LED_Y,LOW);
digitalWrite(LED_R,LOW);
digitalWrite(LED_B,LOW);
digitalWrite(RST,HIGH);
digitalWrite(Relay2,HIGH);
}
voidloop(){
while(Serial.available()>0){
data=Serial.read();
if(data==170){
z=0;
incomeByte[z]=data;
}
else{
z++;
incomeByte[z]=data;
}
if(z==6)
{
sum=incomeByte[1]+incomeByte[2]+incomeByte[3]+incomeByte[4];
if(incomeByte[5]==sum&&incomeByte[6]==255)
{
/*Serial.print("DataOK!|");
for(intk=0;k<7;k++)
{
Serial.print(incomeByte[k]);//列印出接收到Sharp的資料
Serial.print("|");
}
*/
//Serial.print("Vo=");
floatvo=(incomeByte[1]*256.0+incomeByte[2])/1024.0*5.00;
//Serial.print(vo,3);
//Serial.print("v|");
floatT=vo*700;
//這裡我修改過咯,2014年11月23日,v1.1
//普通Arduinio玩家也可以算出濃度啦!
//當然更精準的還需要自行標定哦:)
//Serial.print("PM2.5=");
//Serial.print(T,2);
//Serial.print("ug/m3");
//Serial.println();
updateSensor(T);
delay(updateInterval);//設定傳送時間間隔
}
else{
z=0;
Serial.flush();
data='/0';
for(intm=0;m<7;m++){
incomeByte[m]=0;
}
}
z=0;
}
}
}
voidupdateSensor(floatT)
{
digitalWrite(LED_G,HIGH);
digitalWrite(LED_Y,HIGH);
digitalWrite(LED_R,HIGH);
digitalWrite(LED_B,HIGH);
delay(2000);
digitalWrite(LED_G,LOW);
digitalWrite(LED_Y,LOW);
digitalWrite(LED_R,LOW);
digitalWrite(LED_B,LOW);
delay(1000);
if(T>=0&&T<36){
digitalWrite(LED_G,HIGH);
}
elseif(T>=36&&T<54){
digitalWrite(LED_Y,HIGH);
}
elseif(T>=54&&T<71){
digitalWrite(LED_R,HIGH);
}
elseif(T>=71&&T<200){
digitalWrite(LED_B,HIGH);
}
elseif(T>=200){
digitalWrite(LED_B,HIGH);
digitalWrite(Relay2,LOW);
delay(1000);
tone(Buzzer,500);
delay(1000);
tone(Buzzer,1000);
delay(1000);
noTone(Buzzer);}
else{digitalWrite(Relay2,HIGH);
delay(1000);
}
//noTone(Buzzer);}
//設定ESP8266作為Client端
Stringcmd="AT+CIPSTART=\"TCP\",\""+IP+"\",80";
sendtoWiFi(cmd);
delay(1000);
if(WiFiSerial.find("Error"))
{
Serial.print("RECEIVED:Error\nExit1");
return;
}
floath=dht.readHumidity();
floatt=dht.readTemperature();
booleansendOK=false;
cmd="GET/xoops/api.php?schoolcode="+schoolcode+"&no="+no+"&pm25="+T+"&t="+t+"&h="+h+"&gps="+PMgps+"\r\n";
sendtoWiFi("AT+CIPSEND="+(String)cmd.length());
delay(5000);
if(WiFiSerial.find(">"))
{
Serial.print(">");
WiFiSerial.print(cmd);//送出pm2.5資料
if(WiFiSerial.find("OK")){//檢查WiFi模組是否正確傳出資料
sendOK=true;
}
Serial.print(cmd);
}
else
{
sendtoWiFi("AT+CIPCLOSE");
}
if(sendOK)
{
Serial.println("RECEIVED:OK");
}
else
{
Serial.println("RECEIVED:Error\nExit2");
//resetESP8266
digitalWrite(RST,LOW);//needchangtoHIGHifRelayuseHIGHactive
delay(1000);
digitalWrite(RST,HIGH);//needchangtoLOWifRelayuseHIGHactive
}
}
voidsendtoWiFi(Stringcmd)
{
Serial.print("SEND:");
Serial.println(cmd);
WiFiSerial.println(cmd);
}
booleanconnectWiFi()
{
WiFiSerial.println("AT+CWMODE=1");
Serial.println("SendAT+CWMODE=1");
delay(3000);
intcount=0;
Stringcmd="AT+CWJAP=\""+SSID+"\",\""+PASS+"\"";
sendtoWiFi(cmd);
Serial.println("Waitingfor15secondtoconnectnetwork.....");
delay(15000);
/*
if(WiFiSerial.find("OK"))
{
Serial.println("RECEIVED:OK");
returntrue;
}
else
{
Serial.println("RECEIVED:Unknown");
returnfalse;
}
*/
cmd="AT+CIPMUX=0";
sendtoWiFi(cmd);
if(WiFiSerial.find("Error"))
{
Serial.print("RECEIVED:Error");
returnfalse;
}
}
pm2.5空氣品質感測器製作研習
4-2上傳Arduino
Sample程式修改完,就是上傳囉!不過之前也有提醒到,SharpGP2Y1051的傳感器,有時必須先拔除紅黑線(電源),這樣才能正常上傳程式。
上傳完畢後由兩個地方觀察運作狀況:
1.序列埠輸出監控視窗,BaudRate(鮑率)需調成2400
2. 到pm2.5監測網站,看有無上傳資料 http://pm25.tn.edu.tw/
pm2.5空氣品質感測器製作研習
4-3回校安裝步驟
1.找一台電腦安裝ArduinoIDE開發環境程式
2.下載DHT22的程式庫!!(上傳程式才不會出現錯誤:DHT.h:Nosuchfileordirectory)
[草稿碼]→[匯入程式庫]→[管理程式庫...]→搜尋DHT22→點選最新版本→點安裝
3.修改Sample程式中的WiFi連線SSID(無線網路名稱)及密碼,以及傳送時間間隔改成1800000,網站才不會一下子就灌爆。
>@<
4.7/22老師用第二代sharp傳感器,上傳程式若一直停在上傳中,先拔除Sharp傳感器的紅黑線再上傳。
※若有甚麼問題,請在討論區發問,大家一起討論學習喔!
※ 架設參考:感謝安定國小張智傑老師提供
pm2.5空氣品質感測器製作研習
5.備註
pm2.5空氣品質感測器製作研習
5-1ESP8266燒錄救星(必看)
本次研習提供新的燒錄ESP8266方式,請見以下講義。
燒錄方式請見ESP8266講義:
1-1ESP8266燒錄說明
1-2用USBto8266轉接板燒錄(降版)
pm2.5空氣品質感測器製作研習
5-2修改電路1_改成較穩定的電路
原電路圖:(使用降壓板,除非外接電源,否則傳送會不穩)
改良電路圖:
pm2.5空氣品質感測器製作研習
5-3修改電路2_增加DHT22溫濕度感測
需要材料:
DHT22溫濕度感測器*1
10kOM電阻*1
長杜邦線 *1 (資料傳輸黃線)
麵包板跳線*1 (電源紅線)
ps:DHT22電源接地先不接!再下一步驟會跟LED燈一起接。
DHT22的程式庫需另外下載安裝,請在ArduinoIDE程式的[草稿碼]→[匯入程式庫]→[管理程式庫...]
搜尋DHT22,[選擇版本]點選最新版本,按 [安裝]
測試程式
修改程式:
#defineDHTPIN7//研習使用ArduinoDigital7,請修改為7
程式庫提供的範例DHTtester
//ExampletestingsketchforvariousDHThumidity/temperaturesensors
//Writtenbyladyada,publicdomain
#include"DHT.h"
#defineDHTPIN7//研習使用ArduinoDigital7,請修改為7
//Uncommentwhatevertypeyou'reusing!
//#defineDHTTYPEDHT11//DHT11
#defineDHTTYPEDHT22//DHT22(AM2302),AM2321
//#defineDHTTYPEDHT21//DHT21(AM2301)
//Connectpin1(ontheleft)ofthesensorto+5V
//NOTE:Ifusingaboardwith3.3VlogiclikeanArduinoDueconnectpin1
//to3.3Vinsteadof5V!
//Connectpin2ofthesensortowhateveryourDHTPINis
//Connectpin4(ontheright)ofthesensortoGROUND
//Connecta10Kresistorfrompin2(data)topin1(power)ofthesensor
//InitializeDHTsensor.
//Notethatolderversionsofthislibrarytookanoptionalthirdparameterto
//tweakthetimingsforfasterprocessors.Thisparameterisnolongerneeded
//asthecurrentDHTreadingalgorithmadjustsitselftoworkonfasterprocs.
DHTdht(DHTPIN,DHTTYPE);
voidsetup(){
Serial.begin(9600);
Serial.println("DHTxxtest!");
dht.begin();
}
voidloop(){
//Waitafewsecondsbetweenmeasurements.
delay(2000);
//Readingtemperatureorhumiditytakesabout250milliseconds!
//Sensorreadingsmayalsobeupto2seconds'old'(itsaveryslowsensor)
floath=dht.readHumidity();
//ReadtemperatureasCelsius(thedefault)
floatt=dht.readTemperature();
//ReadtemperatureasFahrenheit(isFahrenheit=true)
floatf=dht.readTemperature(true);
//Checkifanyreadsfailedandexitearly(totryagain).
if(isnan(h)||isnan(t)||isnan(f)){
Serial.println("FailedtoreadfromDHTsensor!");
return;
}
//ComputeheatindexinFahrenheit(thedefault)
floathif=dht.computeHeatIndex(f,h);
//ComputeheatindexinCelsius(isFahreheit=false)
floathic=dht.computeHeatIndex(t,h,false);
Serial.print("Humidity:");
Serial.print(h);
Serial.print("%\t");
Serial.print("Temperature:");
Serial.print(t);
Serial.print("*C");
Serial.print(f);
Serial.print("*F\t");
Serial.print("Heatindex:");
Serial.print(hic);
Serial.print("*C");
Serial.print(hif);
Serial.println("*F");
}
pm2.5空氣品質感測器製作研習
5-4修改電路3_加裝4個LED標示燈
為了電路圖顯示清楚,圖上各元件的位置有所移動,但僅修改一條接線,其他線路不變。
需要材料:
LED燈 (綠、黃、紅、藍各1個) * 4
麵包板跳線 綠線(短)*2
麵包板跳線 黃線(短)*2
麵包板跳線 紅線(最短)*4
麵包板跳線 紅線(中)*2
麵包板跳線 灰線(中)*1
麵包板跳線 白線(中)*1
接線修改:
請將由繼電器IN1接腳接出的紫線,原本接到Arduino8接腳,改到6接腳,因為想要四個LED在Arduino的接線連在一起。
若不安裝LED燈,也要修改此接線,因為Sample程式有修改,不然就自行修改程式。
修改前
修改後
pm2.5空氣品質感測器製作研習
5-5修改新程式,上傳Arduino
程式路徑與檔名為:
雲端→空污感測實務課程→Arduino程式→1050513→LED4_Buzzer_DHT22_ESP8266_Relay_air1_sample
需修改程式內容如下紅色框框:
新增設備編號欄位!若學校有2位以上的老師參加本研習,自行協調上傳的編號(0-255),以利辨識。
回校安裝務必再看一下 3-3 回校安裝步驟,以免出錯
最後付上forSharpGP2Y1010新程式:
#include
延伸文章資訊
- 1GP2Y1051AU0F 夏普原裝PM.25 粉塵感測器串口輸出
TaiwanSensor 台灣智能感測科技提供Arduino 範例程式,可以直接在 Arduino 上讀取的PM 2.5 數據. PM2.5 GP2Y1051AU0F Dust Smoke Pa...
- 2SHARP 夏普GP2Y1051AU0F 粉塵感測器模組帶線粉塵三代 ...
此產品可用於空調,空氣淨化機,空氣清新機,空氣質量檢測設備等。 GP2Y1051AU0F. 台灣物聯科技提供獨家Arduino 範例程式,可以直接在 Arduino 上讀取 ...
- 3利用GP2Y1010AU0F偵測空氣懸浮微粒汙染PM2.5 - 拉夫多多 ...
簡單的上傳資料呈現範例可以看這篇. Arduno動手做- 使用Ds18b20監測冰箱溫度並自動上傳數據. 然後最近把這感測器裝在arduino nano上發現偶爾會有一些 ...
- 4灰塵感應模組
Faya-Nugget 範例程式(Dust_Sensor_1.ino). // 單元: 模組介紹:faya灰塵感應模組 ... Arduino夏普GP2Y1051AU0F的串口讀取_源代碼_We...
- 5faya灰塵感應模組 - faya-nugget 電子積塊資源天地: 模組介紹
了解模組功能(原理)後,我們用以下範例來展示模組的功能: 目標: (1)每0.5秒在Arduino Serial Monitor秀出目前的粉塵濃度 接線: (1) 電源線連接