stm32之雨滴传感器使用记录

news2024/12/28 20:32:25

一、简介

        雨滴传感器、烟雾传感器(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);

三、效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1060077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

插入排序:简单而有效的排序方法

在计算机科学中,排序算法是一个重要且常见的主题,它们用于对数据进行有序排列。插入排序(Insertion Sort)是其中一个简单但有效的排序算法。本文将详细解释插入排序的原理和步骤,并提供Java语言的实现示例。 插入排序的…

react项目从webpack迁移到vite的解决方案

虽然webpack是前端工程编译工具的王者,但是最近vite牛逼吹的震天响,说什么开发/生产打包速度甩webpack 100条街。不管是不是事实,总得尝试一下吧。 于是说干就干,在网上找了很多资料,终于搞定了,以下就是r…

QT实现TCP服务器客户端

服务器 .cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时,服务器已经成功进入监听状…

区间搜索指令(博途SCL)

S型速度曲线行车位置控制,停靠位置搜索功能会用到区间搜索指令,下面我们详细介绍区间搜索指令的相关应用。 S型加减速行车位置控制(支持点动和停车位置搜索)-CSDN博客S型加减速位置控制详细算法和应用场景介绍,请查看下面文章博客。本篇文章不再赘述,这里主要介绍点动动和…

sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验

课程1_第1周_测验题 目录:目录 第一题 1.“人工智能是新电力” 这个比喻指的是什么? A. 【  】人工智能为我们的家庭和办公室的个人设备供电,类似于电力。 B. 【  】通过“智能电网”,人工智能正在传递新一波的电力。 C. …

【多级缓存】

文章目录 1. JVM进程缓存2. Lua语法3. 实现多级缓存3.1 反向代理流程3.2 OpenResty快速入门 4. 查询Tomcat4.1 发送http请求的API4.2 封装http工具4.3 基于ID负载均衡4.4 流程小结 5. Redis缓存预热 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如…

App分发苹果ios内测ipa应用文件签名分发平台剖析其运行模式及法律注意事项

随着移动应用的快速发展,为了确保应用的质量和稳定性,开发者们通常在发布应用之前会进行内部测试。而App内测签名分发平台作为一种解决方案,不仅能够提供快速的应用分发和安装,还能确保应用的完整性和可靠性。本文将详细分析App内…

【算法|动态规划No.11】leetcode53. 最大子数组和

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

input允许多行输入

input允许多行输入 input允许多行输入 ______________________________ 表示停止输入想象一下,我们现在身处一间充满活力的课堂。学生们坐在自己的座位上,准备聆听老师的讲解。老师站在讲台上,充满激情地开始教授代码。 老师:同…

星球作业(第十期)Android中的ClassLoader

Android中的ClassLoader 1.Android中有哪几种ClassLoader?它们的作用和区别是什么? 2.简述ClassLoader的双亲委托模型 Android中有哪几种ClassLoader?它们的作用和区别是什么? Android中有三个ClassLoader,分别是Bas…

【智慧导诊系统源码】智慧导诊系统的技术支撑与实际运作

什么是智慧导诊系统? 简单地说,智慧导诊系统是一种利用人工智能技术,为医生提供帮助的系统。它可以通过分析患者的症状和病史为医生提供疾病诊断和治疗方案的建议。 智慧导诊系统需要具备以下技术支撑才能实现 人工智能技术支撑。智慧导诊系统的核心在…

设计模式9、组合模式 Composite

解释说明:组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。 抽象根节点(Component):定义系统各层次对象的共有方法和属性,可以预先定义一些默认行为和属…

两种新建CAA项目快捷启动方式

文章目录 一、前言二、新建项目快捷启动方式(相当于直接Cnext进入)方式一:按下面图示操作(以V5 R21为例)方式二:按下面图示操作(以V5 R18为例) 一、前言 环境变量配置文件可存放路径…

字典与数组第七讲:工作表数据计算时为什么要采用数组公式(一)

《VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。…

个人论坛系统的测试用例

首先要弄清楚论坛系统都具有什么功能,然后对各个功能进行分类编写测试用例。

使用Sen2cor对Sentinel-2辐射定标和大气校正

使用Sen2cor对Sentinel-2辐射定标和大气校正 在上一篇文章中,先对Sen2cor进行了安装 先定位到插件所在文件夹下 cd C:\Users\lenovo\AppData\Local\Sen2Cor-02.11.00-win64如果在上一篇中已经配置好环境变量,那就不用cd定位了,直接输后面的…

经典算法-----八皇后问题

目录 前言 八皇后问题 1.问题简介 1.2思路剖析 1.3递归和回溯 代码实现 ​编辑 1.递归回溯解决 能否放置数组 完整代码: 2.非递归回溯解决 前言 今天我们学习一个新的算法,也就是回溯算法,就以八皇后问题作为示例,这是…

剑指offer——JZ25 合并两个排序的链表 解题思路与具体代码【C++】

一、题目描述与要求 两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com) 题目描述 输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其…

C++的对像生存期

栈 栈由操作系统分配管理,也就是它是规整的,内存的大小在申请之后不会发生变化。因此,它不会出现碎片化,并且读取速度非常的快 例如:经常声明的局部变量,一些基本数据类型,如int ,double, char…

力扣 -- 518. 零钱兑换 II(完全背包问题)

解题步骤&#xff1a; 参考代码&#xff1a; 未优化代码&#xff1a; class Solution { public:int change(int amount, vector<int>& coins) {int ncoins.size();//多开一行&#xff0c;多开一列vector<vector<int>> dp(n1,vector<int>(amount1…