DEMO板子,本店不提供源代码,电路图以及PCB图纸。若急需代码,标价8K。毕竟节省昂贵的工程师和时间成本。代码卖出不退。只有Arduino的代码。作为参考之用。

说说新传感器的体会吧,有好的方面,也有不足的方面:
1、 新传感器只能使用串口输出,传感器内置的单片机,是 10bit 采样的,因此,输出的数据最低在 4.8mv,这决定了它的检出限。 在做好浓度标定后, 4.8mv 基本代表了 20ug/m3的浓度,所以,新传感器的检出限在 20~30ug。这与 SHARP DataSheet 中的介绍一致。但相对于 1050 和 1010 的模拟量输出,数字输出的 GP2Y1051 传感器在 30ug 以下的敏感度降低了。
2、 新传感器,稳定性更强。内置 220uF 钽电容,其抗干扰能力更强了。
3、 新传感器内置单片机的算法,是不透明的。经测试,并不是直接把电压量做简单的数字转换。里面做了除错之后,才输出给外部串口设备的。输出速度,2400 波特率,一次采样读取需要大约 70ms。
4、 经测试,传感器迎着净化器出风口的时候, GP2Y1051 电压输出会降至 0mv\\4.9mv\\9.8mv..等几个值,并且这个电压值不会变,就像卡主一样。暂且把它叫做 0 点基线的飘移吧。也可以认为是传感器内置的算法中,把这个情况看做异常,然后持续(锁定)输出某一个值了,或者是莫名其妙的原因。所以请不要将孔洞,对着净化器出风口做测试!因为出风口的颗粒浓度一般会低于传感器的 30ug 检出限,这时电压会瞬间将至 0 点基线,就会有莫名的飘移。所以如果不加算法修正,此处检出的数值会卡住。幸好,此版程序改进了这点。 (感谢网友木棉子的反馈。 )
5、 在解决了上述问题后,笔者突然意识到,传感器不应该正对着净化器出风口。因为扩散式的传感器和气泵式的一样,都要对空气流量有要求。所以既然是扩散式的,还需要将其垂直放置在被风的地方,让空气自由扩散。这样显示的数值是更趋于准确的。请一定注意。您可以将传感器的侧面,对着通风口。


产品优势:
1、高敏感度:可检浓度35微克/立方米;
2、超小型化:可内置于各种设备;
3、低成本化:无需增加外围电路;
4、准确率高:标准串口通讯,测量准确率明显提高;
5、波特率:2400bit/s;
6、一致性好:抗干扰性强,一致性强。
产品应用领域:
此产品可用于空调,空气净化机,空气清新机,空气质量检测设备等。

/*-----------------------------以下为GP2Y1051的基础串口读取代码------------------------------------------*/
int incomeByte[7];
int data;
int z=0;
int sum;
unsigned long error;
// Arduino夏普GP2Y1051AU0F的串口读取_源代码_Weesky维天监制
// 作者ID:Weesky ; ...
// 2014年11月23日
// v1.0 基础版本,成功读取数值,并且算出PM2.5浓度。
// v1.1 改进了算法,这样看起来数值高了些。对于爱好者操作更容易了。
//请不要在采样周期里面添加延迟delay这样的。不然串口寄存器只有64Byte,很可能被塞满。
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! |");
for(int k=0;k<7;k++)
{
Serial.print(incomeByte[k]);
Serial.print("|");
}
Serial.print(" Vo=");
float vo=(incomeByte[1]*256.0+incomeByte[2])/1024.0*5.00;
Serial.print(vo,3);
Serial.print("v | ");
Serial.print(" PM2.5 = ");
Serial.print(c,2);
Serial.print("ug/m3 ");
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;
}
}
// 维天监制: https://blog.sina.com.cn/u/3689632602
// 维天淘宝:https://Weesky.taobao.com
// 本着Arduino开源硬件分享快乐的精神,请各位爱好者自由修改并分享。
// 修改请注明版本,署上您的大名,不要删除作者信息,谢谢!
}
------------------------下面是带SD卡存储的程序!并做了2秒的平均值输出 推荐参考!----------------
int incomeByte[7];
int data;
int z=0;
int sum,count;
unsigned long error,starttime;
float average_pm2d5,sum_2s;
// Arduino夏普GP2Y1051AU0F的串口读取_源代码_Weesky维天监制
// 作者ID:Weesky ; ...
// 2014年11月23日
// v1.0 基础版本,成功读取数值,并且算出PM2.5浓度。
// v1.1 改进了算法,这样看起来数值高了些。对于爱好者操作更容易了。
// v2.0 Using SD card storage
//请不要在采样周期里面添加延迟delay这样的。不然串口寄存器只有64Byte,很可能被塞满。
#include
File myFile;
void setup()
{
Serial.begin(2400);
pinMode(10, OUTPUT);
SD.begin(4);
starttime=millis();
}
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 )
{
float vo=(incomeByte[1]*256.0+incomeByte[2])/1024.00*5.000;
float c=vo*700;
sum_2s=sum_2s+c;
count++;
if(abs(millis()-starttime)>2000){
myFile = SD.open("PM2D5.txt", FILE_WRITE);
average_pm2d5=(sum_2s/count)*1.00;
Serial.print("PM2.5_Average = ");
Serial.println(average_pm2d5,2);
if (myFile)
{
myFile.println(average_pm2d5,2);
myFile.close();
}
starttime=millis();
sum_2s=0;
count=0;
}
}
else{
z=0;
Serial.flush();
data='/0';
for(int m=0;m<7;m++){
incomeByte[m]=0;
}
}
z=0;
}
}