文章目录
前言
💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
资料获取
文章底部名片,详细资料联系我。
设计介绍
基于51单片机无线蓝牙智能家居控制系统设计是一种结合了物联网技术和智能家居理念的创新方案。以下是对该设计的详细介绍:
系统概述
随着物联网技术的快速发展和智能家居市场的不断扩大,人们对家庭环境的智能化控制需求日益增加。基于51单片机和无线蓝牙技术的智能家居控制系统,旨在为用户提供一种高效、稳定、便捷的家居环境智能化解决方案。该系统通过蓝牙通信实现手机与家居设备的无线连接,使用户能够通过手机应用程序远程控制家居设备,如灯光、空调、窗帘等,实现家庭环境的智能化管理和控制。
功能介绍
51智能家居控制系统设计-ZigBee-步进电机-蓝牙-DHT11-RELAY-LED
本设计由主机和从机电路组成。主机和从机之间通过ZigBee模块无线通信。
主机由STC12C5A60S2单片机电路+ZigBee模块电路+2路LED灯电路+2路继电器电路+温湿度DHT11检测电路+步进电机控制电路+光照检测电路+电源电路组成。
从机由STC12C5A60S2单片机电路+ZigBee模块电路+蓝牙模块电路+电源电路组成。
1、主机中,光照传感器检测到白天,步进电机正转1周,如果光照传感器检测到黑夜,这步进电机反转1周。且光照阈值可以通过光照传感器上的电位器调节。
2、主机检测到的温湿度信息上传给从机后,并通过从机的蓝牙将温湿度信息实时上传到手机APP。
3、手机APP可以控制主机的2路LED灯和2路继电器电路的开和关。
*L10#//打开 led 1
*L11#//关闭 led 1
*L20#//打开 led 2
*L21#//关闭 led 1
*R10#//打开 继电器 1
*R11#//关闭 继电器 1
*R20#//打开 继电器 2
*R21#//关闭 继电器 1
设计程序
#include "system.h"
#include "delay.h"
#include <stdio.h>
#include "dht21.h"
#define TIMELATERNUM 2000 //步进电机旋转时间
sbit led_gre1 = P2^0;//引脚定义
sbit A1=P1^0; //定义步进电机连接端口
sbit B1=P1^1;
sbit C1=P1^2;
sbit D1=P1^3;
sbit ligh =P1^6;
#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
unsigned long time_ms=0;
unsigned char KeyFlag; //防止重复检测
unsigned char zfFlag = 0 ; //正反转标志
unsigned int timeLater = 0; //时间延时
unsigned char setFlag = 0 ;//设置标志
unsigned char dis0[16];//数据暂存
void dealLighMotor(void);
void main()
{
timer0(); //初始化定时器
init_uart0(); //初始化串口
DelayUs2x(10); //延时
DelayMs(100);
while (1) //继电器控制程序 在串口中断中处理
{
dealLighMotor(); //光照检测及电机标志驱动
if(setFlag == 1)//设置成功标志
{
setFlag = 0;
}
}
}
void timer0(void) //定时10ms
{
TMOD|=0x01; //set timer0 as mode1 (16-bit)
TH0= (65536-10*FOSC/12/1000)/256; //initial timer0 high byte
TL0 = (65536-10*FOSC/12/1000)%256; //initial timer0 low byte
TR0 = 1; //timer0 start running
ET0 = 1; //enable timer0 interrupt
EA = 1; //open global interrupt switch
}
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1
{
static unsigned char MotorNum=0;
TH0= (65536-3*FOSC/12/1000)/256; //initial timer0 high byte
TL0 = (65536-3*FOSC/12/1000)%256; //initial timer0 low byte
time_ms++;
if(uartbusy>0) //串口数据采集处理
{uartbusy--;}
else
{
firstin =0;
Count=0;
}
if(timeLater>0)
{
timeLater-- ;
if(zfFlag==1) //电机转动时间不为零 设置了时间 正转
{
MotorNum++;
if(MotorNum==1) //单相轮询通电
{Coil_D1;}
else if(MotorNum==2)
{Coil_C1;}
}
else if(zfFlag==2) //电机转动时间不为零 设置了时间 反转
{
MotorNum++;
if(MotorNum==1) //单相轮询通电
{Coil_A1;}
else if(MotorNum==2)
{Coil_B1;}
}
}
}
void dealLighMotor(void)
{
if(ligh == 0)
{
if(zfFlag != 2) //门没有打开或者没在打开过程
{
zfFlag=2; //驱动电机启动 正传开门
timeLater = TIMELATERNUM-timeLater; //旋转
}
}
else
{
}
}
具体实现截图
设计获取
文章下方名片联系我即可~
精彩专栏推荐订阅:在下方专栏👇🏻
毕业设计精品实战案例
收藏关注不迷路!!
🌟文末获取设计🌟