一板网电子技术论坛

风筝
发表于: 2019-11-24 19:01:23 | 显示全部楼层

最近,我对市场上所有新的家庭自动化产品都产生了兴趣,因此我购买了Google Home Mini和其他一些智能设备来控制电灯、风扇、AC和其他设备。虽然它确实有效并且使用起来都很有趣,但是我周围发生的所有这些无线连接使我有些麻烦。仅我的卧室就有5台智能设备,包括我的笔记本电脑和手机,这将是我周围总共7台无线设备始终保持连接到路由器的状态。我担心所有这些Wi-Fi信号可能对我们的健康有害,这份有关Sciencedirect的研究论文为我的想法增添了证据。这是我开始考虑不需要Wi-Fi /蓝牙运行的替代无线家庭自动化解决方案的时候。


使用Chirp的家庭自动化设备的新方法

我们之前已经建立了一个IR远程控制的家庭自动化项目,该项目可以在没有Wi-Fi或Bluetooth的情况下运行,但是它不再酷了,我想用语音控制设备。我一直在寻找Google Home mini直接与智能设备通信的技术,因此基本上我需要一种不使用Wi-Fi或BLE的“机器对机器”无线通信方法。


这是我想起Chirp首席技术官Dan Jones接受采访时所说的Chirp:“ Chirp是一种使用声波传输信息的方法。与使用无线电频率的Wi-Fi或蓝牙相反,Chirp将数据编码为可以使用任何计算机扬声器播放(传输)并通过任何计算机麦克风接收的音调,而无需任何其他硬件(例如RF芯片)。这使Chirp可以在任何带有扬声器和麦克风的消费类设备上使用,例如手机、笔记本电脑、扩音系统等,甚至可以通过YouTube流或电视广播来传输信息。”这意味着我们可以使用Google家用迷你直接与我们的智能设备通话(使用chirp)。我们需要的是这些智能设备中的麦克风和处理器,以对线性调频音频数据进行解码以执行所需的操作。 Chirp最近还宣布了针对Arduino的声音数据集成,这意味着我们应该能够使用新的Arduino nano 33 BLE Sense板为我们的项目运行Chirp SDK。


因此,在此项目中,我们将构建一个声学家庭自动化设备,无需使用Wi-Fi或蓝牙等任何无线连接,即可控制该智能设备。我们将使用Actions for Google和Dialogflow为Google Assistant构建一个测试应用程序,以使其播放编码的音频(Chirp)。然后,该音频将由运行Chirp Arduino程序的Arduino nano BLE感应板捕获,基于数据中编码的消息,Arduino开发板可以执行任何操作,例如触发控制RGB LED的交流负载等。听起来像很多,但是它相对简单,下面给出了完整的说明。因此,让我们开始吧。


使用Google Assistant播放Chirp Audio

建立语音控制的家庭自动化的最简单方法是将IFTTT与用于家庭自动化的Google Assistant结合使用。但是,在撰写本文时,Chrip在IFTTT上没有Applet,因此我们将使用Google Actions原生平台。在您阅读本文时,Chirp很可能在IFTTT中提供了自己的applet,因此请检查一下。如果没有,那么让我们继续执行Actions for Google来构建Google Assistant应用程序。


第1步:打开Dialogflow控制台。如果尚未注册,则可能需要注册。然后单击“Create New Agent”,如下所示

Dialogflow-Console-Arduino-Home-Automation.png


第2步:为您的新代理命名,然后单击创建。我已将代理命名为“ Circuitdgest_Automation

Creaing-New-Agent-for-Arduino-Home-Automation.png


第3步:现在您将进入“intents”部分。在这里,您可以培训新代理以了解各种意图。在我们的示例中,我们将编写两个意图,一个是打开灯,另一个是关闭灯。您可以根据代理必须理解的应用程序和命令编写任意数量的意图。默认情况下,您会有欢迎的意图,但是让我们通过单击““Create intent来创建一个新的照明灯,然后我将其命名为Lights on。

在新页面中,单击“Add Training Phrases”,然后输入助手必须理解的命令(示例中为“Turn on the light”)。您可以编写任意数量的表达相同意图含义的训练短语。

IFTTT-with-Google-Assistant-for-Home-Automation.png


第4步:现在向下滚动并单击“Add Response”。在这里,我们告诉助手如果触发了该特定意图该如何回复。默认情况下,您可以在此处输入文字回复,但我们需要在助手中播放音频,因此,请点击“默认”标签附近的“ +”符号,然后选择Google助手,然后选择“添加回复”并选择“Simple Responses” ”。在简单响应文本框中输入以下代码

  1. <speak>
  2. <audio src = "INSERT YOUR LINK">
  3. </audio>
  4. Lights Turned ON
  5. </speak>
复制代码

这是一个简单的SSML代码,可以播放URL中的音频,然后说“Lights Turned ON”。该音频应为Chirp的编码音频,并应上载到jovo.tech。


从chirp获取编码的音频

可以从Chrip Android应用程序获取此编码的音频。安装应用程序并输入要编码的消息,然后单击“发送”按钮以收听编码的音频

Chrip-Android-application.png

