使用 Android 智能手机与语音命令控制您的 Arduino!

在我们制作声音控制家庭自动化系统之前,我们应该先学习实验的基本原理。本玩法,将带你使用 Android 智能手机和 HC-05 蓝牙模块来命令Arduino。

我所使用的声控应用的开发者,没有提供 Arduino 的示例代码。而我在 Google Play Store 中寻找了相关的替代品,但没有一个能和这个相应相比。 幸运的是,在花了一段时间对它进行编程后,我弄清楚其中的一些原理。对于IOS用户,这个应用程序在 Apple Store 中应该是不可用的 :/

它是如何工作的?

你有没有使用过 Android 的语音识别?是的,Android有一个语音识别功能,你可以使用它来通过蓝牙控制您的 Arduino。应用程序通过按麦克风按钮激活,然后它将等待你说一个指令。然后,该应用程序将展示你读过的单词,并将为 Arduino 发送数据字符串进行处理。

家庭自动化系统(2014年7月4日):

一个月后,我将发布一个高度复杂的家庭自动化 + 安全系统。这是我做过的最大的项目!我们目前的议程是,编写一个更好的智能手机应用程序,其工作原理就像 Siri(回头谈),并通过蓝牙将字符串(数据类型)发送到Arduino。现在只是一些概念性的知识,如果你想偷窥项目,请跳到最后一步。 我现在正在工作的原型是,由一个无线开关盒网络组成,通过WiFi /蓝牙连接到主控制面板。

视频演示

https://www.youtube.com/watch?v=auXcg1PuiFI

第1步:零件与材料

以下是本次玩法中,我们所需要的材料:

  • 5个LED指示灯
  • Arduino UNO
  • HC-05 串行蓝牙模块
  • 面包板
  • 线

步骤2:组装迷你蓝牙扩展板

我的JY-MCU(DX蓝牙模块)仍然安装在我的机器人上,我现在所拥有的就是一块裸机 HC-05 模块。

众所周知,HC-05 不附带PCB。将导线直接连接到金属导体上并不是一个好主意,因为导线可能随时断开。作为一个解决方案,您可以切割一部分板,然后安装HC-05。 在这个过程中,我错误地将我的 LED 指示灯连接到空白(N/A)引脚上,导致它不能工作。

步骤3:硬件连接

连接蓝牙模块

使用一些线,来为3.3伏的蓝牙模块供电。记住,裸机的 HC-05 板运行在 3.3v 而不是 5v。而,JY-MCU 有一个内置的调节器,它可以在 5v 的线路上运行。

现在,将Arduino的RX(引脚#0)连接到蓝牙模块的 TX 引脚,将 Arduino 的 TX(引脚#1)连接到蓝牙模块的RX引脚。

连接 LED

将Arduino的引脚 #2、3、4、5、6 上的每个 LED 的正极连接起来。每个LED的负极接到面包板的负极。面包板的负极接到 Arduino的 GND。

步骤4:对编程Arduino

了解应用程序

在编写 arduino 程序之前,您应该先了解应用程序的工作原理。该应用程序通过识别您的语音命令工作,然后将显示您所说的单词,接着通过蓝牙将数据/字符串发送到arduino。

什么是字符串?一个字符串就像一个字,你可以把它作为条件语句[比如: if (voice == "*computer on") {// turn Pin #2 on} ]。这里的 "voice" 是你的字符串,"==" 是你的条件(即相等的意思),"*computer on" 则是你的命令。花括号“{}”中的代码是,一旦你的字符串匹配命令条件,所要执行的代码。

字符串的格式是什么? 当下一个命令开始时,它是如何知道的? 它如何区分一组新的命令的单词?

应用程序以这种格式 命令# 发送字符串,星号()表示新命令的开始,哈希标签(#)表示命令的结束。 在条件语句中的每个单词不能删除星号(*)之后,但是可以删除哈希标签(#)。您需要使用星号启动命令条件,否则程序将无法正常工作。

如何更改命令?

如果要更改命令,比如说“open garage door”,请将您可以将 “TV on” 换成 “open garage door”。始终记得用星号放在命令的开头。

//Coded By: Angelo Casimiro (4/27/14)
//Voice Activated Arduino (Bluetooth + Android)
//Feel free to modify it but remember to give credit

String voice;
int
led1 = 2, //Connect LED 1 To Pin #2
led2 = 3, //Connect LED 2 To Pin #3
led3 = 4, //Connect LED 3 To Pin #4
led4 = 5, //Connect LED 4 To Pin #5
led5 = 6; //Connect LED 5 To Pin #6
//--------------------------Call A Function-------------------------------// 
void allon(){
     digitalWrite(led1, HIGH);
     digitalWrite(led2, HIGH);
     digitalWrite(led3, HIGH);
     digitalWrite(led4, HIGH);
     digitalWrite(led5, HIGH);
}
void alloff(){
     digitalWrite(led1, LOW);
     digitalWrite(led2, LOW);
     digitalWrite(led3, LOW);
     digitalWrite(led4, LOW);
     digitalWrite(led5, LOW);
}
//-----------------------------------------------------------------------// 
void setup() {
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
}
//-----------------------------------------------------------------------// 
void loop() {
  while (Serial.available()){  //Check if there is an available byte to read
  delay(10); //Delay added to make thing stable
  char c = Serial.read(); //Conduct a serial read
  if (c == '#') {break;} //Exit the loop when the # is detected after the word
  voice += c; //Shorthand for voice = voice + c
  } 
  if (voice.length() > 0) {
    Serial.println(voice);
//-----------------------------------------------------------------------//   
  //----------Control Multiple Pins/ LEDs----------// 
       if(voice == "*all on") {allon();}  //Turn Off All Pins (Call Function)
  else if(voice == "*all off"){alloff();} //Turn On  All Pins (Call Function)

  //----------Turn On One-By-One----------//
  else if(voice == "*TV on") {digitalWrite(led1, HIGH);}
  else if(voice == "*fan on") {digitalWrite(led2, HIGH);}
  else if(voice == "*computer on") {digitalWrite(led3, HIGH);}
  else if(voice == "*bedroom lights on") {digitalWrite(led4, HIGH);}
  else if(voice == "*bathroom lights on") {digitalWrite(led5, HIGH);}
  //----------Turn Off One-By-One----------//
  else if(voice == "*TV off") {digitalWrite(led1, LOW);}
  else if(voice == "*fan off") {digitalWrite(led2, LOW);}
  else if(voice == "*computer off") {digitalWrite(led3, LOW);}
  else if(voice == "*bedroom lights off") {digitalWrite(led4, LOW);}
  else if(voice == "*bathroom lights off") {digitalWrite(led5, LOW);}
//-----------------------------------------------------------------------// 
voice="";}} //Reset the variable after initiating

代码下载:Voice_Activation.zipVoice_Activation.zip

步骤6:学会使用App

应用地址:Android Meets Robots : Voice

使用步骤:

  1. 从 Google PlayStore 下载应用程序
  2. 点击选项菜单,然后选择“连接机器人”
  3. 点击你的 BT 模块(在我的例子中是HC-05)
  4. 等待应用连接到 BT 模块(HC-05)
  5. 点击麦克风图标并声明您的命令!

步骤7:下一个项目:高度家庭自动化(网络)

以下,将是我下一个 Arduino 项目想实现的内容。

对不起,可怕的涂鸦:)

自制智能家居 Arduino Android

原文链接:http://www.instructables.com/id/Voice-Activated-Arduino-Bluetooth-Android/

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.