DSM501灰尘传感器。

按理是求一个周期(30S)内的低脉冲。这样岂不是求出来的数据要30秒才能变化一次,这样太慢了,有没有什么方法可以马上得出变化的数据。比如,我撒点面粉到传感器上,要LCD显... 按理是求一个周期(30S)内的低脉冲。这样岂不是求出来的数据要30秒才能变化一次,这样太慢了,有没有什么方法可以马上得出变化的数据。
比如,我撒点面粉到传感器上,要LCD显示结果的那个数据马上变化····
展开
 我来答
钝角111度
2014-05-07 · TA获得超过1.6万个赞
知道大有可为答主
回答量:2444
采纳率:63%
帮助的人:644万
展开全部
int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;

void setup() {
Serial.begin(9600);
pinMode(8,INPUT);
starttime = millis();
}

void loop() {
duration = pulseIn(pin, LOW);
lowpulseoccupancy = lowpulseoccupancy+duration;

if ((millis()-starttime) > sampletime_ms)
{
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100
concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
//Serial.print(lowpulseoccupancy);
// Serial.print(",");
Serial.print(ratio);
Serial.print(",");
Serial.println(concentration);
lowpulseoccupancy = 0;
starttime = millis();
}
}
这个是监测结果发送到串口的程序,你把单片机txd,和rxd接电脑就可以看到结果。改变监测时间改上面的unsigned long sampletime_ms = 30000;这一行就行了,这个单位是毫秒。或者你把你程序发过来,我把你时间改小。希望你采纳。不懂继续问。
更多追问追答
追问
我的意思你把30000这个时间改小的话就不是DSM的一个周期了,这样结果就不准确啊,本来值就很低,假设改成2S,经常出现2S内的低脉冲为0.这样就结果不准确了。有没有什么思路就是使结果相差不大,但是2S内就可以使数据变化一次。我是利用两个定时器做的,一个定时器定时30S,一个是低脉冲触发,然后就可以求出低脉冲率。
追答
这个传感器有一个极限最小的监测时间,你一点点调小。比如先调成20秒。一次次实验。2秒监测出来是不靠谱的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式