第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文章
23274浏览量
660799
发布评论请先 登录
相关推荐
评论