您好,欢迎来到榕意旅游网。
搜索
您的当前位置:首页基于51单片机的水塔水箱液水位监测控制系统无线WIFI报警

基于51单片机的水塔水箱液水位监测控制系统无线WIFI报警

来源:榕意旅游网

硬件电路的设计

链接:
提取码:hukw

系统的功能分析及体系结构设计
3.1.1系统功能分析
本系统分为主机和从机两部分组成。
主机由STCC52单片机电路+液位传感器电路+WiFi模块ESP8266电路+电源电路组成。
从机由STCC52单片机电路+蜂鸣器报警电路+WiFi模块ESP8266电路+电源电路组成。
1、主机通过液位传感器检测液位,检测到最低液位和最高液位时,然后将信息通过主机WIFI模块上传给从机的WIFI模块,从机收到后进行相应的处理,当液位处于最低和最高液位时,蜂鸣器报警;否则,蜂鸣器不报警。
2、从机接收到数据有,通过状态指示灯显示当前液位情况,如果连接成功后,设备通讯中断,所有指示灯熄灭,然后黄灯闪烁提醒。方便远程查看现成液位情况变化以及是否在线故障。
3、注意主从机模块配置以及单片机程序都不相同,不可以相互调换位置。
3.1.2系统总体结构
本系统具体框图如下图所示:

5V电源电路设计
本系统选择5V直流电源作为系统总电源,为整个系统供电,电路简单、稳定。DC为电源的DC插座,可以直接接USB电源线,一端插在DC插座上,另外一端可以插在5V电源上,如电脑USB、充电宝、手机充电器等等。LED为红色LED灯,作为系统是否有点的指示灯,电阻为1K电阻,起到限流作用,保护LED灯,以防电流过大烧坏LED灯。SW为自锁开关,开关按下后,红灯亮,此时系统电源5V直流输出。开关再次按下后,红灯灭,此时系统电源无5V电源输出。

系统软件设计

程序流程图

#include <reg52.h> 
#include <intrins.h>
#include <stdio.h>
#include "delay.h"

sbit buzzer=P2^3;	//引脚定义
sbit led_red=P2^4;
sbit led_yel=P2^5;
sbit led_gre=P2^6;

unsigned long times_20ms=0;			  //定时器计数
unsigned char i;				//记录是否已经发送了短信
unsigned char buzzerlater=0;   	//蜂鸣器报警延时
unsigned char busyNum =0;//串口判忙

void Init_Timer0(void);			//函数声明
void UART_Init(void);
void uartSendByte(unsigned char dat);
void uartSendStr(unsigned char *s,unsigned char length);

void main (void)
{
	Init_Timer0();        //定时器0初始化
	UART_Init();

	led_red=0;led_yel=0;led_gre=0;	//灯指示
	buzzerlater=2;
	DelayMs(100);
   	led_red=1;led_yel=1;led_gre=1;

	for(i=0;i<40;i++)
	{DelayMs(100);}	

	uartSendStr("AT+CWMODE=1\r\n",13);		   //打开多连接
	for(i=0;i<5;i++)
	{DelayMs(100);}

	uartSendStr("AT+CWJAP=\"AUAISOUT000\",\"\"\r\n",27);	   //建立服务 端口号为8080
	for(i=0;i<40;i++)	  //保留足够时间去获取ip
	{DelayMs(100);}

	while(1)         //主循环
	{	
		uartSendStr("AT+CIPSTART=\"TCP\",\"10.10.10.11\",8080\r\n",38);		   //打开多连接
		for(i=0;i<25;i++)	 //实时去链接ap
			{DelayMs(100);}	
	}
}

void Init_Timer0(void)
{
	TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;
	EA=1;            //总中断打开
	ET0=1;           //定时器中断打开
	TR0=1;           //定时器开关打开
}
void UART_Init(void)
{
    SCON  = 0x50;		        // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz
	TL1 = TH1;  
    TR1   = 1;                  // TR1:  timer 1 打开                         
    EA    = 1;                  //打开总中断
    ES    = 1;                  //打开串口中断
}

void uartSendByte(unsigned char dat)//串口发送单字节数据
{
	unsigned char time_out;
	time_out=0x00;
	SBUF = dat;			  //将数据放入SBUF中
	while((!TI)&&(time_out<100))  //检测是否发送出去
	{time_out++;DelayUs2x(10);}	//未发送出去 进行短暂延时
	TI = 0;						//清除ti标志
}

void uartSendStr(unsigned char *s,unsigned char length)	   //发送定长度字符串
{
	unsigned char NUM;
	NUM=0x00;
	while(NUM<length)	//发送长度对比
	{
		uartSendByte(*s);  //放松单字节数据
		s++;		  //指针++
		NUM++;		  //下一个++
  	 }
}

void Timer0_isr(void) interrupt 1 
{
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;
	times_20ms++;
	if(times_20ms%10==0)		 //定时到1s
	{	
		if(buzzerlater>0)	 //延时打开蜂鸣器
		{
			buzzer=!buzzer;
			buzzerlater--;	//延时缩短
		}
		else
		{buzzer =1;}	  //关闭蜂鸣器
		if(busyNum>0)busyNum--;	//接收数据过程中
		else		//接收不到数据
		{led_red=1;led_yel=1;led_gre=1;	}

	}
}

void UART_SER (void) interrupt 4 	//串行中断服务程序
{
	unsigned char Rebuf;
	if(RI)                        //判断是接收中断产生
	{
		RI=0;                      //标志位清零
		Rebuf=SBUF;
		busyNum = 4;
		if(Rebuf=='h')
		{
			buzzerlater=4;	//蜂鸣器延时报警
			led_red=0;led_yel=1;led_gre=1;	//灯指示
		}
		else if(Rebuf=='n')
		{
			buzzerlater=0;	//蜂鸣器延时报警
			led_red=1;led_yel=0;led_gre=1;	//灯指示
		}
		else if(Rebuf=='l')
		{
			buzzerlater=4;	//蜂鸣器延时报警
			led_red=1;led_yel=1;led_gre=0;	//灯指示
		}
		else if(Rebuf=='e')
		{
			buzzerlater=4;	//蜂鸣器延时报警
			led_red=0;led_yel=0;led_gre=0;	//灯指示
		}
	}
	if(TI)  //如果是发送标志位,清零
	TI=0;
} 

.

.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- nryq.cn 版权所有 赣ICP备2024042798号-6

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务