Android App驱动Arduino通过蓝牙控制交流调光器

房间的光线水平会极大影响人的心情和生产力。 早晨的灯光会有助于您的机敏和清醒,既可以诱使您感到疲劳,也可以使您整夜保持精力充沛。 在所有这些有关照明效果的发现中,能够控制照明变得越来越重要。 此外,使用蓝牙控制和调暗灯光的移动应用程序将是完美的!

在家庭或办公室的照明系统中安装调光器后,您便可以根据一天中的特定时间和手头的特定任务来调节强度和亮度。

硬件

软件

库文件

交流调光器模块

交流调光器设计用于控制交流电压,该交流电压可以传输高达600V /16А的电流。 它基本上是一个TRIAC,带有一些支持组件。 调光器的电源部分与控制隔离,以排除对微控制器造成高电流中断的可能性。 这主要用于平滑地改变灯的光亮度,但也可以应用于控制风扇,泵,空气滤清器等。

如何工作

交流调光器使用脉冲跳跃调制(PSM)或某些来源称之为脉冲跳跃调制来实现调光。 它具有过零检测功能,每次交流正弦波过零电压时,该信号就会在Z-C引脚上给出信号。 PSM可调节发送到负载的脉冲数或整个正弦波周期。 假设您要以100个不同的值调暗灯光。 对于100%的亮度,当一个完整的正弦波开始直到100个周期时,PWM引脚应设置为HIGH。 对于25%的亮度,PWM引脚应在25个完整周期内设置为高电平,然后在接下来的75个周期内设置为低电平。 为了使事情变得容易,所有这些将由Robotdyn调光器库处理,稍后将在代码中进行讨论。

HC-05蓝牙模块

HC-05蓝牙模块是易于使用的蓝牙SPP(串行端口协议)模块,专为透明的无线串行连接设置而设计。 由于它的低成本和广泛的应用,它是嵌入式项目中使用率最高的无线通信协议之一。

如何工作

串行端口蓝牙模块是完全合格的蓝牙V2.0 + EDR(增强数据速率)3Mbps调制,具有完整的2.4GHz无线电收发器和基带。 它使用具有CMOS技术和自适应跳频功能的CSR Bluecore 04-外部单芯片蓝牙系统。 用外行的话来说,蓝牙技术管理无线通信通道。 蓝牙模块可以无线发送和接收数据。 它通过串行通信进行通信,这是与微控制器接口的简便方法。

硬件设置

HC-05蓝牙模块连接
交流调光器模块连接

Android App设置

对于Android移动应用程序,我们将使用基于云的MIT app inventor。 只需几个步骤,您就可以设置它并开始构建应用程序! 首先,您需要在Android设备上安装App Inventor Companion App。 如果您没有Android设备,则需要在计算机上安装软件,以便可以使用屏幕上的Android模拟器。

完成所有操作后,单击“项目”选项卡,然后启动一个新项目并为其命名。 当您进入主界面时,您会在左侧看到一个调色板,在中间看到一个查看器,然后在右侧看到一个组件和属性标签。 将以下组件从面板中相应地并按顺序拖放到查看器屏幕上(左)。 为了使识别组件更加容易,请使用下面的(右)重命名按钮将标签名称更改为所需的名称。 遵循这种格式并在特定排列中包含特定组件,可以使以后在需要时更容易隐藏或显示一组组件。

相应地更改标签和按钮文本,然后将图像添加到BluetoothBTN,为用户提供一个单击按钮以进行连接。 您还可以在Screen1上添加背景图像,使其看起来更漂亮(左)。 此后,隐藏VerticalArrangement3,使其看起来像一个预先连接的屏幕(右)。

要查看该应用程序在手机上的外观,请通过单击顶部菜单上的“连接”按钮并选择“ AI同伴”,将其连接到App Inventor Companion。 与此代码一起将包含可导入的.aia文件下载,以及用于直接安装的.apk文件。

代码

Arduino 代码:Light_Dimmer.ino

</>

MIT App Inventor代码:AC Light Dimmer .aia and .apk

代码分解

Arduino代码
预初始化
</>

在开始之前,我们必须包括要在项目中使用的库。 Arduino硬件内置了对引脚0和1上的串行通信的支持。SoftwareSerial库允许在Arduino的其他数字引脚上进行串行通信,这使我们可以分别将引脚4和5用作接收器和发送器。 这也使我们可以将其用作调试序列,并打印出以后收到的消息。

</>

接下来,我们定义用于PWM和过零的引脚。 在我们的例子中,PWM位于引脚3中。如果您使用的是Arduino Uno,Leonardo,Mega,M0或Zero,则无需定义过零引脚,因为默认情况下它已在Robotdyn库中设置。 如果您要使用其他电路板,请相应地定义零交叉引脚,然后使用注释掉的dimmerLamp代码行来初始化调光器。

之后,我们初始化输入变量,并设置最小和最大亮度。 这些值取决于所使用的灯。 但是,必须进行一些测试才能获得它们。 就我而言,高于或低于35的任何东西都不会打开灯,因此我将其设置为最小值,高于或高于85的任何东西都不会使其变亮,因此我将其设置为最大值。

Void Setup()
</>

在setup()函数内部,我们将串行和蓝牙串行波特率设置为9600 bps,这是串行通信的默认设置。然后,我们初始化调光器并在Serial中打印一条消息,以指示初始化成功。

SerialEvent函数
</>

在使用loop()函数之前,我们必须首先了解serialEvent函数扮演什么角色,serialEvent检查Bluetooth串行中何时有数据。 当有可用数据时,它将把这些数据存储在输入变量中,然后将boolean stringComplete设置为true以表示它已成功接收到数据。

Void Loop()
</>

在loop()函数内部,我们调用serialEvent,它将告诉我们何时成功接收到数据。 如果已接收到数据,它将进入if语句,并将输入值从0映射到100到我们之前设置的最小和最大亮度。 之后,我们使用dimmer.setPower()设置灯泡的功率,然后在串口上打印该值以进行调试。 然后,我们将boolean stringComplete设置回false,以表明它已完成数据接收,并且没有其他可用数据了。

MIT App Inventor代码
连接按钮

由于MIT App Inventor使用代码块,因此应该更容易理解。 单击BluetoothBTN(ListPicker)时,“BeforePicking”是用户在从特定列表中选择内容之前发生的情况。 在这种情况下,我们想向用户显示附近可以连接的蓝牙设备列表,因此我们将BluetoothBTN的元素设置为需要连接的设备。

用户选择蓝牙设备进行连接后,将发生“ .AfterPicking”。 如果已成功连接到HC-05蓝牙模块,则会将其中包含ConnectLabel和BluetoothBTN的VerticalArrangement2的可见性设置为false,并将包含其他组件的VerticalArrangement3的可见性设置为true。 之后,应用程序应如下所示。

DisconnectBTN完全按照其名称的含义执行操作–将应用程序与蓝牙设备断开连接,并将VerticalArrangement2设置为true,将VerticalArrangement3设置为false,这是连接之前的设置。

滑杆

这是代码中最重要的部分。 滑块位置更改时会触发“ .PositionChanged”。 在函数内部,我们将BrightnessValue标签的文本设置为滑块的拇指位置。 拇指位置是滑块当前所在的位置,因此带有标签指示其值将对用户有所帮助。 同时,它会检查用户是否仍连接到蓝牙设备,并通过蓝牙发送拇指位置值以供HC-05蓝牙模块接收。

详情参阅 - 亚图跨际

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值