轮式机械臂小车实现语音控制

news2024/11/24 4:26:04

1. 功能说明

      本文实例将实现语音控制R214e样机运动(前进、后退、左转、右转、拿起、放下)的功能。

2. 电子硬件

      在这个示例中,我们采用了以下硬件,请大家参考:

主控板

Basra主控板(兼容Arduino Uno)‍

扩展板

Bigfish2.1扩展板‍

传感器

语音识别模块

电池7.4V锂电池

 电路连接:

      ① 小车左轮电机连到Bigfish扩展板的D9,D10接口;小车右轮电机连到Bigfish扩展板的D5,D6

      ② 将语音识别模块HBR640连接到Bigfish扩展板的扩展坞上

      ③ 将关节模块的舵机线连接到Bigfish扩展板的D11端口上

      ④ 将机械爪的舵机线连接到Bigfish扩展板的D12端口上

3. 功能实现

   编程环境:Arduino 1.8.19

   实现思路:语音命令机器人前进、后退、左转、右转、拿起、放下。

3.1 配置语音库

   步骤1:将文末资料中的\语音识别模块HBR640文件夹拷贝至本机位置。

   步骤2:将语音HBR640模块更改为“配置模式”,并用一个USB线将主控板连接至电脑上,将下图中的空程序烧录至主控板中

   (注意:在烧录程序的时候,语音识别HBR640要从扩展板的扩展坞上拔下来)

       步骤3:打开\语音识别模块HBR640\4 开发工具\HBR640开发工具:SRTool.exe(如下图所示)

       步骤4:先新建一个“HBR640对话工程”文件夹,然后在软件中点击“新建”,选择“HBR640对话工程”文件夹后,再创建一个文件名“che”,点击“保存”

       步骤5:在下图中的“未命名”区增加“机器人”分组。

       步骤6:在下图所示位置添加“前进”命令,然后点击“增加”按钮,即可将“前进”命令添加至左侧的词条列表中。

       步骤7:在下图所示位置再添加“后退”命令,然后点击“增加”按钮,即可将“后退”命令添加至左侧的词条列表中。

       步骤8:按照步骤6、步骤7的方式依次再分别添加“左转”“右转”“拿起”“放下”命令至左侧的词条列表中。

       步骤9:点击“保存词条”

       步骤10:点击“生成”按钮。

       步骤11:选择端口号,并点击“连接”,显示连接成功即可(这里以端口号COM17为例)

       步骤12:点击“烧录”并选择“全部”。在烧录过程中尽量不要移动主控板,显示烧录成功即可。

       步骤13:点击“测试”按钮,会在左侧的词条列表下面出现“候选命令”区。

       步骤14:对着语音识别模块分别说出刚刚编辑的命令“后退”、“前进”、“左转”、“右转”、“拿起”、“放下”时,会在候选命令区出现对应的识别结果。

       步骤15:测试成功后,点击“停止”按钮,并“断开”连接,此时语音库即已配置完成。

 3.2 示例程序

      将机器人语音控制程序(ohmygod.ino)下载到主控板,实验效果可参考官网演示视频。

/*------------------------------------------------------------------------------------

  版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.

           Distributed under MIT license.See file LICENSE for detail or copy at

           https://opensource.org/licenses/MIT

           by 机器谱 2023-04-23 https://www.robotway.com/

  ------------------------------*/

/*******************************************************************************************************

实现功能:

          用语音640实现语音小车;


实现思路:

          将语音640安装好后,如果接收到命令为“前进”,小车前进1秒后停止;如果接收到命令为“后退”,小车

          后退1秒后停止;如果接收到命令为“左转”,小车左转1秒后停止;如果接收到命令为“右转”,小车右转

          1秒后停止;如果接收到命令为“拿起”,机械爪抓取物体;如果接收到命令为“放下”,机械爪释放物体


实验接线:

          小车左轮接到D9,D10;

          小车右轮接到D5,D6;

          语音640模块接到扩展板的扩展坞上;

*******************************************************************************************************/

