基于单片机的智能空调系统的设计与实现

 功能介绍

  • 以51单片机作为主控系统;
  • LCD1602液晶显示当前水温,定时提醒,水量变化
  • DS18B20检测当前水体温度;
  • 水位传感器检测当前水位;
  • 继电器驱动加热片进行水温加热;
  • 定时提醒喝水,蜂鸣器报警;
  • 红外传感器检测是否有人拿去水杯;
  • 整个电路以5v供电;

 电路图

PCB


源代码

#include <reg52.h>
#include <intrins.h>
#include <stdio.h>//printf串口输出头文件#define uchar unsigned char
#define ushort  unsigned int
#define uint  unsigned long#include "lcd1602.h"
#include "uart_trx.h"
#include "eeprom52.h"#define RATIO 800		//系数,建议选择800-1000sbit key1 = P1^0;//加键
sbit key2 = P1^1;//减键sbit beep = P2^0;//蜂鸣器
sbit Fan = P1^3;//风扇unsigned char pmBuf[7] = 0;//数据接收数组
uint PM25_Value = 0;     		//PM = ((pmBuf[1]<<8)+pmBuf[2])/1024*8*ratio
uint PM25_ValueMax = 200; //上限初始值void EEPROM_WRITE()//EEPROM写入
{SectorErase(0x2000);//擦除扇区byte_write(0x2001, (PM25_ValueMax>>8)&0xFF);//存储高8位byte_write(0x2002, (PM25_ValueMax>>0)&0xFF);//存储低8位byte_write(0x2009, 111);//存储校验值
}void EEPROM_READ()//EEPROM读出
{if(byte_read(0x2009)!=111)//开机检测单片机是不是第一次使用,如果不是第一次使用,则先把数据存储一遍,再读取,数据就不会乱码{EEPROM_WRITE();//存储delay_ms(100);}PM25_ValueMax = byte_read(0x2001)<<8 | byte_read(0x2002);//读取上限值
}void Get_PM(void)//读取PM2.5值,具体的数据帧意思,请自行查阅芯片手册
{char i = 0;char j = 0;char k = 0;COM.RX_Cnt = 0;if(COM.B_RX_OK == 1)//串口数据接收完成{for(i = 0; i<8; i++){if((RX_Buffer[i] == 0xAA)&&(RX_Buffer[i+6]==0xFF))//判断接收的数据是否正确{goto find2;}}goto end2;
find2:for(j = 0; j<7; j++){pmBuf[j] = RX_Buffer[i+j];//数据获取}PM25_Value = (unsigned int)((pmBuf[1]*256)+pmBuf[2])*5/2048.0*RATIO;//计算PM2.5值COM.B_RX_OK = 0;}
end2:return;
}void main(void)
{unsigned int test;EEPROM_READ();//开机读取存储值LCD_init();//1602初始化Uart_Init(2400);//串口初始化波特率2400LCD_write_string(0,0,"Pm2.5:    ug/m3 ");LCD_write_string(0,1,"PmMax:    ug/m3 ");//显示上限值LCD_write_char(7, 1, PM25_ValueMax % 1000 / 100 + 0x30);LCD_write_char(8, 1, PM25_ValueMax % 100 / 10 + 0x30);LCD_write_char(9, 1, PM25_ValueMax % 10 + 0x30);while(1){if (test ++ > 250)//大约250ms读取一次{test = 0 ;Get_PM();//获取PM2.5if(PM25_Value > 999)//限值,最大999PM25_Value = 999;//显示PM2.5LCD_write_char(7, 0, PM25_Value % 1000 / 100 + 0x30);LCD_write_char(8, 0, PM25_Value % 100 / 10 + 0x30);LCD_write_char(9, 0, PM25_Value % 10 + 0x30);if(PM25_Value >= PM25_ValueMax)//超过上限,蜂鸣器报警{beep = ~beep;Fan = 0;delay_ms(100);}else{beep = 1;Fan = 1;}}if(key1 == 0)//加键按下{delay_ms(10);//消抖if(key1 == 0){beep = 0;delay_ms(100);beep = 1;while(key1 == 0);if(PM25_ValueMax<999)PM25_ValueMax+=10;//上限最大到999,每次加10//显示LCD_write_char(7, 1, PM25_ValueMax % 1000 / 100 + 0x30);LCD_write_char(8, 1, PM25_ValueMax % 100 / 10 + 0x30);LCD_write_char(9, 1, PM25_ValueMax % 10 + 0x30);EEPROM_WRITE();//保存}}if(key2 == 0)//减键按下{delay_ms(10);if(key2 == 0){beep = 0;delay_ms(100);beep = 1;while(key2 == 0);if(PM25_ValueMax>=10)PM25_ValueMax-=10;//上限最小到0,每减10//显示LCD_write_char(7, 1, PM25_ValueMax % 1000 / 100 + 0x30);LCD_write_char(8, 1, PM25_ValueMax % 100 / 10 + 0x30);LCD_write_char(9, 1, PM25_ValueMax % 10 + 0x30);EEPROM_WRITE();//保存}}delay_ms(1);}
}

        

元器件清单

基于单片机的智能空调系统的设计与实现
名称型号数量
单片机STC89C521
IC座DIP401
万能板9*15cm1
晶振11.0592M1
电解电容10uF1
电解电容1000uf1
瓷片电容22pF2
电阻10K3
电阻1K4
电阻2K1
LED红5MM1
LED绿5MM1
蜂鸣器有源1
三极管S90121
按键5
显示屏LCD16021
排针16P1
排母16P1
人体红外模块HC-SR5011
排母3P1
温度传感器DS18B201
烟雾传感器MQ-21
模数转换器ADC08321
IC座8P1
GSM模块SIM800c1
电源座5MM1
电源线5V2A1
自锁开关1
继电器1
小水泵1
导线若干
焊锡丝若干

参考文献

参考文献
[1]王德保.GPS在城市控制网中的应用研究[D].山东:山东科技大学,2005.
[2]何立民.从现代计算机视角看嵌入式系统(4)嵌入式系统40年发展史[J].单片机与嵌入式系统应用,2016,16(04):77-79.
[3]康桂霞,刘达.FPGA应用技术教程[M].北京:人民邮电出版社:201306.229.
[4]朴德慧,衣英刚.液晶显示器驱动板MCU电路介绍(上)[J].家电检修技术,2012(11):53.
[5]段廷魁.全球卫星定位系统(GNSS)在工程测量中的实践运用探索0[J].科技创新与应用,2021(05):182-184.
[6]宋戈,黄鹤松.51单片机应用开发范例大全[M].北京:人民邮电出版社:国家信息技术紧缺人才培养工程系列丛书,201206.558.
[7]罗小青.单片机原理及应用教程[M].北京:人民邮电出版社,201409.180.
[8]沈庆阳.单片机实践与应用[M].北京:清华大学出版社,2002.
[9]杜深慧.温湿度检测装置的设计与实现[M].北京:机械工业出版社,2004.
[10]林嘉.基于89S52的LCD1602程序设计[J].电脑知识与技术,2012(26):6376-6378.
[11]刘光伟.基于单片机的温室温湿度监测系统设计与实现[D].秦皇岛市:燕山大学,2012.
[12]褚福强,董学仁.单片机的网络接入技术研究[J].仪器仪表用户,2006(05):4-5.
[13]陈英俊.基于单片机的温湿度监测和报警系统设计[J].广东石油化工学院学报,2013(04):42-46.
[14]廖丽媛.基于应变式扭矩传感器的测量系统的设计[D].上海市:东华大学,2013.
[15]刘九庆.温室环境工程技术[M].吉林:东北林业大学出版社,2002.
[16]王明喜,崔世茂.大棚型日光温室光照、温度及湿度等性能的初步研究[J].农业工程技术(温室园艺),2008(05):19-21.
[17]张迎辉.单片微型计算机键盘接口设计[J].信息技术,2004(07):68-69+91.
[18]张友德,赵志英.单片微型机原理应用与实验[M].上海市:复旦大学出版社,2003.
[19]赵芝芸.温室智能监控系统[D].江苏:江苏科技大学,2010.
[20]张宏伟.基于STM32的智能环境监测系统设计与实现[J].大庆师范学院学报,2020(05):32-35.
[21]王世伟,杨越.基于STM32的多型号舵机调试器设计[J].九江学院学报(自然科学版),2020,35(02):33-36.
[22]Pengcheng Zhao,Meijun Ni,Chao Chen,Chenxi Wang,PingpingYang,Xiahui Wang,Chunyan Li,Yixi Xie,Junjie Fei. A Novel Self-protection Hydroquinone Electrochemical Sensor Based on Thermo -sensitive Triblock Polymer PS-PNIPAm-PS[J].
[23]Jian Wang,Jing Chen,Xiaofu Xiong,Xiaofeng Lu,ZhengLiao,Xiaobo Chen.Temperature safety analysis and backup protectionscheme improvement for overhead transmission line in poweroscillation condition[T].Electric Power Systems Research,2019,166.
[24]Fuji Electric Co.Ltd.;Patent Issued for SeiconductorDevice And Method Of Outputting Temperature Alarm (USPTO10,164,626)[J].Electronics Newsweekly,2019.
[25]VERSID,INC;Patent Issued for Refrigeration UnitTemperature Alarm Using Thermal Properties of Food to Eliminate FalseAlarms (USPTO 9752810)[J].Computers,Networks &Communications,2017.
[26]Fuji Electric Co.Ltd;Patent Application Titled"Semiconductor Device and Method of Outputting Teperature Alarm"Published Online (USPTO 20170077919)[J]. Technology & BusinessJournal,2017.
[27]su Yuanping,Xu Lihong,Goodman Erik D.Multi-layerhierarchical optimisation of greenhouse climate setpoints for energyconservation and improvement of crop yield[J].Biosystems
[28]黄松茂.基于STM32的家庭环境监测系统的设计与实现[D].甘肃兰州.西北师范大学,2018.:23-30.
[29]李大琳.智能车内温度监测系统设计[J].山东工业技术,2014(12):80-81.
[30]郭雯,王海涛. 智能输液系统的发展与应用.医疗卫生装备,2012

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/2657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习注解的使用模拟RequestMapping解析path

文章目录 前言一、代码部分总结 前言 注解在后端开发过程中提供了许多的便利&#xff0c;提高了代码简洁性和可读性&#xff0c;在应用程序中占据越来越重要的作用&#xff0c;很有学习的必要&#xff0c;接下来会通过代码来完成对类、方法、属性注解的解析。 一、代码部分 p…

LeetCode面试题02.07.链表相交

面试题02.07.链表相交 两种解题思路 面试题02.07.链表相交一、双指针二、哈希集合 一、双指针 这道题简单来说&#xff0c;就是求两个链表交点节点的指针 这里注意&#xff1a;交点不是数值相等&#xff0c;而是指针相等 为了方便举例&#xff0c;假设节点元素数值相等&…

用Python采用Modbus-Tcp的方式读取485电子水尺数据

README.TXT 2023/6/15 V1.0 实现了单个点位数据通信、数据解析、数据存储 2023/6/17 V2.0 实现了多个点位数据通信、数据解析、数据存储 2023/6/19 V2.1 完善log存储&#xff0c;仅保留近3天的log记录&#xff0c;避免不必要的存储&#xff1b;限制log大小&#xff0c;2MB。架…

数字原生时代,奥哲如何让企业都成为“原住民”?

22年前&#xff0c;美国教育学家马克‧普伦斯基&#xff08;Marc Prensky&#xff09;出版了《数字原生与数字移民》&#xff08;Digital Natives, Digital Immigrants&#xff09;一书&#xff0c;首次提出了“数字原住民”和“数字移民”两大概念&#xff0c;用来定义跨时代的…

法规发展与算法备案:预测未来的重要议题

随着科技的快速发展&#xff0c;算法逐渐成为各行各业的核心驱动力&#xff0c;尤其在互联网领域&#xff0c;算法更是被赋予了生命力&#xff0c;为人们提供了便利的同时&#xff0c;也引发了一系列问题。因此&#xff0c;未来法规发展对于算法备案的关注将变得尤为重要。本文…

05-Vue基础之Class 与 Style 绑定

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章…

OpenCV如何实现图像截取

import cv2img cv2.imread("image/2.png", 1) roi cv2.selectROI(img,showCrosshairTrue,fromCenterFalse) xmin,ymin,w,h roi imgROI img[ymin:yminh,xmin:xminw].copy()cv2.imshow("demo",imgROI) cv2.waitKey(0) 代码的核心就是用到了OpenCV中的函数…

leetcode_54 螺旋矩阵

1. 题目 螺旋矩阵 2. 题意 给定一个二维数组&#xff0c;顺时针螺旋输出其中的元素。 3. 题解 3.1 自己想的 一层一层的&#xff0c;关键点在于如何进入下一循环。和确定停止的位置&#xff0c;找停止的位置写了个函数。 用控制比特位的方式来进行控制一次顺时针循环, 还…

序列化的意义以及常见的的序列化方式

一&#xff0c;为什么序列化&#xff1f; 对象保存到文件或数据库网络编程时对象跨平台跨语言传输&#xff0c;也即从windows上序列化的对象可到linux上反序列化&#xff0c;用c&#xff03;序列化的对象可以被java反序列化。RPC远程接口调用 二&#xff0c;常见得序列化方式…

【数据结构】_1.集合与复杂度

目录 1. 集合框架 2. 时间复杂度 2.1 时间复杂度和空间复杂度 2.2 时间复杂度的概念 2.3 大O的渐进表示法 2.3.1 精确的时间复杂度表达式 2.3.2 大O渐进表示法的三条规则 2.3.3 时间复杂度的最好、平均与最坏情况 2.4 时间复杂度计算示例 3.空间复杂度 1. 集合框架 …

字节跳动后端面试,笔试部分

var code "7022f444-ded0-477c-9afe-26812ca8e7cb" 背景 笔者在刷B站的时候&#xff0c;看到了一个关于面试的实录&#xff0c;前半段是八股文&#xff0c;后半段是笔试部分&#xff0c;感觉笔试部分的题目还是挺有意思的&#xff0c;特此记录一下。 笔试部分 问…

【多线程例题】顺序打印abc线程

顺序打印-进阶版 方法一&#xff1a;三个线程竞争同一个锁&#xff0c;通过count判断是否打印 方法二&#xff1a;三个线程同时start&#xff0c;分别上锁&#xff0c;从a开始&#xff0c;打印后唤醒b 三个线程分别打印A&#xff0c;B&#xff0c;C 方法一&#xff1a;通过co…

JavaFX中MVC例子理解

JavaFX可以让你使用GUI组件创建桌面应用程序。一个GUI应用程序执行三个任务&#xff1a;接受用户的输入&#xff0c;处理输入&#xff0c;并显示输出。而一个GUI应用程序包含两个 类型的代码&#xff1a; 领域代码。处理特定领域的数据和遵循业务规范。交互代码。处理用户输入…

【Linux】多线程(上)

本文详细介绍了多线程的常见概念 生产者消费者模型将在多线程&#xff08;下&#xff09;继续讲解 欢迎大家指正 提起讨论进步啊 目录 多线程的理解 线程的优点 线程的缺点&#xff1a; 线程的用途 线程VS进程 用户级线程库 POSIX线程库 线程创建&#xff1a; 线程…

springboot整合jwt

JWT介绍 JWT是JSON Web Token的缩写&#xff0c;即JSON Web令牌&#xff0c;是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息&#xff0c;以便于从资源服务器获…

DICOM开源库兼容性问题

常见的DICOM开源库有dcmtk、fo-dicom、dcm4che3等&#xff0c;DICOM开源库遇到的兼容性问题类似&#xff0c;——dcmtk兼容性最强&#xff0c;fo-dicom次之&#xff0c;dcm4che3最差。 本人在dicom医学影像方面从事软件开发已有10几年&#xff0c;用过dcmtk&#xff0c;fo-dico…

Android国际化各国语言简写

<?xml version"1.0" encoding"utf-8"?> <locale-config xmlns:android"http://schemas.android.com/apk/res/android"><locale android:name"af"/> <!-- 南非荷兰语 --><locale android:name"am&qu…

Spark(32):Spark性能调优之Shuffle调优

目录 0. 相关文章链接 1. 调节 map 端缓冲区大小 2. 调节 reduce 端拉取数据缓冲区大小 3. 调节 reduce 端拉取数据重试次数 4. 调节 reduce 端拉取数据等待间隔 5. 调节 SortShuffle 排序操作阈值 0. 相关文章链接 Spark文章汇总 1. 调节 map 端缓冲区大小 在 Spark 任…

基于.net6的WPF程序使用SignalR进行通信

之前写的SignalR通信&#xff0c;是基于.net6api&#xff0c;BS和CS进行通信的。 .net6API使用SignalRvue3聊天WPF聊天_signalr wpf_故里2130的博客-CSDN博客 今天写一篇关于CS客户端的SignalR通信&#xff0c;后台服务使用.net6api 。其实和之前写的差不多&#xff0c;主要在…

Ubuntu22.04密码忘记怎么办 Ubuntu重置root密码方法

在Ubuntu 22.04 或其他更高版本上不小心忘记root或其他账户的密码怎么办&#xff1f; 首先uname -r查看当前系统正在使用的内核版本&#xff0c;记下来 前提&#xff1a;是你的本地电脑&#xff0c;有物理访问权限。其他如远程登录的不适用这套改密方法。 通过以下步骤&#…