物联网毕设(基于stm32的智能家居系统)

Posted 阿柒学起来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物联网毕设(基于stm32的智能家居系统)相关的知识,希望对你有一定的参考价值。

第一节 模块介绍

文章目录


前言

     又称智能住宅,在国外常用Smart Home表示。与智能家居系统含义近似的有家庭自动化、电子家庭、数字家园家庭网络、网络家居、智能家庭/建筑,在我国香港和台湾等地区,还有数码家庭、数码家居等称法。

一、云平台选择

1 Oennet(移动云平台)

OneNET-中国移动物联网开放平台是由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,提供综合性的物联网解决方案,实现物联网设备的数据获取,数据存储,数据展现。

连接移动云平台

首先找到一个Wifi服务器,打开Wifi服务,通过Stm32f103Zet6芯片驱动Esp8266模块,之后使用Esp8266的入网功能,使Esp8266连接上服务器实现上网功能, 实现上网功能之后,打开浏览器登录移动云平台建立数据集,每一个硬件对应一个数据集,数据集建立好了之后,详细的查看Http协议,严格按照Http协议的格式使用Esp8266模块给云平台发送硬件状态消息。

硬件链接的时候云平台时需注意移动云平台的服务器ip为183.230.40.33,端口号为80,再连接云成功后才能进行发送消息,使用GET发消息之前要检查密钥或者建立的数据集id是否填写准确。

上传成功后会在云平台中看到数据集的变化。

二、硬件选择

1.STM32F103ZET6芯片

1. 为什么选择STM32

STM32F系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3 [1]  。

系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。

芯片集成定时器Timer,CAN,ADC,SPII2C,USB,UART等多种外设功能。

2. STM32F103ZET6简介

最高72MHz工作频率

–内嵌经出厂调教的8MHz的RC振荡器

–串行单线调试(SWD)和JTAG接口

–多达8个定时器

–3个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入

–2个看门狗定时器(独立的和窗口型的):防止程序跑飞,单片机自动复位

–系统时间定时器:一种简单的,24位写清零、递减、自装载同时具有可灵活控制机制的计数器。

–2个I2C接口(支持SMBus/PMBus):一种简单、双向二线制同步串行总线

–3个USART接口(支持ISO7816接口,LIN,IrDA接口和调制解调控制):通用同步/异步串行接收/发送器USART是一个全双工通用同步/异步串行收发模块

–2个SPI接口(18M位/秒):总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。

3.ESP8266无线网模块


三、软件选择

1. android开发好处

(1)开放性 

在优势方面,Android平台首先就是其开放性,开放的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。  

(2)开发商

  Android平台提供给第三方开发商一个十分宽泛、自由的环境。因此不会受到各种条条框框的阻挠,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。  

(3)丰富的硬件  

这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。

四、程序流程图

五、系列文章链接

第二节 硬件端实现https://blog.csdn.net/herui_2/article/details/123965002

六、资源下载

软件APPhttps://mp.csdn.net/mp_download/manage/download/UpDetailed 硬件端https://download.csdn.net/download/herui_2/85078622

毕业设计:基于单片机的智能鱼缸系统设计与实现 - 嵌入式 物联网 stm32 51单片机 智能鱼缸


1 简介

Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目

基于单片机的智能鱼缸系统设计与实现

大家可用于 课程设计 或 毕业设计

技术解答、毕设帮助、开题指导
print("Q 746876041") 

1 课题背景意义

近年以来,随着我国综合实力飞速飙升,人们对物质和精神生活质量的要求也不断提升,各式各样的智能家居不断问世并得到消费者的喜爱。因而各样的智能鱼缸作为装饰品和智能家居的合体应景入驻家庭、办公室、商场等场所。它不仅可以作为装饰品给我们带来视觉享受,缓解精神疲劳,而且将中国传统水文化引入日常生活,极大的丰富了人们的生活。但目前市面上各式鱼缸鱼龙混杂,格式各异,大多为非智能,需要手动操作实现温控,换水,充氧,投食等。这将造成诸多不便,浪费使用者的大量时间精力,且影响鱼缸的美观性。但现代社会生活节奏较快,人们没有足够的时间动手照顾鱼缸,导致鱼缸生物成活率低。因而,现阶段智能鱼缸具有一定的市场需求。

