首页 > 其他分享 >基于STM32(STM32F103RETX)项目:水质检测与水位控制器(节点板)

基于STM32(STM32F103RETX)项目:水质检测与水位控制器(节点板)

时间:2024-08-20 09:57:38浏览次数:8  
标签:tds1Data 控制器 mydata void STM32 loraData 模块 TDS STM32F103RETX

目录

项目介绍

一、 项目需求

1.水资源保护与管理的需求
随着工业化和城市化的快速发展,水资源的污染问题日益严重,对水质进行实时监测和 管理变得尤为重要。水质检测与水位控制器项目的实施,旨在提高水质监测的效率和准确性,为水资源保护和管理提供科学依据。
2.技术进步的推动
近年来,传感器技术、物联网技术、大数据分析等先进技术的快速发展,为水质检测和 水位控制提供了强有力的技术支持。这些技术的应用,使得水质检测更加精准,水位控制更加智能化。
3.市场需求与政策导向
国家和地方政府对水资源保护和管理的重视程度不断提高,出台了一系列相关政策法规,要求加强水质监测和水位控制。同时,随着人们生活水平的提高,对水质安全和水资源有效利用的需求也日益增长。

二、设计方案

本方案底层有节点和网关 2 部分组成。
节点板采用 STM32F103C8T6 芯片作为主控芯片,节点和网关通过 Lora 进行组网和远 距离传输,其中lora通信距离在三千米左右。网关主控芯片采用 STM32F103RET6 芯片,搭载了 oled 显示屏,实现界面的设计、实时传感器数据的显示以及设备运行状态的显示,并可以通过电能检测模块监控电机的过载 情况。同时网关搭载有人 CAT-1 4G 联网模组,通过 Modbus 协议把数据传输给有人云物 联网平台,并通过有人云物联网平台,实现监控大屏的显示和报警信息的推送。

三、相关技术点

  1. 采集水箱内的水质传感器的水质和水温,功率等参数 。
  2. 检测到没水之后,可以通过电机进行上水,并可以调节电磁阀的大小,并通过电能检测 模块检测电机的负载情况(空载保护和过载保护)。
  3. 局域网 Lora 通信,该系统包含网关和节点板组成,节点板和网关通过 Lora 进行组网, 把传感器的数据传输给网关 。
  4. 网关使用 oled 显示屏,实现数据的显示,并可以通过按键对系统的参数(温度,水质, 功率)阈值进行设置。
  5. 广域网 4G 通信,网关通过 4G 模组,把数据传输给有人云物联网平台,同时实现 web 监控大屏显示和手机报警信息推送。

四、预计效果

1.开机后自动设置LORA通信模块的工作方式及其地址和信道,并且4G模块自动连接有人云。
2.节点板通过tds传感器将采集的数据通过LORA模块发送给主控板。
3.主控板采集的数据和节点板采集的数据通过oled屏显示出来。
4.将采集到的数据通过4G模块传送至有人云。
5.判断水位是否过低或已满,若过满则打开电机进行上水,若水满则关闭电机停止上水。

设备开发

一、TDS模块

DS水质传感器是我公司研制的一款高精度产品,用于测量水的TDS值,TDS数值可反应水的洁净程度,可用于生活用水、水培等领域的水质检测。
TDS (Total Dissolved Solids), 中文名:总溶解固体,又称溶解性固体总量,表明1升水中溶有多少毫克溶解性固体。一般来说,TDS值越高,表示水中含有的溶解物越多,水就越不洁净。因此,TDS值的大小,可作为反映水的洁净程度的依据之一。
引脚定义
在这里插入图片描述
tds内部原理图
本项目采用串口三进行收发数据,在中断中收发。
在这里插入图片描述

实物图
在这里插入图片描述

通信基本参数:
在这里插入图片描述
主动发送格式如下:
在这里插入图片描述
数据计算模式
TDS1计算:TDS1_H256+TDS1_L(ppm)
TDS2计算:TDS2_H
256+TDS2_L(ppm)
例如:
发送:FF 00 64 00 0A 2A 0A AA
TDS1表示=TDS1_H256+TDS1_L转换十进制=0X0064转换十进制=100ppm
TDS2表示TDS2_H
256+TDS2_L转换十进制=0X000A转换十进制=10ppm
TEM1表示=0X2A转换十进制=42℃
TEM2表示=0X0A转换十进制=10℃
由于TDS探头的个体差异或者未进行温度补偿等原因,会导致测量值有较大的误差。因此,为获得更精确的TDS值,在测量之后,必须进行校准,校准公式如下:
TDS=[TDS实测值+(T温度-25℃)*0.0108]/[1+(T温度-25)*0.0388]
其中TDS实测值为读取浓度值,T温度为待测溶液测量温度,通过温补公式算出最TDS后值。

#include "tds1.h"

USART3_DATA tds1Data={0};

