IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【毕业设计】ZigBee智能灯控系统 - 单片机 嵌入式 物联网 -> 正文阅读

[嵌入式]【毕业设计】ZigBee智能灯控系统 - 单片机 嵌入式 物联网


0 前言

🔥 Hi,大家好,这里是丹成学长的毕设系列文章!

🔥 对毕设有任何疑问都可以问学长哦!

这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的新项目是

🚩 基于ZigBee的智能灯控系统

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:4分
  • 工作量:4分
  • 创新点:3分

🧿 选题指导, 项目分享:

https://blog.csdn.net/molodi/article/details/125933857

1 简介

本系统实现了多方式控灯功能,有按键控灯、串口指令控灯、点对点无线射频控灯、AI模式控灯。其中AI模式控灯是通过红外模块感应外界是否有人靠近来控制灯的亮灭及通过光敏传感器模块感应外界光照强度进而动态调整PWM占空比的输出来控制灯的亮度。

物联网是新一代信息技术的重要组成部分,也是“信息化”时代的重要发展阶段。互联网是物联网个过渡,物联网将成为新时代的发展灵魂。

学长设计并打造出一款基于ZigBee模块,多传感器,多方式开关,远程智能控制的灯控系统,达到智能照明的节能、环保、舒适、方便的功能。

2 系统结构

本系统有软件和硬件两部分组成。

软件部分:串口调试助手,控制灯的亮灭、打开和关闭AI模式和实时监测灯的变化情况和日志

硬件部分:两个ZigBee模块,其中控制模块可以控制灯的亮灭和打开和关闭AI模式,被控制模块有人体红外感应模块、光敏传感器和LED发光二极管,其本身按键S1可以控制灯的亮灭,S2按键可以控制AI模式的开和关。AI模式是通过红外感应模块和光敏传感器智能控灯。

在这里插入图片描述

3 系统功能

1)按键控灯:开发板按键S1可以控制灯的亮和灭;

2)串口控灯:串口调试助手可发1开灯,和0关灯,控制灯的亮和灭;

3)无线控灯:一对一无线控制灯的开关,安全,可靠,无线发送模块的按键S1为灯控按键;

4)AI模式控灯:智能灯控的核心,AI模式可以感应周围是否有人经过来控制灯的开和关,并且可以根据外界的光照强度来调节自身灯的亮度,达到了节能、环保、舒适的绝佳效果;

5)多方式AI模式开关:本系统提供多方式控制AI模式的开启和关闭,其方式有:按键S2、串口、无线发送模块按键S2;

6)实时信息:串口助手实时上报灯的亮灭情况和当前受到哪方面的控制,如无线开灯时,串口将会显示“----无线开灯成功-----”和“/AI模式关闭/”信息,以达到最佳安全级别。

4 相关器件

4.1 Zigbee芯片 CC2530

ZigBee是基于IEEE802.15.4标准的低功耗局域网协议。根据国际标准规定,ZigBee技术是一种短距离、低功耗的无线通信技术。这一名称(又称紫蜂协议)来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式构成了群体中的通信网络。其特点是近距离、低复杂度、自组织、低功耗、低数据速率。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。简而言之,ZigBee就是一种便宜的,低功耗的近距离无线组网通讯技术。ZigBee是一种低速短距离传输的无线网络协议。ZigBee协议从下到上分别为物理层(PHY)、媒体访问控制层(MAC)、传输层(TL)、网络层(NWK)、应用层(APL)等。其中物理层和媒体访问控制层遵循IEEE 802.15.4标准的规定。

在这里插入图片描述

4.2 LED发光二极管

LED发光二极管采用的是257MM雾状白蓝色发光二极管,二极管的阳极接在ZigBee模块的P1_0引脚,阴极接ZigBee模块的GND引脚。

在这里插入图片描述

4.3 人体红外感应模块

人体红外感应模块采用的是完整版的HC-SR501人体模块,自动感应,红外感应模块的VCC接在ZigBee模块的5.0vVCC引脚,GND接在ZigBee模块的GND 引脚,out接在ZigBee模块的P1_3引脚。

在这里插入图片描述

4.4 光敏电阻传感器

