非接触式水位传感器详解(STM32)

目录

一、介绍

二、传感器原理

1.原理图

2.引脚描述

三、程序设计

main.c文件

water.h文件

water.c文件

四、实验效果

五、资料获取

项目分享


一、介绍

非接触式水位传感器是一款简单易用、性价比较高的水位/液位检测传感器,其原理是通过电感监测液位信号。可以有3-4.5mm的感应距离,即可以贴在容器外壁表面来监测容器内液位(金属材质不可用)

以下是非接触式水位传感器的参数:

|------|------------|
| 型号 | M03 |
| 工作电压 | DC 3.3~5V |
| 静态电流 | 0.6uA |
| 工作电流 | 2.2mA |
| 输出方式 | 推挽输出 |
| 感应材料 | 非金属 |

哔哩哔哩视频链接:

非接触式水位传感器(STM32)

(资料分享见文末)

二、传感器原理

1.原理图

2.引脚描述

|------|------|
| 引脚名称 | 描述 |
| + | VCC |
| - | GND |
| O | 信号输出 |

三、程序设计

1.使用STM32F103C8T6读取非接触式水位传感器采集的数据,通过OLED上显示

2.注意板子供电3.3-5V因板子体积尽量小的要求,板子没有加反接保护,切记电源不要反接,容易烧坏芯片

|----------|------|
| WATER | PA1 |
| OLED_SCL | PB11 |
| OLED_SDA | PB10 |

main文件

cpp 复制代码
#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "water.h"
#include "adcx.h"

/*****************辰哥单片机设计******************
											STM32
 * 项目			:	非接触式水位传感器实验                     
 * 版本			: V1.0
 * 日期			: 2025.1.28
 * MCU			:	STM32F103C8T6
 * 接口			:	参看water.h							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥 

**********************BEGIN***********************/

u16 value;
u8 buff[30];//参数显示缓存数组

int main(void)
{ 
	
  SystemInit();//配置系统时钟为72M	
	delay_init(72);
	LED_Init();
	LED_On();
	WATER_Init();
	USART1_Config();//串口初始化
	
	OLED_Init();
	printf("Start \n");
	delay_ms(1000);
	
	OLED_Clear();
	//显示"水位:"
	OLED_ShowChinese(0,0,0,16,1);
	OLED_ShowChinese(16,0,1,16,1);

	OLED_ShowChar(32,0,':',16,1);
	
	

  while (1)
  {
		LED_Toggle();
		value = WATER_GetData();  
		
		printf("水位: %d\r\n",value);
		OLED_ShowNum(80,0,value,1,16,1);


		delay_ms(200);

  }
	
}

water.h文件

cpp 复制代码
#ifndef __WATER_H
#define	__WATER_H
#include "stm32f10x.h"
#include "adcx.h"
#include "delay.h"
#include "math.h"

/*****************辰哥单片机设计******************
											STM32
 * 文件			:	非接触式水位传感器h文件                   
 * 版本			: V1.0
 * 日期			: 2025.1.28
 * MCU			:	STM32F103C8T6
 * 接口			:	见代码							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥

**********************BEGIN***********************/

/***************根据自己需求更改****************/
// WATER GPIO宏定义

#define		WATER_GPIO_CLK								RCC_APB2Periph_GPIOA
#define 	WATER_GPIO_PORT								GPIOA
#define 	WATER_GPIO_PIN								GPIO_Pin_1			


/*********************END**********************/


void WATER_Init(void);
uint16_t WATER_GetData(void);

#endif /* WATER_H_ */

water.c文件

cpp 复制代码
#include "water.h"

/*****************辰哥单片机设计******************
											STM32
 * 文件			:	非接触式水位传感器c文件                   
 * 版本			: V1.0
 * 日期			: 2025.1.28
 * MCU			:	STM32F103C8T6
 * 接口			:	见代码							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥

**********************BEGIN***********************/

void WATER_Init(void)
{

		GPIO_InitTypeDef GPIO_InitStructure;
		
		RCC_APB2PeriphClockCmd (WATER_GPIO_CLK, ENABLE );	// 打开连接 传感器DO 的单片机引脚端口时钟
		GPIO_InitStructure.GPIO_Pin = WATER_GPIO_PIN;			// 配置连接 传感器DO 的单片机引脚模式
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;			// 设置为上拉输入
		
		GPIO_Init(WATER_GPIO_PORT, &GPIO_InitStructure);				// 初始化 
	
}

uint16_t WATER_GetData(void)
{
	
	uint16_t tempData;
	tempData = !GPIO_ReadInputDataBit(WATER_GPIO_PORT, WATER_GPIO_PIN);
	return tempData;
}

四、实验效果

五、资料获取

项目分享

相关推荐
Channing Lewis25 分钟前
sql server如何创建表导入excel的数据
数据库·oracle·excel
秃头摸鱼侠26 分钟前
MySQL安装与配置
数据库·mysql·adb
UGOTNOSHOT30 分钟前
每日八股文6.3
数据库·sql
行云流水行云流水1 小时前
数据库、数据仓库、数据中台、数据湖相关概念
数据库·数据仓库
John Song1 小时前
Redis 集群批量删除key报错 CROSSSLOT Keys in request don‘t hash to the same slot
数据库·redis·哈希算法
IvanCodes1 小时前
七、Sqoop Job:简化与自动化数据迁移任务及免密执行
大数据·数据库·hadoop·sqoop
tonexuan1 小时前
MySQL 8.0 绿色版安装和配置过程
数据库·mysql
JohnYan1 小时前
工作笔记- 记一次MySQL数据移植表空间错误排除
数据库·后端·mysql
我最厉害。,。2 小时前
Windows权限提升篇&数据库篇&MYSQL&MSSQL&ORACLE&自动化项目
数据库·mysql·sqlserver
远方16092 小时前
20-Oracle 23 ai free Database Sharding-特性验证
数据库·人工智能·oracle