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

DIY智能家居交互系统—SMART CUBE

发布时间:2022-09-03
分享到:

DIY智能家居交互系统—SMART CUBE

发布时间:2022-09-03
分享到:

通过本文的这个项目,你能发现一种与智能家居交互的新方式:倾斜和摇晃立方体以通过蓝牙控制您的设备!

什么是智能立方体?
Smart Cube 是您的智能家居设备的控制器。

如今,以更智能的方式管理我们家中的所有设备已成为一种迫切需要。我们需要一些简单直观的东西来使用。Smart Cube可能是一个解决方案:它是一种便携式设备,包含一个Arduino 101板和一些与智能家居中的设备和执行器通信的传感器。

这款遥控器的创新与Arduino 101板的创新有关。它使用蓝牙 (BLE)来控制灯光、温度和您的电视,您还可以将其与智能手机同步。但主要的创新是您使用陀螺仪和加速度计通过手势与 Smart Cube 交互的方式。立方体有6 个面,每个面控制一个特定的功能。陀螺仪可以识别上表面,从而检测到您要使用的功能。例如,您可以打开您所在房间的灯,只需将具有“光面”的立方体放置在上方位置即可. 如果你想关掉灯,你只需要摇动立方体。

如果一个面朝上并且超过 2 秒没有移动,则激活相关功能。进行此延迟是为了让您有时间旋转立方体并与之交互以找到所需的面,而不会意外激活其他功能。当您摇动魔方超过 2 秒时,最后激活的功能将关闭。

该项目旨在帮助您构建一个智能控制器。该设备需要一个接收器(图中的智能中心)来解释数据并管理智能家居的功能。立方体的主要输出是一个 BLE 信号,可以通过多种方式使用:例如,您可以将立方体与智能手机应用程序连接(或自己制作),或者您可以使用另一个 Arduino 建立一个站来收集 BLE 数据并直接控制您家中的电器。由于案件种类繁多,这部分取决于您的紧急情况。在本指南中,我们将了解如何构建智能立方体,您将学习如何对其进行个性化设置。

功能:
代码的结构易于个性化,以便您决定控制哪些功能。这些是我决定控制的功能:

  • 灯:这张朝上的脸打开你所在房间的灯。如果你摇动立方体,灯就会关闭,并且这个面上的黄色 LED 会被激活,这样你就可以在黑暗中找到立方体。与您的灯的通信由 101 板的 BLE 进行。
  • 温度:如果天气很热,这个面朝上会激活(通过 BLE)空调,或者如果天气很冷,则激活暖气。它使用热传感器检测温度,如果空调开启(雪花),则打开蓝色 LED ,如果激活加热(太阳),则打开红色LED。
  • 定时器:这个面朝上启动一个定时器,你可以在液晶显示器上看到。倒计时结束时,有一个蜂鸣器用作警报。如果你摇晃你会停止计时器,你可以看到剩余的时间。当倒计时结束时,LCD 的颜色由蓝色变为红色,并且蜂鸣器发出三声。
  • 电视:这个面朝上打开电视。立方体成为您电视的遥控器。有一个带有数字的按钮面板,仅当此面朝上时才会激活,以避免意外触摸。您推送的号码通过 BLE 发送到连接到电视的中央控制器。摇动立方体关闭电视。
  • 声音:这个面朝上激活一个 LED,其亮度基于房间的噪音水平。借助声音传感器检测到噪音。如果您摇动立方体,您将关闭此功能。(如果你愿意,你可以激活你的个人功能拍手)。
  • OFF面:如果你不摇动立方体,这个面就像一个中立的位置,没有任何变化。如果您想关闭所有东西,请将立方体放在 OFF 面朝上并摇动它。这个手势就像智能手机上的主页按钮,如果你想快速退出,你可以按下它。有一个红色的 LED ,以便在黑暗时您可以找到立方体。

