找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4509|回复: 1
收起左侧

蓝牙与NRF24L01家电开关控制系统设计(单片机源码+APP+报告与ppt)

[复制链接]
ID:238191 发表于 2018-9-2 10:55 | 显示全部楼层 |阅读模式
题目:蓝牙与NRF24L01家电开关控制系统设计
PPT目录:
1.系统概述
2.成品图
3.系统结构
4.模块功能介绍
5.软件设计
6.测试方案与结果
7.总结与分析
8.结束

制作出来的实物图如下:
1.png

本系统结合蓝牙4.0通信技术、nRF24L01无线技术,设计一套12路无线遥控开关。
    特点:具有成本低、功耗低、操作简单、同时减少了不必要的工作量,运用价值较高。
    缺点:控制距离受限制。
0.jpg

3.模块功能介绍
一.蓝牙模块
    接收手机发送指令,由单片机对接收到的指令识别,分别控制相应的通道(开与关)。

二.NRF24L01收发模块
    发送和接收数据 , 由单片机对接收到的数据进行解码,分别控制相应的通道(开与关)

三.12864液晶模块

    显示系统工作状态,方便人机对话。

四.上位机Ds18b20模块

    检测环境温度,由单片机把温度解析分别显示在12864液晶显示器。

五.上位机独立按键

    切换显示页面,选择通道开关信号,确定通道要发送的数据。


六.继电器模块

    小信号控制大信号的作用。

0.png

5.测试方案与结果
一.障碍区域测试:

    1.1.蓝牙手机有效距离20以内
    1.2.NRF24L01上位机有效距离50米以内
   
二.无障碍区域测试:

    2.1.蓝牙手机有效距离40以内
    2.2.NRF24L01上位机有效距离100米以内

一.总结与分析
        此次毕业设计的制作,巩固我们在校期间所学的知识,提升了单片机编程能力和软件调试经验,让我们懂得自己的不足之处。        
        主要作用:增强开关智能化。
        特点:具有成本低、功耗低、操作简单、同时减少了不必要的工作量,运用价值较高。
        不足之处:控制距离受限制,系统属于单工传输状态,主机电路制作不够精练。

无线主机与上位机源码:
  1. #include "STC15F2K.H"
  2. #include "intrins.h"
  3. #include "delay.h"
  4. #include "io.h"
  5. #include "api.h"                                                                                                                                
  6. #include "shoujie.h"
  7. #include "12864.h"
  8. #include "rx_data.h"
  9. #include "lanya.h"


  10. /**************************************************
  11. 函数:main()

  12. 描述:
  13.     主函数
  14. /**************************************************/
  15. void main(void)
  16. {
  17.         init_io();                                          // 初始化IO口
  18.         RX_Mode();                                             // 设置为接收模式   
  19.         LCD_init();                                  // 初始化液晶
  20.         SerialIni();                                  // 初始化定时器
  21.         while(1)
  22.         {                                                                                                               
  23.                 gnenqhuan();                          // 蓝牙数据处理程序
  24.                 RX_MAIN();                                  // 判断是否接收到开关数据
  25.             RX_MAIN1();                                  // 判断是否接收到温度数据
  26.                 sta = SPI_Read(STATUS);          // 读状态寄存器        
  27.         }
  28. }


  29. //
  30. //void t0() interrupt 1
  31. //{
  32. //        TR0=0;
  33. //
  34. //          Count1++;                  //0.5 MS 加一次               
  35. ///************PWM1与PWM2调速*****************/
  36. //               
  37. //        if(Count1>100)        {   Count1=0;    }         
  38. //        if(Count1<PWM1||Count1==PWM1){ dt_led = 1; }         //改变PWM1的值就可以改变大厅灯的亮度
  39. //        else                                 { dt_led = 0; }
  40. //
  41. ////        if(Count1<PWM2||Count1==PWM2){ ws_led = 1; }         //改变PWM2的值就可以改变卧室灯的亮度
  42. ////        else                                 { ws_led = 0; }
  43. ////
  44. ////        if(Count1<PWM3||Count1==PWM3){ sm_led = 1; }         //改变PWM3的值就可以改变睡眠灯的亮度
  45. ////        else                                 { sm_led = 0; }
  46. //        TR0=1;        
  47. //}
复制代码