本课题设计的目的为实现鱼缸温控、换水、充氧、投食的一体化和智能化。 该设计具有科研和实用两重价值。

2 课题研究方法

本课题设计主要是利用单片机为主控芯片,结合嵌入式技术、传感器技术、C语言编程等技术设计出满足功能的智能鱼缸系统。总体上,我们首先要根据智能鱼缸的使用场合和工作环境明确我们所设计系统所需的总体功能。其次,我们构思出系统的总体框架,绘出硬件和软件流程框图,然后根据流程图着手设计。硬件方面考虑到市场现有的芯片、元器件种类繁多,我们需要斟酌选用满足系统功能且稳定实惠的元器件。系统软件编程我们采用模块化程序设计,先根据系统功能要求构思出出程序框图,再利用C语言对各个模块进行编程设计。最后利用KeiluVision5对源程序进行调试、查错和修改,最后导入硬件设备,总体运行系统,确保系统满足功能要求且能稳定的运行。

3 智能鱼缸系统功能要求

该智能鱼缸系统的设计是以日常生活中鱼缸的养护为背景, 根据当前市场上的需求, 智能鱼缸系统需要自动实现自动温控、 换水、 充氧、 投食等功能。

系统需要稳定运行尽可能避免发生故障, 且需要尽可能的降低成本, 具有实用价值。系统需要对鱼缸内部环境进行检测, 并保持环境参数保持在适宜鱼类生存的范围内。 首先是温度, 根据了解, 鱼类的适宜的生存环境一般都在 22~28℃, 当温度传感器检测到水温低于 22℃时, 系统启动加热器加热, 当温度达到 28℃时系统停止加热, 使温度在适宜鱼类生存的范围内波动。

其次是充氧, 目前生活中人们无法对充氧做到很好的把控, 长时间不充氧容易导致鱼类缺氧死亡, 而一直开启氧泵无疑是对资源的浪费, 因而, 利用定时控制氧泵开关,保证水中的一定的溶氧量将一定程度上解决上述问题。

鱼类的投食频率一般是 12 小时或者 24 小时, 最佳时间一般在中午这个时间段, 因而可以利用系统的时钟模块定时控制投食器。

水循环主要是为了除去水中的杂质, 改良水质, 可以利用利用系统定时模块定时开关水泵, 将水通过活性炭海绵等过滤完成净化, 为鱼类提供适宜生存的环境。

4 系统结构

鱼类生存的环境要素包含很多, 如光照、 水的温度、 营养物、杂质含量、 溶氧量、 PH 等等。 在此设计中, 我们主要考虑到鱼类生存的四大环境要素:水温、 水溶氧量、 水杂质含量、 营养物。 而各个要素对应的系统处理功能如下表所示

学长设计的智能鱼缸控制系统主要实现自动加热、 自动水循环、 自动充氧、 自动投食四个功能, 选用 STC89C52 单片机作为系统核心芯片, 控制温控模块、 时钟模块和其他一些模块。 温度控制模块中 DS18B20 温度传感器负责采集温度参数传送至主控芯片,利用继电器控制加热器以实现恒温。 时钟模块通过继电器控制氧泵、 水泵的开关, 实现定时充氧、 定时水循环。 而自动投食功能利用时钟模块控制步进电机来模拟。 系统结构框图如下图所示。

5 硬件模块

5.1 单片机最小系统

本设计采用的是STC89C52单片机芯片,…单片机最小系统电路如图所示。

(1)复位电路:复位电路的作用就是在程…。

(2)晶振电路:晶振电路为单片…

5.2 温度检测模块

此温度模块为DS18B20,主要组成部分由一个…。

该芯片通过引脚2同单片机P1.7口进行对接。…温度检测模块如图3-3所示。

5.3 继电器模块

在排水或者进行投食时均要启用电机装置,…继电器模块如图


继电器一共有6个引脚,…引脚功能如下

5.4 显示模块

电路中采用了LCD1602显示器。…LCD1602显示器如图所示。

6 实现效果

