最新毕设 STM32与云平台的水质检测系统


0 前言

🔥
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 毕业设计 STM32与云平台的水质检测系统(源码+硬件+论文)

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿 项目分享:

https://gitee.com/sinonfin/sharing

在这里插入图片描述

1 主要功能

  • 1.利用ds18b20检测水温
  • 2.利用浊度传感器检测浊度
  • 3.利用ph传感器检测ph值
  • 4.显示在oled,超过阈值蜂鸣器报警
  • 5.利用esp8266无线模块上传onenet云端,电脑网页查看数据,手机app查看数据。

2 硬件设计(原理图)

在这里插入图片描述

在这里插入图片描述

3 核心软件设计

关键代码

#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "led.h"
#include "beep.h"
#include "usart.h"
#include "adc.h"
#include "ds18b20.h"
#include "temp.h"    
#include "USART2.h"		
#include "send8266.h"
#include "onenet.h"
#include "timer.h"
#include <string.h>
#include <stdio.h>

#define ARRY_LENGTH 10
#define median_filtering_length 3
extern u8 send_flag;
u8 ph1,hui1,temperature1;		
u8 time[15];
float num[2];
float getPHvalue(void);
u16 median_filtering(void);
void display(void);
u8 key;

int main(void)
  {
	  short temperature,ph;      //�¶�ֵ								  							  
		float hui;		
		unsigned short timeCount = 0;	//���ͼ������
		delay_init();	    	 //��ʱ������ʼ��	 
		NVIC_Configuration();//����NVIC�жϷ���2:2λ��ռ���ȼ���2λ��Ӧ���ȼ�		    
		Adc_Init();	         //AD��ʼ��   
		uart_init(9600);	   //���ڳ�ʼ��
	  Usart2_Init(115200);							//����2������SEND8266��      PA2-TX  PA3-RX
     SEND8266_Init();	
	  TIM4_Int_Init(49999,7199);                      //10Khz�ļ���Ƶ�ʣ�������30000Ϊ3s 
		OLED_Init();			   //��ʼ��OLED  
		OLED_Clear(); 	     //Clear screen
		BEEP_Init();
		LED_Init();
		
/* 	while(DS18B20_Init())	//DS18B20��ʼ��	
	{
		OLED_ShowString(0,0,"DS18B20 Error",24);	//��ʼ��ʧ�ܣ��������
		delay_ms(200);														//��ʱ�ȴ������ȶ�
	}	
		OLED_Clear(); 	     											//����
	*/
	while(1)
	{	

		display();
		
		
		 OLED_ShowString(0,0,"TE:   . C",16);
		
		temperature=DS18B20_Get_Temp();						//�ɼ��¶�	
		
		if(temperature<0)
			{

			  OLED_ShowChar(22,0,'-',16);	  //��ʾ����
			temperature=-temperature;	
			}
		else 
		OLED_ShowChar(22,0,' ',16);	    //ȥ������	
		
		OLED_ShowNum(32,0,temperature/10,2,16);  			//��ʾ�¶�
		OLED_ShowNum(54,0,temperature%10,1,16);  			//��ʾ�¶�
	  printf("�¶ȣ�%d.%d C \r\n",temperature/10,temperature%10);

		temperature=temperature/10;
		
		ph=getPHvalue();	
			
		if( temperature > 42 )  ph += 5;
   else if(temperature > 28)
	{
     ph += 5*(temperature - 28)/14;
   }
	 OLED_ShowString(69,2,"PH:  ",16);
	 OLED_ShowString(109,2,".",16);
	 OLED_ShowNum(92,2,ph/100,2,16);  		   	//��ʾPH
   OLED_ShowNum(112,2,ph%100,2,16); 
	 
	 printf("PHֵ��%d.%d  \r\n",ph/100,ph%100);	 
	 ph=ph/100;
	 
		hui=median_filtering();
	 	hui=hui*(3.3/4096);
		hui = hui*100/3.3;
	  hui = hui*1.66-8;
		if(hui > 100) hui = 99;
	  if(hui <0) hui=0;
   OLED_ShowString(0,2,"TU:   %",16);
	 OLED_ShowNum(32,2,hui,2,16);  			//��ʾ���Ƕ�

	 printf("���Ƕȣ�%d  \r\n",(int)hui);
	 


if(temperature<=0|temperature>=31|ph>=9|ph<5|hui<=37)
	{
	 
	       BEEP=1;
	}
  else
	BEEP=0;



	 ph1=(u8)ph;
	 hui1=(u8)hui;
	 temperature1=(u8)temperature;	 
			
		if(send_flag==1)
		{
			printf("OneNet_GetData\r\n");	
			OneNet_GetData();
			send_flag = 0;
			SEND8266_Clear();
		}
		
		
		if(++timeCount >= 5)		
		{
			printf("OneNet_SendData\r\n");	
			OneNet_SendData();
			timeCount = 0;
			SEND8266_Clear();
		}
			SEND8266_GetData(0);

	
	}	  
}
	
