基于Arduino的智能家居控制系统设计

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式

文章目录

    • 概要
  • 一、系统总体设计方案
    • 本课题研究的内容
    • (一)系统组成
    • (二)硬件模块
    • 1.蓝牙模块
    • 2.控制模块
    • 3.核心模块
  • 二、软件设计
    • 1.APP客户端
    • 2.APP控制流程
  • 三、实物
    • 程序
  • 四、结论
  • 五、 文章目录

概要

  近年来,伴随着智能手机的发展智能家居也快速升级,使用智能手机控制家电逐渐成为潮流,市场需求强烈,本文介绍了一种基于Arduino的智能化家居控制系统设计方案。本系统采用模块化设计,以Arduino UNO为核心控制板,通过EDR蓝牙协议连接模块,实现了智能开关和电器外围电路的灯光提示等功能。本毕业设计基于易安卓平台进行了Android手机客户端的软件程序设计与开发。简单、高效、交互友好的Android客户端与Arduino UNO核心板进行连接,形成了功能完善、扩展性强的智能家居控制系统。Arduino UNO核心板主要进行控制信号与数据的发送和接收以及控制连接的各个功能模块等功能。本设计改善了传统家用电器等需要手动地进行接触式控制的弊端,具有高效传输、操作简单、可靠性强等优点。本设计所采用的控制方式提高了家庭的舒适性和友好性,为实现便捷高质量的生活提供了解决途径。

关键字:智能家居;Arduino;易安卓;EDR蓝牙协议

一、系统总体设计方案

本课题研究的内容

  本次系统设计的核心是Arduino UNO,利用蓝牙协议,远程检测并通Android客户端的室内家居的智能控制。基于出发方向,方便有效生活的目标主要是改善传统家庭背后的现有控制模式和不方便使用。智能遥控设计是为了取代传统的手动机械控制装置而设计的,它拥有效率较高、成本较低、便于使用等优点,也进一步提高了家庭的舒适性和便利性。是制作出一款,能够利用来Arduino远程控制家电开关的智能家居系统,并且有APP方便进行控制。
  本次设计的内容:①Arduino上安装蓝牙模块;②基于易安卓的APP操作界面;③基于Arduino对继电器进行操作(开启或关闭)。
本次设计解决的关键问题为:①如何在确保数据安全保障的情况下、通过蓝牙对设备进行控制;②方便友好的APP界面;③四个继电器实现分开控制。

(一)系统组成

系统的结构组成示意图如图2.1。系统总共由五大部分所组成:分别是APP客户端、核心模块、检测模块、灯光模块和外围电路。各部分组成如下:
①APP客户端是安卓客户端,是通过易安卓软件编写的;
②蓝牙模块是基于Bluetooth Specification V2.0带EDR蓝牙协议的数传模块;
③核心模块是Arduino UNO单片机;
④控制模块由四个继电器组成,分别能单独开关控制四个家电;
⑤外围电路较为简单,通过发光二极管和其他元器组成。
基于Arduino的智能家居控制系统设计_第1张图片

图2.1 系统结构图

(二)硬件模块

1.蓝牙模块

蓝牙通信功能的实现采用的是HC-05 蓝牙串口模式的通信模块,附带EDR 蓝牙协议,基于Bluetooth Specification V2.0模式无线工作频段是2.4GHz ISM,调制方式采用的是GFSK[7]。模块极限发射功率为4dBm,接收灵敏度可达到-85dBm,板载PCB天线,最远可覆盖10米距离通信[8]。模块采用类似邮票孔的封装方式,模块大小为27mm×13mm×2mm,采用这种安装方式可以方便用户使用,可自定义安装内容,装备有LED灯,通过这种方式可以观察蓝牙的连接状态是打开还是关闭。为方便用户根据需要灵活使用,模块采用CSR的BC417芯片,支持AT指令[9],可随时更改各项参数。表2.1为蓝牙继电器的接线表。
表2.1蓝牙继电器接线表
基于Arduino的智能家居控制系统设计_第2张图片
基于Arduino的智能家居控制系统设计_第3张图片

