【Proteus仿真】【Arduino单片机】定时智能插座开关

文章目录


一、功能简介

本项目使用Proteus8仿真Arduino单片机控制器,使LCD1602液晶,DS18B20温度传感器、按键、蜂鸣器、继电器开关、HC05蓝牙模块等。

主要功能:

系统运行后,LCD1602显示温度、温度阈值,定时时间及状态信息等;如果温度高于阈值,则开关关闭,且蜂鸣器报警。

如果温度低于阈值,当定时器状态开启,定时结束,开关关闭,发出提示音。正常模式下,可通过K1键对开关的开和关控制。

通过K3键进入阈值设置模式,可通过K3选择需修改的数据位置,K1和K2调节,当需要开启定时器时,需将状态由N设置为Y,K4键确定并返回正常模式。可通过蓝牙发送字符'O'远程打开开关,发送字符'C'关闭。


二、软件设计

c 复制代码
/*
作者:嗨小易(QQVIP群2:570487280)

*/



//系统数据显示
void sys_data_show(void)
{
	while(1)
	{
		//正常模式显示
		if(sys_ctrl.mode==0)
		{
			//温度显示
			lcd1602_show_nums(3,0,sys_ctrl.temp,2,0);
			//温度阈值显示
			lcd1602_show_nums(7,0,sys_ctrl.temph,2,0);
			//时间显示
			lcd1602_show_nums(5,1,sys_ctrl.time[0],2,0x80);
			lcd1602_show_nums(8,1,sys_ctrl.time[1],2,0x80);
			lcd1602_show_nums(11,1,sys_ctrl.time[2],2,0x80);
			
			//开关状态显示
			if(sys_ctrl.onoff==0)lcd1602_show_string(13,0,"OFF");
			else lcd1602_show_string(13,0," ON");
			//定时开关显示
			if(sys_ctrl.time_onoff==0)lcd1602_show_string(15,1,"N");
			else lcd1602_show_string(15,1,"Y");	
		}
		//设置模式显示
		else
		{
			//温度阈值显示
			lcd1602_show_nums(7,0,sys_ctrl.temph,2,0);
			//时间显示
			lcd1602_show_nums(5,1,sys_ctrl.time[0],2,0x80);
			lcd1602_show_nums(8,1,sys_ctrl.time[1],2,0x80);
			lcd1602_show_nums(11,1,sys_ctrl.time[2],2,0x80);
			switch(sys_ctrl.mode)
			{
				case 1://温度
					lcd1602_show_string(7,0,"  ");
					delay_ms(100);
					lcd1602_show_nums(7,0,sys_ctrl.temph,2,0);
					break;
				case 2://小时
					lcd1602_show_string(5,1,"  ");
					delay_ms(100);
					lcd1602_show_nums(5,1,sys_ctrl.time[0],2,0x80);
					break;
				case 3://分钟
					lcd1602_show_string(8,1,"  ");
					delay_ms(200);
					lcd1602_show_nums(8,1,sys_ctrl.time[1],2,0x80);
					break;
				case 4://开关
					lcd1602_show_string(15,1," ");
					delay_ms(200);
					if(sys_ctrl.time_onoff==0)lcd1602_show_string(15,1,"N");
					else lcd1602_show_string(15,1,"Y");
					break;	
			}	
		}	

		break;			
	}
}

//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	key=key_scan(0);
	//模式设置
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>4)sys_ctrl.mode=1;
	}
	//正常模式
	if(sys_ctrl.mode==0)
	{
		//开
		if(key==KEY1_PRESS)
		{
			sys_ctrl.onoff=!sys_ctrl.onoff;	
		}
	}
	//设置模式
	else
	{
		//加
		if(key==KEY1_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://温度
					sys_ctrl.temph++;
					if(sys_ctrl.temph>99)sys_ctrl.temph=0;
					break;
				case 2://小时
					sys_ctrl.time[0]++;
					if(sys_ctrl.time[0]>23)sys_ctrl.time[0]=0;
					break;
				case 3://分钟
					sys_ctrl.time[1]++;
					if(sys_ctrl.time[1]>59)sys_ctrl.time[1]=0;
					break;
				case 4://开关
					sys_ctrl.time_onoff=!sys_ctrl.time_onoff;
					break;
			}
		}
		//减
		else if(key==KEY2_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://温度
					sys_ctrl.temph--;
					if(sys_ctrl.temph<0)sys_ctrl.temph=99;
					break;
				case 2://小时
					sys_ctrl.time[0]--;
					if(sys_ctrl.time[0]<0)sys_ctrl.time[0]=23;
					break;
				case 3://分钟
					sys_ctrl.time[1]--;
					if(sys_ctrl.time[1]<0)sys_ctrl.time[1]=59;
					break;
				case 4://开关
					sys_ctrl.time_onoff=!sys_ctrl.time_onoff;
					break;
			}
		}
		//确定
		else if(key==KEY4_PRESS)
		{
			sys_ctrl.mode=0;
		}
	}
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619


联系作者

视频地址:https://space.bilibili.com/444388619/video

专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

相关推荐
国科安芯42 分钟前
人在回路中的总线:商业空间站环境控制与生命保障系统CANFD网络的可靠性与功能安全
网络·嵌入式硬件·安全·架构·php·抗辐射
我不会起名字3222 小时前
消费回调固定 return nil:错误传播与 Kafka 位点提交的区别
后端·mongodb·kafka·go·im·故障排查
国科安芯2 小时前
算力上天之后的电与静:星上边缘计算载荷带外管理网络的低功耗调度与辐射容错
网络·人工智能·嵌入式硬件·安全·边缘计算·低轨卫星·商业航天
t13970185 小时前
MPPT 和 PWM 有什么区别?小功率太阳能供电到底该选哪个
嵌入式硬件·物联网
en.en..5 小时前
STM32入门最佳学习顺序(寄存器→标准库→HAL库)
单片机·嵌入式硬件
Good白10197 小时前
嵌入式:1.嵌入式入门|初识嵌入式、处理器、ARM与STM32
arm开发·stm32·嵌入式硬件
二本咕咕-机械转码7 小时前
FreeRTOS深入解析(八)IPC机制之FromISR详解
数据结构·单片机·链表
小李不想当小白7 小时前
HAL库之UART(STM32 HAL库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
Dev_XH7 小时前
【成品设计】基于物联网的旅游生态农业互动系统
stm32·单片机·嵌入式硬件·物联网·旅游
Industio_触觉智能21 小时前
RK3506 Buildroot系统目录地图-上|7个关键符号链接与构建产物全解析
嵌入式硬件·sdk·智能硬件·固件·瑞芯微·系统编译·rk3506