当前位置:首页 > 物联网 > IoT设计分享
[导读]每个漫威粉丝都会羡慕有一个像贾维斯这样的私人助理,用他们的语音命令来完成事情。但是,我们还远没有达到那样的智能,我们今天拥有的最接近的东西是谷歌Assistant、Siri、Cortana等语音助手。今天,市场上有几十种基于物联网的智能设备,可以使用这些语音助手进行控制,但继续更换我们家中的每个电子设备以使其适合家庭自动化是不公平的。这就是为什么,在这个项目中,我们将建立一个通用红外遥控器,可以控制每一个电子设备,在红外遥控器操作。基本上,我们将使用NodeMCU复制原始远程信号,以便我们可以在需要时从互联网触发这些信号。这个项目中的电路将特别集中在建立通用交流遥控器来打开/关闭任何交流,但其他电器的程序也非常相似。

每个漫威粉丝都会羡慕有一个像贾维斯这样的私人助理,用他们的语音命令来完成事情。但是,我们还远没有达到那样的智能,我们今天拥有的最接近的东西是谷歌Assistant、Siri、Cortana等语音助手。今天,市场上有几十种基于物联网的智能设备,可以使用这些语音助手进行控制,但继续更换我们家中的每个电子设备以使其适合家庭自动化是不公平的。这就是为什么,在这个项目中,我们将建立一个通用红外遥控器,可以控制每一个电子设备,在红外遥控器操作。基本上,我们将使用NodeMCU复制原始远程信号,以便我们可以在需要时从互联网触发这些信号。这个项目中的电路将特别集中在建立通用交流遥控器来打开/关闭任何交流,但其他电器的程序也非常相似。

这款基于物联网的通用遥控器将分两步操作,第一步,它允许用户从AC遥控器输入原始红外信号,然后允许用户在需要时通过谷歌助手的语音命令复制这些信号。为了从远程捕获这些命令,我们将使用一个TOP1738 IC,它是一个红外接收器。为了通过红外发送这些信号,我们使用了红外发射器,这是一个红外LED。

组件的要求

•NodeMCU

•TSOP1738 -红外接收器

•红外光束

•按钮

•发光二极管

•电阻

•连接电线

红外信号发射机

红外遥控器通过调制(开关)红外炮(红外LED)来操作。当你看到遥控器上的红外LED发光时(使用没有红外滤光片的相机),这意味着LED每秒打开和关闭数千次。用我们的肉眼是不可能跟随LED的开关的。红外LED打开和关闭的频率称为载波频率。数据被放置在载波上,并使用不同的调制技术发送。调制技术的一个例子是PWM。在这种调制中,红外LED的开和关持续时间是变化的。这些调制信号由红外接收器接收,并使用单片机解码。

TSOP1738(红外接收器)

TSOP1738就像一个传感器,对红外信号很敏感。因此,我们可以使用TSOP1738作为红外接收器。传感器的工作电压为5V,功耗为5mA。TSOP1738 IC有3个引脚,其中中心引脚(引脚2)是VCC,靠近中心引脚的引脚是接地引脚(引脚1)。剩余的引脚(引脚3)是信号引脚,连接到微控制器解码接收到的信号。IC的引脚如下所示。

集成电路包含光电探测器和前置放大器在一个单一的封装与内部滤波器的PCM频率。IC的内部框图如下所示。

请记住,TSOP-1738将只接收38Khz红外信号,并且与我们的项目兼容,因为印度所有的遥控器都工作在38Khz。请确认在你的国家是否相同,如果不是,然后更改相应的IC。

红外信号的编码与解码

解码电视遥控器是一个简单的任务,因为大多数时候他们只发送一个值。当涉及到交流遥控器时,它们会同时发送多个参数。除此之外,每个AC都有不同的协议,这取决于制造商。遥控器和带有接收器的设备之间的通信遵循不同的协议,如索尼、NEC等。根据制造商选择的协议,数据被转换为Pronto Hex格式,然后根据它定义代码。

