STM32学习记录——烟雾传感器的使用

这篇具有很好参考价值的文章主要介绍了STM32学习记录——烟雾传感器的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

  • 前言
  • 一、学习目的
  • 二、模块介绍
  • 三、代码记录
  • 总结

前言

       这次记录一下烟雾传感器的学习,由于烟雾传感器的资料比较杂,算法比较多,对我来说也比较难,所以我的代码中算法部分是不太具有参考价值,但是也可以做到随烟雾浓度的变化数值呈线性相关,以后再记录完善。


一、学习目的

       我的学习目的是通过STM32的ADC功能,学会使用烟雾传感器检测气体的浓度,并用串口助手将气体浓度的数值实时打印出来。

二、模块介绍

       我使用是MQ-2烟雾传感器模块,它属于二氧化锡半导体气敏材料,当它与烟雾接触时,如果晶粒间界处的势垒收到烟雾的调至面变化,就会引起表面导电率的变化。且当烟雾浓度增大时,导电率增大,电阻变小,电压增大。所以就可以用电压的变化表示烟雾的浓度。

STM32学习记录——烟雾传感器的使用

STM32学习记录——烟雾传感器的使用

        MQ-2的引脚也和大部分传感器一样是四个(VCC,GND,AO,DO),不一样的是,我这次想通过ADC功能获取电压值,并表示为气体浓度,而不是仅仅通过检测是否达到阈值后来改变某一个IO口的电平(例如之前记录的光敏传感器声音传感器,都是通过光照/声音达到一个阈值后,改变某一个IO的电平,再通过读取函数读取这个IO口的电平,进而判断是光明黑暗/有声无声)。所以烟雾传感器给我的感觉是要远复杂于一般传感器的。

要注意的是,烟雾传感器由于内部有电阻丝作用,要先接通电源预热20秒,测得结果才会稳定。烟雾传感器发热属于正常现象,但是如果烫手就不正常了哈,那就建议立刻停止实验。

接线方面:由于要实时获取电压,所以要使用的是AO引脚(检测模拟信号的变化)

VCC--5V

GND--GND

AO--PA0(PA0具有ADC功能,实时输出MQ-2的电压信号)

三、代码记录

mq.h

#ifndef __MQ2_H
#define __MQ2_H
#include "stm32f10x.h"


void ADC_Pin_Init(void);
u16 ADC_Trans(void);

#endif

 mq.c

#include "mq2.h"
#include "delay.h"
#include "sys.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_adc.h"
 
void ADC_Pin_Init(void)        //初始化PA0口作为ADC检测端,并且初始化ADC通道1
{
	GPIO_InitTypeDef GPIO_InitStruct;
	ADC_InitTypeDef ADC_InitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;  //多次连续变换
	ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;
	ADC_InitStruct.ADC_NbrOfChannel = 1;
	ADC_InitStruct.ADC_ScanConvMode = DISABLE;
	ADC_Init(ADC1,&ADC_InitStruct);
	
	ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_239Cycles5);
	
	ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
	
	ADC_Cmd(ADC1,ENABLE);
}

u16 ADC_Trans(void)       //数据处理,求电压值的平均数
{
	u16 adc_value = 0;
	u8 i = 0;
	
	for(i = 0; i < 50; i++)
	{ 
		ADC_SoftwareStartConvCmd(ADC1,ENABLE);	
		adc_value = adc_value + ADC_GetConversionValue(ADC1);
	}
	
	return adc_value / 50;
}

       mq.c文件将ADC和烟雾传感器写在了一起,主要就是初始化PA0口ADC的通道1,和一个数据处理函数。

要注意的是,初始化ADC1时,一定要将ADC_InitStruct.ADC_ContinuousConvMode设置为ENABLE!!即设置为多次连续变换模式,否则串口将只输出第一次的值。

【数据处理时,本来需要通过while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) != SET)来检测转换是否结束,但我的代码写完后会始终卡死在这个循环里。这也是很遗憾的一个点,如果大家有什么好的方法可以告诉我一下。】

main.c

#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "mq2.h"
 

int main(void)
{
	u16 ad = 0;
	
	delay_init();
	uart_init(115200);
	printf("初始化完成\r\n");
	ADC_Pin_Init();
	while(1)
	{
		ad = ADC_Trans();
	//	printf("电压为:%f\r\n",3.3/4095*ad);
		printf("烟雾浓度为:%.2f\r\n",ad * 99 / 4096.0);
		delay_ms(1000);
	}
}

串口通信的代码就不作记录了,代码烧录后,打开串口助手就可以看到结果了。

STM32学习记录——烟雾传感器的使用


 总结

       代码虽然看上去简单,那其实也是因为我的算法比较拉跨,我也看了很多大佬的算法,确实比较高级,但是由于有的代码并不完整,有的用的是STM32F4系列的芯片,我始终未能找到一个我能掌握的高级算法,以后有了进展再另作记录。文章来源地址https://www.toymoban.com/news/detail-486028.html