float get_tds1,get_tds2,get_tem1,get_tem2;

uint8_t Get_Usart3_Data(void)
{
	if(tds1Data.myflag==0)
	{
	return 0;
	}
	printf("%d %d %d %d %d %d %d %d\r\n",tds1Data.mydata[0],tds1Data.mydata[1],tds1Data.mydata[2],tds1Data.mydata[3],tds1Data.mydata[4],tds1Data.mydata[5],tds1Data.mydata[6],tds1Data.mydata[7]);
	tds1Data.myflag=0;
	if(tds1Data.mydata[0]!=0xff)
		{
			printf("帧头错误\r\n");
			memset(&tds1Data,0,sizeof(tds1Data));
			return 2;
		}
	if(tds1Data.mydata[7]!=0xaa)
		{
		printf("帧尾错误\r\n");
		memset(&tds1Data,0,sizeof(tds1Data));
		return 2;
		}
		if(tds1Data.datalen!=8)
		{
		printf("数据长度错误\r\n");
		memset(&tds1Data,0,sizeof(tds1Data));
		return 3;
		}
		get_tds1 = ((tds1Data.mydata[1]<<8)+tds1Data.mydata[2]);
		get_tem1 = tds1Data.mydata[5];
		get_tds1=(get_tds1+(get_tem1-25)*0.0108)/(1+(get_tem1-25)*0.0388);
		printf("tds1=%.1f\r\ntem1=%.1f\r\n",get_tds1,get_tem1);
		memset(&tds1Data,0,sizeof(tds1Data));
		return 1;
}

二、LORA模块

产品介绍:
E32-433T20D 是一款基于 Semtech 公司 SX1278射频芯片的无线串口模块(TTL 电平),透明传输方式,工作在 410~441MHz 频段(默认 433MHz),采用 LoRa 扩频技术。
SX1278 支持 LoRa 扩频技术,LoRa 直序扩频技术具有更远的通讯距离,抗干扰能力强的优势,同时有极强的保密性。在低速通信领域 SX1278具有里程碑意义,并受到业内人士的青睐。该系列默认空中速率为2.4kbps,发射功率为 20dBm,采用工业级晶振,保证其稳定性、一致性精度均小于业内普遍采用的 10ppm。目前已经稳定量产,已经大量应用三表行业、物联网改造、智能家具等领域。模块具有数据加密和压缩功能。模块在空中传输的数据,具有随机性,通过严密的加解密算法,使得数据截获失去意义。而数据压缩功能有概率减小传输时间,减小受干扰的概率,提高可靠性和传输效率。
实物图
在这里插入图片描述
引脚定义:
M0:与M1配合设置LORA工作模式
M1:与M0配合设置LORA工作模式
Tx:连接外部的RX
Rx:连接外部的TX
Aux:用于只是模块的工作模块
Vcc:电源,2.3-2.5V
Gnd:接地
lora连接指令格式:
在这里插入图片描述
在这里插入图片描述
通过将M0,M1设置为11进入休眠模式可进行指令的设置。
在休眠模式下(M0=1,M1=1),向模块串口发出命令(HEX 格式):C1 C1 C1,模块会返回当前的配置参数,比如:C0 00 00 1A 06 44。此作用是为了检测自己的lora模块可以正常工作。之后根据连接指令发布自己的连接设置
在这里插入图片描述
最后拉高AUX之后发布自己的数据,数据包括地址加信道加要传输的数据。我才用的是定点发射的模式。
在这里插入图片描述

**源码**
#include "lora.h"
UART2_DATA loraData={0};
//串口2通信
//测试模块
void getloraconfig(void)
	{
	HAL_GPIO_WritePin(GPIOA, M0_Pin|M1_Pin, GPIO_PIN_SET);
	HAL_Delay(2000);
	uint8_t a1[3]={0xC1,0xC1,0xC1};
	HAL_UART_Transmit(&huart2,a1,sizeof(a1),100);
	}
//接受信息
void waitflag(void)
		{
		while(1)
			{
		if(loraData.myflag==1)
			{
				printf("%x %x %x %x %x %x\r\n",loraData.mydata[0],loraData.mydata[1],loraData.mydata[2],loraData.mydata[3],loraData.mydata[4],loraData.mydata[5]);
				memset(&loraData,0,sizeof(loraData));
				return;
			}
		}
	}
		
//发送选择的模式
void setloraconfig(void)
{
	HAL_GPIO_WritePin(GPIOA, M0_Pin|M1_Pin, GPIO_PIN_SET);
	HAL_Delay(2000);
	uint8_t a2[6]={0xC0,0x00,0x01,0x1a,0x17,0xC0};
	HAL_UART_Transmit(&huart2,a2,sizeof(a2),100);
}