将各个硬件部分组装后得到最终实物图

其中, 1 是 USB 电源接口, 为系统提供 5V 的电源。 2 是按钮控制开关, 是系统的主开关。 3 是 LCD1602 显示器, 用于显示相关数据。 4 是 DS1302 时钟芯片。 5 是 24C02存储芯片。 6 是四个控制按键, 用于设置系统参数。 7 是 DS18B20 温度传感器, 与用于采集实时温度值。 8、 9、 10 依次是控制加热、 充氧、 水循环的三个继电器。 11 为用于模拟投食的步进电机。 12 为步进电机电源输入接口。

自动温控

学长在演示中用手握住温度传感器来模拟加热器工作水温上升, 温度上升超过上限值 31℃时, 继电器 1 灯灭, 表示模拟加热器断电, 加热结束, 如图所示。 加热结束后温度逐渐降低, 直至温度再次低于下限温度值时, 继电器再次通电, 启动加热, 以维持鱼缸温度在一定范围内波动。

自动投食

根据系统的需求, 投食频率大致为 24 小时一次, 通过定时开启投食器来实现。 但为了方便演示, 我们通过按键将 Feed Time 设置为系统时间的下一分钟, 当系统时间达到设定时间, 步进电机转动, 用于模拟投食。

自动充氧

自动充氧与投食相似, 我们可以设置固定的时间, 为了演示方便, 我们也可以设置在系统时间的下一分钟, 当系统时间达到设定时间后, 继电器 2 亮灯开启, 进行模拟充氧。

7 关键代码

#include"reg52.h"
#include "delay.h"
#include "typedef.h"
#include "1602.h"
#include "key.h"
#include "set.h"
#include "18b20.h"
#include "24c02.h"
#include "ds1302.h"
uchar PageNum=0; //0显示温湿度 1显示温度和报警数值2显示湿度和报警数值
float Temp_Data=0;
uchar AlarmTemp[]=32,20; //高低温度
unsigned char FeedTime[3]=0; //喂食时间
unsigned char O2Time[3]=0;  //充氧气时间
unsigned char LoopTime[3]=0; //水循环时间
sbit RELAY1 = P2^2; //加水继电器
sbit RELAY2 = P2^1; //加热继电器
sbit RELAY3 = P2^0; //放水继电器
sbit ENA=P3^2;
sbit ENB=P3^3;
void TimerInit(void);
void GetTemp(void);
void PageInit(void);
void PageDisplay(void);
void DataLoad(void); //数据加载
void TempInit(void); //
void HeatControl(void); //加热自动控制
void Timer1_Init(void);  //50毫秒@11.0592MHz
void IncO2Control(void);
void FeedControl(void);
void LoopControl(void);
unsigned char FeedSecond=0;
unsigned char O2Second=0;
unsigned int LoopSecond=0;
unsigned char CountTime[3]=0; //水循环时间计时
void main(void)

Delay_1ms(100);
LCD_Init();
TimerInit();
PageInit();
DataLoad();
TempInit();
Timer1_Init();
while(1)

 GetTemp();
 DS1302_Read();
 FeedControl();
HeatControl();
 IncO2Control();
PageDisplay();
 LoopControl();
 Delay_1ms(50);
 

void Timer0_Serve(void) interrupt 1
 
TH0 = (65535-20000)/256; //20MS定时
TL0 = (65535-20000)%256;
LCD_Refresh(); //LCD刷新
KEY_Scan();

void Timer1_Serve(void) interrupt 3 //50ms定时
 
 static unsigned char T50MS=0;
 TL1 = 0x00;  //设置定时初值
 TH1 = 0x4C;   //设置定时初值
 T50MS++;
 if(T50MS>=20)
 
 T50MS=0;
 CountTime[2]++;
if(CountTime[2]>=60)
 
 CountTime[2]=0;
  CountTime[1]++;
  if(CountTime[1]>=60)
  
  CountTime[1]=0;
  CountTime[0]++;
if(CountTime[0]>23)
  CountTime[0]=0;
 
 
 if(FeedSecond>0)
 FeedSecond--;
 if(O2Second>0)
 O2Second--;
  if(LoopSecond>0)
  
  LoopSecond--;
 
 

