当前位置: 首页 > news >正文

基于Hi3861的听话的狗子

听话的狗子

  • 一、项目介绍
  • 二、硬件介绍
    • (1)Hi3861最小系统电路
    • (2)电源管理电路
    • (3)USB转串口电路+烧录电路
    • (4)外设接口电路
  • 三、PCB设计
  • 四、软件部分简介
    • (1)代码整体框架
    • (2)串口处理及动作控制
    • (3)超声波检测
    • (4)Hi3861创建AP服务器,用户通过访问进行控制
  • 五、机械结构
  • 六、结语
  • 学习笔记

一、项目介绍

本项目是笔者参加[立创&传智&黑马程序员&CSDN]的仿生机械狗训练营的作品,以Hi3861作为主控,使用OpenHarmony操作系统作为软件开发底层实现的语音控制四足机器人。
在这里插入图片描述

具体功能介绍如下:
·通过语音指令控制机器人站立、握手、前进、后退、左转、右转、俯卧撑、蠕动、扭头等动作。
·通过HC-SR04超声波模块实现避障功能。
·通过连接HC-05实现手机APP端控制动作。
·通过Hi3861自带的WIFI功能,使用AP模式创建服务器,用户使用手机、电脑等终端连接热点并访问内在服务器实现动作控制。

二、硬件介绍

接下来介绍一下整个工程的相关硬件。
控制板使用传智的Hi3861作为主体,围绕其设计了电源管理电路、IO扩展电路,引出多个I/O接口连接到排针和连接器,便于对接相应的功能模块。

(1)Hi3861最小系统电路

传智教育 Hi3861 IoT WiFi 模组是一款基于海思 Hi3861LV100 芯片的系统级封装模组,可提 供完整的 Wi-Fi IoT 开发功能。该模组的外观尺寸仅为 20 mm×18 mm×2.54 mm, 模组 已将晶振、滤波电容、WiFi 天线等外围器件集成封装,只需要 3.3V 供电即可正常工作。使用 传智教育 Hi3861 IoT WiFi 模组可以大大提升开发和管控效率,降低供应链的复杂程度。使用模组的设计大大方便了初学者,初学者直接使用即可。Hi3861模组图片如下图所示:
在这里插入图片描述

使用了Hi3861模组后整个控制板的外围电路还是比较少的,根据参考手册,除了3.3V电源外只需要额外添加一个复位按键电路即可,下图所示是Hi3861的最小系统原理图,其中SW1、C11和R10组成了复位电路,C9、C10两个滤波电容对电源进行滤波保证输入电源的稳定性。(大电容滤除低频杂波,同时起到储能作用,在一定程度上防止因为其他电路拉低电源电压造成的主控重启现象;小电容滤除高频杂波)。
在这里插入图片描述

(2)电源管理电路

因为这个系统需要使用到9个舵机,整个系统所需要的驱动电流是比较大的,这里笔者选用的是比较小的舵机SG90,其额定工作电压是4.8V-6V,额定工作电流是80-100mA,这样9个舵机的电流就需要1A左右,设计电路时还需要留有的余量,也就是大约需要1.5A左右的电流,同时还要保证其他电路的正常工作,所以笔者选用了两节18650锂电池进行供电。
两节18650满电电压大约在8.4V左右,需要设计降压电路来为各个模块进行供电,笔者整个系统中的各个模块的工作电压都是5V和3.3V基准的,因此,需要根据上述需求进行器件选型。
由于笔者贪图电路简洁使用了两个LDO,虽然能用,但是实测5VLDO发热比较严重,还是得改回DCDC。
5V LDO器件,选用LM1084(商城料号:C259973) 其芯片手册参考电路如下图所示:
在这里插入图片描述

3.3V LDO器件,选用UZ1084:(商城料号:C84897)其芯片手册参考电路如下图所示:
在这里插入图片描述
实际电路设计如下图所示:
在这里插入图片描述

(3)USB转串口电路+烧录电路

