一、简介
雨滴传感器、烟雾传感器(MQ2)、轨迹传感器、干黄管等的原理都类似,都是将检测到的信号通过LM393进行处理之后再输出,可以输出数字信号DO(0和1)和模拟信号A0。
雨滴传感器在正常情况下是AO输出的是工作电压,如果遇到水,电压会迅速下降。当然在遇到水时DO输出0,正常输出1。
实物图(曾被雨水泡过,生锈了)
原理图
CubeMX配置,PC13用于DO口或者通过ADC(PA3)
二、代码
数字信号检测
GPIO_PinState state = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13);
if(state == GPIO_PIN_RESET) {
printf("water\r\n");
}
模拟信号检测
uint16_t ADC_Read(uint32_t Channel)
{
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = Channel; /* 通道 */
sConfig.Rank = ADC_REGULAR_RANK_3;
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; /* 采样时间 */
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
return (uint16_t)HAL_ADC_GetValue(&hadc1);
}
result = ADC_Read(ADC_CHANNEL_3);
printf("result = %f\r\n", 5.0/4096 * result);
三、效果图