void HeatControl(void) //加热控制

/*------------------低于下限开始加热---------------------*/
 if(Temp_Data<AlarmTemp[1])
 
RELAY1=0;
 
/*------------------高于上限停止加热---------------------*/
if(Temp_Data>AlarmTemp[0])
 
 RELAY1=1;
 

void TimerInit(void)

 TMOD &= 0xF0;
 TMOD |= 0X01; //T1工作在定时模式, T0 工作在8位自动重载计数
 TL0 = (65535-20000) % 256; //T0工作在定时模式 50ms定时
TH0 = (65535-20000)  / 256;
 ET0 = 1;
 TR0 = 1;
 EA = 1;

void PageDisplay(void)

/*---------------------------------------------------------*/
if(KeyVal=='E')

KeyVal=0;
 PageNum++;
 if(PageNum>4)

 PageNum=0;
 
 PageInit();

/*-------------------------------------------------------*/
switch(PageNum)

/*-------------------------------------------------------*/
case 0: //显示和设置实时时间

  LCD_DisplayDate(0,Date);
  LCD_DisplayTime(16,Time);
  if(KeyVal=='S')
  
  KeyVal = 0;
  SetRTC();
 
break;
/*-------------------------------------------------------*/
case 1: //显示实时温度和上下限值
 
TempDisplay(5,Temp_Data);
DisplayU8(18,AlarmTemp[0]);  //
DisplayU8(26,AlarmTemp[1]);  //
if(KeyVal=='S')

KeyVal=0;
SetTempHigLow(AlarmTemp);
WrToROM(AlarmTemp,5,2); //温度存储地址0

 break;
/*-------------------------------------------------------*/
 case 2:
 
 LCD_DisplayTime(16,FeedTime);
  if(KeyVal=='S')
  
  KeyVal=0;
  SetClockTime(FeedTime);
 WrToROM(FeedTime,20,3);
   
 break;
/*-------------------------------------------------------*/
case 3:

 LCD_DisplayTime(16,O2Time);
  if(KeyVal=='S')
  
  KeyVal=0;
  SetClockTime(O2Time);
 WrToROM(O2Time,25,3);
   
break;
/*-------------------------------------------------------*/
case 4:

 LCD_DisplayTime(16,LoopTime);
  if(KeyVal=='S')

  KeyVal=0;
  SetClockTime(LoopTime);
  WrToROM(LoopTime,30,3);
  
break;
default:  PageNum=0; PageInit(); break;

/*-------------------------------------------------------*/

void IncO2Control(void)

 if(1==CompareClock(O2Time,Time))
 
 O2Second=60;
 
 if(O2Second>0)
 RELAY2=0;
 else
 RELAY2=1;

void FeedControl(void)

 if(1==CompareClock(FeedTime,Time))
 
FeedSecond=10;
 
 if(FeedSecond>0)
 
 ENA=0;
 ENB=1;
 
 else
 
 ENA=1;
 ENB=1; 
 

void LoopControl(void)

 if(1==CompareClock(LoopTime,CountTime))
 
 CountTime[0]=CountTime[1]=CountTime[2]=0;
 LoopSecond=60;
 
 if(LoopSecond>0)
 
 RELAY3=0;
 
 else

 RELAY3=1;
 



8 最后

技术解答、毕设帮助、开题指导
print("Q 746876041") 

以上是关于物联网毕设(基于stm32的智能家居系统)的主要内容,如果未能解决你的问题,请参考以下文章

毕业设计 : 基于stm32的智能水杯 - 恒温控制 饮水杯 单片机 物联网 嵌入式

毕业设计 - 基于单片机的智能手环 -计步器 嵌入式 物联网 stm32

毕业设计:基于单片机的超声波智能跟随小车 - 物联网 智能小车 嵌入式单片机 stm32 跟随小车

毕业设计stm32机器视觉的人脸识别系统 - 单片机 物联网 嵌入式

毕业设计 - 题目: 基于单片机的智能小车 - 嵌入式 物联网 本科毕设

基于STM32设计物联网在线智能称重系统(OneNet)_2022