查看: 11623|回复: 24

[分享] 【LPC824lite】PM粉尘检测

[复制链接]
  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16706
    最后登录
    1970-1-1
    发表于 2016-11-23 23:18:51 | 显示全部楼层 |阅读模式
    去年花钱淘了一个粉尘传感器PMS1003,攀藤的产品。

    这几天又拿出来玩玩,使用LPC824读取一下数据,检测PM1.0、PM2.5和PM10的值。

    这次先上个效果
    QQ截图20161123230140.jpg
    这个激光PM检测器精度比几十元的要好
    QQ截图20161123225552.jpg

    PMS1003的结构,采用激光传感器
    QQ截图20161123214649.jpg
    引脚8个
    QQ截图20161123215159.jpg
    QQ截图20161123215207.jpg
    攀藤公司除了一些列的多个产品
    QQ截图20161123215224.jpg
    PMS1003的参数,通过这个表也可以看到精度
    QQ截图20161123215336.jpg
    QQ截图20161123215346.jpg

    这个传感器一点好处就是不用A/D之类的,直接输出串口数据
    起协议如下:只需要配合该协议串口读取数据就可以了
    QQ截图20161123215633.jpg
    QQ截图20161123215647.jpg
    QQ截图20161123215659.jpg
    QQ截图20161123215715.jpg
    QQ截图20161123215724.jpg
    看看我的测试硬件,由于UART1作为串口调试接口,所以选择UART0读取传感器数据,通过开关矩阵接到P0.18和P0.19上
    QQ截图20161123215933.jpg
    定义需要用到的变量
    QQ截图20161123225611.jpg
    串口0初始化,启动接收中断,9600bps
    QQ截图20161123225622.jpg
    中断函数,按照上面的协议读取数据
    QQ截图20161123225636.jpg
    QQ截图20161123225647.jpg
    主函数输出检测数据
    QQ截图20161123225702.jpg
    下载调试即可
    QQ截图20161123225848.jpg

    下面分享一下我的程序,有这个模块的朋友也可以试试:

    1. /*
    2. ===============================================================================
    3. Name        : 005_lpc_pms1003.c
    4. Author      : $(lkl0305)
    5. Version     : 1.0
    6. Copyright   : $(lkl0305)
    7. Description : main definition
    8. ===============================================================================
    9. */

    10. #if defined (__USE_LPCOPEN)
    11. #if defined(NO_BOARD_LIB)
    12. #include "chip.h"
    13. #else
    14. #include "board.h"
    15. #endif
    16. #endif

    17. #include <cr_section_macros.h>

    18. // TODO: insert other include files here

    19. // TODO: insert other definitions and declarations here
    20. #define PMS1003_BUFFER_SIZE 32

    21. typedef struct pms1003_data
    22. {
    23.     uint16_t pm1_0_Value;
    24.     uint16_t pm2_5_Value;
    25.     uint16_t pm10_Value;
    26. } pms1003_data_t;

    27. volatile uint8_t pms1003_Flag = 0;
    28. pms1003_data_t pms1003_Data = {0};

    29. void Uart0_Init(void)
    30. {
    31.         Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);

    32.         Chip_SWM_DisableFixedPin(SWM_FIXED_ADC7);
    33.         Chip_SWM_DisableFixedPin(SWM_FIXED_ADC8);

    34.         Chip_Clock_SetUARTClockDiv(1);

    35.         Chip_SWM_MovablePinAssign(SWM_U0_TXD_O, 18);
    36.         Chip_SWM_MovablePinAssign(SWM_U0_RXD_I, 19);

    37.         Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);

    38.         Chip_UART_Init(LPC_USART0);
    39.         Chip_UART_ConfigData(LPC_USART0, UART_CFG_DATALEN_8 | UART_CFG_PARITY_NONE | UART_CFG_STOPLEN_1);
    40.         Chip_Clock_SetUSARTNBaseClockRate((115200 * 6 * 16), true);
    41.         Chip_UART_SetBaud(LPC_USART0, 9600);
    42.         Chip_UART_Enable(LPC_USART0);
    43.         Chip_UART_TXEnable(LPC_USART0);

    44.         Chip_UART_IntEnable(LPC_USART0, UART_INTEN_RXRDY);
    45.         NVIC_EnableIRQ(UART0_IRQn);
    46. }

    47. void UART0_IRQHandler(void)
    48. {
    49.         static uint8_t pms1003_Value[PMS1003_BUFFER_SIZE] = {0};
    50.         static volatile uint8_t pms1003_Status = 0;
    51.         uint8_t data;

    52.         if ((Chip_UART_GetStatus(LPC_USART0) & UART_STAT_RXRDY) != 0)
    53.         {
    54.                 data = Chip_UART_ReadByte(LPC_USART0);
    55.                 switch (pms1003_Status)
    56.                 {
    57.                 case 0:
    58.                         if (data == 0x42)
    59.                         {
    60.                                 pms1003_Value[pms1003_Status] = data;
    61.                                 pms1003_Status++;
    62.                         }
    63.                         break;
    64.                 case 1:
    65.                         if (data == 0x4d)
    66.                         {
    67.                                 pms1003_Value[pms1003_Status] = data;
    68.                                 pms1003_Status++;
    69.                         }
    70.                         else
    71.                         {
    72.                                 pms1003_Status = 0;
    73.                         }
    74.                         break;
    75.                 default:
    76.                         pms1003_Value[pms1003_Status] = data;
    77.                         pms1003_Status++;
    78.                         if (pms1003_Status == PMS1003_BUFFER_SIZE)
    79.                         {
    80.                                 pms1003_Status = 0;
    81.                                 uint16_t crc_Value = 0;
    82.                                 for (uint8_t i = 0; i < 30; i++)
    83.                                 {
    84.                                         crc_Value += pms1003_Value[i];
    85.                                 }
    86.                                 if (crc_Value == ((uint16_t)pms1003_Value[30] << 8) + pms1003_Value[31])
    87.                                 {
    88.                                         pms1003_Data.pm1_0_Value = ((uint16_t)pms1003_Value[10] << 8) + pms1003_Value[11];
    89.                                         pms1003_Data.pm2_5_Value = ((uint16_t)pms1003_Value[12] << 8) + pms1003_Value[13];
    90.                                         pms1003_Data.pm10_Value = ((uint16_t)pms1003_Value[14] << 8) + pms1003_Value[15];
    91.                                         pms1003_Flag = 1;
    92.                                 }
    93.                         }
    94.                         break;
    95.                 }
    96.         }
    97. }

    98. int main(void) {

    99. #if defined (__USE_LPCOPEN)
    100.     // Read clock settings and update SystemCoreClock variable
    101.     SystemCoreClockUpdate();
    102. #if !defined(NO_BOARD_LIB)
    103.     // Set up and initialize all required blocks and
    104.     // functions related to the board hardware
    105.     Board_Init();
    106.     // Set the LED to the state of "On"
    107.     Board_LED_Set(0, true);
    108. #endif
    109. #endif

    110.     // TODO: insert code here
    111.     Uart0_Init();

    112.     // Force the counter to be placed into memory

    113.     // Enter an infinite loop, just incrementing a counter
    114.     while(1) {
    115.               if (pms1003_Flag == 1)
    116.               {
    117.                       pms1003_Flag = 0;
    118.                       DEBUGOUT("\r\n=======================\r\n");
    119.                       DEBUGOUT("PM1.0 = %d ug/m3\r\n", pms1003_Data.pm1_0_Value);
    120.                       DEBUGOUT("PM2.5 = %d ug/m3\r\n", pms1003_Data.pm2_5_Value);
    121.                       DEBUGOUT("PM10 = %d ug/m3\r\n", pms1003_Data.pm10_Value);
    122.                       DEBUGOUT("=======================\r\n");
    123.               }
    124.     }
    125.     return 0 ;
    126. }
    复制代码


    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16706
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-24 14:12:37 | 显示全部楼层
    nothingelse 发表于 2016-11-24 12:02
    听说测量空气中的粒子要进行干燥处理才会准确
    不知楼主如何处理呢

    你说的太专业了,这个是没有的
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-29 08:54
  • 签到天数: 2992 天

    连续签到: 8 天

    [LV.Master]伴坛终老

    45

    主题

    5548

    帖子

    22

    金牌会员

    Rank: 6Rank: 6

    积分
    12035
    最后登录
    2025-5-29
    发表于 2016-11-24 00:05:42 | 显示全部楼层
    激光的确实要比我几十块钱买的好很多,赞一个。
    签到签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16706
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-24 00:09:28 | 显示全部楼层
    老兄每天签到都第一,历害
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-11-24 08:15:38 | 显示全部楼层
    会玩
    回复

    使用道具 举报

  • TA的每日心情

    2019-9-17 13:22
  • 签到天数: 238 天

    连续签到: 1 天

    [LV.7]常住居民III

    30

    主题

    905

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    2251
    最后登录
    2024-10-8
    发表于 2016-11-24 08:18:31 | 显示全部楼层
    介绍的很详细呀
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-2-13 08:29
  • 签到天数: 20 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    531

    主题

    2048

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    210
    最后登录
    2018-8-14
    发表于 2016-11-24 09:03:41 | 显示全部楼层
    要获奖的节奏
    签到 签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-9-20 10:55
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    24

    主题

    1189

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1642
    最后登录
    2022-3-21
    发表于 2016-11-24 09:10:10 | 显示全部楼层
    mark 好项目啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16706
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-24 09:55:07 | 显示全部楼层

    嘿嘿,一起嗨起来
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16706
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-24 09:55:17 | 显示全部楼层

    多谢支持
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16706
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-24 09:55:55 | 显示全部楼层

    肖总一说,我立马有动力了哈
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-24 05:29 , Processed in 0.105844 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表