[活动] 基于K22F的PM2.5+甲醛监测器(3)

[复制链接]
 楼主| Ketose 发表于 2015-12-31 01:34 | 显示全部楼层 |阅读模式
本帖最后由 Ketose 于 2015-12-31 01:34 编辑

使用K22F读取夏普光学灰尘传感器(GP2Y1010AU0F)PM2.5的值
1、夏普光学灰尘传感器(GP2Y1010AU0F)介绍
Sharp's GP2Y1010AU0F 是一款光学空气质量传感器,设计用来感应空气中的尘埃粒子,其内部对角安放着红外线发光二极管和光电晶体管,使得其能够探测到空气中尘埃反射光,即使非常细小的如烟草烟雾颗粒也能够被检测到,通常在空气净化系统中应用。该装置中,一个红外发光二极管和光电晶体管,对角布置成允许其检测到在空气中的灰尘反射光。
2、规范
电源电压:5-7V
工作温度:-10-65摄氏度
消耗电流:20mA最大
最小粒子检出值:0.8微米
灵敏度:0.5V/(0.1mg/m3)
清洁空气中电压:0.9V  典型值
工作温度:-10~65℃
存储温度:-20~80℃
使用寿命:5年
尺寸大小:46mm×30mm×17.6mm
重量大小:15g
3、检测原理
其原理如下图,传感器中心有个洞可以让空气自由流过,定向发射LED光,通过检测经过空气中灰尘折射过后的光线来判断灰尘的含量。

4、项目原理图

我们使用开发板的PTB1作为传感器的控制开关,用来关闭和打开传感器的测试,把PTC1设置为ADC0来采集传感器的电压。
5、代码
根据LED驱动周期(脉冲周期:T (ms) ),LED驱动时间(脉冲:宽度Pw(ms) )输出电压会变动,规格书特性的规格值是脉冲周期T:10ms,脉冲宽度Pw:0.32ms,取样时间:0.28ms,根据此条件变动,规格书上规定的特性值(无尘时输出电压、检出感度)也随之变动。在微机编程上,不能以此条件设定的情况下,请在规格书的推荐范围内操作。
另外,根据电源电压,输出电压也会变动。
  1. /**
  2. ****************************************************************************************
  3. *
  4. * [url=home.php?mod=space&uid=288409]@file[/url] gp2y.h
  5. *
  6. * [url=home.php?mod=space&uid=247401]@brief[/url] GP2Y1010AU0F传感器操作模块头文件
  7. *
  8. * Copyright (C) sunsjw 2015
  9. *
  10. * $Rev: 1.0 $
  11. *
  12. ****************************************************************************************
  13. */

  14. #ifndef __GP2Y_H
  15. #define __GP2Y_H

  16. #include "MK22F51212.h"
  17. #include "fsl_port_hal.h"
  18. #include "fsl_gpio_hal.h"
  19. #include "fsl_adc16_driver.h"
  20. #include "fsl_adc16_hal.h"
  21. #include "fsl_debug_console.h"

  22. #include <stdint.h>


  23. #define GP2Y_ON         GPIO_HAL_ClearPinOutput(PTB,1)
  24. #define GP2Y_OFF        GPIO_HAL_SetPinOutput(PTB,1)

  25. void GP2Y_init(void);
  26. float GP2Y_Read();

  27. #endif
  1. /**
  2. ****************************************************************************************
  3. *
  4. * @file gp2y.c
  5. *
  6. * @brief GP2Y1010AU0F传感器操作模块文件
  7. *
  8. * Copyright (C) sunsjw 2015
  9. *
  10. * $Rev: 1.0 $
  11. *
  12. ****************************************************************************************
  13. */

  14. #include "gp2y.h"

  15. adc16_converter_config_t g_adcConfig;
  16. adc16_calibration_param_t g_adcCalibraitionParam;
  17. adc16_chn_config_t g_chnConfig;

  18. void GP2Y_init()
  19. {
  20.   PORT_HAL_SetMuxMode(PORTC,1U,kPortPinDisabled);
  21.   PORT_HAL_SetMuxMode(PORTB,1U,kPortMuxAsGpio);
  22.   
  23.   GPIO_HAL_SetPinDir(PTB,1,kGpioDigitalOutput);
  24.   
  25.   ADC16_DRV_StructInitUserConfigDefault(&g_adcConfig);
  26.   ADC16_DRV_Init(0,&g_adcConfig);
  27.   
  28.   ADC16_DRV_GetAutoCalibrationParam(0,&g_adcCalibraitionParam);
  29.   ADC16_DRV_SetCalibrationParam(0,&g_adcCalibraitionParam);
  30.   
  31.   g_adcConfig.continuousConvEnable = true;
  32.   ADC16_DRV_Init(0,&g_adcConfig);

  33.   g_chnConfig.chnIdx = kAdc16Chn15;
  34.   g_chnConfig.diffConvEnable = false;
  35.   g_chnConfig.convCompletedIntEnable = false;
  36.   
  37.   ADC16_DRV_ConfigConvChn(0,0U,&g_chnConfig);
  38. }

  39. float GP2Y_Read()
  40. {
  41.     uint16_t adcData;
  42.     float voltRead;

  43.     // Get ADC input
  44.     ADC16_DRV_WaitConvDone(0, 0U);

  45.     adcData = ADC16_DRV_GetConvValueSigned(0, 0U);
  46.     //PRINTF("ADC:%d\n",adcData);
  47.     // Convert ADC value to a voltage based on 3.3V VREFH on board
  48.     voltRead = (float)adcData * (3.3 / 4096.0);
  49.     return voltRead;
  50. }
我们在主程序里添加如下代码:
  1.     float aqi = 0;
  2.     int i =0;

  3.     while(1)
  4.     {
  5.       temp = humi = 0;
  6.       if(i++ >9)
  7.       {
  8.         int x = round(pm * 100);
  9.         PRINTF("PM2.5:%d\r\n",x);
  10.         pm =0;
  11.         i = 0;
  12.       }
  13.       GP2Y_ON;
  14.       DelayUs(280);
  15.       float AD_PM = GP2Y_Read();
  16.       DelayUs(40);
  17.       GP2Y_OFF;
  18.       DelayUs(9680);

  19.       aqi += (0.2*AD_PM-0.18); //电压-灰尘转换
  20.     }
计算出AQI指数,如果计算PM2.5浓度:xx微克/立方米,刚参考下面的图换算出来。

好了,今天已经很晚了,休息一下先。明天再继续。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
Micachl 发表于 2015-12-31 08:26 | 显示全部楼层
这个传感器贵吗?您用的都是什么型号啊?能否说一下,谢谢
 楼主| Ketose 发表于 2015-12-31 09:45 | 显示全部楼层
Micachl 发表于 2015-12-31 08:26
这个传感器贵吗?您用的都是什么型号啊?能否说一下,谢谢

有贵有便宜的,我这种是便宜的读出来的是模拟信号,贵点的读出来的是数字信号。
型号就是我上面说的。
FSL_TICS_ZJJ 发表于 2015-12-31 12:55 | 显示全部楼层
非常感谢楼主的宝贵经验分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我最讨厌两种人:一是有种族歧视的; 二是黑人;三是不识数的!

66

主题

3258

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部