在这里,我键入“ Lights on”。同样,您可以键入任何消息,然后单击“发送”按钮以检查编码的音频。然后,我们可以使用任何录音机保存此音频文件(mp3格式)。我已经录制了两个这样的音频文件,其编码消息为“ Lights on”和“ Lights off”。如果您想节省时间,可以从这里下载它们。准备好音频文件后,转到jovo tech音频转换器上传mp3文件并获取链接。

Jovo-Tech-Audio-Converter.png

请注意,这是一个测试工具,您的文件只能保留24小时。如果您需要长时间运行,则必须使用自己的网络服务器(例如Google fire-base)(例如此示例firebase Google助手界面)。现在您已经获得了链接,您对对话框流的响应应如下所示

Firebase-Google-Assistant-Interface.png

确保单击“保存”以保存此意图。


第5步:类似地,创建另一个新的意图来关灯。再次输入您的训练短语以及您的回答。这次插入另一个音频文件的链接,并要求其说灯光关闭,如下所示。

firebase-Google-assistant-interface-for-Home-Automation.png

再次确保您也保存了它。


第6步:现在,在左侧单击“integrations”选项卡,然后选择“ Google助手”。这将帮助我们使用Google助手测试应用程序。选择Google Assistant应用,然后单击“测试”

Application-Test-Using-Google-Assistant.png


第7步:这将需要一些时间,之后您将获得如下所示的测试屏幕。在左上角,您会看到一个文本框,您可以在其中输入测试命令,并查看应用程序如何响应。您还可以在屏幕左侧找到一些调试应用程序。

Testing-Application-Using-Google-Assistant.png

当您键入“打开阅读灯”时,它应播放the声并说灯已打开,这与“关闭阅读灯”也应类似。在这里运行后,您可以在连接到您的Gmail ID的任何Google助手设备(如手机或Google Home Mini)上尝试使用。只需说说我的测试应用并开始控制设备即可。


准备您的Arduino Nano 33

现在在硬件方面,得益于Arduino Nano 33 BLE Sense板,事情变得非常容易。因为开发板具有内置的麦克风和线性调频库,可以直接从Arduino IDE进行部署。下图显示了用于家庭自动化的继电器模块与nano 33的连接电路图

Arduino-Home-Automation-using-Chirp-Circuit-Diagram.png

我已经使用Fritzing绘制了电路图,并且由于还没有nano 33板,所以我使用了标准nano,但是两者的引脚排列几乎相同。再次提醒您,nano 33的工作电压为3.3V,因此要连接5V继电器,您可以使用板上的Vin引脚。由于nano 33 BLE感应板已经具有板载麦克风,因此我们无需担心。但是请确保您的继电器模块也可以在3.3V信号电压下工作,因为Nano 33的GPIO引脚只有3.3V才能变高。

Arduino-Home-Automation-using-Acoustic-Connectivity-powered-by-Chirp.jpg


使用Chirp编程Arduino

完整的Arduino代码可在本页底部找到。但是该代码还需要在项目目录中包含certificate.h头文件,因此您可以使用下面的链接下载完整的项目文件夹。确保已将chirp SDK安装到Arduino IDE以便该程序进行编译。


为了将Chirp与Arduino一起使用,您必须在Chirp的开发人员站点上创建一个帐户以获取凭据。另外,请确保选择配置为16khz-mono-embedded,如下所示。记下关键,秘密和配置详细信息,因为我们必须在Arduino程序中使用它们。

Arduino-Chirp-Communication-ZIP-File.png


现在打开您的Arduino程序,移至certificate.h选项卡,并将相应的值粘贴到此处。这些凭据因人而异,应该共享。

Credentials-for-Arduino.png

主程序与示例程序相同,除了在onReceivedCallback()内部,我们将添加一个小程序以将获取的数据与预定义的文本进行比较。我们已经初始化了一个称为有效负载的字符串变量,该变量将实际值与字符串进行比较,并根据需要切换数字引脚。我们还切换了车载LED灯以进行确认。

  1. String payload = String(data);
  2.     //Serial.println(payload);
  3.     if (payload == "lights on")
  4.     {
  5.       digitalWrite(13,HIGH);
  6.       digitalWrite(2,HIGH);
  7.       Serial.println("Arduino has turned on the lights");
  8.     }
  9.     if (payload == "lights off")
  10.     {
  11.       digitalWrite(13,LOW);
  12.       digitalWrite(2,LOW);
  13.        Serial.println("Arduino has turned off lights");
  14.     }
复制代码

确保您比较的字符串与音频文件中编码的数据相同。您也可以打开Arduino串行监视器进行调试,或使用Chirp Android应用程序。完成此设置后,您就可以使用任何运行Google Assistant且已链接到您的Gmail ID的设备开始测试您的项目。另外,完整的代码,也可以从此处下载。


当我完成项目时,我对Chirp的应用感到非常兴奋,并且能够弄清楚可以使用chirp和Arduino的许多其他方式。您会用Chirp构建什么?欢迎在本帖下面进行回复。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 402 | 回复: 762



手机版|

GMT+8, 2020-1-18 18:04 , Processed in 0.437497 second(s), 31 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表