015【GD32F470】雨滴感应模块 雨水传感器下雨感知模块天气模块 水位显示模块水滴

2.17 雨滴传感器

雨滴传感器主要是用来检测是否下雨及雨量的大小。主要用于汽车智能灯光(AFS)系统、汽车自动雨刷系统、智能车窗系统。
该雨滴传感器基本上是一块板,上面以线形形式涂覆镍。雨滴传感器常见的工作原理是通过检测水滴的导电性来判断是否下雨。它是利用两个电极之间的电导性变化来测量水滴的存在。这两个电极之间会有一个空气间隙,正常状态下是断路状态。当水滴接触到电极上时,水滴的导电性会导致电流通过水滴形成电流回路,从而改变电极之间的电阻值。也就改变了其两端的压降。

2.17.1 模块来源

采购链接:

雨滴感应模块 雨水传感器下雨感知模块天气模块 水位显示模块水滴

资料下载链接:

【完整代码资料见:https://pan.quark.cn/s/252effe3513f

2.17.2 规格参数

工作电压:3.3V-5V
探测距离:1米
输出方式: DO接口为数字量输出
AO接口为模拟量输出
读取方式:ADC与数字量(0和1)
管脚数量:4 Pin(2.54mm间距排针)
探测距离:1米
输出方式: DO接口为数字量输出
AO接口为模拟量输出
读取方式:ADC与数字量(0和1)
管脚数量:4 Pin(2.54mm间距排针)

2.17.3 移植过程

我们的目标是在梁山派GD32F470上能够判断当前雨水采集板上是否有水的功能。首先要获取资料,查看数据手册应如何实现,再移植至我们的工程。

2.17.3.1 查看资料

该模块基于LM393运算放大器。它包括电子模块和“收集”雨滴的印刷电路板。当雨滴积聚在电路板上时,它们会形成并联电阻路径,该路径可通过运算放大器进行测量。

控制板上有两个指示灯,电源指示灯PWR-LED和输出信号指示灯DO-LED。电源指示灯在通电后常亮,没有雨的时候出信号指示灯不亮;雨滴上去,候出信号指示灯亮。雨滴板和控制板是分开的,方便将线引出,大面积的雨滴板,更有利于检测到雨水。
  控制板上有两个输出,数字输出DO,模拟输出AO。接上5V电源电源灯亮,感应板上没有水滴时,DO输出为高电平,滴上一滴水,DO输出为低电平,刷掉上面的水滴,又恢复到输出高电平状态,灵敏度可以通过蓝色的可变电阻调节。
  AO模拟输出,连接到单片机的的模拟输入口,通过比对模拟值转化为的数字值大小,可以检测滴在上面的雨量大小,雨水越大,电阻值越小,模拟值转化为的数字值越大。 不同的值对应是降雨量的多少毫米,则需要实体测量,雨滴板的放置方式不同结果都不同,这里不作研究。
其对应的原理图见图2.17.3.1-2,AO输出为雨滴传感器直接输出的电压,所以为模拟量;DO为经过LM393进行电压比较后,输出高低电平,所以为数字量。具体原理见光敏电阻光照传感器章节的2.3.3.1 查看资料。

在这里插入图片描述

因此DO引脚可以配置为GPIO的输入模式,AO引脚需要配置为ADC模拟输入模式。

2.17.3.2 引脚选择

想要使用ADC,需要确定使用的引脚是否有ADC外设功能。可以通过数据手册
在这里插入图片描述
在数据手册的第28页结尾,是关于GD32F450Zx系列芯片引脚的功能定义示意图。
在这里插入图片描述

当前只有AO引脚需要使用到ADC接口,所以DO引脚可以使用开发板上其他的GPIO。这里选择使用PC1的附加ADC功能。使用ADC0的第11道输入通道。
在这里插入图片描述

光照传感器立创·梁山派
VCC3V3
GNDGND
DOPF8
AOPC1

在这里插入图片描述

2.17.3.3 移植至工程

移植步骤中的导入.c和.h文件与上一节相同,只是将.c和.h文件更改为bsp_raindrop.c与bsp_raindrop.h。见2.2.3.3 移植至工程。这里不再过多讲述。移植完成后面修改相关代码。
在文件bsp_raindrop.c中,编写如下代码。

  /********************************************************************************
   * 测试硬件:立创·梁山派开发板GD32F470ZGT6    使用主频200Mhz    晶振25Mhz
   * 版 本 号: V1.0
   * 修改作者: LCKFB
   * 修改日期: 2023年04月06日
   * 功能介绍:      
   ******************************************************************************
   * 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源  
   * 开发板官网:www.lckfb.com   
   * 技术支持常驻论坛,任何技术问题欢迎随时交流学习  
   * 立创论坛:club.szlcsc.com   
   * 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
   * 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
   * 不靠卖板赚钱,以培养中国工程师为己任
 *********************************************************************************/
#include "bsp_raindrop.h"

