“早上好?,F在是早上 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();
}
評論
查看更多