float getPHvalue(){
  float PH_VALUE = 0;
  int pv[ARRY_LENGTH];
	int i,k;
  for(i = 0; i < ARRY_LENGTH; i++ ){
    pv[i] = Get_Adc_Average(7,5);
		delay_ms(1);
  }
  for(i = 0; i < ARRY_LENGTH; i++){
    for(k = i; k < ARRY_LENGTH; k++ ){
      if( pv[i] < pv[k] ){
        int tmp = pv[i];
        pv[i] = pv[k];
        pv[k] = tmp;
      }
    }
  }
  PH_VALUE = pv[ARRY_LENGTH/2];
	
	
	PH_VALUE = PH_VALUE*(3.3/4096);
  PH_VALUE = -5.7541*PH_VALUE + 16.654; 
  PH_VALUE = PH_VALUE*100;
if(PH_VALUE > 1400){
	PH_VALUE = 1400;
}

  if( PH_VALUE < 0 ){
    PH_VALUE = 0;
  }

  return PH_VALUE;
}

u16 median_filtering(){
  int senseV[median_filtering_length];
  int i,k;
	
  for(i = 0; i < median_filtering_length; i++){
    senseV[i] = Get_Adc_Average(6,5);
		delay_ms(3);
  }

  for(i = 0; i < median_filtering_length; i++ ){
    for(k = i; k <median_filtering_length; k++ ){
      if(senseV[i] > senseV[k]){
          int tmp = senseV[i];
          senseV[i] = senseV[k];
          senseV[k] = tmp;
      }
    }  
  }
  return senseV[median_filtering_length/2];
}


void display()
{	

 	
}

4 实现效果

在这里插入图片描述

在这里插入图片描述

5 最后

包含内容

在这里插入图片描述

🧿 项目分享:

https://gitee.com/sinonfin/sharing

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于stm32水质检测系统设计与实现参考文献包括: 1. 王朋,王志峰,杨春玲.基于STM32水质检测系统设计[J].电脑知识与技术,2019(11):343-348. 本文介绍了一种基于STM32水质检测系统原理和设计,详细描述了系统架构,包括数据采集、传输、处理和显示等模块。作者利用STM32芯片的高性能和低功耗优势,成功实现了实时传输和显示水质数据的功能。 2. 吕莹,杨童.基于STM32水质检测仪设计[J].测控技术,2018(2):44-48. 本文阐述了基于STM32水质检测仪的设计,包括硬件和软件的实现,以及测试结果。作者采用多个传感器对水质数据进行采集和处理,并利用STM32实现了数据存储和显示功能。实验数据表明,该检测仪具有较高的测量精度和稳定性。 3. 陈旭,郑皓.基于STM32水质检测系统设计与实现[J].微型机与应用,2017(10):49-51. 本文介绍了一种基于STM32水质检测系统,包括硬件运用和软件设计方案,详细描述了系统的功能模块和电路连接。作者通过实验验证了该系统的可行性和稳定性,并指出了需要进一步优化完善的方向。 4. 黄淑华,姚婷婷,刘一荃.基于STM32水质监测仪设计[J].计算机技术与发展,2016(8):79-82. 本文介绍了一种基于STM32水质监测仪设计方案,包括硬件设计和软件实现。作者采用了多个传感器对水质数据进行采集,通过串口通信将数据传输到上位机处理和显示。实验结果表明,该监测仪具有较高的准确性和稳定性,可广泛应用于水质监测领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值