DSM501灰尘传感器。
按理是求一个周期(30S)内的低脉冲。这样岂不是求出来的数据要30秒才能变化一次,这样太慢了,有没有什么方法可以马上得出变化的数据。比如,我撒点面粉到传感器上,要LCD显...
按理是求一个周期(30S)内的低脉冲。这样岂不是求出来的数据要30秒才能变化一次,这样太慢了,有没有什么方法可以马上得出变化的数据。
比如,我撒点面粉到传感器上,要LCD显示结果的那个数据马上变化···· 展开
比如,我撒点面粉到传感器上,要LCD显示结果的那个数据马上变化···· 展开
1个回答
展开全部
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;这一行就行了,这个单位是毫秒。或者你把你程序发过来,我把你时间改小。希望你采纳。不懂继续问。
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秒监测出来是不靠谱的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询