亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于Arduino 实现的家庭自动化

发布时间:2021-06-19
分享到:

基于Arduino 实现的家庭自动化

发布时间:2021-06-19
分享到:

该项目是一个基于物联网的家庭自动化系统,可以通过蓝牙、声音控制灯光。

硬件部件:

自动化电路:

 Arduino UNO:

  • 将 Arduino 的 5V 引脚连接到屏蔽上的正电源轨
  • 将 Arduino 的接地引脚连接到屏蔽上的接地轨

 HC-05蓝牙模块:

  • 将蓝牙模块的 VCC 引脚连接到电源轨
  • 将蓝牙模块的接地引脚连接到地轨
  • 将模块的 Transmit [Tx] 引脚连接到 Arduino 上的引脚 3
  • 将模块的接收 [Rx] 引脚连接到 Arduino 上的引脚 2

注:将蓝牙模块的 Tx 和 Rx 引脚连接到 Arduino 时,Tx 引脚变为 Arduino 上的 Rx 引脚,反之亦然。因此,在代码中,在初始化BTserial对象时,必须提及在 Arduino 中连接的 Tx 和 Rx 引脚的顺序:SoftwareSerial BTserial(3,2); 

继电器模块:

  • 将继电器模块的 VCC 引脚连接到电源轨
  • 将模块的 GND 引脚连接到地轨
  • 将 IN 1 连接到 Arduino 上的引脚 11
  • 将 IN 2 连接到 Arduino 上的引脚 10
  • 将 IN 3 连接到 Arduino 上的引脚 9
  • 将 IN 4 连接到 Arduino 上的引脚 8

加载:

  • 将交流电源的一端连接到负载的一端,将负载的另一个端子连接到继电器上的公共引脚
  • 将交流电源的另一个端子连接到继电器上的 NO(常开)引脚

注:继电器模块上的公共、常开和常闭引脚将显示为螺钉端子。常开引脚将是继电器每个单元上最右侧的引脚,公共引脚将是继电器每个单元上最左侧的引脚。

(继电器模块引脚图)

应用程序制作:

使用MIT Appinventor 2制作了一个可以通过蓝牙控制 Arduino 上 LED 的应用程序。

  • 添加所有不可见的组件 :语音识别、蓝牙客户端和通知程序
  • 将表格布置为 3 行,并为每行添加一个标签,用于单独的灯
  • 在每个标签旁边添加一个水平排列,并将 2 个按钮拖到每个水平排列中,这些将作为开和关开关
  • 添加一个按钮,点击时启用语音识别

 

代码:

在块编辑器中:

  • 如果单击语音识别按钮,则创建一个变量 text 来存储语音文本,稍后会在代码中使用这个变量
  • 做一个在屏幕初始化时自动连接到HC-05蓝牙模块的功能。如果连接成功,会显示一个警报,表示连接成功。
  • 检查在水平组件中单击了哪个按钮,并将相应的消息发送到 HC-05 模块
  • 由于无法在 Arduino 中轻松解码 HC-05 接收到的完整字符串,可以使用简单的编码逻辑来显示灯号(灯 1、灯 2...等)和灯状态(开- 1 或关闭 - 0)。例如,“10”表示灯 1 关闭,“21”表示灯 2 打开

 

编码:

1、先包含软件串行库,它将用于在 HC-05 蓝牙模块和应用程序之间建立通信,还将使用软件串行库创建一个名为 BTserial 的对象,并将参数作为 HC-05 的 Tx 和 Rx 引脚连接到的 Arduino 上的引脚上

2、声明所需的所有变量,需要一个变量来存储 HC-05 模块接收到的消息,以及提及 LED 连接到的引脚的变量

3、在无效设置中,将串行监视器和虚拟蓝牙串行设置为 9600 波特率

4、在 void 循环中,检查来自蓝牙串行的命令并相应地打开和关闭灯

完整代码:

#include<SoftwareSerial.h>
SoftwareSerial BTserial(3,2); // 发送|接收
//声明变量
String msg = "";
String v1 = "";

int light_1 = 11;
int light_2 = 10;
int light_3 = 9;
int light_4 = 8;
void setup() {
  // 把你的设置代码放在这里,运行一次:
  //设置我们的串口和蓝牙串口监视器
  Serial.begin(9600);
  BTserial.begin(9600);
}

void loop() {
  //  把你的主要代码放在这里,重复运行:
  // 检查蓝牙串口是否已连接并可用
  if (BTserial.available() > 0){
  msg = BTserial.parseInt();// 解码从手机通过 BT 串口发送的整数
  }
  //检查整数并给出相应的输出
  if(msg == "11"){
    digitalWrite(light_1,LOW);
    }
  if(msg == "10"){
    digitalWrite(light_1,HIGH);
    }
   if(msg == "21"){
    digitalWrite(light_2,LOW);
    }
    if(msg == "20"){
    digitalWrite(light_2,HIGH);
    }
     if(msg == "31"){
    digitalWrite(light_3,LOW);
    }
     if(msg == "30"){
    digitalWrite(light_3,HIGH);
    }
    if(msg == "41"){
    digitalWrite(light_4,LOW);
    }
     if(msg == "40"){
    digitalWrite(light_4,HIGH);
    }
  Serial.println(v1);
  delay(500);
}

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论