图2.2 HC-05原理图

2.控制模块

控制模块是由四个光耦隔离高低电平触发组成。该系列继电器模块,为保证稳定的性能,使用光耦方式进行隔离[10],隔离效果大大提高,同时可以实现高低电平信号触发。仅需5mA电流即可驱动控制能力为10A的继电器吸合,模块采用优质功率继电器,小型封装光耦,大功率高耐压三极管,红蓝信号指示灯,PCB板材,性能稳定是它最大的特点。表2.2为该系列继电器的参数表,本次选用的是工作电压为5V的继电器。

3.核心模块

UNO是开放原始代码,便于理解,可以搭配按钮、指示灯等多种电子元件使用。同时可以在多个平台进行使用,不发生冲突,而且使用方便,代码更新换代快,符合当今社会发展要求。采用Arduino项目不仅可以涵盖Arduino,也能实现PC程序的通信,由国外团队研发。开发成员有Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、DavidMellis和Nicholas Zambetti等[11]。该项目经过多年的发展,技术逐渐成熟,已经发展成多型号多控制器,拥有诸多优势。使用Arduino的人员越来越多,这更加加速了该项目的发展,目前大学里也添加了研究该项目的学科,软件、艺术等门类都开展了课程进行学习。
基于Arduino的智能家居控制系统设计_第4张图片

图2.1 Arduino uno原理图

二、软件设计

1.APP客户端

软件采用安卓系统设计,具有较高的市场占有率和较高的普及率,Android(安卓)其实用英文翻译是机器人的意识,是一种由Linux构成的开源操作系统,面向于手机等便捷设备,在被谷歌收购之后开始逐步发展,平台也越来越复杂,由操作核心系统、中间元件、使用界面和APP等多种元素构成,在手机领域逐渐发展壮大,并且已经进军到平板电脑等多个领域。具有以下几点优势:
开放性强:Android平台有很强的开放性,可以允许各类开发商加入,拥有其他系统无法比拟的众多开发者参与,使系统愈发完善,技术更加先进,性能更加成熟。因此就吸引了更多开发商的目光,人气越来越高,消费者也喜欢用Android平台的产品[12]。因为里面有着丰富的软件资源,消费者有更多的选择权利,开放性平台有着以上诸多优点,但也有弊端,就是加大了开发商的竞争,性能一般的产品会被迅速淘汰。
硬件丰富:由于Android平台极大的开放性,导致开发商会设计出各种各样极具特色的产品[13],可供消费者们选择。虽然功能上各有千秋,但是其基本功能却不会受到影响,不同产品之间的数据交换,各类软件的兼容都能无差别的满足,这是其他平台所无法比拟的,极大的方便了消费者的需求。
开发方便:Android平台的诞生,相当于为开发商打开了新世界的大门,没有各类条框、法则的困扰,可以随心所欲的进行研究开发,这就促进了各类软件的出现。万物都有其两面性,Android平台也是一把双刃剑,无拘无束的环境导致滥竽充数的程序的越来越多,难以管理,这是Android急需解决的问题之一。

2.APP控制流程

如图2.4所示,用户打开安卓手机上的APP应用点击搜索设备,找到设备后点击连接绑定设备进行蓝牙配对,若配对失败在APP上会有提示请重新配对,若配对成功Arduino UNO板上会有灯光闪烁,APP界面也会同时显示配对成功。此时用户就可以控制四个继电器的打开与关闭,每打开一个继电器相对应的灯光就会亮起,关闭则会熄灭,每个继电器可以独立操控,非常符合时下家电越来越多的趋势。
基于Arduino的智能家居控制系统设计_第5张图片

图2.4 APP控制流程图

三、实物