利用NodeMCU进行红外信号解码

我们将以这样一种方式设计我们的代码,即用户必须首先从原始数据中从远程捕获每个指令的信号(在这个项目中,我们将处理打开和关闭AC),然后通过模拟捕获的数据,我们将通过谷歌助手控制AC,这是在手机上存在的。要使用NodeMCU解码原始数据中的传入红外信号,我们必须下载以下库。

下载文件后,您必须对库文件执行一个小编辑以执行我们的代码。打开src文件夹,找到IRutils.CPP文件。在记事本中打开该文件并查找在名为resultToHumanReadableBasic的函数名中编写的代码。复制粘贴下面给出的代码来代替该代码。

现在,查找函数名为resultToSourceCode的代码,并将下面的代码粘贴到该代码的位置。在下面给出的代码中,我们所做的只是对不必要的命令进行注释,这将有助于区分噪声和数据信号。关于这一点的更多信息将在代码解释部分中进一步解释。

语音控制交流电路图

我们使用一个简单的红外led作为红外爆破器,其阳极连接到NodeMCU的D2引脚,阴极端子连接到GND。为了显示按钮是否被按下,我对每个按钮都使用了LED。在按钮和led之间,我使用了一个100欧姆的电阻。物联网控制的交流遥控器的完整电路图如下所示。

两个led的正极分别连接到NodeMCU的D7和D8引脚上。我使用了1Kohm电阻作为NodeMCU的每个引脚的下拉电阻。我在D4的引脚上连接了一个绿色的LED作为指示灯,以指示运行时程序中的各个程序。NodeMCU的D5引脚连接tsop1738 IR接收器,中心引脚连接Vcc,剩余引脚连接GND。在红外接收器的GND和VCC上并联一个10uf的电容,以防止噪声。模块从nodeMCU获得供电,nodeMCU从USB电缆获得电源。

语音控制交流的Adafruit IO设置

这个设置是关于android和NodeMCU之间的通信。Adafruit IO通过谷歌Assistant接收来自我们手机的指令,然后使用IFTT与NodeMCU通信。使用Adafruit IO,您的数据可以在互联网上上传,显示和监控,您可以制作自己的物联网项目。我们之前还构建了许多其他有趣的Arafruit IO项目。使用Adafruit IO的步骤如下:

第一步:你需要做的第一件事就是注册Adafruit IO。点击屏幕右上角的“免费入门”。

步骤2:将弹出一个窗口,您必须在其中填写详细信息。填写您的详细信息,如姓名,邮件id,用户名等,点击保存设置,并创建您的帐户。

步骤3:现在,您需要在编码中使用您的AIO密钥。要获得您的AIO密钥,请单击“AIO密钥”,这是目前在页面的右上角。

步骤4:弹出一个窗口,显示您的AIO用户名和活动密钥。复制这些,你将需要在下一个过程中。

步骤5:获得AIO密钥后,现在必须创建一个New Feed。选择Feeds >查看全部。一个新的页面将被加载,在那里你可以看到你过去的订阅。由于您是新手,因此只能看到Default。

现在,选择Action > Create New Feed。

将弹出一个窗口,询问您的姓名和描述。我把它命名为VoiceAC,并做了一些描述。在给出详细信息后,选择“创建”并完成。至此,您已经创建了New Feed。

IFTTT设置语音控制AC使用谷歌助理

IFTTT (If This Then That)是一个基于web的服务,用于创建条件语句,称为applet。使用IFTTT,我们可以为某些动作创建触发器。对于我们的项目,我们将创建一个applet,当我们使用google assistant说出特定的一行时,它将触发。首先,我们需要在IFTT上创建一个帐户。

注意:在IFTTT上创建一个帐户,使用与在Adafruit IO中创建帐户相同的电子邮件ID。

