查看: 4092|回复: 1

[经验] GD32F207读GP2Y1010AU0F灰尘传感器

[复制链接]
  • TA的每日心情

    2023-7-25 22:49
  • 签到天数: 385 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2016-2-4 15:03:01 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 党国特派员 于 2016-2-5 01:39 编辑

    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光,通过检测经过空气中灰尘折射过后的光线来判断灰尘的含量。
    TB2JeJCepXXXXXMXpXXXXXXXXXX_!!2208586675.png.thumb.jpg

    4、接线说明
    QQ图片20160205003546.png QQ图片20160205003304.png
    5、驱动代码:
    gp2y.h
    1. /**
    2. ****************************************************************************************
    3. *
    4. * @file gp2y.h
    5. *
    6. * @brief 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 "gd32f20x.h"

    17. #include <stdint.h>


    18. #define GP2Y_ON                GPIO_ResetBits(GPIOA,GPIO_PIN_1)
    19. #define GP2Y_OFF    GPIO_SetBits(GPIOA,GPIO_PIN_1)

    20. void GP2Y_init(void);
    21. float GP2Y_Read(void);
    22. void gp2y_io_config(void);

    23. #endif
    复制代码
    gp2y.c
    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. //-----------------------------------------------------------------------
    16. // ADC配置定义
    17. //-----------------------------------------------------------------------
    18. void ADC_config(void)
    19. {
    20.         ADC_InitPara adc_stru;
    21.         
    22.         adc_stru.ADC_Channel_Number = 1;
    23.         adc_stru.ADC_Data_Align = ADC_DATAALIGN_RIGHT;
    24.         adc_stru.ADC_Mode = ADC_MODE_INDEPENDENT;
    25.         adc_stru.ADC_Mode_Continuous = DISABLE;
    26.         adc_stru.ADC_Mode_Scan = DISABLE;
    27.         adc_stru.ADC_Trig_External = ADC_EXTERNAL_TRIGGER_MODE_NONE;
    28.         
    29.         ADC_Init(ADC1,&adc_stru);
    30.         
    31.         ADC_RegularChannel_Config(ADC1,ADC_CHANNEL_4,1,ADC_SAMPLETIME_28POINT5                                                                                                );
    32.         //ADC_ExternalTrigConv_Enable(ADC1,ENABLE);
    33.         
    34.         ADC_Enable(ADC1,ENABLE);
    35.         ADC_Calibration(ADC1);
    36. }

    37. /*!
    38. * @brief 粉尘传感器GP2Y1010AU0F初始化
    39. *
    40. * @param None
    41. *
    42. * @return None
    43. */
    44. void GP2Y_init()
    45. {
    46.         ADC_config();
    47. }

    48. /*!
    49. * @brief 粉尘传感器GP2Y1010AU0F的IO配置
    50. *
    51. * @param None
    52. *
    53. * @return None
    54. */
    55. void gp2y_io_config()
    56. {
    57.         //红外管开关
    58.         GPIO_InitPara gpio_stru;
    59.         
    60.         gpio_stru.GPIO_Mode = GPIO_MODE_OUT_PP;
    61.         gpio_stru.GPIO_Pin = GPIO_PIN_1;
    62.         gpio_stru.GPIO_Speed = GPIO_SPEED_10MHZ;
    63.         
    64.         GPIO_Init(GPIOA,&gpio_stru);
    65.         
    66.         //配置ADC引脚
    67.         gpio_stru.GPIO_Mode = GPIO_MODE_AIN;
    68.         gpio_stru.GPIO_Pin = GPIO_PIN_4;
    69.         gpio_stru.GPIO_Speed = GPIO_SPEED_10MHZ;
    70.         
    71.         GPIO_Init(GPIOA,&gpio_stru);
    72. }

    73. /*!
    74. * @brief 从粉尘传感器GP2Y1010AU0F读取数据
    75. *
    76. * @param None
    77. *
    78. * @return 电压值
    79. */
    80. float GP2Y_Read()
    81. {
    82.     uint16_t adcData;
    83.     float voltRead;
    84.         
    85.         ADC_SoftwareStartConv_Enable(ADC1,ENABLE);
    86.     // Get ADC input
    87.     while(ADC_GetBitState(ADC1,ADC_FLAG_EOC)!=SET);

    88.     adcData = ADC_GetConversionValue(ADC1);
    89.     //PRINTF("ADC:%d\n",adcData);
    90.     // Convert ADC value to a voltage based on 3.3V VREFH on board
    91.     voltRead = (float)adcData * (3.3 / 4096.0);
    92.     return voltRead;
    93. }
    复制代码
    主程序读PM2.5的函数
    1. void ShowPM25(void)
    2. {
    3.         int new_pm25 = 0;
    4.         static int prev_pm25 = 0;
    5.         int last_pm25 = 0;
    6.         
    7.         GP2Y_ON;
    8.         DelayUs(280);
    9.         float adValue = GP2Y_Read();
    10.         DelayUs(40);
    11.         GP2Y_OFF;
    12.         DelayUs(9680);

    13.         
    14.         /*无尘测得电压值为0.6,手册上每0.1mg/m3 电压增加0.5V
    15.          *使用excel记算得出公式:y = 0.2x-0.12          */
    16.         new_pm25 = (0.2f*adValue-0.12f)*1000; //电压-灰尘转换
    17.         /*一阶滤波*/
    18.         last_pm25 = 0.2*new_pm25+0.8*prev_pm25;
    19.         prev_pm25 = new_pm25;
    20.         
    21.         sprintf((char*)showBuffer,"PM25:%3d   ug/",last_pm25);
    22.         OLED_ShowString(0,6,showBuffer);
    23.         OLED_ShowCHinese(112,6,10);//显示m³
    24. }
    复制代码
    上面计算new_pm25用excel计算出来的函数公式图:
    QQ图片20160205012750.png
    0.6V时PM2.5是0,然后电压每增加0.25V,PM2.5增加0.05。如果你的传感器无尘时的没量值是0.8那么就只需要把0.6改为0.8,Execl会自动帮你求出函数的公式来。Excel我把上传上来。
    PM25计算公式.xls (28.5 KB, 下载次数: 39, 售价: 2 与非币)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-19 16:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-2-16 13:58:29 | 显示全部楼层
    亲,可以将内容一并发到经验频道,很有机会获得每月之星的呢http://jingyan.eeboard.com/
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 10:59 , Processed in 0.120917 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.