“早上好。现在是早上 7 点,马里布的天气是 72 度……”这是 JARVIS 在漫威电影宇宙中被介绍的第一句话。大多数钢铁侠粉丝应该能够回忆起这个场景,并记得 JARVIS 能够在早上打开一个窗口(有点)并提供时间和天气的更新。在电影中,窗户眼镜实际上是由透明触摸显示器制成的,因此 JARVIS 能够使其从黑色变为透明,并在其上显示天气统计数据。但是,在现实中,我们离透视触摸屏还很远,离我们越近的就是自动控制百叶窗或约束。
因此,在这个项目中,我们将准确地构建它,我们将构建一个自动电动百叶窗,它将在预定义的时间自动打开和关闭。
构建 Arduino 自动百叶窗所需的组件
项目比较简单,需要的组件也不多。只需收集下面列出的物品。
节点单片机
步进电机 – 28BYJ-48
步进电机驱动模块
LM117-3.3V
电容器(10uf,1uf)
12V 直流适配器
性能板
焊接套件
3D打印机
使用 Arduino 控制卷帘
现在市场上的百叶窗种类繁多,但最常用的是一根带有珠子的绳子(如下图),可以拉动以打开或关闭百叶窗。
当我们顺时针方向拉动这条圆形绳索时,百叶窗会打开,当我们逆时针方向拉动这条绳索时,百叶窗就会关闭。因此,如果我们要使这个过程自动化,我们所要做的就是使用电机将这条绳子顺时针或逆时针方向拉动,我们就可以完成它。事实上,这就是我们在这个项目中要做的;我们将使用 28BYJ-48 步进电机和 NodeMCU 来拉珠绳。
设计和制造窗户百叶窗齿轮
这个项目的电子部分相当简单直接,具有挑战性的部分是建造可以拉珠绳的盲齿轮。所以让我们从盲齿轮设计开始这篇文章,我不打算详细介绍如何设计齿轮,但这个基本概念应该对你有所帮助。下面显示了带有珠子的绳子的图像。
再次,绳子有很多种类型,但最常用的绳子是每个珠子的中心距为6mm,每个珠子的直径为4mm。使用这些信息,我们可以开始设计我们的装备。如果您百叶窗上的绳索与讨论的尺寸相同,您可以跳过此步骤并下载本文提供的 STL 文件并打印齿轮。如果你的绳子有不同的珠子排列,那么这就是你应该重新设计盲齿轮的方法。
我决定在我的齿轮上安装 24 颗珠子以获得最佳的齿轮尺寸,您可以选择任何接近此的数字来让您的齿轮变大或变小。所以现在,我们知道每个珠子之间的距离是 6 毫米,我们的齿轮上需要 24 个珠子。将两者相乘将得到齿轮的周长。有了这些数据,您就可以计算出齿轮的半径。正如您在上图中看到的,我的齿轮直径计算为大约 46 毫米。但请记住,这不是齿轮的实际直径,因为我们没有考虑到 4mm 的珠子直径。因此,齿轮的实际直径为 42 毫米,我打印并测试了许多齿轮,然后才找到效果最好的齿轮。
3D打印电机支架和盲齿轮
除了齿轮,我们还需要一个可以钻到墙上并将步进电机固定到位的小外壳,这个项目中使用的外壳和齿轮如下所示。
您可以在下面给出的 Arduino Blind Control Thingiverse 页面上找到完整的设计文件和 STL 文件。您可以下载并打印您的盲齿轮和电机箱。
Arduino百叶窗控制电路图
一旦您准备好齿轮和组件,就很容易继续进行电子和软件部分。物联网盲控项目的完整电路图如下所示。
我们使用 12V 适配器为整个设置供电;LM1117-3.3V 稳压器将 12V 转换为 3.3V,可用于为 NodeMCU 板供电。步进电机驱动模块直接由 12V 适配器供电。我确实尝试在 5V 上运行步进电机,但它没有提供足够的扭矩来拉动百叶窗,因此请确保您也使用 12V。
除此之外,电路非常简单,如果您不熟悉步进电机,请查看步进电机的基础知识文章,了解它的工作原理以及如何与微控制器一起使用。
用于 Arduino 盲控的 Blynk 应用程序
在我们进入控制百叶窗的 Arduino 程序之前,让我们打开 blynk 应用程序并创建一些按钮,我们可以使用这些按钮打开或关闭百叶窗。稍后我们也将需要它来从 Google Home 进行控制。
我刚刚添加了两个按钮来打开和关闭百叶窗,以及每天上午 10:00 开启百叶窗的一次性计时器。您可以添加多个计时器以在一天中的不同时间间隔打开或关闭百叶窗。基本上,当我们必须关闭百叶窗时,我们必须触发虚拟引脚 V1,而当我们必须打开百叶窗时,我们必须触发虚拟引脚 V2。基于此处按下的按钮控制步进电机的程序将编写在 Arduino IDE 上,下面将讨论相同的内容。
使用 Blynk 编程 NodeMCU 以控制百叶窗
此盲控项目的完整 ESP8266 代码可在本页底部找到。我们的程序必须等待来自 blynk 应用程序的命令,并且基于该命令,我们必须以顺时针方向或逆时针方向旋转步进电机。下面讨论代码的重要部分。
根据我们的电路图,我们使用 nodemcu 上的数字引脚 1、2、3 和 4 来控制我们的步进电机。因此,我们必须使用这些引脚创建一个名为 stepper 的实例,如下所示。请注意,我们按 1、3、2 和 4 的顺序定义了引脚。这是故意的,不是错误;我们必须交换引脚 2 和 3 才能使电机正常工作。
// 使用步骤和引脚创建步进器类的实例
步进步进器(STEPS、D1、D3、D2、D4);
在下一步中,我们必须共享我们的 blynk 应用程序身份验证令牌和我们的 IoT Blind 控制器必须连接到的 Wi-Fi 凭据。如果您不确定如何获取此 Blynk 身份验证令牌,请参阅Blynk LED 控制项目以了解 blynk 应用程序的基础知识以及如何使用它。
// 你应该在 Blynk App 中获得 Auth Token。
// 转到项目设置(螺母图标)。
char auth[] = "l_b47mF1hioCc_7FzdKMJJeFnJjTxxxx";
// 您的 WiFi 凭据。
// 为开放网络设置密码为“”。
char ssid[] = "电路文摘";
char pass[] = "dummy123";
继续我们的代码,在 setup 函数之后,我们为 blynk 定义了两个方法。如前所述,我们必须定义虚拟引脚 V1 和 V2 应该做什么。下面给出了相同的代码。
BLYNK_WRITE (V1) //关闭百叶窗
{
Serial.println("关闭百叶窗");
如果(打开==真)
{
for (int c_val = 0; c_val <= 130; c_val++) //逆时针旋转关闭
{
stepper.step(c_val);
屈服();
}
关闭=真;
打开=假;
禁用电机();// 使用后总是禁用步进电机以减少功耗和发热
}
}
BLYNK_WRITE(V2) // 打开百叶窗
{
Serial.println("打开百叶窗");
如果(关闭==真)
{
for (int cc_val = 0; cc_val >= -130; cc_val--) //顺时针旋转打开
{
stepper.step(cc_val);
屈服();
}
打开=真;
关闭=假;
}
禁用电机();// 使用后总是禁用步进电机以减少功耗和发热
}
如您所见,V1 用于关闭百叶窗,V2 用于打开百叶窗。for 循环用于使电机顺时针或逆时针方向旋转 130 步。我用我的百叶窗进行了实验,发现通过 130 步,我能够完全打开和关闭我的百叶窗。您的号码可能会有所不同。用于顺时针和逆时针方向旋转步进电机的for 循环如下所示。
for (int c_val = 0; c_val <= 130; c_val++) //逆时针旋转关闭
{
stepper.step(c_val);
屈服();
}
for (int cc_val = 0; cc_val >= -130; cc_val--) //顺时针旋转打开
{
stepper.step(cc_val);
屈服();
}
您还可以在我们的程序中注意到两个布尔变量“打开”和“关闭”。这两个变量用于防止电机两次打开或关闭百叶窗。意思是,百叶窗只有在之前关闭时才会打开,并且只有在之前打开时才会关闭。
28BJY-48步进电机如何提高转速?
使用 28BJY-48 步进电机的一个缺点是速度很慢。这些电机最初是为高精度低速应用而制造的,因此不要指望这些电机会高速旋转。如果您想使用 Arduino 提高步进电机的速度,您可以更改两个参数。一个是#define STEPS 64,我发现当steps定义为64时,电机相对更快。另一个参数是 stepper.setSpeed(500); 我再次发现 500 是一个最佳值,超过这个值实际上会使步进电机变慢。
你知道提高这些电机速度的其他方法吗?如果是,请将它们留在下面的评论部分。
如何防止步进电机过热?
不使用时应始终禁用步进电机,以防止过热。禁用步进电机非常简单;只需将控制步进电机的所有四个 GPIO 引脚的引脚状态更改为低电平即可。这非常重要,否则您的电机可能会在 +12V 时变得非常热并永久损坏自身。下面给出了禁用步进电机的程序。
void disable_motor() //完成后关闭电机以避免发热
{
数字写入(D1,低);
数字写入(D2,低);
数字写入(D3,低);
数字写入(D4,低);
}
使用 Google Assistant 控制百叶窗
我们将使用 blynk API 通过谷歌助手来控制百叶窗,它类似于我们的语音控制家庭自动化项目,所以如果有兴趣请检查一下。
基于 Arduino 的自动百叶窗控制 - 演示
电路和 3D 打印外壳准备好后,只需在墙上钻两个孔即可将设备组装在墙上。我的安装设置如下图所示。
之后,确保您的百叶窗处于打开状态,然后打开电路。现在,您可以尝试从 blynk 应用程序或通过 Google Assistant 关闭百叶窗,它应该可以工作。您还可以在 blynk 应用程序上设置计时器,以在一天中的特定时间自动打开和关闭百叶窗。
// Arduino 程序来控制百叶窗使用步进电机
#include
#include
#include // 包含头文件
#define BLYNK_PRINT Serial
// 将此更改为步数在你的电机上
#define STEPS 64
//使用步骤和引脚创建步进器类的实例
Stepper stepper(STEPS, D1, D3, D2, D4);
// 你应该在 Blynk App 中获得 Auth Token。
// 转到项目设置(螺母图标)。
char auth[] = "l_b47mF1hioCc_7FzdKMJJeFnJjTxxxx";
// 您的 WiFi 凭据。
// 为开放网络设置密码为“”。
char ssid[] = "电路文摘";
字符通[] = "
//打开百叶窗后才运行程序
boolean closed = false;
布尔打开=真;
void disable_motor() //完成后关闭电机以避免发热
{
digitalWrite(D1,LOW);
数字写入(D2,低);
数字写入(D3,低);
数字写入(D4,低);
}
void setup()
{
pinMode(D0, OUTPUT); //板载LED作为输出
digitalWrite(D0,HIGH); //打开这个灯
Serial.begin(9600);
stepper.setSpeed(500);
Blynk.begin(auth, ssid, pass);
// http://188.166.206.43/l_b47mF1hioCc_7FzdKMJJeFnJjxxxx_/update/V1?value=1 /
数字写入(D0,低);//连接到 blynk 后将其关闭
}
BLYNK_WRITE(V1) //CLOSE the BLINDS
{
Serial.println("Closing Blinds");
if (opened == true)
{
for (int c_val = 0; c_val <= 130; c_val++) //逆时针旋转关闭
{
stepper.step(c_val);
屈服();
}
关闭 = 真;
打开=假;
禁用电机();// 使用后总是禁用步进电机以降低功耗和发热
}
}
BLYNK_WRITE(V2) // OPEN the BLINDS
{
Serial.println("Opening Blinds");
如果(关闭==真)
{
for (int cc_val = 0; cc_val >= -130; cc_val--) //顺时针旋转打开
{
stepper.step(cc_val);
屈服();
}
打开 = 真;
关闭=假;
}
disable_motor(); // 使用后总是禁用步进电机以降低功耗和发热
}
void loop()
{
Blynk.run();
}