迪文科技论坛

 找回密码
 立即注册
搜索
查看: 340|回复: 1

【分享】基于迪文屏的智能家居控制面板

[复制链接]

2

主题

4

回帖

59

积分

注册会员

Rank: 2

积分
59
发表于 2024-3-6 22:04:13 | 显示全部楼层 |阅读模式
一.项目背景
   
    智能家居是指通过物联网技术将家居设备连接到互联网,实现智能化控制和管理。随着科技的不断进步和人们对便利生活的需求增加,智能家居已成为现代家庭的一个重要趋势。

然而,目前市场上存在着各种不同的智能家居设备和技术标准,导致用户在选择和配置智能家居系统时面临一定的困惑和复杂性。许多用户希望能够拥有一个统一的主控系统,能够集成和管理各种智能设备,实现一键控制和智能化的家居体验。基于以上背景,我们决定开发一个智能家居主控模板项目。该项目旨在提供一个通用的主控模板,通过集成不同的智能家居设备和技术标准,为用户提供统一的控制平台。用户可以通过该主控模板实现对家庭中各种智能设备的集中控制,包括照明、安防、温度调节、音频视频等功能。

该智能家居主控模板项目具有以下优势和特点:

  • 统一控制平台:用户可以通过一个统一的界面或手机应用程序,方便地控制和管理家中的各种智能设备,无需使用多个不同的应用程序或遥控器。
  • 可扩展性:主控模板具有良好的可扩展性,支持集成和管理不同品牌和类型的智能设备,为用户提供更多的选择和灵活性。
  • 智能化场景设置:用户可以根据自己的需求,通过主控模板设置智能化场景,例如“回家模式”、“离家模式”等,实现自动化的设备控制和联动。
  • 数据分析和反馈:主控模板可以收集和分析智能设备的数据,为用户提供实时的反馈和智能化的建议,帮助用户更好地管理和优化家庭环境。

通过开发智能家居主控模板项目,我们希望为用户提供一个简单、便捷和智能化的家居控制解决方案,提升用户的生活品质和家居体验。同时,该项目还有望推动智能家居行业的发展,促进不同品牌和厂商之间的互操作性和合作,推动智能家居技术的普及和应用。

二.项目介绍
<span]    该控制面板共有两种模式,分别为手动模式和自动模式。第一用户可在迪文屏上通过手动调节红绿蓝三原色来调节灯光的颜色。主界面上备有自动模式的开关,用户可根据个人喜好或需求选择。用户可利用迪文屏的控制面板关闭窗户和彩光灯,省心省力。第二用户可语音控制以上功能,这提高了生活的便捷性,免去关闭众多窗帘和灯光的困扰。第三,与传统生活方式相比,本控制面板配置有烟雾传感器、火焰传感器和温度传感器,为用户带来安全警报,当检测到室内温度过高或烟雾过浓存在安全隐患时,会发出警报,提醒用户及时发现问题。第四,该控制面板,体积小巧,便于携带,使用方便,无复杂繁琐的操作步骤,对于老人使用友好。
三.系统功能模块
   

四.硬件设计
   

五.软件设计
六.创新点
   

智能家居控制模板的创新点可以包括以下几个方面:

  • 统一控制平台:创新之处在于提供一个统一的控制平台,集成和管理各种智能家居设备和技术标准。用户可以通过一个应用程序或界面,方便地控制和管理家中的所有智能设备,无需使用多个不同的应用程序或遥控器。这种统一的控制平台可以大大简化用户的操作流程,提供更便捷和一体化的智能家居体验。

  • 智能化场景设置:创新之处在于提供强大的智能化场景设置功能。用户可以根据自己的需求,通过主控模板设置智能化场景,例如"回家模式"、"离家模式"等。通过设定触发条件和执行动作,实现自动化的设备控制和联动。这种智能化场景设置可以根据用户的习惯和需求,自动调节家庭环境,提供个性化的智能化服务。

  • 数据分析和反馈:创新之处在于利用智能家居设备的数据进行实时的分析和反馈。主控模板可以收集和分析智能设备的数据,例如能耗数据、环境监测数据等。基于这些数据,主控模板可以为用户提供实时的反馈和智能化的建议,例如节能建议、室内环境优化等。这种数据分析和反馈功能可以帮助用户更好地管理和优化家庭环境,提升生活品质。

  • 可扩展性和兼容性:创新之处在于主控模板的可扩展性和兼容性。主控模板应支持集成和管理不同品牌和类型的智能设备,如灯具、插座、安防设备等。通过提供开放的接口和协议,主控模板可以与各种智能家居设备进行互联和通信。这种可扩展性和兼容性可以为用户提供更多的选择和灵活性,使他们能够根据自己的需求和喜好,自由选择和组合智能设备。


通过以上的创新设计,智能家居控制模板可以提供更便捷、智能和个性化的家居控制体验,满足用户对智能家居的需求和期望。它可以简化用户的操作流程,提供智能化的场景设置和数据分析,同时具备良好的可扩展性和兼容性,为用户提供更多的选择和灵活性。这些创新设计将推动智能家居行业的发展,提升用户的生活品质和家居体验。

