当前位置:   article > 正文

25-基于stm32单片机MQ2烟雾检测报警蓝牙上传数据程序源码原理图元件清单_mq2源码

mq2源码

功能介绍:采用stm32单片机作为主控CPU,采用MQ2传感器采集烟雾浓度,采用OLED显示相关数据,采用HC-05蓝牙模块上传数据到手机APP,当检测到烟雾浓度超过上限值(在程序里面可以进行调节);蜂鸣器产生报警全部资料都经过实物验证,程序有中文注释,新手容易看懂,资料分享下载链接:设计资料合集,MQ-2型烟雾传感器属于二氧化锡半导体气敏材料,属于表面离子式N型半导体。处于200~300摄氏度时,二氧化锡吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从而使其电阻值增加。当与烟雾接触时,如果晶粒间界处的势垒收到烟雾的调至而变化,就会引起表面导电率的变化。利用这一点就可以获得这种烟雾存在的信息,烟雾的浓度越大,导电率越大,输出电阻越低,则输出的模拟信号就越大,

25-基于stm32单片机MQ2烟雾检测报警蓝牙上传数据(程序+原理图+元件清单全套资料)

  1. //程序部分展示,有中文注释,新手容易看懂
  2. void OLED_ColorTurn(u8 i)
  3. {
  4. if(i==0)
  5. {
  6. OLED_WR_Byte(0xA6,OLED_CMD);//正常显示
  7. }
  8. if(i==1)
  9. {
  10. OLED_WR_Byte(0xA7,OLED_CMD);//反色显示
  11. }
  12. }
  13. //屏幕旋转180
  14. void OLED_DisplayTurn(u8 i)
  15. {
  16. if(i==0)
  17. {
  18. OLED_WR_Byte(0xC8,OLED_CMD);//正常显示
  19. OLED_WR_Byte(0xA1,OLED_CMD);
  20. }
  21. if(i==1)
  22. {
  23. OLED_WR_Byte(0xC0,OLED_CMD);//反转显示
  24. OLED_WR_Byte(0xA0,OLED_CMD);
  25. }
  26. }
  27. //起始信号
  28. void I2C_Start(void)
  29. {
  30. OLED_SDIN_Set();
  31. OLED_SCLK_Set();
  32. OLED_SDIN_Clr();
  33. OLED_SCLK_Clr();
  34. }
  35. //结束信号
  36. void I2C_Stop(void)
  37. {
  38. OLED_SCLK_Set();
  39. OLED_SDIN_Clr();
  40. OLED_SDIN_Set();
  41. }
  42. //等待信号响应
  43. void I2C_WaitAck(void) //测数据信号的电平
  44. {
  45. OLED_SCLK_Set();
  46. OLED_SCLK_Clr();
  47. }
  48. //写入一个字节
  49. void Send_Byte(u8 dat)
  50. {
  51. u8 i;
  52. for(i=0;i<8;i++)
  53. {
  54. OLED_SCLK_Clr();//将时钟信号设置为低电平
  55. if(dat&0x80)//将dat的8位从最高位依次写入
  56. {
  57. OLED_SDIN_Set();
  58. }
  59. else
  60. {
  61. OLED_SDIN_Clr();
  62. }
  63. OLED_SCLK_Set();//将时钟信号设置为高电平
  64. OLED_SCLK_Clr();//将时钟信号设置为低电平
  65. dat<<=1;
  66. }
  67. }
  68. //发送一个字节
  69. //向SSD1306写入一个字节。
  70. //mode:数据/命令标志 0,表示命令;1,表示数据;
  71. void OLED_WR_Byte(u8 dat,u8 mode)
  72. {
  73. I2C_Start();
  74. Send_Byte(0x78);
  75. I2C_WaitAck();
  76. if(mode){Send_Byte(0x40);}
  77. else{Send_Byte(0x00);}
  78. I2C_WaitAck();
  79. Send_Byte(dat);
  80. I2C_WaitAck();
  81. I2C_Stop();
  82. }
  83. //开启OLED显示
  84. void OLED_DisPlay_On(void)
  85. {
  86. OLED_WR_Byte(0x8D,OLED_CMD);//电荷泵使能
  87. OLED_WR_Byte(0x14,OLED_CMD);//开启电荷泵
  88. OLED_WR_Byte(0xAF,OLED_CMD);//点亮屏幕
  89. }
  90. //关闭OLED显示
  91. void OLED_DisPlay_Off(void)
  92. {
  93. OLED_WR_Byte(0x8D,OLED_CMD);//电荷泵使能
  94. OLED_WR_Byte(0x10,OLED_CMD);//关闭电荷泵
  95. OLED_WR_Byte(0xAF,OLED_CMD);//关闭屏幕
  96. }

下面是原理图文件展示: 

stm32单片机最小系统讲解:
电源
电就是MCU要吃的饭,不吃饭,stm32芯片肯定不能工作。
stm32最小系统板需要5v和3.3v两种电压,一般可以直接通过USB提供5v电压,也可以用电源适配器提供5V电压。而3.3v电压可以通过稳压芯片如ASM1117-3.3v等,把5v电压降为3.3v输出。


USB接口,提供的5v电压经过ASM1117-3.3v后降为3v3,(10*10^4pF=0.1u)用于电源滤波,高频滤波用小电容,低频滤波用大电容。D3是一个led用以指示电源工况,其上的510R即510.0Ω用以限流,防止led灯烧坏。
USB接口,提供5v电压,同时它也是一个模拟串口,其D-和D+引脚与ch340相应引脚连接构成一个串口设备。
stm32吃的是3v3将其VDD和VSS引脚分别连接到3v3和GND,就解决了stm32的吃饭问题。

注意:VBAT是stm32芯片的备用3.3v电源输入端,当没有备用电源是也需要将VBAT接到VDD上去。
VDDA和VSSA是模拟电源输入口,用以给stm32芯片内部ADC,复位电路供电因此必须分别接到VDD和VSS上。

复位电路
人工作久了容易自闭、精神恍惚,这时需要睡一觉就以重新焕发活力。stm32工作久了也容易“精神恍惚”————程序跑飞,也需要复位。


stm32的NRST引脚是复位信号接收引脚与RESET相连,芯片低电平复位。如上图所示,当芯片刚上电时,电容充电导通,此时RESET=0,芯片复位;当按下复位按钮时,RESET接地,芯片复位。

晶振电路
晶振是芯片的心跳,每一次脉冲激励芯片执行一条指令,因此晶振的重要性不言而喻。


stm32的晶振电路,8M无源晶振,其中(1M)用于稳定晶振的脉冲波形,(20P)和(20P)一方面构成晶振起振的必要回路,另一方面匹配电容,同时还具有调节晶振电路频率的作用。

注意:OSC32IN是外部32.768K晶振输入口,可以直接接时钟信号,也可以不洁作IO用。OSCIN是外部系统时钟输入信号,可以接时钟信号,也可以不接做IO口用,此时stm32用芯片内部的RC电路起振产生时钟信号。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号