Arduino 学习之路IV 求助
来源:互联网 发布:madness淘宝正品店 编辑:程序博客网 时间:2024/06/13 01:10
关于土壤传感器使用的一些问题
Grove - Dust Sensor 粉尘传感器
粉尘传感器可以通过在给定的单位时间内,计算罗脉冲占用时间(LPO时间)来测量空气中的颗粒物水平,该传感器可以为您提供可靠的粉尘数据。它可以检测直径为1微米的粉尘颗粒。
这里我按计算公式在 arduino UNO 写的程序
int pin = 6;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(pin,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(); }}
这里涉及到一个系统时间的问题,粉尘数据采集 是在系统运行30秒内不断在void loop()里读取
duration = pulseIn(pin, LOW);
然后进行相应运算 原程序并没有设置任何延时 所以读取次数我也不知道 这样得到的值也正常
于是问题就产生了 一旦设置了延时之后 读取值就少了很多,
下面我做了一个读取次数的实验
int i=0;unsigned long starttime;unsigned long sampletime_ms = 10000;void setup(){ Serial.begin(9600); starttime = millis();}void loop(){ i += 1; if ((millis()-starttime) > sampletime_ms) { Serial.println(i); starttime = millis(); i=0; } //delay(2000);}
这里把延时注释掉了 系统时间 10秒内 显示读取的次数为 24960~25020
而在设置延时后 显示读取的次数为5~7次
我在使用这个传感器时想和其它传感器一起使用 而当其它传感器的数据含延时时就会大大影响读取的值
我不知道是我对这个传感器工作原理不了解 还是他们说的我对板子的时钟原理不清楚
反正我很困惑 他们有的说不会影响,但按我的编程思路思路来看我觉得肯定会影响的
现在卡在这了,求助,求大神详解
(以后懂了在添加解决方案)
(以后懂了在添加解决方案)
2014/8/6
无奈 时钟无法在有延时的主程序里使用这个传感器的代码从而得到正确的值,在网上看到一篇例子,将该粉尘传感器的程序作为主程序,
通过条件语句 待30s后粉尘数据出现后在运行其他程序
void loop(){
duration = pulseIn(dust_pin, LOW);/*粉尘数据处理*/ lowpulseoccupancy += duration; endtime = millis();if ((millis()-starttime) > sampletime_ms) { ratio = ratio = (lowpulseoccupancy-endtime+starttime + sampletime_ms)/(sampletime_ms*10.0); concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; }if(tempconcentration!=concentration) { tempconcentration=concentration;
............. }}
暂时就只有这样了 不过令程序延时时间长了不少
0 0
- Arduino 学习之路IV 求助
- Arduino 学习之路I
- Arduino 学习之路II
- Arduino 学习之路III
- arduino学习之:LED点灯
- Arduino学习之震动开关
- Arduino学习笔记之Arduino的数字输出&串口输入
- Arduino学习笔记之 Arduino的串口输出
- Arduino学习日记五之接线
- arduino学习
- 初识Arduino ----记录学习Arduino
- Spring 学习笔记 (IV) 之 Spring 的事务
- Kienct与Arduino学习笔记(1) 基础知识之Arduino’Kinect‘Processing
- Arduino(新手之路1)
- Arduino(新手之路2)
- Arduino(新手之路1)
- Arduino学习之二——舵机控制
- Arduino学习之二——舵机控制2
- hdoj 2191 悼念512。。 【多重背包】+【二进制分解】
- MySQL索引背后的数据结构及算法原理
- 数组的初始化为 0 的学习
- poj 1159 Palindrome
- Map.keyset()
- Arduino 学习之路IV 求助
- 【DFS】poj 1088 滑雪
- 百炼(2755)dp
- 改进后的向量空间模型(VSM)
- 批处理梯度下降BGD与随机梯度下降SGD
- CentOS6.x升级MySQL版本5.1到5.6
- 使用NSSecureCoding协议进行对象编解码
- c语言基础
- 超出DOM边界的图片使用position:absolute实现