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

news2024/11/26 22:37:40

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 技术交流认准下方 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单片机;
④控制模块由四个继电器组成,分别能单独开关控制四个家电;
⑤外围电路较为简单,通过发光二极管和其他元器组成。
在这里插入图片描述

图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蓝牙继电器接线表
在这里插入图片描述
在这里插入图片描述

图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的人员越来越多,这更加加速了该项目的发展,目前大学里也添加了研究该项目的学科,软件、艺术等门类都开展了课程进行学习。
在这里插入图片描述

图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界面也会同时显示配对成功。此时用户就可以控制四个继电器的打开与关闭,每打开一个继电器相对应的灯光就会亮起,关闭则会熄灭,每个继电器可以独立操控,非常符合时下家电越来越多的趋势。
在这里插入图片描述

图2.4 APP控制流程图

三、实物

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

程序

 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 <SoftwareSerial.h>
 
#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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1146709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python之拟合圆心及半径

目录 1、公式推导 2、代码实现 1、公式推导 2、代码实现 import matplotlib.pyplot as plt import numpy as np def Show_Fig(X,Y,x, y, r):theta np.arange(0, 2 * np.pi, 0.01)x x r * np.cos(theta)y y r * np.sin(theta)fig plt.figure()axes fig.add_subplot(111…

精讲双向链表的销毁

相信大家各位学习双向链表的时候对链表的销毁&#xff0c;都或多或少有些小疑惑&#xff0c;我到底是传一级指针还是传二级指针 木关系&#xff0c;这些都是小意思&#xff0c;今天我将为大家share 一下关于到底如何进行正确传指针 对于链表是销毁其实就是对链表进行一个结点一…

基于PHP的大学生考勤请假管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

Jupyter Notebook还有魔术命令?太好使了

在Jupyter Notebooks中&#xff0c;Magic commands&#xff08;以下简称魔术命令&#xff09;是一组便捷的功能&#xff0c;旨在解决数据分析中的一些常见问题&#xff0c;可以使用%lsmagic 命令查看所有可用的魔术命令 插播&#xff0c;更多文字总结指南实用工具科技前沿动态…

【赠书活动】从瀑布模式到水母模式:ChatGPT如何赋能软件研发全流程

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

yum源安装报错问题解决

如果出现以下错误 解决方案 CentOS 8 yum安装软件时&#xff0c;提示无法从AppStream下载 检查网通不通&#xff0c;然后确定DNS解析是否正确。 ping www.baidu.com有可能是所在网络环境在出口封了相应端口&#xff0c;需用其他方式&#xff0c;比如VPN解决。 我们无法使用C…

Element 多个Form表单 同时验证

一、背景 在一个页面中需要实现两个Form表单&#xff0c;并在页面提交时需要对两个Form表单进行校验&#xff0c;两个表单都校验成功时才能提交 所用技术栈&#xff1a;Vue2Element UI 二、实现效果 三、多个表单验证 注意项&#xff1a; 两个form表单&#xff0c;每个表单上…

tomcat9~10猫闪退个人经验

java版本17与8 8版本有jre&#xff0c;java17没有jre 所以在java8版本中将jre和jdk路径一同添加环境是不会出现闪退的&#xff0c;tomcat9没有闪退 但是在10就闪退了&#xff0c;因为java版本太低 java17没有jre&#xff0c;但是可以通过一种方法添加jre到java17的目录 完…

【技术综述】深度学习模型结构复杂、参数众多,如何更直观地深入理解你的模型?...

CNN、RNN等深度学习模型使用的门槛虽然低&#xff0c;但模型参数多&#xff0c;网络结构复杂。输出如何关联模型的参数&#xff0c;在数学上没有很直观的解释&#xff0c;导致模型网络结构的设计以及训练过程中超参数的调试&#xff0c;都非常依赖于经验。结果不好&#xff0c;…

【鸿蒙软件开发】Stage模型开发概述应用/组件级配置

文章目录 前言一、基本概念1.1 UIAbility 组件1.2 ExtensionAbility 组件1.3 Context1.4 AbilityStage1.5 Stage模型开发流程应用组件开发了解进程模型了解线程模型应用配置文件 二、Stage模型应用/组件级配置2.1 为什么需要这个操作2.2 应用包名配置2.3 应用图标和标签配置2.4…

linux-磁盘应用

目录 一、磁盘内容简述 1、一些基本概念 2、分区简述 3、常见文件系统 4、linux硬盘文件 二、对linux系统进行分区 1、用fdisk进行分区 2、用parted进行分区 一、磁盘内容简述 1、一些基本概念 - 扇区大小&#xff1a;512Btyes&#xff0c;0.5KB - 磁盘最小存储单位&…

黑猪肉经营配送商城小程序商城效果怎样

对产品商家来说&#xff0c;如今线下流量匮乏难以增长&#xff0c;线上已经成为商家们重要的经营渠道&#xff0c;但入驻第三方平台也存在诸多痛点&#xff0c;因此更多企业品牌商家选择自建私域卖货平台完善更多生意。 微信作为私域主阵地&#xff0c;自然是企业们不可错过的…

Java面向对象(进阶)-- 拼电商客户管理系统(康师傅)

文章目录 一、目标二、需求说明&#xff08;1&#xff09;主菜单&#xff08;2&#xff09;添加客户&#xff08;3&#xff09;修改客户&#xff08;4&#xff09;删除客户&#xff08;5&#xff09;客户列表 三、软件设计结构四、类的设计&#xff08;1&#xff09;Customer类…

79 电话号码的字母组合

电话号码的字母组合 题解1 回溯比较直观的理解 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入…

每日一题 274. H 指数(中等)

先讲一下自己的复杂的写法 第一眼最大最小值问题&#xff0c;直接在0和最大被引次数之间二分找答案先排序&#xff0c;再二分&#xff0c;&#xff0c;&#xff0c; 正解&#xff1a; 排序得到 citations 的递减序列&#xff0c;通过递增下标 i 遍历该序列显然只要排序后的 …

【教3妹学编程-java实战5】结构体字段赋值的几种方式

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 2哥 :3妹&#xff0c;考考你&#xff0c;你知道java结…

【SPSS】基于RFM+Kmeans聚类的客户分群分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

Python学习笔记--初始化函数

六、初始化函数 1、什么是初始化函数 初始化函数的意思是&#xff0c;当你创建一个实例的时候&#xff0c;这个函数就会被调用。 比如&#xff1a; 当代码在执行 a ClassA() 的语句时&#xff0c;就自动调用了 __init__(self) 函数。 而这个 __init__(self) 函数就是初始化…

精通Linux系列第四章:Linux常用命令入门

文章目录 一、前言二、命令行介绍2.1 Shell概述2.2 命令行提示符2.3 命令行快捷键2.4 命令行历史和命令补全 三、基本命令3.1 ls - 列出文件和目录3.2 cd - 切换目录3.3 pwd - 显示当前工作目录3.4 mkdir - 创建目录3.5 rm - 删除文件和目录3.6 cp - 复制文件和目录3.7 mv - 移…

好题分享(2023.10.22——2023.10.28)

目录 ​编辑 前言&#xff1a; 题目一&#xff1a;《消失的数字》 1.先排序再遍历 2.异或 3.等差数列求和&#xff0c;再相减 题目二&#xff1a;《轮转数组》 1.开辟新的数组 2.原地逆序 题目三&#xff1a;《移除元素》 题目四&#xff1a;《删除有序数组的重复项…