功能简介:
0.单片机采用STM32F103C8T6最小系统板
1.采用SGP30传感器可检测二氧化碳浓度
2.利用MQ136可检测硫化氢气体
3.利用MQ-4传感器可检测天然气甲烷等气体

原理图:

PCB:

代码:

#define __MIAN_C
#include "main.h"/************************* 变量定义 *************************/
CreatByte Flag;
enum _MODE_DF_ dispMode;char dis[16];
u32 humidity = 0;
volatile uint16_t hmMin= 25;
volatile uint16_t hmMax= 60;
uint16_t temperature = 0;
volatile uint16_t tempMin = 20;
volatile uint16_t tempMax = 40;
uint16_t CO2_CONC = 0;
volatile uint16_t CO2_CONC_Max = 800;
uint16_t CH4_CONC = 0;
volatile uint16_t CH4_CONC_Max = 5;
uint16_t H2S_CONC = 0;
volatile uint16_t H2S_CONC_Max = 5;
u8 volatile setIndex = 0;/************************* 主函数 *************************/
int main(void)
{// 使用HSI,SYSCLK = 4M * RCC_PLLMul_x, x:[2,3,...16],最高是64MHHSI_SetSysClock(RCC_PLLMul_2); //使用内部8MHz晶振,并设置PLL输出为8MHz// 端口初始化GPIO_Config();GENERAL_TIM_Init();Key_GPIO_Config();DelayMs(200);DHT11_GPIO_Init();SGP30_Init();LCD_GPIO_Init();LCD_Init();LCD_Clear();DelayMs(200);ADCx_Init();while (1){if (refreshFlag == 1){refreshFlag = 0;RefreshData(); //刷新数据if ((humidity <= hmMax && humidity >= hmMin)\&& (temperature <= tempMax && temperature >= tempMin) \&& CO2_CONC <= CO2_CONC_Max && CH4_CONC <= CH4_CONC_Max && H2S_CONC <= H2S_CONC_Max) //在范围内蜂鸣器关闭{BUZZER_OFF;}else //任一项指标超出阈值范围,蜂鸣器报警{BUZZER_ON;}if (dispMode == NORMAL) //显示{DispNormal();}}KeyProcess(); //按键检测}
}/************************* 刷新数据 *************************/
void RefreshData(void)
{u8 i;u32 sgp30_dat;DHT11_ReadData();humidity = U8RH_data_H;temperature = U8T_data_H;sprintf(dis, "Hm:%2d%% T:%3d", humidity, temperature);CH4_CONC = 0;H2S_CONC = 0;for (i = 0; i < 20; i++){CH4_CONC = CH4_CONC + ADC_ConvertedValue[0];H2S_CONC = H2S_CONC + ADC_ConvertedValue[1];}CH4_CONC = CH4_CONC / 20; //取20次平均if (CH4_CONC < 368) //去掉零值电压{CH4_CONC = 0;}else{CH4_CONC = (CH4_CONC-368) * 100 / (4096-368); //读取CH4浓度信息}H2S_CONC = H2S_CONC / 20; //取20次平均if (H2S_CONC < 123) //去掉零值电压{H2S_CONC = 0;}else{H2S_CONC = (H2S_CONC-123) * 100 / (4096-123); //读取H2S浓度信息}SGP30_Write(0x20,0x08);sgp30_dat = SGP30_Read();//读取SGP30的值CO2_CONC = (sgp30_dat & 0xffff0000) >> 16; //读取CO2浓度信息
}void DispNormal(void) //显示
{static uint8_t cnt = 0;LCD_DispStr(0, 0, dis);LCD_DispOneChar(12, 0, 0xdf);LCD_DispOneChar(13, 0, 'C');//定时切换界面cnt++;if (cnt < 10){sprintf(dis, "CO2:%5dppm   ", CO2_CONC);LCD_DispStr(0, 1, dis);}else if (cnt < 20){sprintf(dis, "CH4:%2d%% H2S:%2d%%", CH4_CONC, H2S_CONC);LCD_DispStr(0, 1, dis);}else{cnt = 0;}
}/************************* 显示湿度阈值设定 *************************/
void DispSetHm(u8 setIndex)
{LCD_DispStr(0, 0, "  Set Humidity  ");sprintf(dis, "   H:%2d%% L:%2d%%  ", hmMax, hmMin);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(6, 1, 1); break;case 2: LCD_SetCursor(12, 1, 1); break;default:;}
}/************************* 显示温度阈值设定 *************************/
void DispSetTemp(u8 setIndex)
{LCD_DispStr(0, 0, "Set Temperature ");sprintf(dis, "   H:%3d L:%3d  ", tempMax, tempMin);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(7, 1, 1); break;case 2: LCD_SetCursor(13, 1, 1); break;default:;}
}/************************* 显示CO2浓度阈值设定 *************************/
void DispSetCO2(u8 setIndex)
{LCD_DispStr(0, 0, "  Set CO2 Limit ");sprintf(dis, "  Max:%5dppm ", CO2_CONC_Max);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(10, 1, 1); break;default:;}
}

实物演示视频:
https://www.bilibili.com/video/BV1vS4y1z73k/