#include<ServoTimer2.h>;

ServoTimer2 servo_arm12;

ServoTimer2 servo_leg11;

#define servo_catch 63

#define servo_release 80

#define servo_up 30

#define servo_down 70

#include "HBR640.h" //语音640需要的函数库

#define DelayTime 1000//小车执行相关动作的时间;

HBR640 hbr640;      //实例化一个语音识别模块

void setup(){

  hbr640.open(); //开始进行语音识别

  pinMode( 5 , OUTPUT);

  pinMode( 6 , OUTPUT);

  pinMode( 9 , OUTPUT);

  pinMode( 10 , OUTPUT);//将直流电机设置为输出模式;

  servo_arm12.attach(12);

  servo_arm12.write(map(servo_release,0,180,500,2500));

  servo_leg11.attach(11);

  servo_leg11.write(map(servo_down,0,180,500,2500));

}


void loop(){

  if(hbr640.isHeard()) //如果监测到识别语句

  {

    int value = hbr640.getSentence(); //获得识别语句的序号

    switch (value)

   {

    case 0x00: MotorMode(1,DelayTime); hbr640.open();break;//如果接收到命令为“前进”,小车前进1秒后停止;

    case 0x01: MotorMode(2,DelayTime); hbr640.open();break;//如果接收到命令为“后退”,小车后退1秒后停止;

    case 0x02: MotorMode(3,DelayTime); hbr640.open();break;//如果接收到命令为“左转”,小车左转1秒后停止;

    case 0x03: MotorMode(4,DelayTime); hbr640.open();break;//如果接收到命令为“右转”,小车右转1秒后停止;

    case 0x04: down();delay(1000);Catch();delay(1000);up ();delay(1000); hbr640.open();break;//如果接收到命令为“拿起”,机械爪抓取物体

    case 0x05: down();delay(1000);Release(); delay(1000);up ();delay(1000);hbr640.open();break;//如果接收到命令为“放下”,机械爪释放物体

    default:   break;

    }     

  }

}


void Catch()//拿起

{

  servo_arm12.write(map(servo_catch,0,180,500,2500));

}

void up ()//拿起

{

  servo_leg11.write(map(servo_up,0,180,500,2500));

}


void Release()//放下

{

  servo_arm12.write(map(servo_release,0,180,500,2500));

}

void down()//放下

{

  servo_leg11.write(map(servo_down,0,180,500,2500));

}


void MotorMode(int mode,int t) //直流电机模式;

{

  switch(mode)

  {

     case 1: Forward(t); break;

     case 2: Back(t); break;     

     case 3: Left(t); break;

     case 4: Right(t); break;   

     case 5: Stop(t); break;   

  }

}

void Forward(int t) //前进

{

   digitalWrite(5,LOW);digitalWrite(6,LOW);

  digitalWrite(10,HIGH);digitalWrite(9,HIGH);

   delay(t); Stop(2);  

}


void Back(int t)    //后退

{

   digitalWrite(10,LOW);digitalWrite(9,LOW);

   digitalWrite(5,HIGH);digitalWrite(6,HIGH);

   delay(t);   Stop(2);

}


void Left(int t)   //左转

{

   digitalWrite(5,HIGH);digitalWrite(6,LOW);

   digitalWrite(9,LOW);digitalWrite(10,HIGH);

   delay(t); Stop(2);

}


void Right(int t)   //右转

{

   digitalWrite(5,LOW);digitalWrite(6,HIGH);

   digitalWrite(10,LOW);digitalWrite(9,HIGH);

   delay(t); Stop(2);

}


void Stop(int t)   //停止

{

    digitalWrite(5,HIGH);digitalWrite(6,HIGH);

    digitalWrite(9,HIGH);digitalWrite(10,HIGH);

    delay(t);  

}

void serialEvent() //程序会自动调用该程序;

