最近在做C8T6的烟雾模块,网上参考有点少,整理一下分享给大家。
STM32F103C8T6自带AD,我买了个MQ-2模块直接接线 烟雾传感器 | 单片机 | VCC | 3.3V | GND | GND | A0 | PB6(可以改) |
附上压缩包,自行下载吧
串口调试助手选择 115200-N-8-1
引脚可以改 smog.c void Smog_Init(void)选择自己需要的引脚即可
单片机源程序如下:
- #include "smog.h"
- #include "delay.h"
- #include "usart.h"
- #include "adc.h"
- //初始化烟雾传感器
- void Smog_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTF时钟
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //PA6 anolog输入
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- Adc2_Init();
- }
- //读取烟雾传感器的电压值
- u16 Smog_Get_Vol(void)
- {
- u32 temp_val=0;
- u8 t;
- for(t=0;t<SMOG_READ_TIMES;t++)
- {
- temp_val+=Get_Adc2(SMOG_ADC_CHX); //读取ADC值
- delay_ms(5);
- }
- temp_val/=SMOG_READ_TIMES;//得到平均值
- printf("Smog_ADC_Val:%d\r\n", temp_val);
- return (u16)temp_val;
- }
- //分析从烟雾传感器获取的电压值,通过公式计算出可燃气体的浓度值
- //设Rs为传感器的体电阻,其中气体浓度上升,将导致Rs下降。而Rs的下降则会导致,MQ-2的4脚、6脚对地输出的电压增大。
- //所以气体浓度增大,其输出的电压也会增大。因Rs在不同气体中有不同的浓度值,所以该函数仅作为参考.
- u16 Smog_Trans_Concentration(void)
- {
- u16 ulVal = 0;
- u16 temp_val = Smog_Get_Vol();
- u16 Rs;
- Rs = SMOG_PIN46_R*(4096.0/temp_val - 1);
- printf("Smog_Rs_Val:%d\r\n", Rs);
-
- ulVal = Rs;//这里填写公式根据Rs计算气体浓度
-
- return ulVal;
- }
复制代码
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "smog.h"
-
- int main(void)
- {
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- USART1_init(); //串口初始化为115200
-
- Smog_Init();
- while(1)
- {
- Smog_Trans_Concentration();
- delay_ms(300);
- }
- }
复制代码
所有资料51hei提供下载:
smog成功.7z
(178.58 KB, 下载次数: 400)
|