以下出自Weesky 的博客:
夏普PM2.5傳感器,GP2Y1050AU0F是一款用在普通凈化器上的產品。支持數字串口輸出和模擬輸出。外圍需要1顆220uF的電容。操作簡單。的

GP2Y1050AU0F的Pm2.5檢測限在35ug~500ug/m3,對小顆粒不敏感,但是對煙塵比較敏感。如果用作測試PM2.5請注意自行標定。并且,做滑動平均算法。 串口與模擬的區別。GP2Y1050AU0F是在上一代1010改進而來,因此原本這個傳感器是模擬的。所以如果使用模擬輸出,那么反應會最快。數字讀取經過內置單片機,到輸出,讀取略微遲鈍0.5s。 但是數值基本相當。數字口較為穩定。 初次使用,可以點一支煙做測試。數值應該為PDF中的線性關系。你也可以插一根牙簽到傳感器的洞中。以讓它達到輸出的最大值。3.28V左右。 代碼可能不完美,期望各路Arduino的高手,分享和修改! 別忘了注上您的大名,并且@張辰-維天 。一下我哦,十分感謝。 GP2Y1050AU0F ItemsMinNormMaxUnit | VCC | 4.8 | - | 5.2 | V | Standby Current Supply | - | 20 | - | mA | Detectable range of concentration | - | 35~500ug/m3 | - | 塵埃濃度 | Operating Temperature Range | -10 | - | 65 | °C | Output Method | 模擬電壓輸出,RX/TX串口數字量輸出兩種 | Detecting the particle diameter | >0.3 um | Dimensions | 48(W) × 32(H) × 7.6(D) [mm] | Humidity Range | 95%rh or less |

夏普GP2Y1050AU0F_ Datasheet:http://wenku.baidu.com/link?url=p6GoWntEr1QvOBOpqlV5svBBW5uL-X8kbTBgdXFod5wh_-X7gjaSUU3VdExHJ78VNAEOV23dZ6VPYbYMeszR6ycQhGpG_0zdLip7EACx9Ra // Arduino夏普GP2Y1050AU0F的串口讀取_源代碼_Weesky維天監制 // 作者ID:Weesky ; ...
// 本著Arduino開源硬件分享快樂的精深,請各位愛好者自由修改并分享。 // 2014-9-22 // v1.0 基礎版本,成功讀取數值,并且算出Pm2.5濃度。 // 修改請注明版本,署上您的大名,不要刪除作者信息,謝謝! int incomeByte[6];
int data;
int z=0;
int sum;
unsigned long error; void setup()
{
Serial.begin(2400);
} void loop(){ 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("Data OK! ");
Serial.print(" | Vo=");
float vo=(incomeByte[1]*256.0+incomeByte[2])/1024.0*5.00;
Serial.print(vo,2);
Serial.print("V ");
float v1=analogRead(A0)/1024.0*5.00;
Serial.print("/ Ao=");
Serial.print(v1,2);
Serial.print("V | ");
float c=vo*200;
Serial.print(c,2);
Serial.print("ug/m3 | "); for(int k=0;k<7;k++)
{
Serial.print(incomeByte[k]);
Serial.print("|");
}
Serial.println();
}else{
z=0;
Serial.flush();
data='/0';
for(int m=0;m<7;m++){incomeByte[m]=0;}
error++;
Serial.print(" ### This is ");
Serial.print(error);
Serial.println(" Error ###");
}
z=0;
}
}
}
|