0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

玩嗨OpenHarmony:基于OpenHarmony的机械狗进阶版——听话的狗子

共熵服务中心 来源:未知 2022-11-01 21:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

原文引自CSDN社区 《[立创&传智&黑马程序员&CSDN]训练营——仿生机械狗》

79e91e70-59e8-11ed-a3b6-dac502259ad0.png

编者按 昨天的《玩嗨OpenHarmony:基于OpenHarmony的仿生四足狗开发分享》,大家看到了一只12个自由度可在3D空间移动的机械狗的开发心得。今天分享的机械狗会更上一层楼,不仅仅支持蓝牙操控实现复杂动作,而且还是支持通过语音控制的哦。相信大家会喜欢。 1. 功能描述 话不多说,我们先上图上视频: 正视图:

7a1122a8-59e8-11ed-a3b6-dac502259ad0.jpg

俯视图:

7a1c3616-59e8-11ed-a3b6-dac502259ad0.png

视频展示: 狗狗名字叫小嘉,目前这只狗狗已经支持语音控制前进、后退、左转、右转、扭身子、握手、跳跃等;支持AP模式,用终端连接热点,访问网页进行控制;还支持使用HC05和蓝牙调试器进行控制;超声波避障还在优化中。 2. 硬件介绍 电源 由于整个项目需要驱动9个舵机,需要比较大的电流,所以供电选用两节18(直径)65(长度)0(圆柱形)锂电池,电源部分主要使用12V-5V,以及5V-3.3V的LDO(这里有个优化点,当时图简单,使用的都是LDO(编者注:Low Dropout Regulator 线性稳压电源 的英文缩写),实测发热还是比较严重,后面有打算换成DC/DC进行供电)。 用到了LM1084 (商城料号:C259973)和UZ1084(商城料号:C84897)。

7a906db0-59e8-11ed-a3b6-dac502259ad0.png

7aace1e8-59e8-11ed-a3b6-dac502259ad0.png

实际使用电路如下:

7ac87e12-59e8-11ed-a3b6-dac502259ad0.png

2.1 主控电路: 主控使用的是传智教育的HI3861模组(商城料号C2923578),该模组内置最小系统电路,简化了该部分电路设计,只需要额外增加一个复位电路以及在电源部分添加一个100nF的旁路电容C7(大电容滤除低频噪声,小电容滤除高频噪声)即可。

7b6b5a2e-59e8-11ed-a3b6-dac502259ad0.png

下载电路: 在之前的鸿蒙训练营,没有添加CH340需要外部接线,给我人接麻了,疼定思痛,加上了CH340G模块,由于使用的是Typec接口,所以在CC1和CC2要下来俩个电阻,方便电脑识别如果不加有可能会识别不到。另外,Hi3861是3.3V电压基准,为了保证统一电平,这里CH340G采用3.3V供电(上一期笔者有用5V供电烧录失败的经历)所以对应的V3端口也要接3.3V,而非5V供电时的那样。

7b7ca950-59e8-11ed-a3b6-dac502259ad0.png

PCB实物如下:

7c08cafc-59e8-11ed-a3b6-dac502259ad0.jpg

2.2 舵机驱动模块: 由于PCA9685商城没有现货,在某宝查了一下价格,买个芯片和买个模块要花差不多的米,本着提高成功率的态度,买了模块。

7c1b7134-59e8-11ed-a3b6-dac502259ad0.png

2.3 语音识别模块:

7c35677e-59e8-11ed-a3b6-dac502259ad0.png

语音识别使用的是鹿小班语音识别模块,官方简介:

ASR-01是一颗专用于语音处理的人工智能芯片,可广泛应用于家电、家居、照明、玩具等产品领域,实现语音交互及控制。

ASR-ONE内置自主研发的脑神经网络处理器BNPU(编者注:Brain Neural Network Processing Unit的英文缩写),支持200条命令词以内的本地语音识别,内置CPU核和高性能低功耗Audio Codec模块,集成多路UART(编者注:通用非同步收发传输器Universal Asynchronous Receiver/Transmitter的英文缩写)、IIC(编者注:Inter-Integrated Circuit 内部集成电路的英文缩写)、PWM(编者注:Pulse Width Modulation 脉冲宽度调制的英文缩写)、GPIO(编者注:General-purpose input/output 通用输入输出的英文缩写)等外围控制接口,可以开发各类高性价比单芯片智能语音产品方案

