如何使用继电器或N-MOSFET模块构建迷你智能家居系统
扫描二维码
随时随地手机看文章
一个易于遵循的迷你智能家居系统,您可以尝试使用CIrcuitPython, Android Studio和W5100S EVB Pico2在家中构建
你好,这是我以前在Android应用程序上的W5100S-EVB-Pico 2项目的更新。在这个项目中,我改进了系统的设计,以支持更多的硬件使用继电器。有了这些,你也可以在你的个人项目中创建一个类似的迷你智能家居系统。
本文将首先介绍新系统所需的组件,模块与电路板的连接,最后介绍Android Studio和CircuitPython中的代码
组件
为了完善这个项目,我增加了一个Minebea Motor的12V NMB-MAT风扇和定制的灯箱来模拟家庭系统。要操作这些设备,您需要2个外部电源来使用这两个产品,因为我们的板只支持5V和3.3V。
此外,为了允许我们的电路板为硬件供电,您将需要一个继电器或n通道MOSFET模块。两者都被使用,以便通过从我们的板向模块提供信号,然后它们将允许外部电源通过各自的机制为硬件供电。
风扇使用的电源是XY-SK35电源,因为它允许高达24v的电压水平,对于定制灯箱,您只需要一个microrousb到USB线和一个USB插头作为灯箱的电源。
XY-SK35电源
on组件以及我们的Pico 2板将与继电器模块连接。
对于带灯条的盒子,您将需要一个MOSFET模块,以便在该灯条上运行PWM。
硬件连接
对于每个硬件,我们将首先连接控制模块(继电器/MOSFET),电源和硬件,然后我们将完成的电路连接回电路板。
在我的研究中,我遇到了这个视频,教我如何连接继电器与硬件,以及如何控制它与Pico板。
要连接风扇、继电器和电源,您需要执行以下操作。
1. 确定要使用的电路。
如果您希望硬件在电路板提供低信号时工作,则需要使用继电器的NC端口,这意味着当电路板上的各自引脚输出低信号时,电源到风扇电路保持关闭,表明风扇仅在信号为低时运行。
如果您希望硬件仅在电路板提供高信号时工作,则需要继电器的NO端口,这意味着电源到风扇电路在引脚为LOW时保持打开,表明风扇在信号为LOW时不会操作。
2. 将风扇的正极连接到电源的正极。您可能需要使用剥线钳允许铜线连接到电源的正极。我剪断电线的塑料涂层,绕在电源的正极上。(蓝色线为风机正极线)
3. 将风扇的接地线与风扇的接地口连接到继电器的COM口。
4. 最后,将电源的负极连接到步骤1 (NO/NC)中选择的端口。对于这个项目,我希望风扇仅在我的板发送高信号时运行,这意味着我将使用NO端口
完成电源-风扇电路。
要连接到电路板,只需将接地,电压和信号引脚连接到各自的引脚,信号应在CircuirPython中的DigitalInOut引脚中
接下来,对于灯箱,您需要执行以下步骤。
1. 切割并去除microrousb转usb线的塑料涂层。暴露一些铜线以便电通过。现在您应该有两段导线,我将它们称为microUSB导线和USB导线。
2. 在N-MOS模块中,您将发现4个端口,分别是V输入+/-和V输出+/-。将微型rousb线的正极和负极分别接在电压输出正、负端口上。对于电压输入,我们相应地连接USB线。
3. 您应该会发现模块的另一侧有6个端口。顶部的三个端口都用于PWM,其余的都接地。
然后我们需要将这些端口连接到电路板的引脚。我使用GP12作为这个模块的引脚。
这就完成了两个硬件的连接。
CircuitPython代码
在编写代码之前,在Adafruit IO上为风扇和PWM灯创建两个馈送,以便您可以在Adafruit模式下读取或写入这些值
为了允许我们的应用打开/关闭风扇/盒子灯,你需要为这两个硬件设置一个新的端点。
要使用风扇,我将Gp9引脚绑定为DigitalInOut引脚,当该引脚值为1时,风扇将打开,如果不是,则风扇将关闭。
我还增加了一个自动版本,如果SFA30的温度超过一定值,风扇将自动打开。
由于现在我们希望SFA30自动记录变量,而不是仅在调用SFA30端点时执行计算,因此我们将SFA30端点中负责检索数据的代码移到一个函数中,当服务器在线时,我们将在该函数中调用每个循环。
我们将在新版本中返回风扇值以及这些数据供应用程序使用,我将在稍后解释。
本地模式下的旧版本:
本地模式的当前版本:
在Adafruit模式中,您需要为风扇值添加一个新的提要,订阅它,并在计算后将该值发布到Adafruit IO。
在第一次迭代中,当达到温度阈值时,我们需要首先将当前风扇值发送给Adafruit IO(这里的代码为25)。
在while循环内部,为了避免达到Adafruit IO的节流错误,最好只在风扇状态发生变化时才发布风扇值。增加油门时间也有助于减少达到油门时间的可能性。
最后,如果服务器结束,则将风扇的状态发布回默认状态(关闭)。
要使用该灯,您需要使用PWMIO库来调整亮度。
将GP12上的引脚与PWMOut功能绑定。previous_PWM变量用于在我们关闭应用程序中的灯之前记录PWM值。我们将其初始化为65535,因为灯的初始状态是关闭的,如果我们切换应用程序上的灯,占空比只能设置为65535的最大值。
在开发本节的过程中,有一个有趣的发现发生在我收到一个使用All计时器的错误时。经过一番研究,我发现发生这种情况是因为我使用了相同PWM输出片的第二个通道。正如在前面的代码中,我使用PWM输出来播放声音,如果连接,这是在引脚26,我不小心使用了相同PWM片的另一个通道的光,这是引脚11。您可以阅读此网站以获得有关Pico 2板的PWM通道的简短解释,或者您可以参考RP2350数据表。
PWM通道图片来自RP2350 Datasheet
由于这两种硬件的工作方式不同,最简单的解决方案是将我的光更改为PWM输出的另一片,即引脚GP12。
接下来,我们修改切换光端点,使用我们自定义的灯箱而不是led模块。
如果当前状态为0,我们将其打开到先前存储的PWM值作为亮度。
如果电流状态非零,我们关闭它。
我们还应该添加另一条路由来改变光的PWM值。
当Android从0-100缩放时,我们通过以下方式将这些值映射到0-65535,并将计算结果存储回previous_PWM变量。
接下来,对于Adafruit模式,创建boxlight提要并在连接的MQTT函数中订阅它。
我们还需要修改消息功能。应用程序仍然会调用LED端点来打开/关闭灯,但应用程序现在可能会将滑块值发送到PWM端点以调整亮度。
如果应用程序被发布到光源,我们的箱灯将改变亮度到以前存储的状态,如果它是打开的,如果它是关闭的0。
如果应用程序发送到箱灯馈送,我们首先用这个公式设置应用程序的值相应的占空比,并将当前占空比值存储到previous_PWM变量中,这样如果我们重新打开灯,亮度就处于先前存储的状态。
如果我们从本地模式切换到Adafruit模式,我们还需要发布当前的亮度。
最后,将占空比的默认值发布给Adafruit IO,该值为0
这就完成了CircuirPython代码。
Android Studio代码
在Android应用程序中,你需要添加一个按钮图像来存储风扇的当前状态,并添加一个按钮,负责切换灯的亮度,旁边是一个滑块,组成PWM值。
和之前的版本一样,我使用了ImageButton组件作为风扇,我允许它通过按下这个按钮来打开或关闭风扇。在未来,我可能会包括一个自动/手动切换,这样如果它是自动风扇模式,它就可以作为静态图像组件,但如果它是手动模式,我们可以按下这个按钮来打开和关闭。
风扇打开和关闭的图像是由ChatGPT生成的。你可以制作自己的版本,并将其重命名为fan_on, fan_off并将其存储到/res/drawable文件夹中。
这是我的代码在activity_main xml。
接下来,让我们转到这些组件背后的逻辑。
设置滑块和按钮如下。当SeekBar改变时,我们将把改变的结果存储到一个滑块值变量中,当我们决定按下负责亮度的Apply按钮时,该变量将用于发送到电路板。
我还将fan_button设置为false,因为我们目前不支持手动更改风扇。
创建Adafruit IO端点以发出HTTP请求。
由于我们在App中添加了一些新组件,我们需要在网络断开时禁用这些新组件。
现在我们可以对滑动按钮进行编码。这个滑动按钮背后的大部分逻辑与其他按钮非常相似,但我添加了一小部分,告诉用户在按下Apply按钮之前需要打开灯。
接下来,根据我们是否从上一篇文章中的discoveryot函数检索IP,我们将对各自的API端点执行HTTP请求。请记住,在这个Adafruit部分中,我们需要在从正确的提要(即pwmlight)获取数据之前识别物联网设备的在线状态。
在本节中,我使用POST而不是来自之前的onClickListener的GET请求,因为我们将向物联网设备发布数字数据。
完成滑块按钮后,我们现在可以修改SFA30功能,我们将在SFA30数据的同时检索风扇状态。
继上一篇关于get_data_job函数的文章之后,我们首先修改本地模式中的代码。
当我们决定返回一个带有SFA30数据和来自SFA30端点的风扇数据的JSON对象时,我们可以简单地检查“fan”键的值是真还是假,然后相应地更改风扇照片。
这里是本地模式的代码
对于Adafruit模式,您需要为向粉丝提要的http请求创建另一个async await函数,并相应地更改图片。但是,如果服务器不在线,则需要将照片设置为默认值。
这就完成了Android应用程序的Kotlin代码。
结论
这就是使用Kotlin和CircuitPython对迷你智能家居系统的更新。我希望通过这个项目,您可以学习如何使用继电器或N-MOSFET模块与我们的Pico板连接来操作现实生活中的硬件,并为您的个人项目提供一些灵感。也可能有新的更新到这个系统,使它作为一个更全面的家庭系统项目。希望你能从这篇文章中学到一些新的东西!
本文编译自hackster.io





