基于STC8G1K08A的水压检测系统

news/2024/11/2 15:23:41/

基于STC8G1K08A的水压检测系统

  • 前言
  • 先来一饱眼福
  • 设计和硬件的选型
    • 压力传感器选择
    • 单片机的选择
    • WIFI透传模块选择
  • 核心代码的开发
    • STC8G1K08A单片机代码
      • 读取水压传感器的电压
      • 计算对应电压水的压力值
      • 猪场水压正常、漏水、喝光水提醒功能的实现
    • 数据通过ESP8266上报到云端
        • 代码的实现
        • 微信实时推送
      • APP的开发

前言

由于今年天气持续干旱,给养猪行业带来了很大的用水压力,尤其是对于管理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+"#\r\n";sendtoTCPServer(upstr);upstr = "";Serial.print(data);delay(2000);}

微信实时推送

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

APP的开发

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

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

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


http://www.ppmy.cn/news/81799.html

相关文章

【分立元件】MOSFET的工作原理

MOSFET适用于瓦至十数千瓦的中小功率,特别适用于电源管理行业的入门学习。IGBT和MOSFET使用相似,但属于中大功率场合才使用,如果想使用好IGBT,也要先学习MOSFET。 对于MOSFET的学习我们需要学习它的工作原理,知道MOSFET的主要参数,MOSFET的开关过程以及如何驱动MOSFET,应…

MySQL——聚合函数

我们上一篇讲到了 SQL 单行函数。实际上 SQL 函数还有一类,叫做聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。接下来我们来看看什么是聚合函数及聚合函数的分类 1. 聚合函数介绍 1.1 什么是聚合函数? 聚合函数作用于…

Android开发不可缺少的辅助工具

目录 jadxandroid_toolscrcpy-guiCode CraftsSQLite Expert Personal jadx jadx是一款apk反编译工具。 PS&#xff1a;部分版本安装&#xff0c;无法打开类文件&#xff0c;需换个版本。 开源地址&#xff1a;https://github.com/skylot/jadx android_tool android_tool可以通…

Spring 之 jwt,过滤器,拦截器,aop,监听器

Spring 之 jwt&#xff0c;过滤器&#xff0c;拦截器&#xff0c;aop&#xff0c;监听器 一、jwt编写1.1 pom1.2 JwtUtils1.3 注意1.4 用法 二、过滤器2.1 原理2.2 使用场景2.3 使用步骤2.3.1 自定义过滤器类implements Filter2.3.2 配置类2.3.3 过滤器使用场景 2.4 问题 三、拦…

线性回归、正规方程和梯度下降法

一、线性回归简介 1.定义与公式 线性回归是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。 特点&#xff1a;只有一个自变量的情况称为单变量回归&#xff0c;多余一个自变量情况的叫做多元回归 通用公式&#xff1a; y …

java 社区人口管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 社区人口管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…

程序员必须避免的7个代码陷阱,否则你会成为 “debugger“ 的王者!

作为一名程序员&#xff0c;编写高质量、可维护、安全且高效的代码是非常重要的。然而&#xff0c;由于程序员的工作涉及到许多技术和细节&#xff0c;因此很容易陷入各种技术陷阱。下面将详细介绍程序员在编写代码时需要避免的一些常见陷阱。 1. 忽略代码质量和可维护性 在编…

gin框架返回json

一、使用gin web框架开发的两种模式&#xff1a; 前端浏览器去请求服务器&#xff0c;服务器把完整的HTML文件的内容返回给前端浏览器Vue、reactor等前端框架都自己提前定义好模板&#xff0c;后端&#xff08;服务器&#xff09;只需要返回JSON格式的数据给前端框架即可&…