资料介绍
描述
背景
这是一种使用 Android 设备上的蓝牙通信以及支持蓝牙的 Arduino 来控制和监控紫外线杀菌灯的方法。该蓝牙控制模块是为岭南大学岭南创业计划的“紫外光”计划设计的,用于控制紫外线杀菌灯。该项目所使用的灯能够对香港的低收入住房进行消毒。在 COVID-19 大流行期间,来自当地非政府组织的志愿者使用这些灯对香港 1000 多个低收入住宅进行了消毒。这些蓝牙控制的灯设计为安全、耐用且易于使用。该项目由岭南大学、香港大学社会工作及社会行政学系合作,由香港赛马会慈善信托基金资助的明爱青年及社区服务和健康行动
该项目可用于控制任何紫外线(或传统灯),但专门设计并使用 Project Ultra-Violite 灯进行了测试。
该项目存在使用交流电源以及 C 波段紫外线的风险。
使用主电源并与之交互是危险的。此项目中的接线只能由受过培训且能够熟练使用主电源的人员完成。如果您不熟悉交流电源的安全要求,请向受过适当培训的技术人员寻求帮助。
C波段的紫外线对眼睛和皮肤有害。接触会导致失明和灼伤。切勿以您或其他生物可能以任何方式暴露在光线下的方式操作灯。您必须确保没有人与灯光在同一个房间内,或在灯光运行时可能暴露在灯光下的任何位置。
概述
该项目由四个主要组件组成:将 Arduino Nano BLE 连接到传感器和紫外线灯的电路,用于与传感器和灯交互的 Arduino 代码,使用 MIT App Inventor 创建的用于交互和监控灯的 Android 应用程序,以及用于将控制器连接到三脚架的 3D 打印支架。
材料
这些灯使用常见的市售硬件,并带有一些可选的 3D 打印部件以帮助组装。让我们回顾一下制作灯所需的零件的详细信息:
- Arduino Nano BLE Sense。该微控制器用于在 Android 应用程序、灯和传感器之间进行接口。选择它主要是因为它的蓝牙功能。任何支持低功耗蓝牙的 Arduino 都适用于该项目。
- 被动红外运动传感器。这些传感器用于确定操作期间是否有人或其他生物靠近灯。如果传感器跳闸,灯会自动关闭。每个传感器都有大约 100 度的视野,因此使用三个安装在圆形图案中的传感器可以提供近 360 度的覆盖范围。
- GUVA-S12SD紫外线传感器。用于监控灯的状态,无论它们是否亮起。这使用户可以确保灯已按预期打开,从而对目标空间进行了消毒。它还通过显示灯是否打开或关闭,向用户指示房间是否可以安全进入。
- 10A250V继电器。用于触发灯光。
- 8通道双向电平转换器。用于调整工作在 3.3V 的 Arduino Nano 和工作在 5V 的继电器之间的信号电压。该项目选择了 8 通道电平转换器,以考虑使用更多 5V 传感器或继电器的可能性。但是,对于当前配置中的项目,只需要一个通道。
- Hilink HLK-PM01 5V AC/DC稳压器。从灯的主电源为 Arduino 和传感器提供 5V 电源。如果您接受过适当的培训并且习惯于使用交流电源,则可以在电路中包含此稳压器来为这些其他组件供电。如果没有,则使用其他电源,例如小电池或手机充电器。
- 安卓设备。使用随附的 Android 应用程序通过蓝牙与灯连接。
- 原型板。构建电路的平台。
电路
电路的核心是 Arduino Nano BLE Sense。这提供了使用 Android 设备通过蓝牙与电路进行通信的能力。Arduino 从四个传感器接收信息——三个 PIR 传感器和一个 UV-C 传感器。PIR 传感器连接到 Arduino 的三个数字引脚,每个引脚都连接到 5V 电源和接地。UV-C 传感器连接到 Arduino 的模拟引脚之一,以及 5V 电源和接地。
Arduino 有两个主要输出,10A 继电器和一个状态 LED。继电器充当开关来打开和关闭灯的电源。它通过电平转换器连接到 Arduino,因为 Arduino Nano 工作在 3.3V,继电器只能由 5V 信号触发。电平转换器连接到来自 Arduino Nano 的 3.3V 电源(用于 3.3V 逻辑参考)、来自稳压器的 5V 电源(用于 5V 逻辑参考)和公共接地。电平转换器还有一个使能引脚,当驱动为高电平时,该引脚使能电平转换器的输出。因此,它通过一个 1K 欧姆电阻连接到 Arduino Nano 上的数字引脚。继电器还连接到 5V 电源和接地。灯的带电电源线穿过继电器,可以打开和关闭。
状态 LED 通过 1K 欧姆电阻连接到 Arduino 的数字引脚。它充当控制单元的电源和连接状态的视觉指示器。
通过使用 HiLink HLK-PM01 5V AC/DC 稳压器提供电源。它通过 13 安培保险丝连接到主电源。如果您接受过适当的培训并且习惯于使用交流电源,则可以在电路中包含此稳压器来为这些其他组件供电。如果没有,则使用其他电源,例如小电池或手机充电器。如果您选择使用手机充电器,可以通过 USB 端口连接到 Arduino。原理图的重置保持不变。如果您选择使用 HiLink HLK-PM01,您可以考虑使用来自 OpenHardware 的分线板:该分线板使用两种类型的保险丝和压敏电阻增加了安全性。
您可以根据下面的示意图将电路组装在面包板、原型板、条板或其他类似平台上。虽然我们尚未为该电路创建印刷电路板,但如果其他人希望这样做,我们已经包含了初步的 Eagle 文件。
外壳
由于该项目包括交流电源,因此适当的外壳对于防止意外接触高压非常重要。我们使用了尺寸为 150 毫米 x 70 毫米 x 27 毫米的通用塑料电气外壳。我们用热胶安装了原型板、继电器和 3D 打印部件。
我们还设计了一个支架,将盒子和 PIR 运动传感器连接到用于固定灯的 Phottix P220 三脚架上(请参阅我们在此处构建灯的教程)。CAD 文件包含在本教程中,但可能需要针对不同尺寸的外壳或三脚架进行修改。
Arduino代码
Arduino 代码是使用 ArduinoBLE 库编写的。低功耗蓝牙设备可以是外围设备,充当服务器来保存正在通信的信息,也可以是中央设备,它向外围设备查询数据,并可以修改外围设备中包含的数据。在我们的实现中,Arduino 是外围设备,连接的 Android 设备是中央设备。
低功耗蓝牙通信以服务为中心,允许组织设备之间通信的数据。每个服务都包含多个特征,这些特征包含特定的数据。在此示例中,有一个服务(“lightService”服务)和四个特性。有一个 Characteristic 保存关于继电器是否应该打开或关闭的数据,一个保存关于运动传感器是否已被触发的数据,一个保存来自 UV-C 传感器的数据,一个保存关于是否有任何数据的数据Android 设备连接到 Arduino。这些服务和特征在草图的开头定义,如下面的代码块所示。
在草图的开头还定义了本地名称。这很重要,因为 Android 应用程序会在自动连接到灯时搜索此名称的一部分。例如,我们的 Android 应用程序版本在可用蓝牙设备的名称中搜索短语“LU_Light”。如果它找到这个短语,它会自动连接。因此,我们使用的灯光被命名为“LU_Light_1”、“LU_Light_2”、“LU_Light_3”等。因此,您应该选择设置 LocalName 以包含您编写 Android 应用程序要搜索的任何短语。更多内容在下面的“Android 应用程序”部分中进行了解释。
代码的下一部分是Arduino引脚的标准定义和变量的初始化:
在设置部分,看门狗定时器首次出现。看门狗定时器用于处理 Arduino 的任何意外断开连接或冻结。此计时器倒计时所需的时间(在本例中为 2 秒)。通过在代码中调用resetWDT()
战略位置,我们可以确保计时器不会达到零。如果该resetWDT()
命令从未被调用并且计时器达到零,这意味着 Arduino 在下一个resetWDT()
命令之前已冻结或断开连接。因此,看门狗定时器重新启动 Arduino,允许我们重新连接到它。这一点尤其重要,因为用户始终能够监控灯的状态并在必要时关闭灯是至关重要的。
此草图中的看门狗定时器特别有用,因为使用 ArduinoBLE 库的 Arduino Nano BLE 存在一个已知错误。Arduino Nano BLE 无法正确识别断开事件。因此,如果 Android 设备意外断开连接,Arduino 可能会继续像已连接一样,然后无法重新连接和监视或控制灯。为了克服这个问题,Arduino 监听来自 Android 设备的轮询消息。如果它收到此消息,我们知道它们仍然正确连接,并且可以重置看门狗定时器并且 Arduino 继续正常运行。如果没有及时收到轮询消息,则看门狗定时器不会重置,达到“零”,并重新启动 Arduino。
特别感谢 Arduino 用户dniklewicz提出使用看门狗定时器的建议。
在下面的代码片段中,enableWDT()
和resetWDT()
是在草图末尾定义的函数。在这个片段中,我们也可以看到 resetWDT() 函数的第一次使用。我们尝试启动蓝牙库。如果它无法开始,我们会保持 LED 闪烁以指示出现问题。该resetWDT()
函数用于 while 循环中,以防止看门狗定时器达到零和 Arduino 重新启动。
在下一节中,配置蓝牙服务。接下来,将特征添加到服务中,确保其数据对连接的设备可见。此外,还附加了运动传感器的中断。如果运动传感器检测到运动,它将触发此中断。
下一部分开始循环,该循环将重复运行。在循环中,Arduino 监听要连接的设备。如果没有连接,LED 会闪烁。我们在这里看到另一个resetWDT()
确保看门狗定时器不会启动 Arduino 的重启。
下一部分处理运动传感器。正如稍后将在草图中看到的那样,在最初打开灯后的三秒钟内,运动传感器被禁用。这是因为我们发现当灯打开时发生的突然的光线变化错误地触发了运动传感器。因此,我们在打开灯后短时间内禁用运动传感器。如果自灯打开以来已经足够长(大约 3 秒),我们重新启用运动传感器。
如果运动传感器已被触发(由草图末尾的中断服务程序motionFlag
设置为),那么我们更改 motionCharacteristic 的值,该值将自动报告给连接的设备并向用户显示一条消息。我们还通过切换继电器自动关闭灯。最后,设置为以便以后可以在需要时再次触发。true
motionDetected()
motionFlag
false
下一节处理来自其他特征的数据。首先是connectionCharacteristic
,它跟踪 Android 设备是否仍处于连接状态。它通过侦听0x01
Android 设备发送的值来实现。这表明它们仍处于连接状态,因此看门狗定时器被复位。如果 Android 设备发送 0x00,这表明用户希望断开与灯的连接。
这switchCharacteristic
是灯的“开/关”开关。如果 Android 设备发送0x01
,则用户已按下“开启”按钮。因此继电器打开(由低信号触发)。如上所述,运动传感器也被暂时禁用以避免由于灯的快速闪烁而导致错误触发,并且记录时间以便可以在大约三秒内重新启用运动传感器。如果0x00
发送了字节,则用户希望关闭灯并关闭继电器(设置为高电平)。
由于出于安全原因,用户在操作时不能与灯在同一个房间,因此我们配备了一个紫外线传感器,以便他们可以验证灯是真正打开还是关闭。紫外线传感器按所需的时间间隔轮询,默认情况下每秒轮询一次。我们使用 10 读数运行平均值来确定紫外线水平是否超过阈值。该变量uvReadings
是一个包含 10 个 UV 读数的列表,索引为 1 到 10。读数分 10 个步骤收集。在每一步,从总读数中减去该步骤的旧读数,并添加新读数。然后通过将总数除以所读取的读数数量来收集平均值。如果平均值低于阈值,则确定灯关闭,并且0x00
byte 被发送到 Android 设备,以便为用户创建指示。如果平均值高于阈值,则指示灯亮起0x01
并向 Android 设备发送一个字节。
最后一部分是草图中前面使用的函数。第一个是用于启用看门狗定时器的功能。值得注意的是CRV,它是用来设置超时时间的。它的计算公式为超时 = (CRV-1)/32768。因此,如果您希望有 6 秒的超时,则必须将 CRV 设置为 196609,因为 (196609 - 1) / 32768 = 6。此计算来自用于在处理器中保持时间的晶体的自然频率 32768赫兹。
第一部分是用于复位看门狗定时器的代码。最后一个是在运动传感器被触发时使用的中断服务程序。如果您不熟悉 Arduino 中断,可以在此处了解更多信息:http: //gammon.com.au/interrupts。如果触发发生在灯打开后的三秒内,我们故意禁用灯,则什么也不做。如果不是,则将motionFlag
变量设置为 true。在循环的下一次迭代中,继电器将关闭,并向 Android 设备发送一条消息,指示已检测到运动。
安卓应用
Android 应用程序是使用带有 BluetoothLE 扩展的 MIT App Inventor 2 构建的。该应用程序旨在与一组三个灯一起使用。但是,它也可以仅与一套或两套一起使用。灯的主要功能是通过蓝牙将 Android 设备连接到灯、打开和关闭灯、监控灯的状态以及处理灯运动传感器检测到的运动通知。
当用户打开应用程序时,他们会看到四个按钮,允许他们连接到设备、断开与设备的连接、打开连接的灯或关闭连接的灯。屏幕的下半部分显示每个灯的状态。灯的名称显示在左侧。连接状态使用中心的“无线”符号指示。穿过符号的红色“X”表示灯未断开。没有“X”表示设备已连接。右侧会显示一个灯泡图标,指示灯是否亮起。否则,没有灯泡出现表示灯已关闭。
第一步是连接到可用的灯。当用户按下连接按钮时,应用程序开始扫描可用的蓝牙设备,并将其聚合到一个列表中。在扫描过程中,无线图标为黄色。对于它找到的每个蓝牙设备,它都会查询设备的名称。如果设备的名称与用于指定 UV 灯的前缀匹配,在我们的例子中,我们使用前缀LU_Light ,那么它将连接到该灯。
连接灯后,将显示设备名称并且无线图标变为蓝色。
当连接了所需数量的灯时,可以使用“ON”按钮打开灯。按下“ON”按钮会导致 Android 设备向上述0x01
所有灯发送一个字节switchCharacterstic
。当灯亮起时,灯中的紫外线传感器会检测到这一点,灯内的 Arduinos 会0x01
在statusCharacteristic
. 然后使用屏幕右侧的灯泡图标在屏幕上指示。
按下“OFF”按钮会导致一个0x00
字节被发送到所有的灯switchCharacteristic
。当灯中的紫外线传感器检测到它们没有打开时,Arduinos 会发送一个 0x00 byte
on statusCharacteristic
,并且灯泡图标会消失。
当其中一个灯检测到运动时,Arduino 会在motionCharacteristic
. 这会触发 Arduino 设备向所有灯发送一个0x00
字节switchCharacteristic
,确保所有灯都关闭。应用程序屏幕上显示一条消息。可以通过单击“X”图标清除此消息。
每当灯连接到 Android 应用程序时,Android 设备都会0x01
在connectionCharacteristic
. 如上面的 Arduino 部分所述,这表明设备仍然正确连接。当按下“断开连接”按钮时,应用程序会在所有灯上发送一个0x00
字节。connectionCharacteristic
这会触发他们断开连接。尽管 MIT App Inventor 包含一个“断开连接”功能,但发现它不能与 Arduino Nano BLE Sense 可靠地工作,因此我们没有发送明确的“断开连接”命令,而是发送0x00
触发 Arduino 自行断开连接的字节。
安装 Application.apk 文件
我们已经包含了应用程序的 .apk 文件以及使用 .aia 格式的 MIT App Inventor 项目文件。要从 .apk 安装,只需在您的 Android 设备上从下方下载文件。点击下载的文件将开始安装过程。您可能需要在设备设置中允许安装非市场应用程序。有关安装 from.apk 的更多信息,
使用包含的 Arduino 代码和 .apk 文件是最简单的入门方法。如果您想修改应用程序,请按照以下步骤操作。
使用 MIT App Inventor 修改应用程序
要修改应用程序,您需要先在 MIT App Inventor 上创建一个帐户(如果您没有帐户)。然后,从下面下载.aia 文件。在 MIT App Inventor 中,单击文件 -> 导入并选择 .aia 文件。打开文件将带您进入 App Inventor 工作区,您可以在其中从 Designer 选项卡修改界面或从 Blocks 选项卡修改代码。包含的代码已完整记录。要在 MIT App Inventor 中查看评论,请单击每个 Block 左上角的问号。
- 使用ML8511紫外线传感器Arduino的紫外线指数计
- 便携式紫外线消毒器 1次下载
- DIY紫外线杀菌设备
- 沙滩紫外线计开源分享
- 紫外线灯消毒机器人开源分享
- Arduino紫外线指数计
- 智能紫外线计(紫外线辐射监测)开源分享
- FANSEA泛海微MCU单片机IC方案LED智能紫外(UVC+UVA)消毒灯
- 紫外线杀菌消毒灯管专用照度计UVC254说明书 2次下载
- 紫外线传感器模块 16次下载
- 紫外线传感器、GUVA-C32SM数字式紫外线传感器 10次下载
- 紫外线灯的原理及其在海岸原油清理中的应用 6次下载
- LEAC-280L紫外线灯的波长范围与操作要领及其主要用途的介绍 11次下载
- 紫外线光源在更多的应用 24次下载
- 紫外线擦除器的制作方法
- 红外线紫外线的特点及应用有哪些 1706次阅读
- 基于Arduino的紫外线传感器设计 紫外线传感器的工作原理和分类 1489次阅读
- 一文详解紫外线技术应用技术 996次阅读
- 用于紫外线杀菌灯的电子镇流电路分享 1.3w次阅读
- 详谈智能手表/手环里的紫外线传感器的作用 5870次阅读
- 紫外线对三大类材料的降解原理及如何预防或减轻紫外线的降解 1.3w次阅读
- dfrobotGUVA-S10GD UV紫外线传感器简介 2117次阅读
- led日光灯有紫外线吗_与普通日光灯有什么区别 2.8w次阅读
- 紫外线传感器在杀菌领域的应用 1615次阅读
- 紫外线和红外线感测暴露监测功能方法 3744次阅读
- 紫外线传感器杀菌消毒原理解析 4057次阅读
- 紫外线杀菌灯杀菌原理和特点 5.2w次阅读
- 针对紫外线的四个波段,应用对应波段的紫外线传感器分析 5715次阅读
- 紫外线治疗仪与紫外线波段之间的关系解析 5157次阅读
- 紫外线传感器电路 7884次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多