您现在的位置是:首页 >其他 >基于STC8G1K08A的水压检测系统网站首页其他

基于STC8G1K08A的水压检测系统

我就是爱折腾 2024-06-25 12:01:03
简介基于STC8G1K08A的水压检测系统

前言

由于今年天气持续干旱,给养猪行业带来了很大的用水压力,尤其是对于管理1600头猪的饲养员的我来说,最担心的就是猪没水喝,毕竟这群猪一天就可以喝掉20吨水,这也就是我设计这个项目的初衷。

先来一饱眼福

在这里插入图片描述
这是手机APP上显示的样子,用的是appinventor编写的

设计和硬件的选型

我大致的设计想法是利用STC单片机通过检测水压传感器电压的高低来确定水压的高低,再通过单片机的串口将数据发送给ESP8266,最后通过8266的WIFI透传功能将数据上传物联网服务器,最终用appinventor编写定制的APP来实时显示水塔的剩余水量水压值。

压力传感器选择

要实现水压的监测,必须有一个压力传感器,这里我选的是恒压供水传感器,其中原因之一因为它的电压信号范围是0.5-4.5V,刚好是单片机可以监测的范围
在这里插入图片描述

单片机的选择

这里之所以选择STC8G1K08A,原因之一STC8G1K08A集成了超高速ADC,支持10位精度15通道(通道0~通道14)的模数转换 ,另外一个原因就是这款单片机内部集成了晶振电路,只要接上5V电源就能工作。

在这里插入图片描述

WIFI透传模块选择

将数据上传到手机APP我选择如今流行的ESP8266,这个模块使用方便快捷,体积小
直接选这种带继电器的这种,5V的供电刚好跟单片机的工作电压相同,8266也不用另外加5V转3.3V的直流模块。
在这里插入图片描述

核心代码的开发

代码的开发我选择单片机开发软件KeiluVision以及ESP8266撸代码工具ArduionIDE
STC8G1K08A单片机主要负责接收水压传感器的电压信号,转换之后通过串口传送给ESP8266。
物联网模块8266再将数据上传到巴法云平台。

STC8G1K08A单片机代码

读取水压传感器的电压

	Pre_Min = Pre_ADC[1];			        //以下为10个adc数据中选取最小值
		for(i=1; i<10; i++)
		{
		 	if(Pre_ADC[i] < Pre_Min)
			{
				temp = Pre_Min;
				Pre_Min = Pre_ADC[i];
				Pre_ADC[i] = temp;	
			}	
		}
		sum = 0;										 //以下为10个adc数据取平均
		for(i=2; i<10; i++)
		{
			sum = sum + Pre_ADC[i];
		}
		sum >>= 3; 

计算对应电压水的压力值


		//Vwater = ((unsigned long)sum * 5000) / 1024;//以实测电源电压返算水头电压  注意计算中存在超类型长度的可能性
		Vwater = ((unsigned long)sum * (unsigned long)vcc) / 1024;
		
	 Vtemp = Vwater - 500; //扣除基础水头电压
	    Hwater  = (Vtemp*5/2);//1MPA=10公斤/cm2,10000g共4000mv,每mv=10000/4000=2.5
		                             //实测电压*2.5(x*5/2)

猪场水压正常、漏水、喝光水提醒功能的实现

正常水塔满水的情况下,水压数值在300以上,漏水或者水喝到一半之后,就要推送水压情况
设置水压数值210以下,如果在一分钟之内,有超过15个小于210的数值,则串口推送“A”,表示漏水,不到15个低于210的数值推送“B”,表示正常。实测管道水压为0的时候,数值为大于30000,所以当检测到数值为30000以上,串口推送“C”,表示水喝光。

  if(Hwater<=210){N++;}
 if(sec==60)
				  {   
				  
				      sec=0;
				  	  flag=0;
				  	 if(N>=15) 
				  		 {	 
						 
						     N=0;
						 	 UartSend('A');
						 
						 }
						else 
						
							  {
						
							  UartSend('B'); N=0;
							  }
 if(Hwater>30000){flag=0;UartSend('C');N=0;}

数据通过ESP8266上报到云端

我这里选择的是巴法云物联平台,它可以采集8266上传的数据并实时显示出来
在这里插入图片描述

代码的实现

串口接收到的数值转换为字符

String Read_Serial(){
 
String data = "";


  while (Serial.available() > 0)
 
  {
    digitalWrite(led,!digitalRead(led));
    data += char (Serial.read());//ASCII转字符
    //data=(Serial.read());//ASCII转十进制
    delay(2);
    flag=1;
   
  }
  return data;

 
}

处理漏水,喝光水的微信提醒

void Serial_Handler(String data)
{
if(flag==1)
    {  
      if(data=="A"){loushui();};
      if(data=="C"){heguang();};

      if((data=="C")&&((digitalRead(tuisong))==0)){Blynk.email("369818468@qq.com", "主人,猪已把水喝光光");};
       flag=0;
       String upstr = ""; 
       upstr = "cmd=2&uid="+UID+"&topic="+TOPIC+"&msg=#"+data+"#"+123+"#
";
      
       sendtoTCPServer(upstr);
       upstr = "";
  
   Serial.print(data);
   delay(2000);

    }

微信实时推送

漏水
在这里插入图片描述
喝光水
在这里插入图片描述

APP的开发

我用的是appinventor
在这里插入图片描述
最终实现了文章开头的显示内容

过程虽辛苦,但是折腾使我快乐,哈哈

单片机的PCB也是自己设计,请忽略杂乱的线
在这里插入图片描述
水压传感器
在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。