第1步:選擇燈具
此項目以常規吸頂燈開始修改。它必須是一個基于LED的燈,內置12伏電源模塊和LED單元。此設置允許您在電源和LED單元之間連接自己的電子設備。當然,燈具也需要有足夠的物理空間用于我們的電子設備 - 大約8.0 x 5.0 x 3.0厘米(或3.1 x 2.0 x 1.2英寸)。
我當地Hubo五金店的超級友好人員讓我打開盒子找到合適的盒子,最后我得到了一個Eglo LED GIRON 13493.這是一款24 LED,12瓦型號。圖為未修改形狀的燈泡,蓋子已拆下。如果你想用更大的燈來建造這個項目,這絕對是可能的 - 我們將使用的電路可以處理更大的電流。
這個特殊吸頂燈的成本是40歐元(約合44美元) 。
第2步:其他零件和設備
我在這個項目中使用了以下電子元件:
LM2596 DC/DC降壓穩壓器模塊(不僅僅是LM2596 IC)。
ESP-01模塊。
LM358運算放大器。
STP65NF06功率MOSFET。
7電阻:5x 2k2,1x 100k,1x 220R
2電容:1x 100n,1x 47n
1二極管:1N4148
MOSFET類型并不重要。它只需要是采用TO-220封裝的N溝道功率MOSFET,具有低導通電阻 - 許多其他類型都可以。
以下連接器等用于構建電路:
2個PCB螺釘端子,每個2針(2.54mm/0.1‘’)(用于電源和LED連接)
1個公頭PCB接頭,3個引腳(用于可選串口調試連接)
1個母頭PCB接頭,2行4個引腳(我們將ESP-01模塊插入此端口) )
一塊原型PCB,銅帶連接3個孔,就像這樣。
幾根安裝線,最好是幾種不同的顏色(用于PCB)。
一根雙線電纜(用于電源和我們的PCB之間)。
4個墊片/螺釘/螺栓,用于將PCB牢固地安裝在燈泡內。
當然還有一些焊料。
組件的總成本與供應商的差異很大。我認為我為所有東西支付了大約15歐元(約合16.50美元),但應該可以通過DX或者AliExpress獲得更好的交易。
您需要以下工具和設備來構建它:
常用工具,如螺絲刀,剪線鉗和剝線鉗。
烙鐵。
鉆頭用鉆頭在PCB和金屬上鉆孔 - 我使用了3.0mm(0.12英寸)鉆頭。
電壓/萬用表。
安裝了Arduino IDE的PC/筆記本電腦,可以對ESP-01模塊進行編程。這可以通過常規USB-to-UART模塊與一些面包板電路相結合來實現,以便將ESP-01置于編程模式,或者(我認為更方便)使用ESP-01編程板(如圖所示)。
雖然不是嚴格要求,但如果需要調試電路,使用示波器會派上用場。
步驟3:電路
微控制器核心
電路的核心是ESP8266基于ESP-01的wifi微控制器模塊。基本的想法是通過向MOSFET開關發送PWM信號來對此事進行編程以保持時間,提供網頁,觸發警報并控制調光器。
ESP-01板價格便宜,體積小,并有一個易于使用的2.54mm/0.1‘’間距連接器。缺點是您只能獲得2個通用輸入/輸出(GPIO)引腳:GPIO0和GPIO2。此外,為了正確啟動微控制器,這些都需要先拉高,并且啟動后它們會被啟動加載器驅動一小段時間(如兩個附加的示波器屏幕截圖所示)。如果我們直接從這些引腳中的任何一個驅動燈,這些事情將導致明顯的閃爍。
再次查看示波器測量結果,我們可以看到即使在啟動期間,GPIO0和GPIO2也沒有同時被驅動為低電平。我們將通過構造電路來解決這個問題,使得只有當GPIO0和GPIO2都被驅動為低電平時燈才會亮 - 有效地在GPIO0/2和MOSFET之間放置一個NOR門。 GPIO0將用于(反向)PWM,GPIO2將用作“使能”引腳。這種設置使我們能夠完全控制以避免閃爍。
Opamp和MOSFET
GPIO0和GPIO2的輸出通過R4和R5饋入運算放大器的反相輸入。運算放大器的非反相輸入獲得由R6/D1產生的約0.5V的參考電壓。這設置了所需的NOR功能。通過為運算放大器提供12V電壓,它還可以提供從ESP-01的3.3V邏輯到完全驅動MOSFET所需的10V +所需的升壓。我們通過R7從運算放大器輸出驅動MOSFET。雖然這肯定不能成為理想的MOSFET驅動器,但它對于這種應用來說絕對是好的(快速)。當在面包板上構建電路時,我注意到一些電壓尖峰和振鈴,可能與MOSFET和LED單元之間的導線的自感有關。我(粗略但有效地)通過將C2放在源極和漏極上來抑制這種情況。
電源
我們的部分電路需要大約12V,另一個部分需要大約3.3V,我們有一個現有的12V電源來實現這一目標。我們從現有設計中有效地“竊取”了電力,希望我們吸取的電量不超過現有燈泡的安全裕度 - 這意味著我們必須保持較低的用電量。
根據這項研究,我們需要假設ESP-01的電流為215mA。使用線性穩壓器(如LD1117)不是一個好選擇。這意味著我們還將從額定電流為1A的原始電源中吸取215mA電流 - 因此215mA將非常重要。此外,穩壓器將耗散約1.9W,因此需要散熱器。因此,我使用了開關電源模塊。通過調節微調電位器,可以將這個特定的基于LM2596的模塊調節到所需的3.3V。假設轉換效率為85%,它將從原始電源消耗70mA,耗散125mW - 這更容易接受。
步驟4:PCB
我在一塊原型PCB板上構建了所有東西。我根據個人喜好使用了連接3個孔的銅條類型。我開始在角落鉆4個孔以便以后安裝板,然后焊接ESP-01的主要有源元件和插座,然后是其他所有。
包括這兩個圖插入和不插入ESP-01模塊的PCB和照片。這些應該提供所有需要的信息。
為了連接PCB,我使用螺絲端子連接電源和LED單元,并使用公頭打印頭暴露ESP-01的串口。后者不是必需的,但強烈建議在必要時進行調試。
步驟5:軟件
如果你想要按原樣使用軟件而不做任何修改并且不關心它是如何制作的,程序很簡單:下載并解壓附帶的‘wakeuplight_esp01.zip’,在Arduino IDE中打開。修改‘configuration.h’中的設置。它需要您的Wifi SSID和密碼,IP地址信息,NTP服務器的名稱(您可以保持不變)和時區信息 - 您的UTC標準偏差(以分鐘為單位)以及任何夏令時規則。
進行適當的更改后,只需將草圖上傳到ESP-01。
如果您想對軟件進行一些更改,或者只是對它的工作方式感興趣,可以參考一些更詳細的信息如下所示。
整體架構
我的這個軟件的初始版本是在簡單的C中,并通過實驗有機地發展。在某些時候,它工作(有點),但它是一個混亂。然后我決定重構并切換到C ++,為每個單獨的函數創建一個單獨的類(由定義類的.h文件和包含實現的.cpp文件組成)。這些類在主模塊中實例化。當然,大多數課程都依賴于其他課程。主模塊通過依賴類的構造函數注入這些依賴項。
存在以下類:
配置:提供所有配置數據的接口,兩者都是硬編碼的(如上所述)以及存儲在EEPROM中的數據(如報警設置)。所有其他模塊(調光器除外)取決于配置。
調光器:使用PWM調節光強度。
Wificlient:建立與Wifi接入點的連接。
NTPClient:從時間服務器獲取通用時間。
LocalClock:將通用時間轉換為本地時間,并考慮DST規則(如果有)。
鬧鐘:使用Dimmer,LocalClock和Configuration執行在設定的時間段內逐漸打開燈光的基本功能。
網絡服務器:提供適合移動設備的網頁,以啟用警報配置和手動控制。
Serialhost:允許串行通信以進行調試。
源文件中提供了更多詳細信息。 Dimmer和Webserver模塊在某種意義上是特殊的,它們部分地使用生成的代碼。 ‘wakeuplight_java_helpers.zip’文件包含一個用于生成的Eclipse Java項目。我們將在下面放大。
調光器
喚醒燈的亮點是讓光強度逐漸增加被人類感知。 PWM機制為我們提供了對光強度的線性控制,但人類感知或多或少是對數的(Weber-Fechner定律)。如果我們不對此進行補償,只需讓PWM占空比在1000步中從0增加到100%,結果就是在喚醒周期的早期階段,光強度會增加得太快而且明顯跳躍,提前達到高水平,然后在周期的剩余時間內從高到高非常緩慢地上升。這顯然不是我們想要的。我們需要在時間上以指數方式而不是線性方式改變光強度,以使感知在時間上線性增加。
此外,ESP8266 PWM并不完美。它有一些抖動,在非常小的占空比下會引起注意,并導致燈泡明顯閃爍。因此,光可以完全關閉,或者處于某種最小穩定值,但我們應該避免介于兩者之間。如果PWM頻率很低,這個問題會變得不那么嚴重 - 這就是我選擇100Hz的原因。
文件‘DutyCycle.java’從感知光強度(0到1800比例)和PWM值(0到20000比例)的所需步驟計算函數。 ‘ConvertDutyCycleToEsp.java’程序計算此函數并將其寫入.h文件以包含在Arduino項目中。 Arduino中的Dimmer代碼只是查看生成的表格。
Webserver
我想用智能手機控制項目。由于我在編寫網絡應用程序方面比使用原生移動應用程序有更多經驗,因此我決定采用適合移動設備的Web應用程序方法。
web-app是一個單頁HTML5/jQuery應用程序,當用戶按下按鈕時會發送Ajax POST請求(并定期檢索狀態更新)。該頁面指示瀏覽器從jsDelivr CDN獲取jQuery,所有JavaScript和CSS代碼都包含在HTML中,以及使用數據URL的圖像。因此,加載頁面只需要向ESP-01發出一個GET請求,保持一切簡單快捷。
通過包含‘mobile-web-app-capable’和‘apple-mobile-具有網絡應用功能的標簽和快捷圖標鏈接,智能手機可以將此網頁添加到主屏幕。之后,它可以像應用程序一樣啟動(它將在全屏瀏覽器中啟動),很大程度上隱藏了它不是本機應用程序的事實。
必須上傳草圖每次測試網頁的小變化都不是一個很好的開發周期。因此,我在Java Web項目中開發了這個,使用’LightServlet.java‘模擬ESP-01對Ajax POST請求的響應。 ’ConvertWebpageToEsp.java‘將web項目index.html轉換為’webserver_homepage.h‘包含文件,其中包含作為字符串常量的網頁。
步驟6:將所有內容放在一起
隨著PCB的建立和軟件上傳到ESP-01,現在是時候了將所有東西放在一起。
要將PCB安裝在夾具中,當然需要在其中鉆一些孔。在此之前我移除了電源和LED單元,以避免鉆孔振動損壞它們。之后,可以使用墊片安裝PCB。我從電源上取下原來的連接線,然后用它們連接到PCB。我用一根雙線將PCB連接到電源上。在此之后,燈可以安裝在天花板上!
當用墻壁開關打開燈泡時,燈應該像往常一樣完全打開,但延遲很短(遠不到一秒鐘,但值得注意)。您現在應該可以將移動瀏覽器指向燈泡的IP地址,并查看網頁。通過“添加到主屏幕”選項,您可以在主屏幕上添加一個圖標作為真正的應用程序啟動(在Android上測試,但也可以在iOS上運行)。
您現在可以配置喚醒期并啟用它。當您想要進入睡眠狀態時,請不要關閉墻壁開關,因為整個裝置當然會失去動力。而是按下應用程序中的“關閉”按鈕。第二天早上,您將在配置的時間輕輕地醒來。
-
led
+關注
關注
242文章
23347瀏覽量
662577
發布評論請先 登錄
相關推薦
評論