STM32-雨滴传感器

article/2025/7/15 2:56:24

目录

0 说明:

 1 传感器介绍

 2 代码说明

   2.1 ADC初始化函数(adc.c)

  2.2 GPIO初始化函数

2.3 主函数


0 说明:

        本篇文章主要是说明怎么使用STM32单片机读取雨滴传感器采集到的数据,并且附带着STM32所需要的全部代码,所使用的雨滴传感器如下图所示。

附:使用单片机STM32f103系列

 1 传感器介绍

        该传感器具有数字开关量输出(0和1)和模拟量AO电压输出两种输出形式。     

        接上5V电源,电源灯亮,感应板上没有水滴时,DO输出为高电平,开关指示灯灭;滴上一滴水,DO输出为低电平,开关指示灯亮;刷掉上面的水滴后又恢复,输出高电平状态。AO模拟输出,可以连接单片机的AD口检测滴在上面的雨量大小。DO TTL数字输出也可以连接单片机检测是否有雨。

 2 代码说明

代码主要包括主函数(main.c)、ADC初始化函数(adc.c)、GPIO初始化函数

   2.1 ADC初始化函数(adc.c)

ADC的初始化都差不多,需要注意的是ADC的采集函数

这里采用ADC1通道的PA5进行采集AO的信息

#include "stm32f10x.h"    //包含需要的头文件
#include "delay.h"	      //包含需要的头文件/*函数名:初始化ADC */									   
void Adc_Init(void)
{    GPIO_InitTypeDef      GPIO_InitStructure;                             //定义一个设置GPIO的变量ADC_InitTypeDef       ADC_InitStructure;                              //定义一个设置ADC的变量RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );	              //使能GPIOA通道时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );	              //使能ADC1通道时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);                                      //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14MGPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;        //准备设置PA5GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		                   //模拟输入引脚GPIO_Init(GPIOA, &GPIO_InitStructure);                                 //设置PA5ADC_DeInit(ADC1);                                                      //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	                   //ADC工作模式:ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode = DISABLE;	                       //模数转换工作在单通道模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	                   //模数转换工作在单次转换模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	   //转换由软件而不是外部触发启动ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	               //ADC数据右对齐ADC_InitStructure.ADC_NbrOfChannel = 1;	                               //顺序进行规则转换的ADC通道的数目ADC_Init(ADC1, &ADC_InitStructure);                                    //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   ADC_Cmd(ADC1, ENABLE);	                                               //使能指定的ADC1	ADC_ResetCalibration(ADC1);	                                           //使能复位校准  	 while(ADC_GetResetCalibrationStatus(ADC1));                     	   //等待复位校准结束	ADC_StartCalibration(ADC1);	                                           //开启AD校准while(ADC_GetCalibrationStatus(ADC1));	                               //等待校准结束
}/*-------------------------------------------------*/
/*函数名:获得ADC结果                              */
/*参  数:ch: 通道数                               */
/*-------------------------------------------------*/	
int Get_Adc(int ch)   
{	ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );	//ADC1,ADC通道,采样时间为239.5周期	  			    ADC_SoftwareStartConvCmd(ADC1, ENABLE);		                        //使能指定的ADC1的软件转换启动功能	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));                     //等待转换结束return ADC_GetConversionValue(ADC1);	                            //返回最近一次ADC1规则组的转换结果
}
/*-------------------------------------------------*/
/*函数名:平均多次ADC结果,提高精度                */
/*参  数:channel: 通道数                               */
/*参  数:count: 平均次数                          */
/*-------------------------------------------------*/	
int Get_Adc_Average(int channel,int count)
{int sum_val=0;char t;for(t=0;t<count;t++)             //循环读取times次{sum_val+=Get_Adc(channel);       //计算总值Delay_Ms(5);                 //延时}return sum_val/count;           //返回平均值
} 

  2.2 GPIO初始化函数

本个例程采用的是PA0读取DO的状态,使用#define宏定义

        1. gpio.h

#ifndef __GPIO_H
#define __GPIO_H #define gpio_readA  GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)  //读取GPIOA的P0口电平(0/1)void Gpio_Init(void);         //延时初始化函数
int Gpio_read(void);        //读取A0口#endif

2. gpio.c