要在IFTTT上创建帐户,请导航到IFTTT网站并点击注册。然后填写所需的详细信息,如电子邮件、密码等。创建并注册您的帐户后,点击个人资料,然后点击“创建”。

点击“创建”后,将加载一个页面,上面写着“创建您自己的If This Then That”。这里的“This”是服务名称,它将充当条件的输入,而“That”是操作,它将根据输入触发。所以在我们的项目中,输入将是b谷歌Assistant,动作将发生在Adafruit IO上。现在要创建一个applet,单击“This”图标。搜索Google assistant。

在步骤2中选择Google Assistant后,点击“Say a simple phrase”。

在下一个窗口中,将弹出一个窗口,说“完成触发字段”,即短语(ON AC),你想说你的谷歌助理,这将触发一个行动。也有一些可选的短语,你可以添加。填写字段后,点击“创建触发器”。输入部分完成了。

现在,我们必须设置“That”(动作)部分。点击“That”。

在动作服务搜索栏中搜索Adafruit。

现在,选择Send data to Adafruit IO。

将加载一个窗口,您必须在其中选择要为其创建触发器的提要名称(VoiceAC)。在下一个字段中,输入在说出指定短语时希望输入提要的数据(ON)。

之后,点击“Create action”。单击finish按钮,applet就可以使用了。

到目前为止,我们创建了一个applet,当我们对谷歌助手说ON AC时,它就会触发。现在,我们将创建一个applet,当我们对谷歌助手说OFF AC时,它将触发。从上面继续相同的过程,唯一的区别是步骤2和步骤5。在第2步的字段中,我们要写OFF AC短语,而不是写ON AC。

在步骤5中,提要名称将与前面相同,但是用于保存字段的Data将更改为OFF。

通过点击“Create action”,您已经成功创建了另一个applet,它将由短语“OFF AC”触发。

代码解释语音控制AC使用谷歌助理

我们要编写的代码要记住,首先当我们按下按钮1或按钮2时,它必须捕获传入信号。捕获传入信号后,我们需要编写处理与谷歌助手和NodeMCU通信的代码,然后通过IR blaster模拟这些信号。本文最后给出了我们项目的主代码。这里我要解释一下我们的代码。

随着你使用上面的链接下载的库,你必须下载Adafruit MQTT库由Adafruit使用库管理器。定义NodeMCU的引脚D7和D8为ON_B和OFF_B。这些引脚用于进入用于捕获红外信号的环路。这些引脚默认为LOW,如果这些引脚为高,则回路将被激活。

下面给出的代码为地址、名称、端口号、密码、SSID和wifi密码定义了一个变量。服务器地址和端口号可以保持原样,但是必须更改AIO密钥中获得的MQTT NAME和MQTT PASS。

我们将引脚4(D2)和引脚14(D5)分配给klrLed和kRecvPin变量,并使用D2引脚发送红外数据,而D5引脚用于接收红外数据

在void设置中,我们初始化波特率,并且必须等待微控制器形成串行连接。串行通信用于调试目的。建立连接后,我们将引脚D7(ON_B)和D8(OFF_B)设置为输入引脚,D4引脚设置为输出。引脚D7和D8用于查找连接到这些引脚的开关是否处于ON状态或OFF状态。引脚D4用于连接LED, LED进一步用作指示灯。将这些引脚配置为输入和输出引脚后,我们就建立了与家庭网络的连接。建立连接后,我们通过MQTT协议订阅VoiceAC馈线,并通过irsend.begin初始化发送函数。

下面给出的代码处理MQTT连接。MQTT连接的主程序编写在一个单独的函数中,该函数名为MQTT_connect()。使用MQTT_connect()函数调用MQTT程序,该函数存在于void循环中。

下面给出的代码包含两个主要的if条件。如果ON_B引脚高,第一个“If”条件将被激活,并且代码将在第一个“If”循环中编写。如果OFF_B引脚高,第二个‘ If ’条件将被激活,并且代码写入第二个‘ If ’循环将运行。

