当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]你好,这是我以前在Android应用程序上的W5100S-EVB-Pico 2项目的更新。在这个项目中,我改进了系统的设计,以支持更多的硬件使用继电器。有了这些,你也可以在你的个人项目中创建一个类似的迷你智能家居系统。

一个易于遵循的迷你智能家居系统,您可以尝试使用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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