听话的狗子
- 一、项目介绍
- 二、硬件介绍
- (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语音识别模块 | UART | 5V | GPIO6(S_RXD) GPIO5(S_TXD) |
HCSR04超声波模块 | 普通IO | 5V | GPIO08(S_Echo) GPIO07(S_Trlg) |
PCA9685舵机驱动 | I2C | 5V | GPIO10(S_SDA) GPIO9(S_SCL) |
0.96OLED | I2C | 5V | GPIO14(S_SCL)GPIO13(S_SDA) |
HC-06 | UART | 5V | GPIO6(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代码如下图所示:
代码部分比较多,在此不做过多赘述,需要的朋友可以前往立创开源硬件平台搜索本项目(听话的狗子),项目附件中有完整的带注释的代码,可以自行阅读。
五、机械结构
本项目的机械结构笔者也是使用的网上的开源结构,各结构件如下图所示:
舵机驱动以及各爪子对应情况如下所示:
六、结语
通过本次训练营让我学习到很多,第一次完成了整个项目的硬件软件以及机械结构,这里要感谢一下立创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收发