利用手机app语音控制arduino

最近做了一款语音识别的App,想着利用手机控制arduino实现RGB的调节,开发思路:基于讯飞语音识别做一款能识别我们语音的App,识别出语音之后,对应的文字转UTF-8编码,通过蓝牙串口通讯发送到arduino,实现对RGB的控制。
优点:
1、相对于LD3320语音识别模块成本更低
2、误识别率低

软件下载地址
硬件只需 arduino主控模块、蓝牙模块、RGB灯、可联网的智能手机,就能用语音控制RGB变换各种颜色。
具体效果请观看下面的视频
1、进入app界面后点击搜索蓝牙设备

在这里插入图片描述
2、找到你蓝牙设备的名称点击就可以连上了

在这里插入图片描述
3、连接上蓝牙之后的界面如下,先点击初始化然后才能点击开始语音识别(建议使用网络引擎)
识别的语音文件显示的是对应你点击开始语音识别按钮说的话
发送到蓝牙的数据这是对应语音文本的UTF-8编码

在这里插入图片描述
蓝牙模块和arduino UNO连线
在这里插入图片描述


//Arduino串口读取蓝牙接收到的语音文本的UTF-8编码的例程(汉字的UTF-8编码可以通过https://www.qqxiuzi.cn/bianma/guojima.php查询)
char x;//缓存函数
String comdata = "";//字符串函数
void setup() {
  Serial.begin(115200);//打开串口波特率115200
}
void loop()
{
  if (Serial.available() > 0)//判读是否串口有数据
  {
    comdata = "";//缓存清零
    while (Serial.available() > 0)//循环串口是否有数据
    {
      x = Serial.read();
      comdata += x;//叠加数据到comdata
      delay(2);//延时等待响应
    
    }
    if (comdata.length() > 0)//如果comdata有数据
    {
      Serial.println(comdata);//打印comdata数据
    }
  }
}


视频中演示效果的程序



/*  
 *   通过语音APP控制RGB
 * 
 */
#include <avr/pgmspace.h>
#include <Adafruit_NeoPixel.h>

#define red  16711680 //红色
#define blue 153  //蓝色
#define yellow  16777011 //黄色
 

const char string_0[] PROGMEM = "E68993E5BC80E7BAA2E889B2E79A84E781AF";  //红色utf-8编码   打开红色的灯      // "String 0" etc are strings to store - change to suit.
const char string_1[] PROGMEM = "E68993E5BC80E8939DE889B2E79A84E781AF";  //蓝色utf-8编码  打开蓝色的灯
const char string_2[] PROGMEM = "E9BB84E889B2"; //黄色
const char string_3[] PROGMEM = "101X";
const char string_4[] PROGMEM = "102X";
const char string_5[] PROGMEM = "String 5";
const char string_6[] PROGMEM = "String 6";
char x;//缓存函数

String comdata = "";//字符串函数
bool flag;

const char* const string_table[] PROGMEM = {
  string_0, string_1, string_2,
  string_3, string_4, string_5, string_6

};

char buffer1[30];    // make sure this is large enough for the largest string it must hold

Adafruit_NeoPixel  rgb_display_3 = Adafruit_NeoPixel(16, 3, NEO_GRB + NEO_KHZ800);

void RGB_show(long x)
{
  rgb_display_3.setBrightness(50);
  for (int i = 1; i <= 16; i = i + (1))
  {
    rgb_display_3.setPixelColor(i - 1, x);
    rgb_display_3.show();
  }
}
void setup()
{

  Serial.begin(115200);
  rgb_display_3.begin();
  flag = false;
  rgb_display_3.setBrightness(0);
  for (int i = 1; i <= 16; i = i + (1))
  {
    rgb_display_3.setPixelColor(i - 1, 0x000000);
    rgb_display_3.show();
  }
}


void loop()
{

  if (Serial.available() > 0)//判读是否串口有数据
  {
    flag = true;
    comdata = "";//缓存清零
    while (Serial.available() > 0)//循环串口是否有数据
    {
      x = Serial.read();
      if (x != '%' )
      {
        comdata += x;//叠加数据到comdata
        delay(2);//延时等待响应
      }

    }
    if (comdata.length() > 0)//如果comdata有数据
    {
      Serial.println(comdata);//打印comdata数据
    }
  }
  if (flag)
  {

    for (int i = 0; i < 7; i++)
    {
      strcpy_P(buffer1, (char*)pgm_read_word(&(string_table[i])));
      if (String(buffer1) == comdata)
      {
        Serial.println(String(buffer1));
        Serial.println(i);
        switch(i)
        {
          case 0:RGB_show(red);break;
          case 1:RGB_show(blue);break; 
          case 2:RGB_show(yellow);break;        
        }
          
      }
    }
    flag = false;
  }
}

智能语音APP控制arduino实现RGB灯的控制

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
要实现Arduino语音控制机械臂,需要以下步骤: 1. 使用一个语音识别模块,例如EasyVR模块或者DFRobot语音识别模块,将语音指令转化为数字或指令。 2. 将Arduino与机械臂连接起来,可以使用常见的舵机或步进电机控制机械臂的运动。 3. 编写Arduino代码,将语音识别模块输出的指令转化为对应的机械臂动作指令。 4. 进行测试与调试,不断优化代码和机械臂的运动效果。 以下是一个简单的基于EasyVR模块和舵机的Arduino语音控制机械臂的示例代码: ```C++ #include <SoftwareSerial.h> #include <EasyVR.h> #include <Servo.h> EasyVR easyvr(2, 3); // RX, TX Servo servo1; Servo servo2; Servo servo3; void setup() { Serial.begin(9600); easyvr.setPinOutput(EasyVR::IO1, LOW); easyvr.setPinOutput(EasyVR::IO2, LOW); easyvr.setPinOutput(EasyVR::IO3, LOW); easyvr.setTimeout(5); easyvr.setLanguage(0); servo1.attach(9); servo2.attach(10); servo3.attach(11); servo1.write(90); servo2.write(90); servo3.write(90); } void loop() { easyvr.setPinOutput(EasyVR::IO1, HIGH); int16_t cmd = easyvr.recognizeCommand(); easyvr.setPinOutput(EasyVR::IO1, LOW); if (cmd >= 0) { Serial.print("Command: "); Serial.println(cmd); switch (cmd) { case 0: servo1.write(0); break; case 1: servo1.write(180); break; case 2: servo2.write(0); break; case 3: servo2.write(180); break; case 4: servo3.write(0); break; case 5: servo3.write(180); break; case 6: servo1.write(90); servo2.write(90); servo3.write(90); break; default: break; } } } ``` 这个例子中,使用EasyVR模块将语音指令转化为数字指令,然后根据不同的指令控制三个舵机的运动。你可以根据自己的需要修改代码,实现更复杂的机械臂动作控制

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值