上次做的arduino小项目在测试过程中发现了一些小问题,至此又引出了一系列问题。大概是这样的,之前检测烟雾传感器使用电位器分压替代的,今天找到了打火机和小木棍就点火实测了一把(好久没玩火了)。测试过程中发现这个MQ135传感器并不是很灵敏,把火苗放在下面传感器测试值升高的很有限(50升到100的样子),而且火灭掉后或者有风吹过测量值很快就下来了,我估计这是和这个传感器所主要测量的气体相关,这个传感器主要是测氨气,一些有机气体和烟雾,可能小木棍燃烧过程中这类气体相对较少。
因此就出现了一个问题,我之前的程序里面采用的并非实时监测,而是在每一秒求100次采集平均值(而且是写死的),这样做主要为了减少虚警,但是如果要提高监测灵敏度的话还是需要增加一个虚警时间阈值的参数,将求平均的时间缩短,实际实现还是增加一个队列存储一段时间的采样数据(虚警时间阈值窗口),然后每次采样的时候求一次平均值。这样的话相当于实时在对烟雾进行检测并且实时检测是否超过阈值需要报警,而且可以通过调整虚警时间阈值这个参数来改变报警的灵敏度。为了实现这个功能就需要用到arduino的中断。幸好arduino是有内部中断的,即便是UNO这个最低的型号,它里面有3个定时器,每一个都可以作为中断,也就是说最多可以同时又三个定时中断,我找到了一篇文章详细的介绍了中断的设置方式,http://www.instructables.com/id/Arduino-Timer-Interrupts/?ALLSTEPS