基于Arduino的智能家居控制系统设计_第6张图片
基于Arduino的智能家居控制系统设计_第7张图片
基于Arduino的智能家居控制系统设计_第8张图片

程序

 E4A程序源代码
事件 主窗口.创建完毕()	
如果 蓝牙1.是否存在() = 假 则
	信息框("信息","本机找不到蓝牙设备,程序将退出!","确定")
	结束程序()
结束 如果

如果 蓝牙1.是否已开启() = 假 则
	蓝牙1.开启蓝牙()
	蓝牙1.置工作模式(2)
否则	
	蓝牙1.置工作模式(2)
结束 如果

结束 事件


事件 按钮1.被单击()
列表框1.清空项目()
蓝牙1.搜索设备() '搜索设备
弹出提示("正在搜索")
结束 事件

事件 蓝牙1.发现设备(设备名称 为 文本型,设备地址 为 文本型,是否已配对 为 逻辑型)
列表框1.添加项目(设备名称 & "-" & 设备地址 & "-" & 是否已配对)
列表框1.置项目标记(列表框1.取项目数()-1,设备地址)
结束 事件

事件 列表框1.表项被单击(项目索引 为 整数型)	
变量 设备地址 为 文本型
设备地址 = 列表框1.取项目标记(项目索引)
蓝牙1.连接设备(设备地址)'连接设备
弹出提示("正在连接:" & 设备地址)	
写出文本文件(取存储卡路径() & "/config_4relay.txt",设备地址,"UTF8")	'将绑定地址
存入配置文件
结束 事件

事件 按钮5.被单击()
变量 内容 为 文本型
如果 文件是否存在(取存储卡路径() & "/config_4relay.txt") = 真 则
	内容 = 读入文本文件(取存储卡路径() & "/config_4relay.txt","UTF8") '读取绑定设备地址
	蓝牙1.搜索设备()   '搜索设备
	蓝牙1.连接设备(内容) 
	弹出提示("正在连接:" & 内容)
否则
	弹出提示("首次使用,请先搜索配对设备!" )
结束 如果
结束 事件

事件 蓝牙1.连接完毕(连接结果 为 逻辑型,设备名称 为 文本型,设备地址 为 文本型,连接模式 为 整数型)
变量 设备信息 为 文本型
变量 文本数组 为 文本型()
如果 连接结果 = 真 则
	按钮2.可用 = 真
	按钮3.可用 = 真	
	按钮4.可用 = 真	
	按钮6.可用 = 真
	按钮7.可用 = 真	
	按钮8.可用 = 真	
	按钮9.可用 = 真
	按钮10.可用 = 真	
	按钮11.可用 = 真
	主窗口.标题 = "已连接:" & 设备名称
	弹出提示("连接成功")
否则
	弹出提示("连接失败")
结束 如果
结束 事件

'==================relay4打开==================
事件 按钮3.被单击() 
蓝牙1.发送数据(文本到字节("LED-4-1","GBK")) '发送消息
结束 事件
'==================relay4关闭==================
事件 按钮4.被单击()
蓝牙1.发送数据(文本到字节("LED-4-0","GBK")) '发送消息
结束 事件

'==================relay3打开==================
事件 按钮6.被单击() 
蓝牙1.发送数据(文本到字节("LED-3-1","GBK")) '发送消息
结束 事件
'==================relay3关闭==================
事件 按钮7.被单击()
蓝牙1.发送数据(文本到字节("LED-3-0","GBK")) '发送消息
结束 事件

'==================relay2打开==================
事件 按钮8.被单击() 
蓝牙1.发送数据(文本到字节("LED-2-1","GBK")) '发送消息
结束 事件
'==================relay2关闭==================
事件 按钮9.被单击()
蓝牙1.发送数据(文本到字节("LED-2-0","GBK")) '发送消息
结束 事件