{

    hbr640.lisen(); //在串口接收事件中调用语音识别的监听指令

}

      观察语音控制效果(注意:将语音识别HBR640模块更改为运行模式)。

4. 资料内容

①语音控制-例程源代码

②语音控制-样机3D文件

③语音识别模块HBR640

资料内容详见:轮式机械臂小车-语音控制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/535292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

港科夜闻|推进湾区产学研融合发展,香港科大(广州)—广州市属国企校企合作专题交流会圆满举行...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、推进湾区产学研融合发展&#xff0c;香港科大(广州)—广州市属国企校企合作专题交流会圆满举行。本次交流会由香港科大(广州)、广州市人民政府国有资产监督管理委员会主办&#xff0c;越秀集团协办&#xff0c;旨在充分发…

springboot+jsp网上图书商城销售系统java

开发环境 开发语言&#xff1a;Java 框架&#xff1a;springboot 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven…

ubuntu 20.04虚拟内存

ubuntu 20.04虚拟内存 1. 查看自己的虚拟内存 使用top命令或者使用free命令 2. 创建虚拟内存配置文件 # 新建文件夹 cd ~ mkdir swap cd swap# bs 为块的大小&#xff0c;count 创建多少个块 sudo dd if/dev/zero ofswapfile bs1M count2048# 修改权限 sudo chmod 0600 …

系统分析师:六、企业信息化战略与实施 练习题

目录 1、十二五的七大国家战略新兴产业体系 2、标准化的三个方面 3、信息的属性 4、电子政务描述 5、数据产品管理 6、企业门户 7、企业应用集成 8、电子商务标准体系 9、电子商务标准范畴 10、知识管理显性和隐形知识 11、决策支持系统 12、CRM解决方案 13、CRM核…

用Vue写教务系统学生管理

文章目录 一.首先创建新的Demo二.在APP里面绑定DemoStudent三.源码附上四.效果图&#xff08;新增记录还未实现&#xff09; 一.首先创建新的Demo 二.在APP里面绑定DemoStudent <template><img alt"Vue logo" src"./assets/logo.png"><!--…

华为OD机试真题 Java 实现【最小的调整次数】【2023Q1 100分】

一、题目描述 有一个特异性的双端队列&#xff0c;该队列可以从头部或尾部添加数据&#xff0c;但是只能从头部移出数据。 小A依次执行2n个指令往队列中添加数据和移出数据。 其中n个指令是添加数据 (可能从头部添加、也可能从尾部添加)&#xff0c;依次添加1到n&#xff0c…

超稳定ChatGPT镜像网站,小白适用,赶紧收藏【持续更新中】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

无代码开发引路,重塑企业数字生产力

互联网时代&#xff0c;信息的传递与共享成为企业运营的核心环节。传统的软件开发模式已经不能满足企业数字化转型的需要&#xff0c;而无代码开发平台可以在不改变底层技术架构的前提下&#xff0c;提供一种高效、低成本、灵活、易用的软件开发解决方案。相较于传统代码编写&a…

[山海关crypto 训练营 day13]

日常鼓励自己&#xff1a;世界上只有想不通的人&#xff0c;没有走不通的路。 [长安杯 2021]checkin 题目代码和数据 from Crypto.Util.number import * from secret import flag p getPrime(1024) q getPrime(16) n p*q m bytes_to_long(flag) for i in range(1,p-q):m…

事务AOP

事务&AOP 事务管理 在数据库中我们已经学过事务了。 事务是一组操作的集合&#xff0c;它是不可再分的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者撤销操作请求。所以这组操作要么是同时成功&#xff0c;要么同时失败。 事务的操作主要…

【共用体和枚举】

共用体 一种构造类型的数据结构 共用体和结构体类似&#xff0c;也是一种构造类型的数据结构。 既然是构造类型的&#xff0c;就需要先定义出类型&#xff0c;然后用类型定义变量。 定义共用体类型的方法和结构体非常相似&#xff0c;把struct 改成union 就可以了。 在进行某…

