楼主: STM32LEARN

[原创] 【智能生活-KE02Z】室内甲醛监测仪(功能完成)

[复制链接]
  • TA的每日心情
    开心
    2020-1-12 00:23
  • 签到天数: 745 天

    连续签到: 1 天

    [LV.9]以坛为家II

    27

    主题

    1万

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    6868
    最后登录
    2020-7-15
    发表于 2016-9-3 22:56:32 | 显示全部楼层
    不错,支持下!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1509
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-3 22:58:51 | 显示全部楼层

    多谢多谢
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1509
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-3 22:59:11 | 显示全部楼层
    lising 发表于 2016-9-3 22:56
    不错,支持下!

    多谢大神支持
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-12-8 10:21
  • 签到天数: 743 天

    连续签到: 1 天

    [LV.9]以坛为家II

    0

    主题

    1650

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    19069
    最后登录
    2021-5-6
    发表于 2016-9-4 08:51:02 | 显示全部楼层

    ,真是难得给力的帖子啊
    我又来签到了.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1509
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-4 12:07:07 | 显示全部楼层
    zbber 发表于 2016-9-4 08:51
    ,真是难得给力的帖子啊

    多谢支持
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1509
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-4 15:41:22 | 显示全部楼层
    七、FEE模式下虚拟串口
    之前使用了ICS模块,当工作在39.0625khz时,由于内部存在较大误差,串口通信不正常,因此改用了31.25KHZ的工厂模式。
    其实也可以使用外部OSC获得较高精度。
    KE02Z外接了10MHZ晶振
    QQ截图20160904153945.png
    设置时钟如下
    QQ截图20160904153323.png

    QQ截图20160904153405.png

    QQ截图20160904153416.png
    串口如下
    QQ截图20160904153442.png

    QQ截图20160904153505.png
    填入测试代码
    QQ截图20160904153537.png
    编译运行即可输出正确数据
    QQ截图20160904153551.png


    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1509
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-4 17:08:17 | 显示全部楼层
    八、甲醛检测
    采用的是攀藤的甲醛检测,串口输出数据,比较简单,价格也不便宜!
    QQ截图20160904170254.png

    QQ截图20160904170248.png
    接线,采用UART0链接甲醛传感器,UART1虚拟串口输出数据。
    QQ截图20160904170043.png
    新建工程,添加需要的组件
    QQ截图20160904165645.png
    配置时钟,FEE模式
    QQ截图20160904165710.png

    QQ截图20160904165735.png

    QQ截图20160904165753.png
    UART0链接传感器的参数配置
    QQ截图20160904165829.png

    QQ截图20160904165839.png
    虚拟串口UART1参数配置
    QQ截图20160904165850.png
    编写HCHO函数文件
    QQ截图20160904165909.png

    QQ截图20160904165919.png
    编写主函数测试代码
    QQ截图20160904165932.png
    编译下载运行,可以看到甲醛传感器数据输出
    QQ截图20160904165029.png

    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1509
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-4 17:09:27 | 显示全部楼层
    九、HCHO程序

    1. /*
    2. * hcho.c
    3. *
    4. *  Created on: Sep 3, 2016
    5. *      Author: Administrator
    6. */

    7. #include "hcho.h"

    8. uint8_t hcho_CMD[] = {0x42, 0x4d, 0x01, 0x00, 0x00, 0x00, 0x90};
    9. uint8_t hcho_Return_Data[10];
    10. volatile uint8_t hcho_flag = 0;
    11. uint8_t hcho_Return[4] = {'0', '.', '0', '0'};

    12. void hcho_Read(void)
    13. {
    14.   HCHO_UART_TComData ch = 0;
    15.   static uint8_t state = 0;
    16.   static uint8_t receive_num = 0;
    17.   uint8_t i;
    18.   uint16_t crc;
    19.   HCHO_UART_RecvChar(&ch);
    20.   switch (state)
    21.   {
    22.   case 0:
    23.     if (ch == 0x42)
    24.     {
    25.       state = 1;
    26.       hcho_Return_Data[0] = ch;
    27.     }
    28.     break;
    29.   case 1:
    30.     if (ch == 0x4d)
    31.     {
    32.       state = 2;
    33.       hcho_Return_Data[1] = ch;
    34.     }
    35.     else
    36.     {
    37.       state = 0;
    38.     }
    39.     break;
    40.   case 2:
    41.     state = 3;
    42.     hcho_Return_Data[2] = ch;
    43.     receive_num = 0;
    44.     break;
    45.   case 3:
    46.     hcho_Return_Data[3 + receive_num] = ch;
    47.     receive_num++;
    48.     if (receive_num == hcho_Return_Data[2])
    49.     {
    50.       state = 0;
    51.       for (i = 0, crc = 0; i < hcho_Return_Data[2]; i++)
    52.       {
    53.         crc += hcho_Return_Data[i];
    54.       }
    55.       if (crc == (((uint16_t)hcho_Return_Data[receive_num] << 8) + hcho_Return_Data[receive_num + 1]))
    56.       {
    57.         hcho_flag = 1;
    58.       }
    59.     }
    60.     break;
    61.   }
    62. }

    63. void hcho_Read_Data(void)
    64. {
    65.   word vpc_Size = 0;
    66.   word hcho_Send_Size = 0;
    67.   uint16_t hcho_temp = 0;
    68.   HCHO_UART_SendBlock((HCHO_UART_TComData *)hcho_CMD, 7, &hcho_Send_Size);
    69.   Delay(1000);
    70.   if (hcho_flag == 1)
    71.   {
    72.     hcho_flag = 0;
    73.     if (hcho_Return_Data[3] == 0x14 && hcho_Return_Data[4] == 0x05)
    74.     {
    75.       hcho_temp = ((uint16_t)hcho_Return_Data[6] << 8) + hcho_Return_Data[7];
    76.       switch (hcho_Return_Data[5])
    77.       {
    78.       case 0x01:
    79.         break;
    80.       case 0x02:
    81.         break;
    82.       case 0x03:
    83.         hcho_Return[0] = ((hcho_temp % 1000) / 100) + '0';
    84.         hcho_Return[1] = '.';  
    85.         hcho_Return[2] = ((hcho_temp % 100) / 10) + '0';
    86.         hcho_Return[3] = (hcho_temp % 10) + '0';        
    87.         break;
    88.       case 0x04:
    89.         break;
    90.       }
    91.       VPC_UART_SendBlock((VPC_UART_TComData *)"HCH0 = ", 7, &vpc_Size);
    92.       VPC_UART_SendBlock((VPC_UART_TComData *)hcho_Return, 4, &vpc_Size);
    93.       VPC_UART_SendBlock((VPC_UART_TComData *)" Mg / m3\r\n", 10, &vpc_Size);
    94.     }
    95.   }
    96. }
    复制代码

    1. /*
    2. * hcho.h
    3. *
    4. *  Created on: Sep 3, 2016
    5. *      Author: Administrator
    6. */

    7. #ifndef HCHO_H_
    8. #define HCHO_H_

    9. #include "stdint.h"
    10. #include "HCHO_UART.h"
    11. #include "VPC_UART.h"
    12. #include "Delay.h"

    13. extern uint8_t hcho_CMD[];
    14. extern uint8_t hcho_Return_Data[];
    15. extern volatile uint8_t hcho_flag;

    16. void hcho_Read(void);
    17. void hcho_Read_Data(void);

    18. #endif /* HCHO_H_ */
    复制代码


    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1509
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-4 18:01:10 | 显示全部楼层
    本帖最后由 STM32LEARN 于 2016-9-4 18:06 编辑

    十、室内甲醛检测仪(功能完成)
    结合上面的帖子,最终整合,即可实现本项目——甲醛检测仪
    新建工程,添加如下组件

    QQ截图20160904175406.png
    其他模块的配置及其函数编写均与之前一致,主函数如下:
    QQ截图20160904175621.png
    连线,运行
    QQ截图20160904175343.png
    即可看到如下结果,可以看到,检测到了当前的甲醛值
    QQ截图20160904175321.png




    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1509
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-4 18:04:41 | 显示全部楼层
    十一、甲醛检测完整工程

    hcho_lcd5110.rar (1.18 MB, 下载次数: 2)
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-18 19:12 , Processed in 0.101492 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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