与概念的区别:
最初的计划是使用红外通信将您的电视直接连接到立方体。因为 Arduino 101(目前)不支持管理 IR 信号的库,所以我决定通过 BLE 将信息发送到可以管理该库的站点(如 Arduino UNO)。由于这个问题,我删除了收音机功能(非常类似于电视面),将其替换为声音传感器面。这一面可以用来识别响亮的噪音(比如拍手)来激活某些东西。最大的变化在于立方体的材质。最初我想用3D 打印机构建它,但后来我决定使用激光切割机。这种方式更容易替代如果你想改变一个功能,一张脸。例如,您可以移除计时器面并将其更改为自动填充猫碗的面。作为模块化,您无需重新构建整个结构!

构建:
按照此说明构建您自己的智能立方体。我们将从硬件开始,首先组装电子元件,然后是由 MDF 制成的立方体的激光切割体。在此操作之后,我将解释代码的工作原理以及如何对其进行个性化设置。在 Arduino 101 上上传代码后,您可以下载该应用程序以查看立方体的 BLE 输出或将其直接连接到您的智能家居!

硬件 - 电子产品:
让我们从您的 Arduino 101 开始。这是要遵循的Fritzing方案:

将Grove 底座屏蔽安装在您的电路板上并从连接开始。

键盘:您必须将电线连接到引脚:10、8、7、6、5、4、2。

LED连接:

首先,我们必须准备 LED:

- 将 LED(阳极)的长腿连接到 220 欧姆电阻,然后连接到红线(这是连接到引脚的电缆)

- 将短腿(阴极)连接到白线(这将连接到 gnd)

- 焊接零件并用电工胶带覆盖它们

- 将所有白色电缆连接到一根白色电缆(这将连接到 gnd)并将它们焊接在一起

现在将红线连接到您的 Arduino:绿色连接到引脚 9,黄色连接到引脚 11,红色连接到引脚 12,蓝色连接到引脚 13,最后一个红色连接到引脚 A2。

Grove 传感器:

将 Grove 传感器连接到屏蔽层。

蜂鸣器接 D3,LCD RGB 接 I2C,温度传感器接 A0,声音传感器接 A1。

好的,现在我们已经连接了所有的电气部件。现在你需要这个案例。

硬件 - 盒子
您可以下载立方体的草图以使用激光切割。草图中的红线是面部的符号,只需雕刻它们。黑线应该被剪掉。立方体的内部尺寸是9 厘米。如果你使用3mm 的材料,草图是可以的,如果你使用不同的厚度,你应该修改它。

我选择的材料是MDF (中密度纤维),但你可以使用你想要的。

以下是激光切割的一些图片:

现在我们必须组装它。

我粘了几块硬纸板来增加 LED 的厚度。这样,它们将与表面对齐。

现在我们安装键盘。将其插入孔中并去除粘性薄膜,然后重新连接引脚。

现在是RGB LCD 。这完全适合这个洞。

让我们准备电池连接器:

我剪断了一个旧的变压器插头并将其连接到电池夹上。通过这种方式,我们节省了盒子内的空间。

在这一点上,这就是你应该拥有的:

现在你只需要连接电池,上传代码并关闭立方体!

提示:将电路板和电池与外壳固定​​在一起,以便在摇动立方体时它们会稳定。

代码
使用Arduino IDE将其上传到您的开发板(请记住更新您的软件以兼容 Arduino 101)。

我几乎对代码的每一行都进行了注释,以使其更易于理解。不要害怕 500+ 行,结构没那么复杂。

一开始有库和所有的变量声明。

这部分还有BLE服务和特性的定义。我使用了自动化 IO服务。我将数字特性用于灯光和温度(这使用 2 位,因此编码 4 种可能的情况)和电视的模拟(发送键盘的所有代码)。

然后设置. 这个 pat在开始时只执行一次。这里我们将组件初始化为输入或输出,并初始化101板的BLE和陀螺仪。