蓝牙的头文件:
  1. #ifndef         _lanya_h_
  2. #define         _lanya_h_

  3. int BBuffer[6] = {0};   //从串口接收的双个数据 (缓存区)
  4. uchar j=0,shuju=1;
  5. //uchar Count1=0,PWM1=0,PWM2=0,PWM3=0;


  6. void SerialIni(){
  7.    
  8.     SCON = 0x50;     
  9.     AUXR &= 0xBE;   
  10.     AUXR |= 0x00;   
  11.     TMOD &= 0x0F;         
  12.     TMOD = 0x20;   
  13.     TH1  = 0xfd;   
  14.     TL1  = 0xfd;   

  15.     TR1=1;           //定时器1启动
  16.     ES = 1;          //开放串口中断
  17.     EA = 1;          //开放CPU中断
  18. }

  19. void gnenqhuan()  
  20. {
  21.         
  22. if(shuju==1)
  23. {
  24.         while(BBuffer[0])
  25.         {
  26.                 switch(BBuffer[0])                                                                                    //遥控状态
  27.                 {                                
  28.         
  29.                         case 101:  
  30.                                                 water_j = 0;
  31.                                                 lcd_com(0x80);        disp_chinese("饮水机状态:   开"); break; //饮水机开                           
  32.                         case 102:   water_j = 1;        
  33.                                             lcd_com(0x80);        disp_chinese("饮水机状态:   关"); break; //饮水机关
  34.                                                    
  35.                         case 103:  curtain = 0;        
  36.                                                 lcd_com(0x90);        disp_chinese("窗帘  状态:   开"); break; //窗帘开                  
  37.                         case 104:  curtain = 1;        
  38.                                                 lcd_com(0x90);        disp_chinese("窗帘  状态:   关"); break; //窗帘关
  39.                                                    
  40.                         case 105:  freezer = 0;               
  41.                                                 lcd_com(0x88);        disp_chinese("冰箱  状态:   开"); break; //冰箱开
  42.                         case 106:  freezer = 1;        
  43.                                                 lcd_com(0x88);        disp_chinese("冰箱  状态:   关"); break; //冰箱关

  44.                         case 107:  feng_s  = 0;        
  45.                                                 lcd_com(0x98);        disp_chinese("风扇  状态:   开"); break; //风扇开
  46.                         case 108:  feng_s  = 1;        
  47.                                                 lcd_com(0x98);        disp_chinese("风扇  状态:   关"); break; //风扇关

  48.                         case 109:  socket_1 = 0;        
  49.                                                 lcd_com(0x80);        disp_chinese("插座1 状态:   开"); break; //插座1开
  50.                         case 110:  socket_1 = 1;        
  51.                                                 lcd_com(0x80);        disp_chinese("插座1 状态:   关"); break; //插座1关
  52.                         
  53.                         case 111:  socket_2 = 0;        
  54.                                                 lcd_com(0x90);        disp_chinese("插座2 状态:   开"); break; //插座2开
  55.                         case 112:  socket_2 = 1;        
  56.                                                 lcd_com(0x90);        disp_chinese("插座2 状态:   关"); break; //插座2关
  57.                         
  58.                         case 113:  socket_3 = 0;        
  59.                                                 lcd_com(0x88);        disp_chinese("插座3 状态:   开"); break; //插座3开
  60.                         case 114:  socket_3 = 1;        
  61.                                                 lcd_com(0x88);        disp_chinese("插座3 状态:   关"); break; //插座3关
  62.                         
  63.                         case 115:  socket_4 = 0;        
  64.                                                 lcd_com(0x98);        disp_chinese("插座4 状态:   开"); break; //插座4开
  65.                         case 116:  socket_4 = 1;        
  66.                                                 lcd_com(0x98);        disp_chinese("插座4 状态:   关"); break; //插座4关

  67.                          case 117:  dt_led = 0;        
  68.                                                 lcd_com(0x80);        disp_chinese("大厅灯状态:   开"); break; //大厅灯开
  69.                         case 118:  dt_led = 1;        
  70.                                                 lcd_com(0x80);        disp_chinese("大厅灯状态:   关"); break; //大厅灯关

  71.                         case 120:  
  72.                                            clr_all();         
  73.                                            lcd_com(0x80);        disp_chinese("★蓝牙智能开关  ");
  74.                                                                                 break;          //手机遥控状态

  75.                         case 121:  RX_MAIN();                                  // 判断是否接收到开关数据
  76.                                            RX_MAIN1();                                  // 判断是否接收到温度数据
  77.                                            sta = SPI_Read(STATUS);          // 读状态寄存器                                
  78.                                                                                 break;          //2.4G遥控状态

  79.                     case 122:  sm_led = 0;        
  80.                                                 lcd_com(0x90);        disp_chinese("睡眠灯状态:   开"); break; //睡眠灯开
  81.                         case 123:  sm_led = 1;        
  82.                                                 lcd_com(0x90);        disp_chinese("睡眠灯状态:   关"); break; //睡眠灯关
  83.                         
  84.                         case 124:  ws_led = 0;        
  85.                                                 lcd_com(0x88);        disp_chinese("卧室灯状态:   开"); break; //卧室灯开
  86.                         case 125:  ws_led = 1;        
  87.                                                 lcd_com(0x88);        disp_chinese("卧室灯状态:   关"); break; //卧室灯关
  88.                                                                
  89.                         case 126:  socket_5 = 0;        
  90.                                                 lcd_com(0x88);        disp_chinese("插座5 状态:   开"); break; //插座5开
  91.                         case 127:  socket_5 = 1;        
  92.                                                 lcd_com(0x88);        disp_chinese("插座5 状态:   关"); break; //插座5关
  93.                
  94.                         default:break;
  95.                 }
  96.                                  
  97.         }
  98. }        

  99. }



  100. void Uart2(void) interrupt 4 using 1
  101. {
  102.     if(RI)                           //如果是接收中断
  103.     {
  104. ……………………

  105. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png

完整的设计报告文档(word格式)和ppt:
0.png

全部资料51hei下载地址:

蓝牙4.0通信技术和nRF24L01无线技术.rar (3.1 MB, 下载次数: 147)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:459236 发表于 2019-1-1 11:12 | 显示全部楼层
可以的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表