隨著冬季的臨近;每年慶祝燈節的時候到了 。是的,我們談論的是排燈節,這是一個真正的印度節日,在全球范圍內慶祝。 今年排燈節已經結束,看到人們放鞭炮,我想出了一個 基于 Alexa 的語音控制火箭發射器或點火器的想法,它可以通過語音命令發射火箭,對孩子們來說非常安全和有趣。
需要說明的是,我不是來鼓勵人們在排燈節放鞭炮的,印度政府已經對鞭炮實施了限制以遏制污染,我們有責任遵守它。這里的想法是,與其花一整天的時間發射餅干,不如讓我們構建一個很酷的語音控制的 Arduino 火箭點火器并以風格發射一些火箭。我認為這是雙贏的。
這個Arduino 火箭發射器將與其他火箭發射器大不相同。它有一個由膠合板制成的非常堅固的底盤,一個可靠的基于繼電器的控制機構,以及一個非常獨特的發射和重新裝載火箭的機構,所以事不宜遲,讓我們直接進入構建過程。
基于 Alexa 的語音控制火箭發射器 - 工作
電路的工作原理很簡單,負責發射火箭的主要部件是鎳鉻合金線,它以加熱線圈的形式出現。這種鎳鉻合金線將充當火箭點火器。如何?我稍后會告訴你。
正如您在上圖中看到的,鎳鉻合金線以加熱線圈的形式出現,對我來說,這是最簡單的方法。我們必須將其拉直并彎曲以形成如下圖所示的形狀。
完成此操作后,我們將使用 12V 鉛酸電池為其供電,它會發出紅光。這足以點燃火箭內部的黑色火藥,它的作用就像正常的引信劑量一樣。請注意,這是一個大功率火箭發射控制器,使電線紅熱所需的電流很高。在大電流下工作時請遵循安全建議。
測試完成后,唯一剩下的就是控制過程,我們將在本文中繼續進行時執行此操作。
我們的 NodeMCU Rocket Launch 控制器的 Launchpad
對于這個構建,讓我們制作一個啟動板。完成啟動板后,我們可以輕松地重新加載一些破解程序并非常輕松地啟動它們。我已經構建了一個啟動板,如下圖所示。
讓我們逐步了解構建啟動板的過程。對于框架的兩側,我使用了兩塊(25X3X1.5)英寸長的膠合板。對于頂部,我使用了 (20X3X1.5) 英寸長的膠合板部分,對于底座,我使用了 (20X6X1.5) 英寸長的膠合板,這將使其更加穩定。下面的圖片會給你一個清晰的想法。
現在,是時候制造鎳鉻合金絲了,它可以作為我們火箭的保險絲。為此,我買了一個 1000W 的鎳鉻合金線底座加熱線圈,將其拉直,制成如下圖所示的結構。我必須使用兩個鉗子和側刀來塑造鎳鉻合金線,如下所示。
完成此操作后,我將 20 英寸的膠合板塊分成七塊測量它,并鉆孔以放入鎳鉻合金線基細絲,一旦完成,它看起來像下面的圖像。
但在放置燈絲之前,我在每個端子上連接了 1 平方毫米厚的銅線并將它們穿過孔,一旦一切完成,它看起來像下圖。
如您所見,我還加入了雙組分粘合劑以將電線和細絲固定到位。完成后,我們的啟動板就完成了。正如您從本節的第一張圖片中看到的那樣,我將燈絲線直接連接到 PCB,因為我們正在處理非常高的電流,所以我沒有費心放置螺絲端子,這標志著我們機箱的末端建設過程。
Alexa 控制的火箭發射器所需的組件
對于硬件方面,我們使用了非常通用的部件,您可以從當地的愛好商店輕松獲得,下面給出了完整的物品清單。
12V-繼電器 - 3
BD139 晶體管 - 3
1N4004 二極管 - 3
5.08 毫米螺絲端子 - 1
LM7805 - 穩壓器 - 1
100uF去耦電容 - 2
5.1V 穩壓二極管 - 1
NodeMCU (ESP8266-12E) 開發板 - 1
虛線性能板 - ?
連接線 - 10
Arduino火箭發射器電路圖
下面給出了Alexa 控制的火箭發射器的完整示意圖。我使用標簽將一個引腳連接到另一個引腳。如果你看得足夠近,解釋原理圖應該不難。
電路結構非常簡單,所以我不會詳細介紹。
首先,我們有 IC1,它是一個 LM7805 穩壓器,其 100uF 去耦電容由 C1 和 C2 表示。之后,我們有了項目的核心,即 NodeMCU 板,其中包含 ESP-12E 模塊。由于我們使用的是 12V 鉛酸電池為整個電路供電,這就是為什么我們必須先使用 LM7805 將其轉換為 12V 到 5V 來為 NodeMCU 板供電。我們這樣做是因為板載 AMS1117 穩壓器不足以將 12V 直接轉換為 3.3V,這就是需要 7805 的原因。
繼續前進,我們有三個 12V 繼電器,在這個演示中,我們使用了三個繼電器,但正如我們之前提到的,發射臺有一個用于 7 枚火箭的占位符。您可以稍微調整一下代碼,然后將所有七枚火箭一起發射。三個繼電器由三個NPN晶體管T1、T2、T3驅動,足以驅動一個real的負載。最后,我們有三個續流二極管,用于保護電路免受繼電器產生的高壓尖峰的影響。
在 PerfBoard 上構建電路
從主圖中可以看出,我們的想法是制作一個可以在短時間內處理大量電流的簡單電路,根據我們的測試,800 毫秒足以點亮一張紙。因此,我們在一塊穿孔板上構建電路,并用 1 平方毫米厚的銅線連接所有主要連接。在我們完成焊接板之后。一旦我們完成,它看起來像下面顯示的東西。
為 Alexa 控制的火箭發射器編程 NodeMCU
現在硬件已經準備就緒,是時候開始為我們基于 Alexa 的語音控制火箭發射器編寫代碼了。完整的代碼可以在本頁末尾找到,但在我們開始之前,將所需的庫添加到您的 Arduino IDE 非常重要。確保從下面給出的鏈接中添加正確的庫,否則代碼在編譯時會拋出錯誤。
下載 Espalexa 庫
添加所需庫后,您可以直接上傳本頁底部給出的代碼,以檢查電路是否正常工作。如果您想知道代碼是如何工作的,請繼續閱讀。
像往常一樣,我們通過添加所需的頭文件并為我們的熱點定義引腳名稱和憑據來開始程序。
#include#include //定義與Relays連接的GPIO #define ROCKET_1_PIN 4 #define ROCKET_2_PIN 13 #define ROCKET_3_PIN 15 // WiFi 憑證 const char* ssid = "deba_2.4"; const char* 密碼 = "il2ww*ee";
繼續我們的代碼,我們有我們的函數原型和回調函數定義。
函數connectToWiFi()用于連接 Wi-Fi 網絡,當 Wi-Fi 連接成功時該函數返回 true。
接下來,我們有我們的回調函數,當我們向 Alexa 發出命令時會調用這個函數,espalexa API 會處理這些函數
void allrockets(uint8_t 亮度); void firstrocket(uint8_t 亮度); void secondrocket(uint8_t 亮度); 無效第三火箭(uint8_t亮度);
接下來,我們定義設備名稱。這些定義的設備名稱將反映在 Alexa 應用程序上,當我們說出命令時,Alexa 將通過這些名稱識別設備。所以這些名字非常重要。
// 設備名稱 String First_Device_Name = "所有火箭"; String Second_Device_Name = "火箭一號"; String Third_Device_Name = "火箭二號"; String Forth_Device_Name = "三號火箭";
接下來,我們定義一個布爾變量wifiStatus,它將保存 Wi-Fi 的連接狀態。最后,我們創建一個 Espalexa 對象 espalexa。我們將使用這個對象來配置 NodeMCU。
// wifi狀態檢查 布爾 wifiStatus = 假; // Espalexa 對象 埃斯帕萊克斯帕萊克斯;
接下來,我們有我們的void setup()部分。在本節中,我們使用Serial.begin()函數初始化串行通信以進行調試。我們使用pinMode()函數將之前定義的所有引腳設置為輸出,接下來我們調用connectToWiFi()函數,它會嘗試連接到 Wi-Fi 15 次,如果連接成功,則返回 true連接起來,它將返回 false 并且代碼將永遠執行while()循環。如果 Wi-Fi 連接成功,我們使用espalexa.addDevice()函數將之前定義的設備添加到 Alexa 對象中。這個函數有兩個參數,第一個是設備名稱,第二個是回調函數的名稱,當我們向 Alexa 發出命令時,會調用相鄰的函數。一旦我們完成了所有四個設備的操作,我們調用 espalexa 對象的begin()方法。
無效設置(){ 序列號.開始(115200);// 啟用串行調試消息 pinMode(ROCKET_1_PIN,輸出);//設置ESP引腳作為輸出 pinMode(ROCKET_2_PIN,輸出);//設置ESP引腳作為輸出 pinMode(ROCKET_3_PIN,輸出);//設置ESP引腳作為輸出 wifiStatus = connectToWiFi(); // 連接到本地 Wi-Fi 網絡 if (wifiStatus) {// 設置所有 espalexa 設備 // 在此處定義您的設備。 espalexa.addDevice(First_Device_Name, allrockets); //最簡單的定義,默認狀態關閉 espalexa.addDevice(Secound_Device_Name, firstrocket); espalexa.addDevice(Third_Device_Name, secondrocket); espalexa.addDevice(Forth_Device_Name, thirdrocket); espalexa.begin(); } 別的 { 而(1){ 串行。println("無法連接WiFi。請檢查數據并重置ESP。"); 延遲(2500); } } }
在循環部分,我們調用 espalexa 對象的loop()方法,該方法將始終檢查任何傳入的命令,如果發現為真,則調用回調函數。
無效循環(){ espalexa.loop(); 延遲(1); }
接下來,我們定義所有回調函數,在本節中,我們將定義調用此回調函數時會發生什么。當調用 allrockets()函數時,所有火箭將一起發射。為此,我們將打開繼電器 00 毫秒,然后關閉繼電器。在我的測試中,我發現對于指定長度的鎳鉻合金線,我需要 800 毫秒的延遲才能完全加熱線,這對你來說可能是這樣,也可能不是。所以相應地選擇延遲。
void allrockets(uint8_t 亮度) { 如果(亮度 == 255) { 數字寫入(ROCKET_1_PIN,高); 數字寫入(ROCKET_2_PIN,高); 數字寫入(ROCKET_3_PIN,高); 延遲(800); 數字寫入(ROCKET_1_PIN,低); 數字寫入(ROCKET_2_PIN,低); 數字寫入(ROCKET_3_PIN,低); Serial.println("所有火箭發射"); } }
接下來,我們有我們的第一個 rocket(),當我們調用 Alexa 并說 tie 命令發射第一顆火箭時,它會被調用。過程很相似,我們開啟繼電器800ms再關閉。
void firstrocket(uint8_t 亮度){ 如果(亮度 == 255) { 數字寫入(ROCKET_1_PIN,高); 延遲(800); 數字寫入(ROCKET_1_PIN,低); Serial.println("第一枚火箭發射"); } }
最后,我們有了connectToWiFi()函數。這個函數非常通用且不言自明,所以我不會詳細介紹這個函數。該函數將 ESP 連接到 Wi-Fi 并返回連接狀態。
布爾連接到WiFi() { 布爾狀態 = 真; 詮釋 i = 0; WiFi.mode(WIFI_STA); WiFi.begin(ssid, 密碼); 序列號.println(""); Serial.println("連接到 WiFi"); // 等待連接 Serial.print("正在連接..."); 而(WiFi.status()!= WL_CONNECTED){ 延遲(500); Serial.print("."); 如果 (i > 15) { 狀態=假;休息; } 我++; } 序列號.println(""); 如果(狀態){ Serial.print("連接到"); 序列號.println(ssid); Serial.print("IP地址:"); Serial.println(WiFi.localIP()); } 別的 { Serial.println("連接失敗。"); } 返回狀態; }
定義的這個函數標志著編碼部分的結束。
使用 Alexa Android 應用程序配置 Alexa
當且僅當 Alexa 識別 esp8866 設備時,它才會接受命令。為此,我們需要借助 Android 上的 Alexa 應用程序來配置 Alexa。在我們繼續之前要做的一件重要的事情是,我們需要確保 Alexa 配置了我們的 android 應用程序。
為此,請轉到 Alexa 應用程序的更多部分,然后單擊“添加設備”選項,單擊“燈光”, 然后在頁面底部向下滾動并單擊“其他” 。
接下來,單擊DISCOVER DEVICE并 等待片刻,然后 Alexa 將找到新設備。一旦 Alexa 找到設備,您需要單擊它們并將它們添加到各自的位置/類別中,然后您就完成了。
Alexa 控制的火箭發射器 - 測試
在測試過程中,我去了我的花園,把火箭上的所有保險絲都拔了出來,放在各自的地方,然后我喊著 Alexa……!打開所有的火箭,我的手指交叉。所有的火箭都將我的努力標記為巨大的成功。它看起來像這樣。
最后,我再次說 Alexa……!打開所有火箭,以獲得您可以在下面看到的細絲的史詩般的圖片。
/************************************************* ************************************
TITLE: Alexa control 3 通道 Rocket Launcher 可以很容易地升級到 7 通道
作者:Debashis Das(技術研究單元)
下載 Espalexa 庫:
https://github.com/Aircoookie/Espalexa
****************************************************** ************************************/
#include
#include
//定義與Relays連接的GPIO
#define ROCKET_1_PIN 4
#define ROCKET_2_PIN 13
#define ROCKET_3_PIN 15
// WiFi 憑證
const char* ssid = "deba_2.4";
const char* 密碼 = "il2ww*ee";
// 原型
布爾連接到WiFi();
//回調函數
void allrockets(uint8_t 亮度);
void firstrocket(uint8_t 亮度);
void secondrocket(uint8_t 亮度);
無效第三火箭(uint8_t亮度);
// 設備名稱
String First_Device_Name = "所有火箭";
String Second_Device_Name = "火箭一號";
String Third_Device_Name = "火箭二號";
String Forth_Device_Name = "三號火箭";
// wifi狀態檢查
布爾 wifiStatus = 假;
// Espalexa 對象
埃斯帕萊克斯帕萊克斯;
無效設置()
{
// 啟用串行調試消息
序列號.開始(115200);
//設置ESP引腳作為輸出
pinMode(ROCKET_1_PIN,輸出);
pinMode(ROCKET_2_PIN,輸出);
pinMode(ROCKET_3_PIN,輸出);
// 連接到本地 Wi-Fi 網絡
wifiStatus = connectToWiFi();
// 如果 Wi-Fi 連接設置所有 espalexa 設備
如果(wifi狀態)
{
// 在此處定義您的設備。
espalexa.addDevice(First_Device_Name, allrockets); //最簡單的定義,默認狀態關閉
espalexa.addDevice(Secound_Device_Name, firstrocket);
espalexa.addDevice(Third_Device_Name, secondrocket);
espalexa.addDevice(Forth_Device_Name, thirdrocket);
espalexa.begin();
}
別的
{
而 (1)
{
Serial.println("無法連接WiFi。請檢查數據并重置ESP。");
延遲(2500);
}
}
}
無效循環()
{
espalexa.loop();
延遲(1);
}
//回調函數
void allrockets(uint8_t 亮度)
{
如果(亮度 == 255)
{
數字寫入(ROCKET_1_PIN,高);
數字寫入(ROCKET_2_PIN,高);
數字寫入(ROCKET_3_PIN,高);
延遲(800);
數字寫入(ROCKET_1_PIN,低);
數字寫入(ROCKET_2_PIN,低);
數字寫入(ROCKET_3_PIN,低);
Serial.println("所有火箭發射");
}
}
void firstrocket(uint8_t 亮度)
{
如果(亮度 == 255)
{
數字寫入(ROCKET_1_PIN,高);
延遲(800);
數字寫入(ROCKET_1_PIN,低);
Serial.println("第一枚火箭發射");
}
}
void secondrocket(uint8_t 亮度)
{
如果(亮度 == 255)
{
數字寫入(ROCKET_2_PIN,高);
延遲(800);
數字寫入(ROCKET_2_PIN,低);
Serial.println("第二枚火箭發射");
}
}
無效第三火箭(uint8_t 亮度)
{
如果(亮度 == 255)
{
數字寫入(ROCKET_3_PIN,高);
延遲(800);
數字寫入(ROCKET_3_PIN,低);
Serial.println("第三枚火箭發射");
}
}
// 連接本地 Wi-Fi - 如果成功則返回 true,否則返回 false
布爾連接到WiFi()
{
布爾狀態 = 真;
詮釋 i = 0;
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, 密碼);
序列號.println("");
Serial.println("連接到 WiFi");
// 等待連接
Serial.print("正在連接...");
而(WiFi.status()!= WL_CONNECTED){
延遲(500);
Serial.print(".");
如果(我> 20){
狀態=假;休息;
}
我++;
}
序列號.println("");
如果(狀態){
Serial.print("連接到");
序列號.println(ssid);
Serial.print("IP地址:");
Serial.println(WiFi.localIP());
}
別的 {
Serial.println("連接失敗。");
}
返回狀態;
}
-
物聯網
+關注
關注
2913文章
44923瀏覽量
376991 -
點火器
+關注
關注
6文章
57瀏覽量
35961 -
語音控制
+關注
關注
5文章
484瀏覽量
28309 -
Alexa
+關注
關注
2文章
196瀏覽量
23371
發布評論請先 登錄
相關推薦
評論