#include "stm32f10x.h"
#include "delay.h"
#include "gpio.h"
#include "usart1.h"void Gpio_Init(void)
{    	 GPIO_InitTypeDef GPIO_InitStructure;                     //定义一个设置GPIO的变量RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);   //使能GPIOA端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;       //设置PA0/1
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;   		   //下拉输入,默认状态是低电平
//	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;   		   //上拉输入,默认状态是高电平 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    //浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);            		 //设置PA}int Gpio_read(void)
{if(gpio_readC == 1){ Delay_Ms(100);return 1;}return 0;
}

2.3 主函数


#include "stm32f10x.h"  //包含需要的头文件
#include "main.h"       //包含需要的头文件
#include "delay.h"      //包含需要的头文件
#include "usart1.h"     //包含需要的头文件
#include "adc.h"        //包含需要的头文件
#include "gpio.h"       //包含需要的头文件int main(void) 
{float raindata;         //接受雨滴数据Delay_Init();           //延时功能初始化              Usart1_Init(9600);      //串口1功能初始化,波特率9600Gpio_Init();            // PA0,读取数字数据Adc_Init();             //ADC初始化while(1)                //主循环{		u1_printf("DO:%d\r\n",Gpio_read());if(Gpio_read()){u1_printf("没有雨水出现!\r\n");}else{u1_printf("有雨水出现!\r\n");}raindata = (float)(Get_Adc_Average(5,20))*(3.3/4096);u1_printf("rain:%.2f\r\n",raindata);Delay_Ms(1000);                                                   //延时}
}

注意:

雨滴越多,电压越小。

传感器的输出电压和雨滴数量是成反比关系。即雨量越大,传感器输出的电压值越低。

读取不成功时:

靠考虑是否某些引脚已经被默认占用。(不一定)

也要考虑转化模块的问题。是不是有的可以调(调节灵敏度电位计)

转化模块坏掉了,换一个试试


http://chatgpt.dhexx.cn/article/H9EJACAj.shtml

相关文章

传感器系列之4.6雨滴传感器

4.6 雨滴传感器实验 一、实验目的了解雨滴传感器SSMY-002的原理与应用掌握滴传感器SSMY-002的编程与操作方法理解微处理器与滴传感器SSMY-002之间的通讯二、实验材料具有USB 串口通讯的PC 机1 台ADS1.2 集成开发软件1 套J-Link-ARM 仿真器及软件1 套NXP LPC2378 实验节点板1 个…

常用传感器讲解九--雨滴传感器

常用传感器讲解九–雨滴传感器 具体讲解 雨滴传感器基本上是一块板&#xff0c;上面以线形形式涂覆镍。它基于抵抗原理。雨水传感器模块允许通过模拟输出引脚测量湿度&#xff0c;当湿度阈值超过时&#xff0c;它可以提供数字输出。 该模块基于LM393运算放大器。它包括电子模块…

sqlmap工具基本使用(检测sql注入)

sqlmap的用户手册&#xff1a; sqlmap是python2进行运行的&#xff0c;如果要直接使用&#xff0c;需要把sqlmap设置到环境变量中&#xff1a; sqlmap主要用于sql注入方面的异常检测 Mysql数据库 1、先检测是否可以注入,先判断是否可以正常注入&#xff1a; sqlmap -u url…

sql 注入 预防_SQL注入:检测和预防

sql 注入 预防 摘要 (Summary) With an understanding of what SQL injection is and why it is important to an organization, we can shift into a discussion of how to prevent it. We ultimately want systems where SQL injection is impossible or very difficult to p…

sql注入检测工具之sqlmap

一、sqlmap可检测: 一、判断被测url的参数是否存在注入点 二、获取数据库系统的所有数据库名称(暴库) 三、获取Web应用当前所连接的数据库 四、获取Web应用当前所操作的DBMS用户 五、列出数据库中的所有用户 六、列出数据库中所有账户-对应的密码哈希 七、列出指定数据库中的所…

sql注入漏洞检测攻略

sql注入漏洞检测攻略 一、注入分类1.可回显注入2.不可回显注入3.二次注入 二、如何判断1.基于报错的检验2.通过布尔的检验3.通过连接符 三、绕过1.过滤关键字2.过滤空格3.过滤单引号 四、注入方式举例1.常规手工注入2.SQL盲注注入——布尔型3.sqlmap注入4.宽字节注入5.sqlmap跑…

渗透测试-SQL注入检测

什么是SQL注入&#xff1f;来看一下下面的案例场景&#xff0c;这是正常情况下的登陆场景&#xff1a; 而当我们使用 用户名‘&#xff1a;– 的时候&#xff0c;密码随便输入也可以登陆成功&#xff01; 这时候对比两条sql就能发现&#xff0c;其实用户通过在用户名写入的sq…

阿里安全SQL注入检测 前五名队伍分享

文章目录 1. 第一名 Waterdrop1.1 团队介绍1.2 算法方案解析1.2.1 样本分析1.2.2 问题求解1.2.3 数据处理1.2.4 监督学习与自训练1.2.5 模型结构2. 第二名 StanTheMan2.1 团队介绍2.2 算法方案解析2.2.1 赛题介绍2.2.2 赛题理解2.2.3 解题思路2.2.4 S1 数据解码

SQL注入与检测

1.应用场景 主要用于安全攻防, 帮助更加深入理解SQL注入的原理/操作/安全防护. 2.学习/参考 前言 正常的 SQL 调用可以帮我们从数据库中获取想要的数据&#xff0c;然而我们构建的 Web 应用是个应用程序&#xff0c;本身也可能存在安全漏洞&#xff0c;如果不加以注意&#x…

sqlmap-sql注入检测

SqlMap&#xff08;防sql注入&#xff09;使用手册 下载地址&#xff1a; Download and update sqlmapproject/sqlmap Wiki GitHub 下载后无须安装 依赖&#xff1a; 需要有python 2.6, 2.7 or 3.x的 使用: 在sqlmap的目录下 &#xff0c;使用 python sqlmap.py -u ht…

使用sqlmap检测sql注入漏洞

一、 sql注入概述并安装sqlmap漏洞查看工具 1、 sql注入概述 所谓SQL注入&#xff0c;就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串&#xff0c;最终达到欺骗服务器执行恶意的SQL命令。 它是利用现有应用程序&#xff0c;可以通过在Web表单中输入&…

sql注入在线检测(sqlmapapi)

之前一搞渗透的同事问我&#xff0c;sqlmapapi.py是干啥的&#xff0c;我猜很多人都玩过sqlmap&#xff0c;但玩过sqlmapapi的应该比较少&#xff0c;今天就和大家一起看看如何使用以及一些美的地方。 说白了&#xff0c;sqlmapapi.py就是提供了一个检查sql注入的接口&#xf…

SQLMap sql注入检测工具使用

摘要1&#xff1a;https://www.freebuf.com/sectool/164608.html 摘要2&#xff1a;https://blog.csdn.net/qq_33530840/article/details/82144515 sqlmap是一个开源的渗透测试工具&#xff0c;可以用来进行自动化检测&#xff0c;利用SQL注入漏洞&#xff0c;获取数据库服务器…

Python 开发 利用SQLmap API接口进行批量的SQL注入检测.(SRC挖掘)

目录&#xff1a; SQL注入检测步骤&#xff1a; &#xff08;1&#xff09;创建新任务记录任务ID. &#xff08;2&#xff09;设置任务ID的配置信息.(扫描信息) &#xff08;3&#xff09;启动对应ID的扫描任务. &#xff08;4&#xff09;获取对应ID的扫描状态. &#x…

使用sqlmap进行SQL注入检测

最近公司项目被扫描出有SQL注入的漏洞,通过百度之后,决定使用sqlmap进行SQL注入的检测。这里仅仅是记录一下注入检测的步骤。 检测前准备 sqlmap是一个python编写的工具,因此我们首先要进行python环境的搭建,然后再从sqlmap官网下载最新版本。 检测步骤 查看需要检测的注入…

安全测试之sql注入

目录 1. 概述1.1 web安全渗透测试分类web数据库安全&#xff08;sql注入漏洞&#xff09;web应用服务器安全&#xff08;文件上传漏洞&#xff0c;文件包含漏洞&#xff09;web客户端安全&#xff08;XSS跨站攻击&#xff09; 1.2 sql注入原理1.3 sql注入危害1.4 sql注入实现方…

渗透测试之sql注入

原文地址 什么是SQL注入&#xff1f; SQL 注入&#xff08;SQL Injection&#xff09;是发生在 Web 程序中数据库层的安全漏洞&#xff0c;是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理&#xff0c;导致攻击者可以在 Web 应用程序中事…

如何快乐地检测SQL注入

这估计大家也都发现了&#xff0c;测试SQL注入这种漏洞啊&#xff0c;又有WAF页面又没有明显的报错的情况下, 测试起来就是一个字&#xff0c;烦。 有waf&#xff1a; 我 and 11, 啪&#xff0c;它拦了。 我 order by, 啪&#xff0c;它拦了。 我 sleep(5), 啪&#xff0c;…

SQL注入(一)之原理与检测

一 SQL注入攻击原理 01 注射式攻击的原理 注入产生的原因是接受相关参数未经处理直接带入数据库查询操作;注入攻击属于服务端攻击&#xff0c;他与操作系统、数据库类型、脚本语言类型无关总之一句话: 注入产生的原因是接受相关参数未经处理直接带入数据库查询操作。02 sql注入…

25显函数求导数

1、显函数求导数