热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

泳池水质监控PH温度浑浊度测量_基于STC89C51单片机

前述:QQ:3177227373VX:F9986858主要内容研究泳池水质监控系统的整体结构设计,包括总体方案设计、软硬

前述:
QQ:3177227373
V X:F9986858


主要内容

研究泳池水质监控系统的整体结构设计,包括总体方案设计、软硬件总体设计等,要求监控泳池水温度、PH值、浑浊度等。
以单片机为主要控制器件,主要包括硬件电路的设计和系统程序的设计。硬件电路主要包括传感器的选取,单片机的选取与应用,A/D转换的选用,电源设计,显示部分设计等;软件设计主要包括主程序设计和子程序设计,监测结果通过显示模块显示。


系统硬件结构设计


单片机的选择

泳池监控系统的核心是微处理器,对处理器的选型将直接决定系统的性能及总体开发方式。选型的主要标准有:
1、具有较高的计算能力;
2、具备与其他设备的通信接口;
3、整体功耗较低等。
根据获取和软件开发的难易程度,经过初步的筛选,基本在MSP430单片机,51单片机和其他PIC中进行选择。根据前文对低功耗要求,首先要选择的是具备低功耗模式且运算速度较快的芯片。
从供电电压上来看,MSP430的最低工作电压为3.3V,51单片机及其他PIC为5V,在工作电压的需求方面,与其他单片机相比,MSP430对电压的要求较低,可以更好的降低功率。另外,MSP430自身带有5种低功耗模式,可以根据不同的实际情况选择对应的低功耗模式,在程序设计上可以根据实际需要关闭闲置的模块,来达到低功耗的目的。在本次筛选对比MSP430系列的单片机低功耗以及运算能力方面有着相当的优势。
根据对比筛选得出,本设计选择MSP430芯片作为主控芯片。根据前人的设计证明,以及MSP430价格上的优势加上片内资源丰富,MSP 430能够很好的完成智能监控的主控功能。整个数据采集处理流程为,传感器模块将采集到的模拟信号经过A/D模块转化为数字信号传至MSP430芯片中,MSP430芯片对传来的信号进行分析和处理,实现对采集信息的显示以及对控制端的控制。
本设计主控芯片采用的是MSP430系列单片机中的f149型号。该单片机在程序设计、开发调试及实际应用上都具有明显的优点。具有方便、便宜、实用等优点,给用户提供了一个理想的样机开发方式。MSP430主控芯片特点:1、处理能力强;2、运算速度快;3、超低功耗;4、折叠片内资源丰富;5、开发环境简单。


传感器选择


温度传感器:

经常用到的温度传感器类型有、半导体、热电偶、热敏电阻等,其中半导体测温元件又分为电压型、电流型和数值型。DS18B20传感器为数值型温度传感器、其具备了导线少、体积小以及使用方便等特点。虽然它有0.5℃的固有测温误差为,但是考虑到作为泳池水质的温度采集,0.5℃的误差是可以接受的,其优点远大于缺点。因此本设计采用DS18B20数字温度传感器。
DS18B20温度传感器输出数字信号,通过程序编辑设置可选择数字值的位数(9-12位),本设计基于泳池水环境的实际使用情况,选择DS18B20的防水封装,该封装类型可以直接将传感器安装与水中,且体积小安装方便。


PH值传感器:

PH值的测量,主要由指示电极和参考电极构成。目前主要的指示电极有两大类,分别为金属电极和玻璃电极。在实际应用中由于各种原因,金属电极仅仅在工业测量中使用。而玻璃电极在实验测量和工业测量中都有比较广泛的应用。
在PH值测量中玻璃电极和金属电极都具有比较良好的复现性,都存在可以接受的测量误差,都能够较为准确的测量出被测溶液的PH值。经过各两类电极的比较,本设计采用玻璃电极传感器采集泳池水中的PH值。


水浊度传感器:

游泳池水质在正常营业过程中随着游泳人员越来越多加上所处的自然环境,水中出现越来越多的悬浮颗粒,从而导致水质被污染。对水浊度进行检测主要是检测水中悬浮颗粒的含量。
本设计选用的浊度传感器为红外传感器,内部有封装的红外对管。对管平行放置于泳池的水环境中,通过红外对管发射端发出光线,红外对管接收端把透过的光强度转化为电流。水中悬浮颗粒会挡住红外传感器发出的一部分光线,使光线的强度发生改变。水中的悬浮颗粒越多则水浊度越高,透过光线的强度则越弱,接收端转化出来的电流也越小。相反,水浊度越高,透光性越强则电流越大。所以可以通过对浊度传感器电流的检测,完成对泳池水浊度的监测。
在这里插入图片描述


系统软件结构设计

主程序是程序设计的主干,在主程序的调控下完成整体的工作。本设计实际流程为:打开开关,单片机通电,首先进行系统初始化,LCD显示屏进入欢迎界面,2秒钟后进入系统测量程序,屏幕实时显示测量的值,整个系统开始正常工作。主程序流程如图所示。
在这里插入图片描述


实物照片

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


仿真

在这里插入图片描述


PCB

在这里插入图片描述


部分代码


浑浊度计算