/******************************************************************
 * 函 数 名 称:raindrop_gpio_config
 * 函 数 说 明:初始化雨滴传感器引脚
 * 函 数 形 参:无
 * 函 数 返 回:无
 * 作       者:LC
 * 备       注:无
******************************************************************/
void raindrop_gpio_config(void)
{
        //使能引脚时钟
    rcu_periph_clock_enable(BSP_RAINDROP_GPIO_RCU_AO);   
    rcu_periph_clock_enable(BSP_RAINDROP_GPIO_RCU_DO);   
    //使能ADC时钟
    rcu_periph_clock_enable(BSP_ADC_RCU);
    
    //配置ADC时钟
    adc_clock_config(ADC_ADCCK_PCLK2_DIV4);
        
        //配置A0引脚为模拟输入模式
    gpio_mode_set(BSP_RAINDROP_GPIO_PORT_AO, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, BSP_RAINDROP_GPIO_PIN_AO); 
        //配置D0引脚为输入模式
    gpio_mode_set(BSP_RAINDROP_GPIO_PORT_DO, GPIO_MODE_INPUT, GPIO_PUPD_NONE, BSP_RAINDROP_GPIO_PIN_DO); 
    
        //配置ADC为独立模式      
        adc_sync_mode_config(ADC_SYNC_MODE_INDEPENDENT);
                
        //使能扫描模式
        adc_special_function_config(BSP_ADC, ADC_SCAN_MODE, ENABLE);

        //数据右对齐     
        adc_data_alignment_config(BSP_ADC, ADC_DATAALIGN_RIGHT);
           
        //ADC0设置为12位分辨率               
        adc_resolution_config(BSP_ADC, ADC_RESOLUTION_12B);
        
        //ADC0设置为规则组  一共使用 1 个通道
        adc_channel_length_config(BSP_ADC,ADC_REGULAR_CHANNEL, 1);

        //ADC外部触发禁用, 即只能使用软件触发
        adc_external_trigger_config(BSP_ADC, ADC_REGULAR_CHANNEL, EXTERNAL_TRIGGER_DISABLE);

        //ADC0使能
        adc_enable(BSP_ADC);

        //开启ADC自校准
        adc_calibration_enable(BSP_ADC); 
}

/**********************************************************
 * 函 数 名 称:get_adc_value
 * 函 数 功 能:读取ADC值
 * 传 入 参 数:ADC_CHANNEL_x=要采集的通道
 * 函 数 返 回:测量到的值
 * 作       者:LC
 * 备       注:无
**********************************************************/
unsigned int get_adc_value(uint8_t  adc_channel_x)
{
    unsigned int adc_value = 0;
    //设置采集通道
    adc_regular_channel_config(BSP_ADC, 0, adc_channel_x, ADC_SAMPLETIME_15);
    //开始软件转换
    adc_software_trigger_enable(BSP_ADC, ADC_REGULAR_CHANNEL);
    //等待 ADC 采样完成 
    while ( adc_flag_get(BSP_ADC, ADC_FLAG_EOC) == RESET ) 
    {
        ;
    }
    //读取采样值
    adc_value = adc_regular_data_read(BSP_ADC);
    //返回采样值
    return adc_value;
}

/******************************************************************
 * 函 数 名 称:get_raindrop_percentage_value
 * 函 数 说 明:读取雨滴AO值,并且返回百分比
 * 函 数 形 参:无
 * 函 数 返 回:返回百分比
 * 作       者:LC
 * 备       注:无
******************************************************************/
unsigned int get_raindrop_percentage_value(void)
{
    int adc_max = 4095;
    int adc_new = 0;
    int Percentage_value = 0;
    
    adc_new = get_adc_value( BSP_RAINDROP_ADC_CHANNEL );
    
    Percentage_value = (1-((float)adc_new/adc_max)) * 100;
    return Percentage_value;
}

/******************************************************************
 * 函 数 名 称:get_raindrop_do_value
 * 函 数 说 明:读取雨滴DO值,返回0或者1
 * 函 数 形 参:无
 * 函 数 返 回:
 * 作       者:LC
 * 备       注:无
******************************************************************/
unsigned char get_raindrop_do_value(void)
{
    return gpio_input_bit_get(BSP_RAINDROP_GPIO_PORT_DO, BSP_RAINDROP_GPIO_PIN_DO);
}

在文件bsp_raindrop.h中,编写如下代码。

  /********************************************************************************
   * 测试硬件:立创·梁山派开发板GD32F470ZGT6    使用主频200Mhz    晶振25Mhz
   * 版 本 号: V1.0
   * 修改作者: LCKFB
   * 修改日期: 2023年04月06日
   * 功能介绍:      
   ******************************************************************************
   * 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源  
   * 开发板官网:www.lckfb.com   
   * 技术支持常驻论坛,任何技术问题欢迎随时交流学习  
   * 立创论坛:club.szlcsc.com   
   * 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
   * 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
   * 不靠卖板赚钱,以培养中国工程师为己任
 *********************************************************************************/
#ifndef _BSP_RAINDROP_H__
#define        _BSP_RAINDROP_H__

#include "gd32f4xx.h"



#define BSP_RAINDROP_GPIO_RCU_AO       RCU_GPIOC
#define BSP_RAINDROP_GPIO_PORT_AO      GPIOC
#define BSP_RAINDROP_GPIO_PIN_AO       GPIO_PIN_1

#define BSP_RAINDROP_GPIO_RCU_DO       RCU_GPIOF
#define BSP_RAINDROP_GPIO_PORT_DO      GPIOF
#define BSP_RAINDROP_GPIO_PIN_DO       GPIO_PIN_8

#define BSP_ADC_RCU                 RCU_ADC0
#define BSP_ADC                     ADC0
#define BSP_RAINDROP_ADC_CHANNEL    ADC_CHANNEL_11 



void raindrop_gpio_config(void);
unsigned int get_raindrop_percentage_value(void);
#endif

2.17.4 移植验证
在自己工程中的main主函数中,编写如下。

【完整代码资料见:https://pan.quark.cn/s/252effe3513f

移植现象:输出检测雨滴大小程度的百分比。(当滴一些水在裸露的铜皮上时,输出高于50%;当将水擦掉时,输出2%左右)在这里插入图片描述
移植成功示例:
【完整代码资料见:https://pan.quark.cn/s/252effe3513f

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值