完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
自己做小项目的时候需要测量水位和MQ2空气质量,使用的是DMA配合ADC进行采集,虽然我只是2路采集,但是可以在这个基础之上进行修改进行多路采集,水位传感器和MQ2其本质还是ADC模数转换,最后附上我自己的工程文件,有需要自己下载。
1、水位传感器和MQ2简介 1.1、水位传感器: Water Sensor水位传感器是一款简单易用、性价比较高的水位/水滴识别检测传感器,其是通过具有一系列的暴露的平行导线线迹测量其水滴/水量大小从而判断水位。轻松完成水量到模拟信号的转换,,达到水位报警的功效。 工作电压:DC3-5V 工作电流:小于20mA 传感器类型:模拟 检测面积:40mm x 16mm 制作工艺:FR4双面喷锡 工作温度:10℃-30℃ 工作湿度:10%-90%无凝结 产品重量:3.5g 产品尺寸:62mm x 20mm x 8mm 工作电压:DC3-5V 工作电流:小于20mA 传感器类型:模拟 检测面积:40mm x 16mm 制作工艺:FR4双面喷锡 工作温度:10℃-30℃ 工作湿度:10%-90%无凝结 产品重量:3.5g 产品尺寸:62mm x 20mm x 8mm 1.2、MQ2 MQ2在网上的介绍还是比较多的,我就不再多说了,附上一个链接有需要的自己去看看https://blog.csdn.net/qq_41422043/article/details/89138213。 关于MQ2的电压转换请看:https://blog.csdn.net/qq_43313535/article/details/106389539 2、使用代码 初始化MDA,代码里面有详细的注释, 初始化PA0、PA1为模拟输入引脚, 主函数: #include "led.h" #include "delay.h" #include "sys.h" #include "usart.h" #include "lcd.h" #include "adc.h" #include "mq2.h" //ADC实现ADC1通道0-1 extern __IO uint16_t ADC_ConvertedValue[2]; int main(void) { u8 i; float temp1,temp2; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为115200 LED_Init(); //LED端口初始化 LCD_Init(); Adc_Init(); //ADC初始化 POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(44,50,200,16,16,"Mini STM32"); LCD_ShowString(44,70,200,16,16,"ADC TEST"); LCD_ShowString(44,90,200,16,16,"QingYeMuRong"); LCD_ShowString(44,110,200,16,16,"2020/7/19"); //显示提示信息 POINT_COLOR=BLUE;//设置字体为蓝色 LCD_ShowString(44,130,200,16,16,"ADC_CH0_VAL:"); LCD_ShowString(44,150,200,16,16,"ADC_CH0_VOL:"); //先在固定位置显示小数点 LCD_ShowString(44,170,200,16,16,"ADC_CH1_VAL:"); LCD_ShowString(44,190,200,16,16,"ADC_CH1_VOL:"); //先在固定位置显示小数点 while(1) { temp1 = Get_ADCValue_Water(); //水位获取 temp1 = temp1 *40/4096; temp2 = MQ2_GetPPM(); //气体 printf("水位:%f mm , 气体:%f ppmrn",temp1,temp2); LCD_ShowxNum(140,130,ADC_ConvertedValue[0],4,16,0);//显示ADCC采样后的原始值 i=temp1; LCD_ShowxNum(140,150,i,2,16,0);//显示电压值 temp1-=i; //把已经显示的整数部分去掉,留下小数部分,比如3.1111-3=0.1111 temp1*=1000; //小数部分乘以1000,例如:0.1111就转换为111.1,相当于保留三位小数。 LCD_ShowString(156,150,200,16,16,"."); LCD_ShowxNum(164,150,temp1,3,16,0X80);// LCD_ShowString(180,150,200,16,16," mm"); LCD_ShowxNum(140,170,ADC_ConvertedValue[1],4,16,0);//显示ADCC采样后的原始值 i=temp2; LCD_ShowxNum(140,190,i,4,16,0);//显示ppm temp2-=i; //把已经显示的整数部分去掉,留下小数部分,比如3.1111-3=0.1111 temp2*=1000; //LCD_ShowString(156,190,200,16,16,"."); //小数部分乘以1000,例如:0.1111就转换为111.1,相当于保留三位小数。 //LCD_ShowxNum(172,190,temp2,3,16,0X80);// LCD_ShowString(180,190,200,16,16," ppm"); LED0=!LED0; delay_ms(1000); } } 效果图: 使用的是正点原子的MINI板,但是并不影响代码的移植。 工程文件下载https://download.csdn.net/download/weixin_45488643/12640623。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1907 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1675 浏览 1 评论
1169 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
768 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1728 浏览 2 评论
1970浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
804浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
252浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
623浏览 3评论
634浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-22 19:39 , Processed in 0.743505 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号