光敏电阻传感器采用的是4线光敏电阻传感器模块,光敏电阻型号为:5516,本产品使用的是AO模拟量输出,光敏电阻传感器的VCC脚接在ZigBee模块的3.3vVCC引脚,GND接在ZigBee模块的GND引脚,AO接在ZigBee模块的P0_5引脚。

在这里插入图片描述

5 实现效果

在这里插入图片描述

6 相关部分代码

#include<iocc2530.h>
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
#define LED P1_1
#define uint unsigned int
bool boozd=1;
bool boog=1;
uint pwmx[11]={0x00,0xF7,0xE1,0xC8,0xAF,0x96,0x7D,0x64,0x4B,0x32,0x01};
uint adc;
float adcResu;
void InitLED(){//*****************初始化LED灯
P1SEL &=0xFD;
P1DIR |=0x02;
LED=0;
}
void InitADC(){//********************初始化ADC
P0DIR &=0xDF;//P0_5为输入
APCFG |=0x20;//设置为模拟口
ADCCON3 =0x75;//0011 0101,端口电压,512抽取率,P0_5
adc=0;
ADCH=0;
ADCL=0;//清除ADC数据
ADCCON1=0x30;//停止ADC转换
ADCCON1 |=0x40;//启动ADC转换
}
void Initclock()//*************************************时钟初始化
{//32MHz
 SLEEPCMD &=0xFB;//开启全部RC振荡器,避免16MHZRC振荡器被关闭
 while((SLEEPSTA&0x40)==0);//等待32MHZ上电稳定
 CLKCONCMD &=0xBF;//设置32MHZ为系统时钟源
 while(CLKCONSTA&0x40);//等待32MHZ成功成为系统时钟源
 CLKCONCMD |=0x38;
 CLKCONCMD &=0xF8;//系统时钟不分频输出,定时器为250KHZ
 SLEEPCMD |=0x04;//关闭不用的RC振荡器
}