到了这里,关于STM32学习记录——烟雾传感器的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MQ-2烟雾传感器模块功能实现(STM32)

            MQ-2型烟雾传感器属于二氧化锡半导体气敏材料,属于表面离子式N型半导体。当处于200~300摄氏度时,二氧化锡吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从而使其电阻值增加。当与烟雾接触时,如果晶粒间界处的势垒收到烟雾的调至而变

    2023年04月09日
    浏览(19)
  • STM32—ADC详解入门(ADC读取烟雾传感器的值)

    目录 一、ADC是什么 二、ADC的性能指标 三、ADC特性 四、ADC通道 五、ADC转换顺序 六、ADC触发方式 七、ADC转化时间 八、ADC转化模式 九、实验(使用ADC读取烟雾传感器的值) 1、配置 2、代码         ADC是Analog-to-DigitalConverter的缩写。指模/数转换器或者模拟/数字转换器。是指

    2024年02月11日
    浏览(13)
  • STM32学习记录——蓝牙发送数据(手机显示传感器数据)

    文章目录 前言 一、学习目的 二、代码记录         将数据通过蓝牙发送到手机上,是学生学习单片机的必备技能之一,它可以将手机作为简单的上位机,从而使数据直观地展现出来。        蓝牙的初始化、蓝牙接受数据以及蓝牙简单应用的介绍和代码记录,可以看一看下

    2024年02月07日
    浏览(15)
  • 通过STM32内部ADC将烟雾传感器发送的信号值显示在OLED上

    一.CubeMX配置 首先我们在CubeMX配置ADC1, 设置一个定时器TIM2定时1s采样一次以及刷新一次OLED, 打开IIC用于驱动OLED显示屏。 二.程序 在Keil5中添加好oled的显示库,以及用来显示的函数、初始化函数、清屏函数等。在主程序中初始化oled,并将其清屏。 在定时器中断回调函数中对A

    2024年02月15日
    浏览(14)
  • 基于STM32和MQ-2传感器的物联网友好型烟雾报警系统

    基于STM32和MQ-2传感器的物联网友好型烟雾报警系统是一种用于检测室内烟雾并及时报警的智能设备。 本系统利用STM32微控制器作为主控制单元,通过MQ-2传感器实时监测室内烟雾浓度,并通过无线通信模块将数据传输到云端服务器,实现远程监控和报警功能。 以下是该系统的

    2024年01月15日
    浏览(30)
  • MQ2烟雾传感器 - STM32F103C8T6-HAL库

    ADC.c 文件 ADC.h文件 main函数中的调用

    2024年04月26日
    浏览(15)
  • STM32外设芯片驱动学习记录 —— (一) BH1750光照传感器驱动开发

    一、芯片介绍 二、Datasheet解读 1.硬件说明 2.寄存器说明 3.通信过程 三、驱动代码编写 1.软件I2C驱动 2. BH1750芯片驱动函数 总结             BH1750是16位数字输出型,环境光强度传感器集成电路,使用I2C接口通信,工作电压:VCC(2.4~3.6V),I2C电平(1.65~VCC),用于各类消费类LCD屏

    2024年02月02日
    浏览(59)
  • HX711压力传感器学习(STM32)

    目录 原理图:​ 引脚介绍: HX711介绍工作原理: 程序讲解: 整套工程: VCC和GND引脚分别为HX711芯片的电源输入端口。 VCC引脚是连接到5V或3.3V的正电源,GND引脚是连接到地的负电源。 DOUT是HX711芯片的数据输出端口,它输出经过A/D转换处理后的24位数据。 SCK是HX711芯片的时钟输

    2024年02月05日
    浏览(28)
  • HX711压力传感器学习一(STM32)

    目录 原理图:​ 引脚介绍: HX711介绍工作原理: 程序讲解: 整套工程: VCC和GND引脚分别为HX711芯片的电源输入端口。 VCC引脚是连接到5V或3.3V的正电源,GND引脚是连接到地的负电源。 DOUT是HX711芯片的数据输出端口,它输出经过A/D转换处理后的24位数据。 SCK是HX711芯片的时钟输

    2024年02月16日
    浏览(19)
  • STM32 手势识别传感器模块(PAJ7620)学习

    目录 模块介绍: 基本部分: 引脚配置: 工作原理: 展示部分: 代码部分展示(在正点的基础上加了一个读手势去控制舵机): 视频展示: 基本部分: 手势模块搭载的芯片是PAJ7620,无论是正点原子的还是别的手势模块的底层是一致的,甚至代码也是通用的。 芯片内部集成了

    2024年02月07日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包