'==================relay1打开==================
事件 按钮10.被单击() 
蓝牙1.发送数据(文本到字节("LED-1-1","GBK")) '发送消息
结束 事件
'==================relay1关闭==================
事件 按钮11.被单击()
蓝牙1.发送数据(文本到字节("LED-1-0","GBK")) '发送消息
结束 事件

事件 按钮2.被单击()
蓝牙1.断开连接() '退出处理,释放资源,结束内部处理线程
结束程序()
结束 事件






附录2
   arduino程序源代码

#include 
 
#define BT_TX       3 
#define BT_RX       2
SoftwareSerial BT(BT_RX, BT_TX); 

 int relay1 = 4;  
 int relay2 = 5;
 int relay3 = 6;
 int relay4 = 7;

String buf = "";

void setup()  
{
  for(int i=4;i<8;i++)
  {
    pinMode(i,OUTPUT);
    }
  for(int i=4;i<8;i++)
  {
    digitalWrite(i,HIGH);
    }
  Serial.begin(9600);
  BT.begin(9600);
}

void loop() {
while (Serial.available() > 0)
  {
    buf+= char(Serial.read());
    delay(5);    
   }  
   
while (BT.available() > 0)  
  {
    buf+= char(BT.read());
    delay(5);    
   }
if(buf[6]=='1')  
  { 
    switch(buf[4])
    {
       case '1':digitalWrite(relay1,LOW);break;
       case '2':digitalWrite(relay2,LOW);break;
       case '3':digitalWrite(relay3,LOW);break;
       case '4':digitalWrite(relay4,LOW);break;
       default: break;
      }
    }
if(buf[6]=='0')   
  {
    switch(buf[4])
    {
       case '1':digitalWrite(relay1,HIGH);break;
       case '2':digitalWrite(relay2,HIGH);break;
       case '3':digitalWrite(relay3,HIGH);break;
       case '4':digitalWrite(relay4,HIGH);break;
       default: break;
      }
    }
  if(buf!="")
  {
    for(int i=0;i<7;i++)
    {
      Serial.print(buf[i]);
      }
     Serial.println("");    
    }
  buf=String("");
  //delay(10);
}

四、结论

  本文研究的内容是以Arduino UNO为核心,利用蓝牙协议,远程检测并通过Android客户端完成室内家居的智能控制。
经过几个月的学习和研究,我有以下几个设计心得:
①虽然如今智能家居的概念和市场都比较火热,但是竞争非常激烈,每家公司都有自己的优劣,要结合百家之长并不容易,想要在市场上活下来必须要有自己的独家优势。本次的设计相较于大公司的成熟产品相比算是非常简易的装置,但是开发起来依然非常有难度,从一开始的方案设计,到一步步实现它,总会出现意想不到的错误,很有可能一小段代码没有打对就会导致整个装置无法正常运行,而且我是第一次学习易安卓,有些生疏,所以花了不少时间去看教程。
②arduino板和继电器分在上下两层板的设计有利于硬件散热,效果观察和使用,最后在完成了app上操作开关继电器后可以得出结论本次设计效果不错,功能完整,算是令人满意的较成熟开发产品。

五、 文章目录

目 录

一、引言 1
(一)课题的背景 1
1.课题的来源 1
2.研究的目的及其意义 1
3.国内发展概况 2
(二)本课题研究的内容 3
二、系统总体设计方案 3
(一)系统组成 3
(二)硬件模块 4
1.蓝牙模块 4
2.控制模块 5
3.核心模块 6
(三)软件设计 7
1.APP客户端 7
2.APP控制流程 7
三、开发环境及工具介绍 8
(一)开发环境 8
1.驱动安装 8
2.Arduino ide安装与语法分析 9
(二)开发工具 11
1.易安卓开发平台介绍 11
2.易安卓程序编写 12
四、结论 12
参考文献 15
谢 辞 16

你可能感兴趣的:(单片机,智能家居,软件工程)