他们近期出了一款PRO版本,据说是支持声纹识别的,笔者还没买来尝鲜,有兴趣的同学自行了解吧。 2.4 超声波模块:

7c70c698-59e8-11ed-a3b6-dac502259ad0.jpg

这里笔者使用的是2022款的超声波测距模块HC-SR04 超声波传感器,支持兼容UNO R3/51/STM32,该模块支持普通GPIO模式、IIC模式、UART模式、1-Wire模式,由于串口和IIC已经被用到了其他地方,所以只能选择GPIO模式或者是1-Wire模式。笔者使用的是GPIO模式,不需要更改电阻。如果使用其他模式需要根据操作手册进行修改。 3. 软件介绍 3.1 主体框架: 程序主体还是用的传智官方的示例,在此基础上进行了亿点点修改,主要是增加了一个串口任务和动作逻辑。

static void UART_Task(void)
{
    IotUartAttribute uart_attr = {
        //baud_rate: 9600
        .baudRate = 9600,
        //data_bits: 8bits
        .dataBits = 8,
        .stopBits = 1,
        .parity = 0,
        .rxBlock = 0,
        .txBlock = 0,
    };
    //Initialize uart driver
    IoTUartInit(HI_UART_IDX_1, &uart_attr);
    while (1)
    {
        printf("=======================================
");
        printf("*************SIZU_example**************
");
        printf("=======================================
");
        // //通过串口1发送数据
        // IoTUartWrite(HI_UART_IDX_1, (unsigned char *)data, strlen(data));
        //通过串口1接收数据
        IoTUartRead(HI_UART_IDX_1, uart_buff_ptr, UART_BUFF_SIZE);
        SIZU_Uart_Cmd((char *)uart_buff_ptr);
        printf("Uart1 read data:%s
", uart_buff_ptr);
        usleep(500000);
    }
}


static void start(void) {
    osThreadAttr_t attr;
    //设置GPIO_2引脚复用功能为PWM
    IoTIoSetFunc(IOT_IO_NAME_5, IOT_IO_FUNC_5_UART1_RXD);
    IoTIoSetFunc(IOT_IO_NAME_6, IOT_IO_FUNC_6_UART1_TXD);
    IoTIoSetFunc(IOT_IO_NAME_10, IOT_IO_FUNC_10_I2C0_SDA);
    IoTIoSetFunc(IOT_IO_NAME_9, IOT_IO_FUNC_9_I2C0_SCL);
    IoTI2cInit(0, 400000);
    dog_init();
    genki_services_start();
    init_service();
    attr.name = "UART_Task";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = UART_TASK_STACK_SIZE;
    attr.priority = UART_TASK_PRIO;
    if (osThreadNew((osThreadFunc_t)UART_Task, NULL, &attr) == NULL)
    {
        printf("[ADCExample] Falied to create UART_Task!
");
    }
}


APP_FEATURE_INIT(start);
动作逻辑主要参考如下视频:
//  --------                 --------
// |  D9    |               |  D7    |
// | joint9 |               | joint7 |
//  ----- --------     --------- -----
//       |  D8    |   |  D6    |
//       | joint8 |   | joint6 |
//        --------     --------
//       |  D2    |  |   D4    |
//       | joint2 |  |  joint4 |
//  ----- --------    --------- -----
// |  D3    |               |  D5    |
// | joint3 |               | joint5 |
//  --------                 --------
//                Front
————————————————
3.2 语音识别 语音识别参考的笔者之前做的笔记: 《OpenHarmony学习笔记——Hi3861+ASR-01的语音识别助手》(https://blog.csdn.net/qq_41954556/article/details/123905578)。 由于功能比较简单,也就没有去弄数据包,一个简单的开头和一个数字,然后使用atoi函数获取数字,进行判断,最后执行操作即可。
// An highlighted block
enum{
    Get_Down,//趴下
  Hand_shake,//握手
    Go_Forward,//前进
    Go_Backward,//后退
    Go_Left,//左转
    Go_Right,//右转
    Twist_Body,//扭身子
    Stretch_Oneself,//伸懒腰
    WAIT//d
};


//检测串口指令
void SIZU_Uart_Cmd(char *str)      
{
    char  *Str;
    unsigned char ID=255;
  
    Str=&str[1];//定位到指令的数字部分“U1”
    ID=atoi(Str);
  
  if(strstr((const char *)str,"G")!=NULL)      //如果字符串str中包含有“G”
  {
    switch(ID)
    {
      case Get_Down:  //趴下  G0
                sithome();
                printf("Get_Down
");
        break;
      case Hand_shake:  // 握手G1
                wink(10);
                printf("Handshake
");
        break;
      case Go_Forward:  // 前进G2
                forward(5);
                printf("Go_Forward
");
        break;
      case Go_Backward:  // 后退G3
                 backward(5);
                 printf("Go_Backward
");
        break;
            case Go_Left:  // 左转G4
                leftturn(5);
                 printf("Go_Left
");
        break;
             case Go_Right:  // 右转G5
                 rightturn(5);
                 printf("Go_Right
");
        break;
            case Twist_Body:  // 扭身子
                 twist();
                 printf("LED_Add
");
        break;
            case Stretch_Oneself:  //伸懒腰
                 printf("LED_Reduce
");
                 stand3();
        break;
      default:
        printf("%s ERROR",str);
                standhome();
        break;
    }
  }
    memset(uart_buff,0,sizeof(uart_buff));
}
OLED显示表情,这个需要找到表情包GIF然后分离出单帧表情,取模,显示,详细的取模过程参考博客:《0.96寸OLED取模教程——字符与图片取模》(https://blog.csdn.net/qq_39400113/article/details/108036400) 语音识别的关键词使用的是天问的鹿小班模块,内置图形化编程模块,YYDS!会拖动模块就可以了,想玩语音识别的,强烈推荐此款。

7c7ca486-59e8-11ed-a3b6-dac502259ad0.png

3.3 超声波测距 这里笔者使用的是GPIO模式,利用两个GPIO口进行控制和捕获,进而计算出距离,详细介绍请参考笔者的博客《OpenHarmony南向学习笔记——Hi3861+HC-SR04超声波检测》(https://blog.csdn.net/qq_41954556/article/details/125910794)

通信流程:

根据厂商资料可以知道,该模块的通信流程如下:

主控芯片与TRIG连接的IO配置为输出模式,与ECHO连接的IO配置为输入模式;

MCU(编者注:Micro Controller Unit 微控制单元的英文缩写)给TRIG引脚输出一个大于10us的高电平脉冲;

模块通过ECHO脚返回一个高电平脉冲信号

主控记录ECHO脚高电平脉冲时间T并代入公式计算。

代码:

// An highlighted block


#define Echo  8   //Echo   //GPIO8
#define Trig  7   //Trig   //GPIO7
#define GPIO_FUNC 0


float GetDistance  (void) {
    static unsigned long start_time = 0, time = 0;
    float distance = 0.0;
    IotGpioValue value = IOT_GPIO_VALUE0;
    unsigned int flag = 0;
/*========GPIO通信模式流程1初始化GPIO =============== */
    IoTIoSetFunc(Echo, GPIO_FUNC);//设置Echo连接IO为普通GPIO模式,无复用
    IoTGpioSetDir(Echo, IOT_GPIO_DIR_IN);//设置Echo连接IO为输入模式
    IoTGpioSetDir(Trig, IOT_GPIO_DIR_OUT);//设置Trig连接IO为输出模式
/* ======== GPIO通信模式流程 2输出起始信号 =============== */
    IoTGpioSetOutputVal(Trig, IOT_GPIO_VALUE1);//拉高Trig
    IoTUdelay(20);//20us
    IoTGpioSetOutputVal(Trig, IOT_GPIO_VALUE0);//拉低Trig
/* ======== GPIO通信模式流程 3检测Echo脚输出的高电平时间 ==== */
    while (1) {
        IoTGpioGetInputVal(Echo, &value);//读取Echo脚的电平状态
        if ( value == IOT_GPIO_VALUE1 && flag == 0) {//如果为高
            start_time = IoTGetUs();//获取此时时间
            flag = 1;
        }
        if (value == IOT_GPIO_VALUE0 && flag == 1) {//高电平结束变成低电平
            time = IoTGetUs() - start_time;//计算高电平维持时间
            start_time = 0;
            break;
        }
    }
/* ======== GPIO通信模式流程 4代入公式计算 ====== */
    distance = time * 0.034 / 2;
    // printf("distance is %f
",distance);
    return distance;
}
4. 机械结构 笔者也是第一次自己绘制3D结构件,还不太OK啊,跟着画了个锤子,然后觉着自己画的结构实在不太靠谱,于是去海鲜市场捞了一个,有相同烦恼的同学可以去看看。

7c9d9e66-59e8-11ed-a3b6-dac502259ad0.png

7cb9cde8-59e8-11ed-a3b6-dac502259ad0.png

4.1 物料清单

四足机器人3D打印件(打印件不是整机,电子件、螺丝等自备)38 * 1

SG90 MG90S 9g舵机 固定翼航模遥控飞机 9克 马达航模5.99 * 9

16路PWM舵机驱动板PCA9685控制器机器人IIC适用MG90S SG90 MG995 19.6 * 1

锂电池两节18650或者2S,大约30-40,加上OLED、超声波模块,M3螺丝、螺母、铜柱、模组、芯片一起大约200成本。

总结 感谢立创EDA、传智、黑马程序员、CSDN提供的鸿蒙物联网实战训练营活动,在本次活动中学到了很多之前未接触的知识,受益良多。 写在最后 我们最近正带着大家玩嗨OpenHarmony。如果你有好玩的东东,欢迎投稿,让我们一起嗨起来!有点子,有想法,有Demo,立刻联系我们: 合作邮箱:zzliang@atomsource.org

7cd6f814-59e8-11ed-a3b6-dac502259ad0.gif

7cf3da60-59e8-11ed-a3b6-dac502259ad0.png7d5254dc-59e8-11ed-a3b6-dac502259ad0.png7d6fddb8-59e8-11ed-a3b6-dac502259ad0.png7da2e366-59e8-11ed-a3b6-dac502259ad0.png

7dbadc14-59e8-11ed-a3b6-dac502259ad0.png

7e0fab40-59e8-11ed-a3b6-dac502259ad0.png

7ebf8254-59e8-11ed-a3b6-dac502259ad0.png

7ed3cd54-59e8-11ed-a3b6-dac502259ad0.png

7f122df6-59e8-11ed-a3b6-dac502259ad0.png

原文标题:玩嗨OpenHarmony:基于OpenHarmony的机械狗进阶版——听话的狗子

文章出处:【微信公众号:开源技术服务中心】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机械狗
    +关注

    关注

    0

    文章

    18

    浏览量

    4946
  • OpenHarmony
    +关注

    关注

    31

    文章

    3926

    浏览量

    20721

原文标题:玩嗨OpenHarmony:基于OpenHarmony的机械狗进阶版——听话的狗子

文章出处:【微信号:开源技术服务中心,微信公众号:共熵服务中心】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    OpenHarmony年度课题管理办法

    OpenHarmony年度课题管理办法V1.0 第一章 总则 第一条 宗旨 围绕终端操作系统所面临的技术挑战,OpenHarmony项目群技术指导委员会(TSC)联合产学研各界,以
    的头像 发表于 11-12 16:55 428次阅读

    两款搭载KaihongOS的开鸿开发板被评为“OpenHarmony 明星开发板”

    OpenHarmony
    深开鸿
    发布于 :2025年09月11日 10:10:02

    2025 OpenHarmony TSC年中技术与生态研讨会圆满举办

    2025 OpenHarmony TSC 年中技术与生态研讨会 圆满举办 8月1日,2025 OpenHarmony TSC年中技术与生态研讨会于中国上海顺利召开。 本次会议由OpenHarmony
    的头像 发表于 08-07 12:24 1409次阅读
    2025 <b class='flag-5'>OpenHarmony</b> TSC年中技术与生态研讨会圆满举办

    OpenHarmony2025年度竞赛训练营重磅开启

      OpenHarmony2025年度竞赛训练营       活动介绍 OpenHarmony竞赛训练营 旨在引导高校学生进行OpenHarmony产学研用,培养更多应用型人才和产业需求有效链接
    的头像 发表于 07-16 11:51 716次阅读

    OpenHarmony年度技术课题评选通知

      OpenHarmony年度技术课题评选通知 活动简介 自技术课题发布以来,各高校OpenHarmony技术俱乐部积极申报、揭榜技术课题,并踊跃参与产学研交流,取得了显著的研究进展。为了持续牵引
    的头像 发表于 07-14 18:31 620次阅读

    桃芯科技获得OpenHarmony生态产品兼容性证书

    近日,由INGCHIPS自主研发的模组/开发板DB870CC1A顺利通过OpenHarmony 5.0.2 Release版本兼容性测评,并获得OpenHarmony生态产品兼容性证书!
    的头像 发表于 06-25 14:30 866次阅读

    四川大学OpenHarmony技术俱乐部正式揭牌成立

    2025年6月9日下午,由OpenAtom OpenHarmony(以下简称“OpenHarmony”)项目群技术指导委员会和四川大学计算机学院共同举办的“四川大学OpenHarmony技术俱乐部
    的头像 发表于 06-16 16:20 1226次阅读
    四川大学<b class='flag-5'>OpenHarmony</b>技术俱乐部正式揭牌成立

    利尔达RedCap模组通过OpenHarmony 生态兼容性测评!

    //近日,利尔达NR90-HCN系列5GRedCap模组正式通过OpenHarmony4.1Release生态兼容性测评,并获得由开放原子开源基金会颁发的OpenHarmony生态产品兼容性证书
    的头像 发表于 05-23 17:59 1385次阅读
    利尔达RedCap模组通过<b class='flag-5'>OpenHarmony</b> 生态兼容性测评!

    请问下,openharmony支持哪一款龙芯的开发板?有没有开源的龙芯的openharmony源码?

    想买个2k0300的开发板学习龙芯和openharmony,愣是没有看到提供openharmony源码的,也没与看到开源的代码。gitee上,openharmony的龙芯sig仓库也是关闭的,有没有人知道现在是什么情况?
    发表于 04-26 13:06

    2024年OpenHarmony社区年度激励公示

    在过去一年里,OpenHarmony项目群技术指导委员会(TSC)向所有参与者致以最诚挚的感谢!大家的积极参与和鼎力支持推动了OpenHarmony社区的持续繁荣与高质量发展。OpenHarmony
    的头像 发表于 04-21 18:17 935次阅读

    【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第2章OpenHarmony v3.2-Beta4版本测试

    【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第2章OpenHarmony v3.2-Beta4版本测试
    的头像 发表于 03-05 10:53 883次阅读
    【北京迅为】itop-3568 开发板<b class='flag-5'>openharmony</b>鸿蒙烧写及测试-第2章<b class='flag-5'>OpenHarmony</b> v3.2-Beta4版本测试

    【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像

    【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像
    的头像 发表于 03-04 16:31 874次阅读
    【北京迅为】itop-3568 开发板<b class='flag-5'>openharmony</b>鸿蒙烧写及测试-第1章 体验<b class='flag-5'>OpenHarmony</b>—烧写镜像

    2K0300 OpenHarmony源码构建指南

    2K0300 OpenHarmony源码构建参考如下 2K0300先锋派OpenHarmony源码构建指南 2K0300 源码编译wiki
    发表于 02-05 09:36

    OpenHarmony程序分析框架论文入选ICSE 2025

      近日,ICSE 2025软件工程实践Track放榜,面向OpenAtom OpenHarmony(以下简称“OpenHarmony”)的ArkTS程序分析基础框架--方舟程序分析器(论文题目为
    的头像 发表于 01-02 13:41 1839次阅读
    <b class='flag-5'>OpenHarmony</b>程序分析框架论文入选ICSE 2025

    OpenHarmony城市技术论坛第12期——合肥站圆满举办

    2024年12月23日,OpenHarmony城市技术论坛(以下简称“技术论坛”)第12期——合肥站于中国科学技术大学高新校区圆满举办。本次技术论坛聚焦于“智能时代基础软件与数据管理”的主题,深入
    的头像 发表于 12-26 09:14 1293次阅读
    <b class='flag-5'>OpenHarmony</b>城市技术论坛第12期——合肥站圆满举办