七.代码及成果展示
  1. #include "sys.h"
  2. #include "dht11.h"
  3. #include "uart.h"
  4. #include "adc.h"
  5. #include "ws2812.h"
  6. #include <string.h>
  7. #include <stdio.h>

  8. u16 user_num=0,temp_num=0,RR=0,GG=0,BB=0,START_NUM=0,user_num2=0;
  9. //u8 temp=16,humi=62,//手动/自动(0/1)
  10. float LIGH=0,SMOG=0;
  11. u16 TEMP_H=40,HUMI_L=30,LIGH_L=50;
  12. u16 mode=0;

  13. sbit fire=P2^4;
  14. sbit c1=P2^5;
  15. sbit c2=P2^6;

  16. void main(void)
  17. {   
  18.         sys_init();//系统初始化
  19.         dht11_init();       //P1^7
  20.     WS2812_Init();
  21.     P2MDOUT |= 0xE0; //设置为推挽输出
  22.     UART4_conf();
  23.     UART5_conf();
  24.     memset(RX4_Buffer,0,COM_RX4_Lenth);
  25.     memset(RX5_Buffer,0,COM_RX5_Lenth);
  26.     mode=0;
  27.         while(1)
  28.         {   

  29.         if(user_num2++>600){
  30.             if(16>TEMP_H){
  31.                 TX5_writebuff('C');
  32.                 temp_num=1;
  33.                 sys_write_vp(Addr_E3,(u8*)&temp_num,1);
  34.             }
  35.             if(60<HUMI_L){
  36.                 TX5_writebuff('D');
  37.                 temp_num=1;
  38.                 sys_write_vp(Addr_E4,(u8*)&temp_num,1);
  39.             }
  40.             user_num2=0;
  41.         }
  42.         //每隔1秒用户逻辑
  43.         if(user_num>=150){            
  44. //            if(dht11_read_data(&temp,&humi)==0)
  45. //            {
  46. //                temp_num=temp;
  47. //                sys_write_vp(Addr_D1,(u8*)&temp_num,1);
  48. //                temp_num=25;
  49. //                sys_write_vp(Addr_D2,(u8*)&temp_num,1);
  50. //                temp_num=humi;
  51. //                sys_write_vp(Addr_D3,(u8*)&temp_num,1);
  52. //                temp_num=30;
  53. //                sys_write_vp(Addr_D4,(u8*)&temp_num,1);
  54. //            }else{
  55. //                printf("dht11 error\r\n");
  56. //            }
  57.             
  58.             LIGH = (4096 - adc_read(ADC_CHANNEL0))*100.0/4096; //亮度
  59.             SMOG = adc_read(ADC_CHANNEL1)*100.0/4096; //烟雾
  60.             //UI界面更新
  61.             
  62.             temp_num=(int)LIGH;
  63.             sys_write_vp(Addr_D5,(u8*)&temp_num,1);
  64.             
  65. //            printf("(SensorGet): temp:%0.2f  humi:%0.2f  ligh:%0.2f  smog:%0.2f fire:%d sd\r\n",temp,humi,LIGH,SMOG,fire);
  66.             
  67.             WS2812B_Reset();                                                        //     停止or开始信号
  68.             RR=0,GG=0,BB=0;         //先清空彩色盘
  69.             sys_read_vp(START_WIN_TEMP1_VP,(u8*)&RR,1);//分别读取三个地址的值,接收的变量类型一定要与第三个参数对应。
  70.             sys_read_vp(START_WIN_TEMP2_VP,(u8*)&GG,1);
  71.             sys_read_vp(START_WIN_TEMP3_VP,(u8*)&BB,1);
  72.             
  73.             sys_read_vp(START_WIN_TEMP4_VP,(u8*)&temp_num,1);
  74.             if(temp_num==1){
  75.                 temp_num=0;
  76.                 sys_write_vp(START_WIN_TEMP4_VP,(u8*)&temp_num,1);
  77.                 while(START_NUM--)
  78.                 WS2812_rand_color(0,0,0);
  79.                 WS2812B_Reset();                                                        //     停止or开始信号
  80.                 START_NUM=4;
  81.                
  82.             }
  83.             if(RR&0xFF||GG&0XFF||BB&0XFF)//如果三个值不都非0
  84.             {
  85.                 while(START_NUM--)
  86.                 WS2812_rand_color((u8)RR,(u8)GG,(u8)BB);
  87.                 WS2812B_Reset();                                                        //     停止or开始信号
  88.                 START_NUM=4;
  89.             }
  90.             
  91.             //清空报警图标
  92.             sys_read_vp(Addr_E5,(u8*)&temp_num,1);
  93.             if(temp_num==1){
  94.                 temp_num=0;
  95.                 sys_write_vp(Addr_E1,(u8*)&temp_num,1);
  96.                 sys_write_vp(Addr_E2,(u8*)&temp_num,1);
  97.                 sys_write_vp(Addr_E3,(u8*)&temp_num,1);
  98.                 sys_write_vp(Addr_E4,(u8*)&temp_num,1);
  99.                 sys_write_vp(Addr_E5,(u8*)&temp_num,1);
  100.             }
  101.             
  102.             if(mode){
  103.                 //自动模式
  104.                 if(SMOG>25){
  105.                     TX5_writebuff('B');
  106.                     temp_num=1;
  107.                     sys_write_vp(Addr_E2,(u8*)&temp_num,1);
  108.                 }else{
  109.                 }
  110. //                if(LIGH<LIGH_L){
  111. //                }else{
  112. //                }
  113. //               
  114.                 if(fire==0){
  115.                     TX5_writebuff('A');
  116.                     temp_num=1;
  117.                     sys_write_vp(Addr_E1,(u8*)&temp_num,1);
  118.                 }
  119.             }
  120.             user_num=0;
  121.         }
  122.         
  123. //        //调试串口接收
  124. //        if(COM4.RX_Cnt>0){
  125. //            printf("com4(debug) rec:%s\r\n",RX4_Buffer);
  126. //            memset(RX4_Buffer,0,COM4.RX_Cnt);
  127. //            COM4.RX_Cnt=0;
  128. //        }
  129.         //天问51接收
  130.         if(COM5.RX_Cnt>0){
  131.             printf("tianwen rec:%s",RX5_Buffer);
  132.             switch(RX5_Buffer[0]){

  133.                 case '1':
  134.                     //开启采光灯  
  135.                     temp_num=1;
  136.                     sys_write_vp(Addr_C1,(u8*)&temp_num,1);
  137.                     break;
  138.                 case '2':
  139.                     //关闭采光灯
  140.                     temp_num=0;
  141.                     sys_write_vp(Addr_C1,(u8*)&temp_num,1);
  142.                     break;
  143.                 case '3':
  144.                     //打开窗户
  145.                     temp_num=1;
  146.                     sys_write_vp(Addr_C2,(u8*)&temp_num,1);
  147.                     break;
  148.                 case '4':
  149.                     //关闭窗户
  150.                     temp_num=0;
  151.                     sys_write_vp(Addr_C2,(u8*)&temp_num,1);
  152.                     break;
  153.             }
  154.             
  155.             memset(RX5_Buffer,0,COM5.RX_Cnt);
  156.             COM5.RX_Cnt=0;
  157.         }
  158.         if(1){
  159.             //获取开关和阈值的改变
  160.             sys_read_vp(Addr_MODE,(u8*)&temp_num,1);
  161.             mode=temp_num;
  162.             sys_read_vp(Addr_C1,(u8*)&temp_num,1);
  163.             if(temp_num){
  164.                 c1=1;
  165.             }else{
  166.                 c1=0;
  167.             }
  168.             sys_read_vp(Addr_C2,(u8*)&temp_num,1);
  169.             if(temp_num){
  170.                 c2=1;
  171.             }else{
  172.                 c2=0;
  173.             }
  174.             sys_read_vp(Addr_H1,(u8*)&temp_num,1);
  175.             TEMP_H=temp_num;
  176.             sys_read_vp(Addr_H2,(u8*)&temp_num,1);
  177.             HUMI_L=temp_num;
  178.             sys_read_vp(Addr_H3,(u8*)&temp_num,1);
  179.             LIGH_L=temp_num;
  180.             
  181.         }
  182.         user_num++;
  183.                 sys_delay_ms(10);
  184.         
  185.         }
  186. }