//浑浊度计算
void TURB_Date()
{//浑浊度获取并计算Dat1&#61;ReadADC(1);TU&#61; 不展示核心代码;//计算电压temp_data&#61;shi*10&#43;ge;//计算温度TU_calibration&#61;不展示核心代码;//温度补偿TU_value&#61;不展示核心代码;//转换公式if(TU_value<&#61;0){TU_value&#61;0;}if(TU_value>&#61;3000){TU_value&#61;3000;}TU_Val&#61;(int)TU_value/30;//计算为百分比
}

PH值计算

//PH值计算
void PH_Date()
{//PH值获取并计算Dat2&#61;ReadADC(0);ADC_Voltage_1&#61;不展示核心代码;//转换为电压值PH_Value&#61;不展示核心代码;//转换公式if(PH_Value<&#61;0){PH_Value&#61;0;}if(PH_Value>&#61;14){PH_Value&#61;14;}Disbuff_PH[0]&#61;(int)(PH_Value*100)/1000;Disbuff_PH[1]&#61;(int)(PH_Value*100)%1000/100;Disbuff_PH[2]&#61;(int)(PH_Value*100)%100/10;Disbuff_PH[3]&#61;(int)(PH_Value*100)%10;PH_DAT&#61;Disbuff_PH[0]*1000&#43;Disbuff_PH[1]*100&#43;Disbuff_PH[2]*10&#43;Disbuff_PH[3];
}

LCD1602显示

void LCD_Init()//液晶初始化
{u8 i;LCD_WR&#61;0;LCD_Write_Cmd(0x38);//设置16*2显示,5*7点阵&#xff0c;8位数据接口LCD_Write_Cmd(0x0c);//设置开显示&#xff0c;0x0e显示光标 0x0c不显示光标LCD_Write_Cmd(0x06);//写一个字符后地址指针自动加&#xff11;&#xff0c;光标自动右移LCD_Write_Cmd(0x01);//清屏LCD_Write_Cmd(0x80);//数据指针定位到第一行第一个字处for(i&#61;0;i<16;i&#43;&#43;)LCD_Write_Data(str1[i]);//液晶显示第一行写数据LCD_Write_Cmd(0xc0);//数据指针定位到第二行第一个字处for(i&#61;0;i<16;i&#43;&#43;)LCD_Write_Data(str2[i]);//液晶显示第二行写数据
}//LCD1602显示函数
void LCD_Manifest(u8 row,u8 add,u8 date)
{if(row&#61;&#61;1) LCD_Write_Cmd(0x80&#43;add);if(row&#61;&#61;2) LCD_Write_Cmd(0xc0&#43;add);LCD_Write_Data(0x30&#43;date);
}void LCD_Write_Cmd(u8 com)//液晶写命令
{LCD_RS&#61;0;//选择写命令模式Date&#61;com;//将要写的命令字送到数据总线上delay_ms(1);LCD_E&#61;1;//使能端给一高脉冲&#xff0c;高脉冲有效delay_ms(1);LCD_E&#61;0;
}
void LCD_Write_Data(u8 date)//数据写命令
{LCD_RS&#61;1;//选择写数据模式Date&#61;date;delay_ms(1);LCD_E&#61;1;//使能端给一高脉冲&#xff0c;高脉冲有效delay_ms(1);LCD_E&#61;0;
}

ADC采集

//读取AD模数转换的值&#xff0c;有返回值
unsigned char ReadADC(unsigned char Chl)
{unsigned char Data;Start(); //写入芯片地址Send(0x90);Ack();Send(0x40|Chl);//写入选择的通道&#xff0c;Chl的值分别为0、1、2、3&#xff0c;分别代表1-4通道Ack();Start();Send(0x91); //读入地址Ack();Data&#61;Read(); //读数据Scl&#61;0;NoAck();Stop();return Data; //返回值
}

DS18B20温度采集

void Tem_display(u16 temp)
{float tp;tp&#61;temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量//如果温度是正的那么&#xff0c;那么正数的原码就是补码它本身temp&#61;不展示核心代码; //留一个小数点就*10&#xff0c;&#43;0.5是四舍五入&#xff0c;因为C语言浮点数转换为整型的时候把小数点//后面的数自动去掉&#xff0c;不管是否大于0.5&#xff0c;而&#43;0.5之后大于0.5的就是进1了&#xff0c;小于0.5的就//算加上0.5&#xff0c;还是在小数点后面。shi &#61; temp % 1000 / 100; //显示温度十位数ge &#61; temp % 100 / 10; //显示温度个位数xs &#61; temp % 10; //显示小数一位Temp_Now&#61;(u16)temp%1000;
}//读取温度
int Ds18b20ReadTemp()
{int temp&#61;0;u8 tmh,tml;Ds18b20ChangTemp(); //先写入转换命令Ds18b20ReadTempCom(); //然后等待转换完后发送读取温度命令tml&#61;Ds18b20ReadByte(); //读取温度值共16位&#xff0c;先读低字节tmh&#61;Ds18b20ReadByte(); //再读高字节不展示核心代码return temp;
}

推荐阅读
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
author-avatar
国王的驴耳朵要吐槽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有