void InitUart(){//*******************************串口初始化
  PERCFG &=0xFE;//将串口0的位置选在P0口
  P2DIR &=0x3F; //P0口的外设优先级控制设为串口0优先
  P0SEL |=0x0C;//P0口的2、3管脚设为外设工作方式
  U0CSR |=0xC0;//USART0工作的UART模式,接收使能
  U0UCR=0x02;//据格式为8位数据位、1位停止位、没有校验位
  U0GCR |=11;//波特率为115200
  U0BAUD |=216;
  EA=1;
  URX0IE=1;//接收中断打开
  UTX0IF=0;
  URX0IF=0;
 }
 void delay(uint i){//*********************延时函数
for(uint j=0;j<i;j++)
for(uint x=0;x<1000;x++);
}
void uartTX_Send(char *strx){//********************串口发送
 while(*strx!='\0'){
  U0DBUF=*strx;
  while((U0CSR&0x02)==0);//等待发送完成
   *strx++;
   U0CSR &=0xFD;
  }
}
void InitTime(){//**********************pwm
  //输出比较,P1_0
 P1SEL |=0x01;
 P1DIR &=0xEE;
 PERCFG |=0x40;
 P2DIR |=0xC0;//定时器通道2-3最高优先级
 T1CTL=0x02;//模模式,0x00-T1CC0!!!!!!!!!!!!!!!!
 T1CCTL2=0x1C;
 T1CC0H=0x00;
 T1CC0L=0xFA;//周期为1ms,频率为1KHZ 必须设置!!!!
 T1CC2H=0x00;
 T1CC2L=pwmx[0];
//0x00 0xF7 0xE1 0xC8 0xAF 0x96 0x7D 0x64 0x4B 0x32 0x19
}
void InitButton(){//*******************按键中断初始化
P0SEL &=0xFC;
P0DIR &=0xFC;
P0INP &=0xFC;
P2INP &=0xFC;
PICTL |=0x01;
P0IE=1;
P0IEN |=0x03;
P0IF=0;
P0IFG &=0xFC;
}
void Initho(){//******************************红外感应初始化
//P1_3
P1SEL &=0xF7;
P1DIR &=0xF7;
P1INP &=0xF7;
P2INP |=0x40;
}
void InitWX()//***********************************射频的初始化
{
FRMCTRL0 |=0x60;
TXFILTCFG =0x09;
AGCCTRL1 =0x15;
FSCAL1=0x00;

RFIRQM0 |=0x40;//打开接收中断
IEN2 |=0x01;
FREQCTRL=(11+(25-11)*5);// 25号信道可改设置载波为2475M

PAN_ID0=0x07;
PAN_ID1=0x20;//PAMID

RFST=0xEC;//清除接收缓冲器
RFST=0xE3;//开启接收使能

SHORT_ADDR0=0xEF;
SHORT_ADDR1=0xBE;//设置模块网络地址
}
void main(){
  InitLED();
  Initclock();
  InitUart();
  InitADC();
  InitTime();
  InitButton();
  Initho();
  InitWX();
  boozd=1;
  boog=1;
  while(1){
    if(ADCCON1&0x80){
    adc |=(ADCL>>2);
    adc |=(ADCH<<6);
    if((boozd==1)&&(P1_3==1)){
        LED=1;
       if(adc>6191){T1CC2H=0x00;T1CC2L=pwmx[10];}
       else if(adc>5191){T1CC2H=0x00;T1CC2L=pwmx[8];}
       else if(adc>4191){T1CC2H=0x00;T1CC2L=pwmx[6];}
       else if(adc>3191){T1CC2H=0x00;T1CC2L=pwmx[4];}
       else if(adc>2191){T1CC2H=0x00;T1CC2L=pwmx[2];}
       if(adc<2191){T1CC2H=0x00;T1CC2L=pwmx[0];}
    /*  char str[30];
    sprintf(str,"adc数值为:%d",adc);
    uartTX_Send(str);*/
    }else if(boog){
    LED=0;
    T1CC2H=0x00;
    T1CC2L=pwmx[0];
    }
    InitADC();//再次启动
    delay(1000);

    }
  }
}
#pragma vector=URX0_VECTOR
__interrupt void urx0(){  //*******************串口中断处理函数

  char bufch1;
  bufch1=U0DBUF;
 if(bufch1=='1')
 {boog=0;
  T1CC2H=0x00;
  T1CC2L=pwmx[10];
  boozd=0;
  LED=1;
  uartTX_Send("\r\n   ----串口开灯成功-----  \r\n");
   uartTX_Send("\r\n   ----AI模式关闭-----  \r\n");
}
 else if(bufch1=='0')
{boog=0;
boozd=0;
  LED=0;
 T1CC2H=0x00;
 T1CC2L=pwmx[0];
 uartTX_Send("\r\n   /串口关灯成功  \r\n");
}
 else if(bufch1=='2'){
   boog=1;
    LED=1;
   boozd=1;
  uartTX_Send("\r\n   ----AI模式打开-----  \r\n");
 }
 else
uartTX_Send("\r\n   !!!无该指令!!!  \r\n");


}
#pragma vector=P0INT_VECTOR//**************按键中断处理函数
__interrupt void p0int(){
  if(P0IFG&0x01){
   delay(150);
  if(P0_0==0){
    boog=0;
    if(LED==1){
      LED=0;
     boozd=0;
     T1CC2H=0x00;
     T1CC2L=pwmx[0];
     uartTX_Send("\r\n   /按键关灯成功  \r\n");

    }else{
      LED=1;
      boozd=0;
  uartTX_Send("\r\n   ----按键开灯成功-----  \r\n");
  uartTX_Send("\r\n   /AI模式关闭/ \r\n");
  T1CC2H=0x00;
  T1CC2L=pwmx[10];
    }
  }
  }
  if(P0IFG&0x02){
   delay(150);
  if(P0_1==0){
    boog=1;
    if(boozd==0){
      boozd=1;
      LED=1;
    uartTX_Send("\r\n   ----AI模式打开-----  \r\n");
    }else{
     boozd=0;
     LED=0;
    uartTX_Send("\r\n   /AI模式关闭/ \r\n");
    }
    }
  }
P0IF=0;
P0IFG &=0xFC;
}
#pragma vector=RF_VECTOR//******************RF中断处理函数
__interrupt void x1()
{
if(RFIRQF0 & 0x40){.........

🧿 选题指导, 项目分享:

https://blog.csdn.net/molodi/article/details/125933857

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:27:45  更:2022-09-04 01:30:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 16:55:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计