//将float类型转换成u8类型发送
void FloatToUint8(float data,uint8_t *arr)
{
uint8_t *p=(uint8_t*)&data;
for(uint8_t i=0;i<4;i++)
	{
		*(arr + i)=*(p+i);
	}
		printf("\r\n");
}

void sendloradata(void)
	{
	while(1){
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4)==GPIO_PIN_SET){
			uint8_t a3[11]={0X00,0X02,0X17};
			FloatToUint8(get_tds1,&a3[3]);
			FloatToUint8(get_tem1,&a3[7]);
			HAL_UART_Transmit(&huart2,a3,sizeof(a3),100);
			return;
		}
	}
}

标签:tds1Data,控制器,mydata,void,STM32,loraData,模块,TDS,STM32F103RETX
From: https://blog.csdn.net/2401_83971583/article/details/141329414

相关文章

  • 基于STM32F407ZGT6芯片的GPIO工作模式
    目录4种输入模式4种输出模式输入模式模拟输入浮空输入上拉输入下拉输入输出模式推挽输出开漏输出复用推挽输出复用开漏输出4种输入模式(1)GPIO_Mode_IN_FLOATING浮空输入(2)GPIO_Mode_IPU上拉输入(3)GPIO_Mode_IPD下拉输入(4)GPIO_Mode_AIN模拟输入4种输出模......
  • 关于STM32H750打破flash--2M限制的简单办法
    STM32H750VBTx的flash官方规定只能使用128K的flash,但是其实是可以绕过限制,使用其片内2M的flash空间。这里介绍一种较为简单的实现的办法,这个办法不同网络上介绍的办法,可以在keil上较轻松地实现。因为它可以使用较高STM32CubeMX(6.12.0)和keil(5.29)的版本。首先按照正常的操作顺序,使......
  • 使用STM32实现简单的智能宠物喂食器
    智能宠物喂食器是一种能够自动喂食宠物的设备,通过使用STM32微控制器,我们可以实现一个简单的智能宠物喂食器。在本篇文章中,我将会详细介绍如何使用STM32实现智能宠物喂食器的功能。内容包括基本的硬件设计和软件编程,并提供代码案例,以便读者能够更好地理解和实践。第一部分:准备......
  • STM32实现简单的人脸识别
    人脸识别是一种广泛应用于安防、智能门禁、人机交互等领域的技术。在本文中,我们将使用STM32微控制器来实现一个简单的人脸识别系统。我们将使用OpenCV库进行图像处理和人脸识别算法。硬件准备:STM32开发板(例如STM32F4Discovery)OV7670摄像头模块TFT显示屏模块杜邦线和面包板......
  • 基于STM32开发的智能空气质量监测系统
    目录引言环境准备工作硬件准备软件安装与配置系统设计系统架构硬件连接代码实现系统初始化传感器数据采集与处理显示与状态指示Wi-Fi通信与远程监控应用场景家庭空气质量监测办公室与公共场所环境管理常见问题及解决方案常见问题解决方案结论1.引言随......
  • 基于STM32开发的智能门锁系统
    目录引言环境准备工作硬件准备软件安装与配置系统设计系统架构硬件连接代码实现系统初始化密码输入与验证门锁控制与状态指示Wi-Fi通信与远程监控应用场景家庭智能门锁办公室智能门禁系统常见问题及解决方案常见问题解决方案结论1.引言智能门锁系统通......
  • 【STM32】按键控制小灯的亮灭
    今天我们用STM32单片机上的按键来控制小灯泡的亮灭,楼主在b站STM32教学中进行学习,其中有几点是楼主觉得对于新手有点难理解的地方进行讲解,详细视频教学请参考,文中配图来源于keysking视频教学(up主做的挺好的,点赞!!!)【【STM32入门教程-2024】第4集按键控制小灯GPIO输入|keysking......
  • STM32中断系统之TIM定时中断
    文章目录前言一、TIM定时器简介1.1定时器的基本功能1.2时基单元1.3定时器的其他功能1.4TIM定时器的分类二、TIM定时器的内部结构2.1基本定时器2.2通用定时器2.3高级定时器三、定时中断的基本结构四、时序图4.1预分频器时序4.2计数器时序4.3计数器无预装时序4......
  • 基于STM32的寄存器实现点亮LED--基于RUST实现
    main.rs#![no_std]#![no_main]usecore::ptr;usecortex_m_rt::entry;usepanic_haltas_;//当发生panic时停止执行//定义寄存器地址constRCC_BASE:u32=0x40021000;constGPIOB_BASE:u32=0x40010C00;constRCC_APB2ENR_OFFSET:u32=0x18;constGPIOB......
  • 基于STM32的寄存器实现点亮LED
    1.启动文件startup_stm32f103xe.s;********************(C)COPYRIGHT2017STMicroelectronics********************;*FileName:startup_stm32f103xe.s;*Author:MCDApplicationTeam;*Description:STM32F103xEDevicesvectort......