如果ON_B引脚高,代码将进入循环。D4引脚将发光高,表明程序已进入循环并等待用户使用交流遥控器初始化ON IR数据。

代码将处于无限循环中,直到用户通过红外遥控器给出正确的红外代码。如果数据由于噪声而损坏,函数resultToHumanReadableBasic(&results)返回“UNKNOWN”。如果resultToHumanReadableBasic(&results)返回除“UNKNOWN”以外的任何字符串,则意味着数据是正确的并且没有噪声。这将使程序退出while循环并继续执行下一条指令。

连接到D4引脚的指示灯LED熄灭,表示用户已将正确的红外数据发送到MCU。

下面给出的代码用于将resultToSourceCode(&results)函数返回的字符串值转换为uint_16类型。我首先将结果(resultToSourceCode(&results))存储在x变量中,这是一个字符串类型。每个数据都用逗号分隔,所以我继续使用while循环检查变量x中的每个字符。如果x变量内的字符不是逗号“,”,则将该字符添加到名为convert的字符串变量中。直到出现“,”为止。如果有字符“,”,则表示数据已经完成了在字符串变量convert中的存储。存储在转换变量中的第一个数据始终是数据的大小。首先,我把数据存储在size1变量中,它是int型。在第一个变量存储在size1变量中之后,我们必须为下一个进程清空“convert”变量,并使其准备好再次存储新数据。当程序感觉到第二个“,”时,我们知道这是我们需要通过IR Blaster发送的数据。

因此,我们以这样一种方式编写程序,即第一个传入数据将存储在size1变量中,其余数据将存储在变量“rawData1”中。我们使用convert. toint()将字符串转换为int型,然后将该数据存储在变量中。这个过程一直进行,直到x变量中的每个数据都完全存储在“rawData”变量中。

这个“if”条件检查OFF_B引脚是HIGH还是Low。如果是HIGH,程序进入循环。“if”条件内的代码与上面相同,但所使用的变量略有变化。在上面的代码中,我们使用了变量rawData1和size1,但是在这个循环中,我们将使用变量rawData2和size2。

下面的代码处理MCU和Adafruit IO服务器之间的通信。if条件if (!strcmp((char*) voiceAC。lastread, "ON"))只有当用户通过google assistant使用指定的短语时才为真。函数irsend.sendRaw()用于在匹配短语时以38KHz频率发送指定大小的原始数据。

基于物联网的通用交流遥控器的工作原理

我们以这样一种方式编写程序:首先,我们必须捕获从AC遥控器发出的数据。我们通过使用TSOP1738红外接收器来做到这一点。捕获信号后,我们将把数据存储在一个变量中,并在需要时使用红外爆破器模拟这些信号。

当我们打开电源时,我们会注意到指示灯LED(绿色LED)会闪烁。这表示模块正在等待wifi连接。指示灯停止闪烁,表示nodeMCU已连接wifi网络。在建立网络连接后,要捕获红外数据,请持续按下连接到D7或D8的按钮(ON_B或OFF_B),直到指示灯LED开始发光。指示灯LED发光,表示nodeMCU准备采集红外数据。使用您的AC遥控器发送红外信号到我们的TSOP如下所示。如果红外数据正确且无噪声,则指示灯灭亮,表示NodeMCU成功捕获红外数据,可以重新模拟数据。

对另一个剩余的按钮执行相同的过程。如前所述,我们将只处理AC的ON或OFF开关。ON_B按钮用于捕获AC开关ON所需的数据,OFF_B按钮用于捕获AC开关OFF所需的数据。捕获两个数据后,将模块放在AC前面。

在这之后,你可以坐下来,命令你的谷歌助手打开或关闭交流。如果你愿意,你甚至可以升级这个模块来捕捉温度或风扇模式等,并控制这些参数。

本文编译自iotdesignpro

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

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 隧道灯 驱动电源
关闭