PH传感器详解(STM32)

目录

一、介绍

二、传感器原理

1.原理图

2.引脚描述

三、程序设计

main文件

ph.h文件

ph.c文件

四、实验效果

五、资料获取

项目分享


一、介绍

溶液的酸碱度(PH值)是溶液的一个重要特性。但是PH复合电极输出的是mV级的电压信号,单片机无法直接进行识别处理,所以要使用PH传感器模块。PH传感器模块价格低廉、使用方便、测量精度高,可直接输出0~5V电压信号。每一个突然就杳无音讯的人,都在打着这一辈子最硬的仗

以下是PH传感器的参数:

|---------|--------------|
| 名称 | PH传感器 |
| 工作电压 | DC 5V |
| 测量范围 | 0~14PH |
| 测量温度 | 0~60℃ |
| 精度 | ±0.01pH(25℃) |
| 响应时间 | ≤ 1min |
| PH传感器接口 | BNC接口 |
| 温度传感器接口 | XH2.54 |

哔哩哔哩视频链接:

PH传感器模块(E201电极 STM32)

(资料分享见文末)

二、传感器原理

1.原理图

2.引脚描述

|------|------------|-------------|
| 引脚名称 | 描述 | 备注 |
| VCC | 接电源正极(5V) | 不可使用3.3V |
| GND | 接电源负极 | |
| PO | 模拟信号输出正极 | 输出电压范围0~5V |
| 2V5 | 基准电压2.5V输出 | 测试使用,不外接电源 |
| T1 | 温度信号输出 | 可通过软件进行补偿 |

三、程序设计

1.使用STM32F103C8T6读取PH传感器采集的数据,通过OLED上显示

|----------|------|
| PH | PA0 |
| OLED_SCL | PB11 |
| OLED_SDA | PB10 |

main文件

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

/*****************辰哥单片机设计******************
											STM32
 * 项目			:	PH传感器实验                     
 * 版本			: V1.0
 * 日期			: 2025.2.4
 * MCU			:	STM32F103C8T6
 * 接口			:	参看ph.h							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥 

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

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

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

  while (1)
  {
		LED_Toggle();
		value = PH_GetData();  
		
		printf("PH: %f\r\n",value);
		
		sprintf((char*)buff,"%.2f",value);
		OLED_ShowString(60,0,buff,16,1);
		

		delay_ms(200);

  }
	
}

ph.h文件

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

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

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

#define PH_READ_TIMES	10  //PH传感器ADC循环读取次数

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

#define		PH_GPIO_CLK								RCC_APB2Periph_GPIOA
#define 	PH_GPIO_PORT							GPIOA
#define 	PH_GPIO_PIN								GPIO_Pin_0
#define   ADC_CHANNEL								ADC_Channel_0	// ADC 通道宏定义


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


void PH_Init(void);
float PH_GetData(void);

#endif /* __PH_H */

ph.c文件

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

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

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

void PH_Init(void)
{
	{
		GPIO_InitTypeDef GPIO_InitStructure;
		
		RCC_APB2PeriphClockCmd (PH_GPIO_CLK, ENABLE );	// 打开 ADC IO端口时钟
		GPIO_InitStructure.GPIO_Pin = PH_GPIO_PIN;					// 配置 ADC IO 引脚模式
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		// 设置为模拟输入
		
		GPIO_Init(PH_GPIO_PORT, &GPIO_InitStructure);				// 初始化 ADC IO

		ADCx_Init();
	}

}


uint16_t PH_ADC_Read(void)
{
	//设置指定ADC的规则组通道,采样时间
	return ADC_GetValue(ADC_CHANNEL, ADC_SampleTime_55Cycles5);
}

float PH_GetData(void)
{
	float  tempData = 0;
	float PH_DAT;

	for (uint8_t i = 0; i < PH_READ_TIMES; i++)
	{
		tempData += PH_ADC_Read();
		delay_ms(5);
	}
	tempData /= PH_READ_TIMES;
	
	PH_DAT = (tempData/4096.0)*3.3;
	PH_DAT = -5.7541*PH_DAT+16.654;
	
	if(PH_DAT>14.0)PH_DAT=14.0;
	if(PH_DAT<0)PH_DAT=0.0;
	
	return PH_DAT;

}

四、实验效果

五、资料获取

项目分享

相关推荐
Elastic 中国社区官方博客4 小时前
在 Elasticsearch 中使用 Mistral Chat completions 进行上下文工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
编程爱好者熊浪6 小时前
两次连接池泄露的BUG
java·数据库
TDengine (老段)8 小时前
TDengine 字符串函数 CHAR 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq7422349848 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
姚远Oracle ACE8 小时前
Oracle 如何计算 AWR 报告中的 Sessions 数量
数据库·oracle
Dxy12393102169 小时前
MySQL的SUBSTRING函数详解与应用
数据库·mysql
码力引擎9 小时前
【零基础学MySQL】第十二章:DCL详解
数据库·mysql·1024程序员节
杨云龙UP9 小时前
【MySQL迁移】MySQL数据库迁移实战(利用mysqldump从Windows 5.7迁至Linux 8.0)
linux·运维·数据库·mysql·mssql
l1t9 小时前
利用DeepSeek辅助修改luadbi-duckdb读取DuckDB decimal数据类型
c语言·数据库·单元测试·lua·duckdb
安当加密9 小时前
Nacos配置安全治理:把数据库密码从YAML里请出去
数据库·安全