主要部分是循环。它分为四个部分:

  • 1第一部分是从 Arduino 网站教程复制的:(https://www.arduino.cc/en/Tutorial/Genuino101CurieIMUAccelerometerOrientation )这部分不断执行并返回板的方向。
  • 2第二部分,我们仅在面部处于向上位置超过两秒时才激活面部。我们使用millis函数来计算时间。当位置改变时,它会记住毫秒值,如果方向保持不变,在间隔(2 秒)后,我们进入一个 if 区域,在该区域中,所选面变为真(对于第 4 部分)。
  • 3第三部分只有在立方体以一定强度摇动超过 2 秒时才会激活。最后激活的人脸功能关闭,人脸设置为假。如果人脸是假的,则不能进入第四部分。
  • 4第四部分只针对真实面孔。这里是智能魔方的核心功能。在这部分中,只有在循环中为真的面才会不断执行。

您可以通过对代码进行一些修改来修改面部功能。主要结构应如所述。您可以更改 每个面的 if 条件内的部分。

if (face2 == true) { // TEMPERATURE face  
//START CHANGING HERE
 digitalWrite (LEDOFF, LOW); // if this face is true the OFF face led is LOW  
 if (central.connected() == true) { // if the cube is BLE connected   
  // read temperature value  
  int val = analogRead(pinTemp); // get analog value  
  resistance=(float)(1023-val)*10000/val; // get resistance  
  temperature=1/(log(resistance/10000)/B+1/298.15)-273.15;  
  // calculate temperature  
  //conditions of activation  
  if (temperature > tooHot) { // activate air conditioning  
   digitalWrite(LEDhot, LOW); // close heating led  
   digitalWrite(LEDcold, HIGH); // open air conditioner led  
   termoChar.setValue(1); // set via BLE the condition 1 = cold on - hot off  
  }  
  if (temperature < tooCold) { // activate heating  
   digitalWrite(LEDhot, HIGH);  
   digitalWrite(LEDcold, LOW);  
   termoChar.setValue(2); // 2 = cold off - hot on    
  }  
  if (temperature > tooCold && temperature < tooHot) { 
   // ideal temperature: nothing is activated  
   digitalWrite(LEDhot, LOW);  
   digitalWrite(LEDcold, LOW);  
   termoChar.setValue(0); // 0 = cold off - hot off  
  }  
 }  
//END HERE
}

您必须编写“真”部分(如前面的代码)以及摇动立方体时的“假”部分:

// TEMPERATURE deactivation  
if (lastFUNCTION == 2) { // TEMPERATURE face  
 //START CHANGING HERE
 // if a central is connected to peripheral:  
 if (central.connected() == true) {  
  digitalWrite(LEDhot, LOW); // close temperature red led   
  digitalWrite(LEDcold, LOW); // close temperature blue led  
  termoChar.setValue(0); // temperature BLE signal: 0 = cold off - hot off  
 //END HERE
 }  
Serial.println("TEMPERATURE false - CLOSE");  
face2 = false; // TEMPERATURE face became false  
}

摇晃的时候记得把脸设置为假的。

应用程序:
要查看立方体 BLE 输出,您可以下载此应用程序:nRF Connect

https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp&hl=it

打开它时,只需搜索设备并使用“smartcubesketch”连接即可。然后你会看到三个“Automation IO”选项卡,点击它们并推送连续数据采集器。

连接立方体很重要,因为某些功能(灯光、温度和电视)只有在连接立方体时才会执行。

现在你有了一个智能立方体!

结论
这个项目只是迈向智能家居的第一步。我的目的是利用Arduino 101开发板的潜力来创造新的东西。我认为加速度计和陀螺仪在移动性方面为董事会提供了新的机会。有了BLE,除了便携外,还很容易连接。

这是我第一次具体实现我的项目之一。这很艰难,路上也遇到了一些困难,但最后我学到了很多东西,我对结果很满意。我希望每个阅读本文的人都可以从我的工作中学到一些东西,并根据他们的需要修改这个项目。

未来的扩展

在这个项目的未来,我希望创建一个中心线,就像智能​​立方体和执行器(灯光、温度、电视)之间的桥梁。该中心线将接收来自立方体的 BLE 信号,并使用此信息在家中做智能事情。

希望你喜欢这个项目。

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:Alberto Sartori,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论