第3-4讲:雨滴传感器检测雨水
-
- 学习目的
- 了解雨滴传感器的功能。
- 掌握单片机编程读取雨滴传感器数字输出和模拟输出,从而判断有没有下雨。
- 雨滴传感器简介
雨滴传感器是一款用来检查是否下雨以及雨量大小的传感器模块,如下图所示。雨滴传感器包括雨滴感应板和控制模块,雨滴感应板传感器采用高品质的FR-04双面材料,面积超大(4.0×5.3cm),其表面采用镀镍处理,具有对抗氧化、高导电性、长寿命等优点。
图1:雨滴传感器
- 雨滴传感器参数
图2:雨滴传感器尺寸
雨滴传感器模块各个引脚功能如下表所示。
表1:雨滴传感器模块引脚描述
序号 | 针脚名称 | 功能描述 |
1 | VCC | 模块3.3V~5V供电正。 |
2 | GND | 模块供电负。 |
3 | DO | 数字量输出(高低电平)。 |
4 | AO | 模拟量输出。 |
- 雨滴传感器功能
接上电源后(3.3V~5V电源供电),电源指示灯点亮。感应板上没有水滴时,DO 输出为高电平,感应板上有雨水时,DO 输出为低电平,调节雨滴传感器控制板上的电位器可以调整检测的灵敏度。
雨滴传感器的AO 为模拟输出,单片机可以使用ADC采样AO输出的电压,从而判断雨量的大小。雨量越大,AO引脚输出的电压越低。
-
- 软件设计
- 雨滴传感器实验
- 软件设计
- 注:本节的实验是在“实验2-11-1:ADC采样电位器电压(查询方式)”的基础上修改,本节对应的实验源码是:“实验3-4-1:雨滴传感器检测雨水实验”。
-
-
- 实验内容
-
-
单片机实时读取雨滴传感器的数字输出引脚DO的状态,同时通过ADC采样雨滴传感器模拟输出引脚AO的电压值,并通过串口输出检测结果。
- 当雨滴传感器感应板没有检测到雨水时,DO引脚输出为高电平,AO引脚电压值为2.5V。
- 当雨滴传感器感应板检测到雨水时,DO引脚输出为低电平,AO引脚电压值为降低,雨水量越大,AO引脚输出电压越低。
-
-
- 代码编写
-
-
- 关于ADC应用相关的内容,读者可以参阅《第2-11讲:模数转换ADC》,本节我们关注的是雨滴传感器。
本节的代码比较简单,我们直接在“main.c”文件中编写相关的代码。
- 定义引脚
首先,定义连接雨滴传感器的引脚,本例中,我们用P7.6连接雨滴传感器的数字输出引脚(DO),P0.6(ADC14)连接雨滴传感器的模拟输出引脚(AO)。P0.6由ADC初始化代码配置,这里我们只需要定义P7.6就可以了。
代码清单:定义引脚
- sbit sensor_in = P7^6; //用于读取雨滴传感器数字输出引脚(DO)状态
- 监测雨滴传感器状态
P7.6配置为输入,程序中通过读取P7.6的电平判断雨滴传感器感应板是否检测到雨水,通过采样AO引脚的电压判断雨量的大小,并通过串口输出结果,代码清单如下。
代码清单:主函数
- /**************************************************************************
- 功能描述:主函数
- 入口参数:无
- 返 回 值:int类型
- **************************************************************************/
- int main(void)
- {
- u16 adc_value; //存放ADC采样值
- float voltage; //存放ADC采样值计算后的电压值
- P2M1 &= 0xBF; P2M0 &= 0xBF; //设置P2.6为准双向口(LED1)
- P3M1 &= 0xFE; P3M0 &= 0xFE; //设置P3.0为准双向口(串口1的RxD)
- P3M1 &= 0xFD; P3M0 |= 0x02; //设置P3.1为推挽输出(串口1的TxD)
- P7M1 &= 0xBF; P7M0 &= 0xBF; //设置P7.6为准双向口(雨滴传感器数字口)
- uart1_init(); //串口1初始化
- adc_config(); //初始化ADC
- while(1)
- {
- if(sensor_in == 0) //雨滴传感器检测到雨滴,数字输出引脚(DO)输出低电平
- {
- led_on(LED_2); //点亮用户指示灯D2,指示检测到雨水
- printf("检测到雨水\r\n"); //串口输出提示信息
- }
- else
- {
- led_off(LED_2); //熄灭用户指示灯D2
- }
- adc_start(); //启动ADC转换
- while(adc_completed() == false); //等待ADC转换完成
- led_toggle(LED_1); //翻转指示灯D1状态,指示一次ADC采样完成
- adc_value = get_adc_value(); //读取ADC采样值
- voltage = (2.5*adc_value)/4096; //将ADC采样值转换为电压(单位V)
- printf("voltage: %.2fV\r\n",voltage);//串口打印ADC采样电压
- delay_ms(500); //延时500ms,方便在串口调试助手中观察实验数据
- }
- }
-
-
- 硬件连接
-
-
如下图所示,用杜邦线将雨滴模块控制板的VCC和GND分别连接到开发板J19端子的3.3V(开发板选择的工作电源是3.3V,所以连接3.3V,如果选择的工作电源是5V,则连接到J18端子的5V上)和GND上;DO连接到J9端子的P76;AO连接到J27端子的P06。
图3:硬件连接
-
-
-
- 实验步骤
-
-
- 解压“…\第3部分:配套例程源码”目录下的压缩文件“实验3-4-1:雨滴传感器检测雨水实验”,将解压后得到的文件夹拷贝到合适的目录,如“D\STC8”(这样做的目的是为了防止中文路径或者工程存放的路径过深导致打开工程出现问题)。
- 双击“…\rain_sensor\project”目录下的工程文件“rain_sensor.uvproj”。
- 点击编译按钮编译工程,编译成功后生成的HEX文件“rain_sensor.hex”位于工程的“…\rain_sensor\Project\Object”目录下。
- 打开STC-ISP软件下载程序,下载使用内部IRC时钟,IRC频率选择:24MHz。
- 电脑上打开串口调试助手,选择开发板对应的串口号,将波特率设置为9600bps。
- 程序运行后,可以观察到串口调试助手接收窗口显示的电压值是2.5V,向雨滴传感器感应板上滴几滴水,即可观察到电压降低并且提示检测到雨水,如下图所示。
图4:串口调试助手中观察雨水检测结果