复制代码

   
八.致谢

在完成本项目的过程中,我要向众多人表示诚挚的感谢,他们的支持和帮助使得这项设计成为可能。

首先,我要感谢迪文公司,感谢他们提供了一次宝贵的校企合作培训机会。通过参加迪文校企合作培训,我深入了解了迪文公司的技术和产品,特别是他们的屏幕技术。这次培训不仅使我对迪文屏幕的设计有了更深入的理解,还为我提供了与迪文公司专业人士交流和合作的机会。

其次,我要感谢我的学校老师们,特别是指导我完成本项目的导师。他们在整个研究过程中给予了我无私的指导和悉心的关怀。他们的专业知识和经验对我的研究起到了至关重要的作用。他们不仅在技术上给予我指导,还在项目设计中提供了宝贵的建议和支持。

此外,我还要感谢迪文公司的工程师和技术团队。他们在我进行智能家居控制模板设计和开发过程中提供了宝贵的技术支持和帮助。他们在问题解决、技术调试和系统集成等方面给予了我很大的帮助,为我提供了良好的工作环境和资源。

最后,再次向以上所有人表示衷心的感谢!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

2

主题

4

回帖

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2024-3-6 22:08:12 | 显示全部楼层
家人们,多多指教
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-25 08:00 , Processed in 0.119833 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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