基于STM32单片机的天然气甲烷硫化氢气体检测仪原理图PCB相关推荐

  1. 基于51单片机锂电池电压电量检测(原理图+PCB+程序)

    资料编号:198  下面是该资料仿真演示视频: 198-基于51单片机锂电池电压电量检测(原理图+PCB+程序+全套资料) 功能介绍: 采用51系列自带AD的单片机stc12c5a60s2型号单片机( ...

  2. 基于STM32F103单片机的指南针电子罗盘方位显示原理图PCB程序设计

    硬件电路的设计 (末尾附文件) 本系统由STM32F103C8T6单片机.LCD1602液晶显示.GY-271模块及电压组成. 1.上电先进行数据校准,刚上电,液晶没有出现显示的情况下:以传感器为中心 ...

  3. 基于STM32F103单片机智能火灾烟雾检测报警器 原理图PCB程序设计

    硬件电路的设计 (末尾附文件) 本系统由STM32F103C8T6单片机核心板.烟雾传感器.LCD1602液晶显示.蜂鸣器报警.按键控制及电源组成. 1.通过传感器检测传感器实际值,并将传感器实际值显 ...

  4. 基于51单片机的篮球计时计分器仿真原理图PCB方案设计

    总体方案设计 (末尾附文件) 2.1设计思路 以STC89C52单片机为核心元件,利用独立式键盘控制,使LCD1602实时记录A.B两队的分数.独立式键盘由K1.K2.K3.K4.K5.K6.K7.K ...

  5. 基于51单片机的音乐盒设计proteus仿真原理图PCB

    功能: 0.本系统采用单片机STC89C52作为系统的主控芯片 1.采用LCD1602液晶显示当前时间/播放曲目信息 2.按键设置时间,切换/暂停曲目 3.内置8首歌曲,本设计采用了优质的外放喇叭,声 ...

  6. 基于51单片机的出租车计价器proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶显示有四个状态 a) 时间显示 b) 时间设置 c) 计价器显示 d) 计价器设置 2.按键切换四个不同显示状态 3.默认为时间 ...

  7. STM32模拟电磁炮设计_STM32F103ZET6(程序+原理图+PCB+论文报告)

    本设计: 基于STM32模拟电磁炮设计_STM32F103ZET6(程序+原理图+PCB+论文报告) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0029 ...

  8. 9、★♥★基于STM32单片机的颜色检测仪设计♥☆

    9.★♥★基于STM32单片机的颜色检测仪设计♥☆ 文章目录 9.★♥★基于STM32单片机的颜色检测仪设计♥☆ 引言 1.系统概述 1.1.设计任务 1.2.设计要求 2.方案设计与论证 2.1.芯 ...

  9. 基于STM32单片机的大气压强检测仪(Proteus仿真+程序)

    编号:15 基于STM32单片机的大气压强检测仪 功能描述: 本设计由STM32单片机+BMP180大气压强检测模块+1602液晶显示模块组成. 1.主控制器是STM32单片机 2.利用BMP180传 ...

最新文章

  1. BEA Workshop Studio有什么用?
  2. 汇编中断程序编写步骤
  3. 设计模式——设计模式之禅day1
  4. ng-template和ngTemplateOutlet
  5. SolrCloud 分布式集群安装部署(solr4.8.1 + zookeeper +tomcat)
  6. 论文浅尝 | 一种嵌入效率极高的 node embedding 方式
  7. 并查集算法c语言版,并查集及其C程序实现.doc
  8. 软件工程生命周期模型_软件生命周期模型比较| 软件工程
  9. github atom_虚幻竞技场开放,GitHub发布了开源的Atom编辑器,等等
  10. Box2D——入门教程
  11. caffe.proto源码分析
  12. 精益求精,抑或得过且过
  13. 最新苹果CMSV10视频电影网站源码+自适应手机版
  14. 虚拟机下安装BackTrack5 (BT5)教程及BT5汉化
  15. 蜜桃为什么显示服务器不可用,蜜桃直播 服务器地址
  16. 八皇后问题解法大全及编写八皇后小游戏
  17. 好玩的Canvas射箭小游戏
  18. 入门互联网IT行业就业前景如何?
  19. 安卓studio 添加后台bgm音乐的几种方法
  20. http://jingyan.baidu.com/article/d169e186b38c37436611d8fa.html

热门文章

  1. C#winform TreeView编程
  2. 微信小程序点击--实现带字母索引的城市列表
  3. 【xlwings api语言参考】Range.AutoFill 方法
  4. 2016MDCC移动开发者大会参后感
  5. android 4.3 刷机,金立GN9005 Android 4.3-4.4 (S5.1 移动4G)一键救砖教程,轻松刷回官方系统...
  6. PNG warning: iCCP: known incorrect sRGB profile
  7. 怎样将HTML保存到d盘,怎么保存网页 保存整个网页的办法
  8. Direct3D 12 尝鲜(五): SDK 更新
  9. Linux查看进程运行的完整路径方法
  10. 2021-11-3 软件模拟IIC时序,并和EEPROM存储芯片24C02双向通信以及显示功能