[其他ST产品] STM32F103RC 2路ADC 采集显示,水位传感器、MQ2

[复制链接]
810|14
 楼主| 初级工程渣 发表于 2023-6-29 12:46 | 显示全部楼层 |阅读模式
自己做小项目的时候需要测量水位和MQ2空气质量,使用的是DMA配合ADC进行采集,虽然我只是2路采集,但是可以在这个基础之上进行修改进行多路采集,水位传感器和MQ2其本质还是ADC模数转换,最后附上我自己的工程文件,有需要自己下载。
1、水位传感器和MQ2简介
1.1、水位传感器:

84973649d0c7e6477c.png

 Water Sensor水位传感器是一款简单易用、性价比较高的水位/水滴识别检测传感器,其是通过具有一系列的暴露的平行导线线迹测量其水滴/水量大小从而判断水位。轻松完成水量到模拟信号的转换,,达到水位报警的功效。


工作电压:DC3-5V
工作电流:小于20mA
传感器类型:模拟
检测面积:40mm x 16mm
制作工艺:FR4双面喷锡
工作温度:10℃-30℃
工作湿度:10%-90%无凝结
产品重量:3.5g
产品尺寸:62mm x 20mm x 8mm



 楼主| 初级工程渣 发表于 2023-6-29 12:50 | 显示全部楼层
MQ2
64547649d0d6cd7bb7.png
MQ2在网上的介绍还是比较多的,我就不再多说了,附上一个链接有需要的自己去看看https://blog.csdn.net/qq_41422043/article/details/89138213。
关于MQ2的电压转换请看:https://blog.csdn.net/qq_43313535/article/details/106389539
 楼主| 初级工程渣 发表于 2023-6-29 12:51 | 显示全部楼层
使用代码
初始化MDA,代码里面有详细的注释,
10114649d0dcc7ea82.png
 楼主| 初级工程渣 发表于 2023-6-29 12:52 | 显示全部楼层
初始化PA0、PA1为模拟输入引脚,
30224649d0e1e4da5c.png
 楼主| 初级工程渣 发表于 2023-6-29 12:53 | 显示全部楼层
主函数:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "lcd.h"
  6. #include "adc.h"
  7. #include "mq2.h"

  8. //ADC实现ADC1通道0-1
  9. extern __IO uint16_t  ADC_ConvertedValue[2];
  10.           
  11. int main(void)
  12. {
  13.         u8 i;
  14.         float temp1,temp2;         
  15.         delay_init();                     //延时函数初始化          
  16.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  17.         uart_init(115200);                 //串口初始化为115200
  18.         LED_Init();                             //LED端口初始化
  19.         LCD_Init();                                
  20.         Adc_Init();                                  //ADC初始化
  21.          
  22.         POINT_COLOR=RED;//设置字体为红色
  23.         LCD_ShowString(44,50,200,16,16,"Mini STM32");       
  24.         LCD_ShowString(44,70,200,16,16,"ADC TEST");       
  25.         LCD_ShowString(44,90,200,16,16,"QingYeMuRong");
  26.         LCD_ShowString(44,110,200,16,16,"2020/7/19");       
  27.         //显示提示信息
  28.         POINT_COLOR=BLUE;//设置字体为蓝色
  29.         LCD_ShowString(44,130,200,16,16,"ADC_CH0_VAL:");             
  30.         LCD_ShowString(44,150,200,16,16,"ADC_CH0_VOL:");        //先在固定位置显示小数点   
  31.        
  32.        
  33.         LCD_ShowString(44,170,200,16,16,"ADC_CH1_VAL:");             
  34.         LCD_ShowString(44,190,200,16,16,"ADC_CH1_VOL:");        //先在固定位置显示小数点   

  35.         while(1)
  36.         {
  37.                 temp1 = Get_ADCValue_Water(); //水位获取
  38.                 temp1 = temp1 *40/4096;
  39.                 temp2 = MQ2_GetPPM(); //气体
  40.                
  41.                 printf("水位:%f mm , 气体:%f ppm\r\n",temp1,temp2);
  42.                
  43.                 LCD_ShowxNum(140,130,ADC_ConvertedValue[0],4,16,0);//显示ADCC采样后的原始值               
  44.                 i=temp1;
  45.                 LCD_ShowxNum(140,150,i,2,16,0);//显示电压值  
  46.                 temp1-=i;                           //把已经显示的整数部分去掉,留下小数部分,比如3.1111-3=0.1111
  47.                 temp1*=1000;                           //小数部分乘以1000,例如:0.1111就转换为111.1,相当于保留三位小数。
  48.                 LCD_ShowString(156,150,200,16,16,".");
  49.                 LCD_ShowxNum(164,150,temp1,3,16,0X80);//
  50.                 LCD_ShowString(180,150,200,16,16," mm");
  51.                
  52.                
  53.                
  54.                 LCD_ShowxNum(140,170,ADC_ConvertedValue[1],4,16,0);//显示ADCC采样后的原始值               
  55.                 i=temp2;
  56.                 LCD_ShowxNum(140,190,i,4,16,0);//显示ppm
  57.                 temp2-=i;                           //把已经显示的整数部分去掉,留下小数部分,比如3.1111-3=0.1111
  58.                 temp2*=1000;  
  59.     //LCD_ShowString(156,190,200,16,16,".");                //小数部分乘以1000,例如:0.1111就转换为111.1,相当于保留三位小数。
  60.                 //LCD_ShowxNum(172,190,temp2,3,16,0X80);//
  61.                 LCD_ShowString(180,190,200,16,16," ppm");
  62.                 LED0=!LED0;
  63.                 delay_ms(1000);       
  64.         }                                                                                            
  65. }       

 楼主| 初级工程渣 发表于 2023-6-29 12:54 | 显示全部楼层
