本帖最后由 skyjz 于 2024-11-6 10:09 编辑
本项目用瑞萨的R7FA6M5BH3CFC作为主控,四个直流减速电机为小车提供基本的动力,小车搭载蓝牙模块、语音交互模块、电机驱动模块。
本项目是基于启明6M5开发板完成设计,RA6M5芯片配置如下:基于支持 TrustZone 的 Arm Cortex-M33F 内核。最高频 率 200 MHz。高达 2 MB 的闪存和 512 KB 的 SRAM。电压范围为 2.7 V 到 3.6 V。外设包括数据转换 器、定时器、外部存储总线、以太网、全速和高速 USB、CAN、安全功能、电容式触摸感应和用于 TFT 显示的图形 LCD 控制器,以及一个 2D 图形引擎。
语音模块采用野火小智系列 AI离线语音识别模块云知声US516P6传感器,US516P6模块配置如下:US516P6芯片采用高性能32位RISC内核,最高频率240MHz,支持DSP指令,集成FPU支持浮点运算,通过神经网络对音频信号进行训练学习,提高语音信号的识别能力。该方案支持150条本地指令离线识别,支持RTOS轻量级系统,具有丰富的外围接口,以及简单友好的客制化工具。US516P6芯片具有丰富的系统外设,包括UART,I2C,SPL,PWM,RTC,Timer,.ADC,DAC等,是一款低功耗高性能,主控级别的离线语音识别芯片。
蓝牙模块采用HC-05系列蓝牙模块,HC-05模块配置如下:KEY、VCC、GND、RXD、TXD、STATE,STATE是蓝牙状态引出脚,未连接时输出低电平,连接时输出高电平。KEY为AT指令设置脚,和按键功能相同。空旷环境下有效距离为10米,超过10米也是有可能的,但超10米不能保证通信质量。通过手机app端软件可以控制小车的前进、后退、左转、右转、调速等等功能。
前后避障模块采用野火小智系列CS100A超声波测距模块工业级测距芯片可代替HC-SR04,HC-SR04配置如下:CS100A超声波测距模块有两个超声波探头,分别用于发射和接收超声波,TRIG脚用于触发发射超声波,若接收到返回的超声波ECHO脚会输出高电平,根据高电平的持续时间计算目标距离。
采用CS100A工业级超声波测距芯片;使用8MHz高精度晶振,测距更加稳定;超声波测距模块前方处尽量空旷,测距最大可达5M。
当前方遇到障碍则LED2亮起;后方遇到障碍则LED1亮起。
语音模块配置通过云知声unios开放平台,配置如下:
配置代码如下:四个gpt分别控制四个轮子,Gpt2->左前轮,Gpt4->右前轮,Gpt6->左后轮,Gpt8->右后轮,实现前进,后退,左转,右转,调速的功能;串口9与语音模块通讯,串口3与蓝牙模块通讯。cs100A车前车后各有一个,实现小车避障的功能,当前方的cs100a检测到有障碍物,则小车停止前进,可以进行后退的操作;当后方的cs100a检测到有障碍物,则小车停止后退,可以进行前进的操作。
主函数代码如下:
#include "hal_data.h"
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
#include "gpt/gpt.h"
#include "led/led.h"
#include "usart/usart3.h"
#include "usart/usart4.h"
#include "usart/usart9.h"
#include "cs100a/cs100a.h"
/*******************************************************************************************************************//**
* main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function
* is called by main() when no RTOS is used.
**********************************************************************************************************************/
char SendBuffer[20];
void hal_entry(void)
{
/* TODO: add your own code here */
led_init();
// BLOOTH_DISABLE;
usart3_init();
usart4_init();
usart9_init();
printf("start!\r\n");
AGT0_Timing_Init();
CS100A_Init();
Gpt2_Init();//左前轮
Gpt4_Init();//右前轮
Gpt6_Init();//左后轮
Gpt8_Init();//右后轮
Gpt_Pwm_Setduty(GPT2,0);
Gpt_Pwm_Setduty(GPT4,0);
Gpt_Pwm_Setduty(GPT6,0);
Gpt_Pwm_Setduty(GPT8,0);
GPT2_A_OFF();
GPT2_B_OFF();
GPT4_A_OFF();
GPT4_B_OFF();
GPT6_A_OFF();
GPT6_B_OFF();
GPT8_A_OFF();
GPT8_B_OFF();
LED1_OFF();
LED2_OFF();
LED3_OFF();
// BLOOTH_ENABLE;
// memset(SendBuffer,'\0',20);
// sprintf(SendBuffer,"AT+RESET\r\n");
// Usart_SendString(&g_uart9_ctrl,SendBuffer);
// R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
//
// sprintf(SendBuffer,"AT+VERSION?\r\n");
// Usart_SendString(&g_uart9_ctrl,SendBuffer);
// R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
//
// sprintf(SendBuffer,"AT+NAME?\r\n");
// Usart_SendString(&g_uart9_ctrl,SendBuffer);
// R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
//
// sprintf(SendBuffer,"AT+CMODE=1\r\n");
// Usart_SendString(&g_uart9_ctrl,SendBuffer);
// R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
//
// sprintf(SendBuffer,"AT+CMODE?\r\n");
// Usart_SendString(&g_uart9_ctrl,SendBuffer);
// R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
//
// sprintf(SendBuffer,"AT+BIND?\r\n");
// Usart_SendString(&g_uart9_ctrl,SendBuffer);
// R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
//
// sprintf(SendBuffer,"AT+STATE?\r\n");
// Usart_SendString(&g_uart9_ctrl,SendBuffer);
// R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
while(1)
{
// Cs100A_Check();
Cs100A_FrontCheck();
Cs100A_RearCheck();
// R_BSP_SoftwareDelay(50,BSP_DELAY_UNITS_MILLISECONDS);
// R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
// GPT2_FRONT();
// GPT4_FRONT();
// GPT6_FRONT();
// GPT8_FRONT();
// LED1_TOGGLE;
// R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
// Gpt_Pwm_Setduty(6,0);
// Gpt_Pwm_Setduty(4,100);
// R_BSP_SoftwareDelay(3,BSP_DELAY_UNITS_SECONDS);
// Gpt_Pwm_Setduty(4,0);
// Gpt_Pwm_Setduty(6,0);
// R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
// Gpt_Pwm_Setduty(4,0);
// Gpt_Pwm_Setduty(6,100);
// R_BSP_SoftwareDelay(3,BSP_DELAY_UNITS_SECONDS);
// Gpt_Pwm_Setduty(4,0);
// Gpt_Pwm_Setduty(6,0);
// R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
}
实物图如下:
B站视频展示链接:
https://www.bilibili.com/video/BV1z3SzYkEdc/?vd_source=789de4862a6096312089ce8258d4c9af
由于本人最近一段时间比较忙,没有足够的时间去完善一些功能,很多其他的功能之前其实已经规划好了,但是没办法只能这样草草的结尾了,在整个学习过程中,野火编写的文档还是比较清晰的,跟着pdf一步一步的走省去了很多的麻烦。如果还有机会参与下一次的氛围赛,我会努力提交一个完整的有特色的作品。
|