最近调研一下PM2.5传感器,于是某宝淘一个夏普GP2Y1010AU0F,可以用作粉尘,PM2.5传感器,等了几天终于到货,开始耍起。
首先简单介绍下传感器,原理是一个红外发光二极管(IRED)和光电子晶体管对角布置在该装置,它可以有效的检测非常细的颗粒,像攻城狮
必备的香烟粉尘有明显效果。
夏普PM2.5传感器
图1 夏普PM2.5传感器
附赠配套150ohm的电阻和220uF的电容,又省心了不少。
引脚定义
图2 引脚定义
接下来进行焊接工作,如下图所示
图3 硬件焊接示意图
剩下的难点就是驱动脉冲了
驱动脉冲
图4 驱动脉冲
周期10ms,峰值时间0.32ms,前段时间正好K64 mqx玩的飞起,就大材小用了。分享代码如下
1 设置两个回调函数的周期
#define HWTIMER2_PERIOD 10000 // 10ms
#define HWTIMER1_PERIOD 320 // 0.32ms
2.定义两个回调函数的定义
void hwtimer1_callback(pointer p)
{
lwgpio_set_pin_output(BSP_PTE24,LWGPIO_VALUE_HIGH);
}
void hwtimer2_callback(pointer p)
{
lwgpio_set_pin_output(BSP_PTE24,LWGPIO_VALUE_LOW);
hwtimer_set_period(&hwtimer1, BSP_HWTIMER1_SOURCE_CLK, HWTIMER1_PERIOD);
hwtimer_callback_reg(&hwtimer1,(HWTIMER_CALLBACK_FPTR)hwtimer1_callback, NULL);
/* Waiting for semaphore from callback routine */
hwtimer_start(&hwtimer1);
_lwsem_wait(&job_done);
/* Deinitialization of hwtimers */
_lwsem_destroy(&job_done);
}
3.主TASK调用hwtimer_callback_reg(&hwtimer2,即可。
主要思路:每隔10ms调用回调函数2,在回调函数中每隔0.32ms将GPIO置低。跑了MQX,杀鸡用牛刀了。
示波器看下K64的输出时序正确,就可以点根烟看粉尘互感器的电压波形了~~
|