效果图: 20067649d0e679dbb1.png 使用的是正点原子的MINI板,但是并不影响代码的移植。
工程文件下载https://download.csdn.net/download/weixin_45488643/12640623。
小小蚂蚁举千斤 发表于 2023-6-30 15:28 | 显示全部楼层
水位传感器是传输的模拟量数据?测量范围是不是比较小
Undshing 发表于 2023-7-1 22:46 | 显示全部楼层
这个时间长会不会氧化变得不准啊?
jonas222 发表于 2023-7-5 10:25 | 显示全部楼层
ADC工作在什么模式,用什么触发,采样率是多少
adolphcocker 发表于 2023-7-5 12:21 | 显示全部楼层
使用dma 为什么只显示一个通道的值
mattlincoln 发表于 2023-7-5 12:28 | 显示全部楼层
如何实现多通道AD采样               
jtracy3 发表于 2023-7-5 13:29 | 显示全部楼层
两路数据相同怎么解决              
AloneKaven 发表于 2023-7-5 18:20 | 显示全部楼层
如果水滴达不到两条导线宽度可以测量吗?
童雨竹 发表于 2023-12-30 08:18 | 显示全部楼层

如果防护与热设计欠佳
Wordsworth 发表于 2023-12-30 09:21 | 显示全部楼层

由于共模电流的同向性,会在线圈内产生同向的磁场而增大线圈的感抗
Clyde011 发表于 2023-12-30 10:24 | 显示全部楼层

在板的边缘上照常制作整个电镀通孔。
公羊子丹 发表于 2023-12-30 11:17 | 显示全部楼层

缩合型灌封硅胶由于固化过程有体积收缩一般不使用在模块电源的灌封中
万图 发表于 2023-12-30 12:20 | 显示全部楼层

在交流电频率一定情况下,电感量越大,其对交流电阻碍能力越大
Uriah 发表于 2023-12-30 13:23 | 显示全部楼层

然后焊接到更大的PCB上
帛灿灿 发表于 2023-12-30 15:19 | 显示全部楼层

电路的结构类似于全桥式,只是把其中的两只开关管(T3、T4)换成了两只等值大电容C1、C2。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

821

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部