在学习STM32、51、MSP430、ESP32等单片机的时候我们经常会使用到USB-TTL电路,而且往往都是通过板载的USB-TTL下载电路进行自动烧录,顺着这个思路,Hi386是否也可以自动烧录呢?答案是,不可以。可能是海思在设计这款芯片时没有做自动烧录的功能,烧录时必须使用复位电路配合。
虽然不能自动烧录,但是USB-TTL的功能还是需要的,而且需要注意Hi3861烧录时需要使用3.3V电平,有关连接方式如下图传智模组手册所示:
在这里插入图片描述
根据以上描述,笔者选用了CH340G(商城料号:C14267)芯片描述如下图CH340芯片手册概述所示。
在这里插入图片描述

笔者实际使用电路原理图如下图所示:
在这里插入图片描述

(4)外设接口电路

整个系统所用到的外设比较多,所以需要预留接口,方便后面的接线,具体连接方式如下表1所示(“S_**”表示从机对应管脚):
表1 各外设连接情况

外设名称协议接口供电IO口
ASR-01语音识别模块UART5VGPIO6(S_RXD) GPIO5(S_TXD)
HCSR04超声波模块普通IO5VGPIO08(S_Echo) GPIO07(S_Trlg)
PCA9685舵机驱动I2C5VGPIO10(S_SDA) GPIO9(S_SCL)
0.96OLEDI2C5VGPIO14(S_SCL)GPIO13(S_SDA)
HC-06UART5VGPIO6(S_RXD) GPIO5(S_TXD)

将前面这4个电路合在一起,就是我们的主控板电路原理图(见下图)。
在这里插入图片描述

三、PCB设计

基于电路原理图,笔者设计了如下图所示的PCB。
主控板PCB_TOP:
在这里插入图片描述

主控板PCB_BOTTOM:
在这里插入图片描述

主控板PCB_3D:
在这里插入图片描述

由于Hi3861模组自带的有天线,为了保证我们后面的WIFI通信功能能够正常使用,需要注意天线下方PCB既不能走线也不能铺铜,如下图所示。
在这里插入图片描述

四、软件部分简介

硬件电路设计并焊接完成后就可以开始编写代码了,不同于STM32、ESP32这些单片机有着专用的集成开发环境(IDE);Hi3861这个芯片还没有集成了代码编辑、代码编译、调试于一体的IDE,其编译需要在Linux环境下进行,而笔者电脑的操作系统为Windows,所以只能安装虚拟机,配合VS CODE进行软件开发。
VS CODE代码编辑页面:
在这里插入图片描述

代码部分主要分为以下几个部分。

(1)代码整体框架

这里的代码整体框架还是使用的传智教育元气派的底层,使用多任务的模式来实现,其中网页控制参考的是传智官方例程。
代码整体框架:
在这里插入图片描述

(2)串口处理及动作控制

笔者使用的离线语音识别模块ASR-01与Hi3861使用串口进行通信,Hi3861接收到模块返回的信息后要对数据进行解析,获取对应指令,进而控制动作;数据解析思路主要是使用String,h里面的函数进行操作,具体处理过程见下图。
串口处理数据:
在这里插入图片描述

ASR-01语音识别模块也是需要进行编程的,如果使用代码编程的话,其思路与Arduino的思路差不多,不过他有一个更简单粗暴的编程方式,可以使用图形化编程,简直不要太舒服,强烈建议大家去玩一玩,ASR-01图形化编程如下图:
在这里插入图片描述

手机蓝牙控制与语音识别控制思路一致,只是需要在手机端自定义一个APP即可,这里笔者使用的蓝牙调试器,不需要编程,在手机端即可拖动模块做出自己所需的功能。
在这里插入图片描述

(3)超声波检测

这里笔者使用的HC -SR04超声波模块来实现避障功能,该模块一共有四种获取距离的模式(见下图)。
在这里插入图片描述

这里笔者使用的是第一种模式,也就是通过GPIO来捕获高电平维持时间,代入公式计算出距离,该模块的通信流程如下:
1.主控芯片与TRIG连接的IO配置为输出模式,与ECHO连接的IO配置为输入模式;
2.MCU给TRIG引脚输出一个大于10us的高电平脉冲;
3.模块通过ECHO脚返回一个高电平脉冲信号;
4.主控记录ECHO脚高电平脉冲时间T并代入公式计算。
代码如下图所示:
在这里插入图片描述

(4)Hi3861创建AP服务器,用户通过访问进行控制

网页控制的思路就是使用HTML生成按钮控件,并为按键绑定相应事件,Hi3861通过不同的相应事件执行对应的动作。HTML代码如下图所示:

