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