美颜SDK的应用与优化:一次全面探究

在直播过程中&#xff0c;美颜技术可以帮助主播实现更好的视觉效果&#xff0c;从而吸引更多的关注和粉丝。因此&#xff0c;直播美颜SDK的应用和优化已经成为了直播行业中的一个重要研究方向。 一、直播美颜SDK的应用 1. 美颜滤镜 美颜滤镜是直播美颜SDK中最常用的一种技术…

【Mybatis】Mybatis处理一对多、多对多关系映射-四

唠嗑部分 上篇文章我们说了Mybatis中ORM映射的几种方式&#xff0c;相关文章&#xff1a; 【Mybatis】简单入门及工具类封装-一 【Mybatis】如何实现ORM映射-二 【Mybatis】Mybatis的动态SQL、缓存机制-三 这篇文章我们来说说Mybatis如何处理一对一、一对多、多对多的关系映射…

Linux下网络编程(2)——socket的函数们

accept()函数 服务器调用 listen()函数之后&#xff0c;就会进入到监听状态&#xff0c;等待客户端的连接请求&#xff0c;使用 accept()函数获取客户端的连接请求并建立连接。函数原型如下所示&#xff1a; int accept(int sockfd, struct sockaddr *addr, socklen_t *addrle…

RK3588光电载荷处理板研制进展

本来就是一个很小众的市场&#xff0c;但是偶尔也会有同行询问&#xff0c;这儿就简单汇报一下后期的进展 板子已经开发完成&#xff0c;并有幸得到了两个订单&#xff0c;虽然量不是很大&#xff0c;但是也很开心由于一段时间的努力和付出&#xff0c;将该设备应用在了国防事业…

【Linux】Linux文件目录结构

Linux文件目录结构 在 Linux 中&#xff0c;其文件目录结构是一颗类似于多叉树的结构&#xff0c;所有目录都在 / &#xff08;根目录&#xff09;下面&#xff0c;每个非叶节点代表一个目录&#xff0c;叶节点代表文件。 一般结构如下所示&#xff1a; usr :“Unix Software …

LitCTF 2023 - crypto复现

文章目录 Hex&#xff1f;Hex&#xff01;梦想是红色的原来你也玩原神factordbP_Leake的学问Euler* Where is P?The same common divisormd5babyLCG* easy_math* Virginia* Is this only base?你是我的关键词(Keyworld)隐晦的聊天记录* baby_xor收获与体会 Hex&#xff1f;He…

RabbitMQ入门 安装 SpringAMQP简单队列、工作队列、发布订阅(扇出模式,广播模式)、Direct模式(Roting模式)、Topic模式

一、RabbitMQ介绍 1. MQ介绍 1. 为什么要有MQ 同步调用与异步调用 程序里所有的通信&#xff0c;有两种形式&#xff1a; 同步通信&#xff1a;通信时必须得到结果才会执行下一步 异步通信&#xff1a;通信时不必等待结果&#xff0c;可以直接处理下一步 同步调用 解析&…

IPWorks EDI 2022 .NET Edition 22.0.8 Crack

IPWorks EDI基于用于安全 EDI 通信&#xff08;AS2、SFTP、OFTP、RosettaNet、MLLP 等&#xff09;的领先 EDI-INT 协议&#xff0c;IPWorks EDI 库包含促进安全 EDI 消息传递以及 EDI 映射、翻译和验证&#xff08;X12、 EDIFACT、HL7、TRADACOMS、VDA、XML 和 JSON&#xff0…

Mybatis基础操作

文章目录 一. Mybatis单表操作删除操作查询操作#{} 与 ${}的区别更新操作新增操作 二. Mybatis多表操作 一. Mybatis单表操作 删除操作 我们接着使用昨天的表和程序&#xff0c;我们来实现通过id删除数据&#xff1a; 我们这样就可以实现将id 1的数据进行删除了&#xff0c;…