图21 HTML代码

代码部分比较多,在此不做过多赘述,需要的朋友可以前往立创开源硬件平台搜索本项目(听话的狗子),项目附件中有完整的带注释的代码,可以自行阅读。

五、机械结构

本项目的机械结构笔者也是使用的网上的开源结构,各结构件如下图所示:
在这里插入图片描述
舵机驱动以及各爪子对应情况如下所示:
//  --------                 --------// |  D9    |               |  D7    |// | joint9 |               | joint7 |//  ----- --------     --------- -----//       |  D8    |   |  D6    |//       | joint8 |   | joint6 |//        --------     --------//       |  D2    |  |   D4    |//       | joint2 |  |  joint4 |//  ----- --------    --------- -----// |  D3    |               |  D5    |// | joint3 |               | joint5 |//  --------                 --------//                Front

六、结语

通过本次训练营让我学习到很多,第一次完成了整个项目的硬件软件以及机械结构,这里要感谢一下立创EDA和主办方,感谢他们对这个项目的大力支持,也感谢他们提供的优质活动。这个项目还有很多地方值得改进,欢迎大家批评指正,相关资料源码放在立创开源广场,项目名称是:“听话的狗子”,相关学习笔记在笔者OpenHarmony学习笔记专栏,最后,再分享一些照片。
站立
在这里插入图片描述
在这里插入图片描述
OLED显示表情

在这里插入图片描述

趴下
在这里插入图片描述

学习笔记

这里有亿点点OpenHarmony的学习笔记,放在这欢迎大家交流学习,有错误之处欢迎私信更正。
OpenHarmony学习笔记——南向开发环境搭建
OpenHarmony学习笔记——编辑器访问Linux服务器进行编译
OpenHarmony学习笔记——点亮你的LED
OpenHarmony学习笔记——多线程的创建
OpenHarmony学习笔记——I2C驱动0.96OLED屏幕
OpenHarmony学习笔记——Hi3861使用DHT11获取温湿度
OpenHarmony学习笔记——Hi3861接入OneNET
手把手教你OneNET数据可视化
OpenHarmony学习笔记——Hi386+ASR-01的语音识别助手
Hi3861网络通信——UDP收发

相关文章:

  • 【组件】Vue组件之间的通信父传子 | 子传父
  • 万字爽文一篇带你掌握Java8新特性Stream流
  • libusb系列-005-部分API简介
  • 深度学习提高模型准确率方法
  • [LeetCode刷题笔记]1 - 两数之和(哈希表)
  • HTML 学习总结
  • 网络安全:技术趋势
  • 现在都这么狂吗?面试了一个工作4年的测试工程师,一问连自动化基础都不清楚,还反过来怼我....
  • c++内存管理:
  • Hbase性能调优(一)
  • STM32CUBEMX(10)--内部Flash读写
  • 基于 Maven 的 MyBatis 逆向工程
  • 在阿里干了6年自动化测试,30岁即将退休的我,告诉你自动化测试工程师有多吃香...
  • 3.接口
  • LabVIEW-数据采集
  • .pyc 想到的一些问题
  • [笔记] php常见简单功能及函数
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • javascript数组去重/查找/插入/删除
  • JavaScript新鲜事·第5期
  • Java比较器对数组,集合排序
  • Js基础知识(四) - js运行原理与机制
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • React的组件模式
  • session共享问题解决方案
  • SQLServer之创建数据库快照
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 前端技术周刊 2019-01-14:客户端存储
  • 数据结构java版之冒泡排序及优化
  • 听说你叫Java(二)–Servlet请求
  • mysql面试题分组并合并列
  • NLPIR智能语义技术让大数据挖掘更简单
  • 函数计算新功能-----支持C#函数
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • #Ubuntu(修改root信息)
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (1)(1.13) SiK无线电高级配置(六)
  • (1)bark-ml
  • (6)添加vue-cookie
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (WSI分类)WSI分类文献小综述 2024
  • (差分)胡桃爱原石
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (强烈推荐)移动端音视频从零到上手(上)
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)大道至简,职场上做人做事做管理
  • *p++,*(p++),*++p,(*p)++区别?
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .Net Remoting常用部署结构
  • .NET 的静态构造函数是否线程安全?答案是肯定的!