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

基于STM32的智能声音跟随小车设计

引言

本项目基于STM32微控制器设计了一个智能声音跟随小车,通过集成麦克风阵列实现声音源定位和跟随功能。该系统可以检测环境中的声音信号,如手掌拍击声或语音指令,驱动小车向声源方向移动。项目涉及硬件设计、声音信号处理算法以及电机控制模块的实现,适用于家庭娱乐、智能小车开发和机器人教育等场景。本文将详细介绍系统的设计思路和具体实现步骤。

环境准备
1. 硬件设备
  • STM32F103C8T6开发板(或其他 STM32 系列):作为小车的控制核心。

  • 麦克风阵列模块(如MAX9814):用于获取环境中的声音信号,实现声音源方向的定位。

  • 电机驱动模块(如L298N):用于驱动小车的直流电机,实现小车的前进、后退和转向。

  • 直流电机:小车的驱动电机,为小车提供动力。

  • 电源模块:为STM32和电机驱动模块供电。

  • 舵机(可选):用于旋转麦克风阵列,实现更精确的声音源定位。

2. 软件工具
  • STM32CubeMX:用于配置STM32的外设并生成代码框架。

  • Keil uVision 或 STM32CubeIDE:用于编写、调试和下载代码。

  • ST-Link驱动程序:用于将程序下载到STM32开发板。

  • 串口调试工具:用于调试声音信号处理和小车控制。

项目实现
1. 硬件连接
  • 麦克风阵列模块:连接至STM32的ADC引脚(如PA0, PA1, PA2),用于获取多个方向的声音信号。

  • 电机驱动模块:将电机驱动模块的IN1、IN2引脚分别连接到STM32的GPIO引脚(如PA3和PA4),控制左电机的前进和后退。IN3、IN4引脚连接到其他GPIO引脚(如PA5和PA6),控制右电机的前进和后退。PWM引脚连接到STM32的PWM输出引脚,以调节电机速度。

  • 舵机(可选):连接至STM32的PWM输出引脚(如PA7),用于旋转麦克风阵列,以扫描不同方向的声音源。

  • 电源模块:提供3.3V或5V电压以供STM32和其他模块运行。

2. STM32CubeMX 配置
  • 选择开发板型号:在STM32CubeMX中选择STM32F103C8T6。

  • 配置系统时钟:设置系统时钟为HSI,确保系统稳定运行。

  • 配置ADC:用于与麦克风阵列模块进行通信,获取声音信号的幅度和方向信息。

  • 配置PWM:设置用于电机驱动和舵机控制的PWM输出。

  • 配置GPIO:用于电机控制和其他外设连接。

  • 生成代码:选择Keil或STM32CubeIDE作为工具链,生成代码框架。

3. 编写主程序

基于生成的代码框架,编写声音信号处理、声源定位和小车控制的逻辑代码,以下为智能声音跟随小车系统的核心代码示例:

#include "stm32f1xx_hal.h"// 定义引脚
#define LEFT_MOTOR_IN1 GPIO_PIN_3
#define LEFT_MOTOR_IN2 GPIO_PIN_4
#define RIGHT_MOTOR_IN1 GPIO_PIN_5
#define RIGHT_MOTOR_IN2 GPIO_PIN_6
#define MOTOR_PORT GPIOA
#define MIC1_PIN GPIO_PIN_0
#define MIC2_PIN GPIO_PIN_1
#define MIC3_PIN GPIO_PIN_2
#define MIC_PORT GPIOA
#define SERVO_PWM_PIN GPIO_PIN_7// 变量声明
uint16_t mic1_value, mic2_value, mic3_value;
uint8_t direction;// 函数声明
void Sound_Direction_Detection(void);
void Motor_Control(uint8_t leftSpeed, uint8_t rightSpeed, uint8_t direction);// 声音方向检测函数
void Sound_Direction_Detection(void) {// 读取麦克风的ADC值HAL_ADC_Start(&hadc1);if (HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY) == HAL_OK) {mic1_value = HAL_ADC_GetValue(&hadc1);}HAL_ADC_Start(&hadc1);if (HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY) == HAL_OK) {mic2_value = HAL_ADC_GetValue(&hadc1);}HAL_ADC_Start(&hadc1);if (HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY) == HAL_OK) {mic3_value = HAL_ADC_GetValue(&hadc1);}HAL_ADC_Stop(&hadc1);// 判断声音来源方向if (mic1_value > mic2_value && mic1_value > mic3_value) {direction = 1; // 声音来自左侧} else if (mic2_value > mic1_value && mic2_value > mic3_value) {direction = 2; // 声音来自前方} else if (mic3_value > mic1_value && mic3_value > mic2_value) {direction = 3; // 声音来自右侧}
}// 电机控制函数
void Motor_Control(uint8_t leftSpeed, uint8_t rightSpeed, uint8_t direction) {if (direction == 1) { // 声音来自左侧,小车向左转HAL_GPIO_WritePin(MOTOR_PORT, LEFT_MOTOR_IN1, GPIO_PIN_RESET);HAL_GPIO_WritePin(MOTOR_PORT, LEFT_MOTOR_IN2, GPIO_PIN_SET);HAL_GPIO_WritePin(MOTOR_PORT, RIGHT_MOTOR_IN1, GPIO_PIN_SET);HAL_GPIO_WritePin(MOTOR_PORT, RIGHT_MOTOR_IN2, GPIO_PIN_RESET);} else if (direction == 3) { // 声音来自右侧,小车向右转HAL_GPIO_WritePin(MOTOR_PORT, LEFT_MOTOR_IN1, GPIO_PIN_SET);HAL_GPIO_WritePin(MOTOR_PORT, LEFT_MOTOR_IN2, GPIO_PIN_RESET);HAL_GPIO_WritePin(MOTOR_PORT, RIGHT_MOTOR_IN1, GPIO_PIN_RESET);HAL_GPIO_WritePin(MOTOR_PORT, RIGHT_MOTOR_IN2, GPIO_PIN_SET);} else { // 声音来自前方,小车向前HAL_GPIO_WritePin(MOTOR_PORT, LEFT_MOTOR_IN1, GPIO_PIN_SET);HAL_GPIO_WritePin(MOTOR_PORT, LEFT_MOTOR_IN2, GPIO_PIN_RESET);HAL_GPIO_WritePin(MOTOR_PORT, RIGHT_MOTOR_IN1, GPIO_PIN_SET);HAL_GPIO_WritePin(MOTOR_PORT, RIGHT_MOTOR_IN2, GPIO_PIN_RESET);}__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, leftSpeed);__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, rightSpeed);
}int main(void) {HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC1_Init();MX_TIM1_Init();HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); // 开启PWMwhile (1) {Sound_Direction_Detection();  // 声音方向检测Motor_Control(100, 100, direction);  // 控制小车移动}
}

⬇帮大家整理了单片机的资料

包括stm32的项目合集【源码+开发文档】

点击下方蓝字即可领取,感谢支持!⬇

点击领取更多嵌入式详细资料

问题讨论,stm32的资料领取可以私信!

 

4. 声音源定位与跟随

通过麦克风阵列模块检测不同方向的声音强度,结合信号处理算法,判断声音源的方向,并驱动小车朝声音方向移动,实现声音跟随功能。

5. 声音处理与电机控制

根据麦克风阵列获取的声音信号,通过ADC转换为数值,再根据不同方向的麦克风信号强度差异,判断声源方向,并相应地控制电机驱动小车前进、后退或转向。

6. 舵机扫描(可选)

通过舵机旋转麦克风阵列,可以实现更广范围的声音源扫描,进一步提高声音定位的精度和小车的响应能力。

智能控制原理
  • 声音源定位:通过多个麦克风模块检测环境中的声音信号,判断声音的来源方向。

  • 小车移动控制:根据声音来源方向,控制小车前进、后退或转向,实现声音跟随。

  • 舵机扫描(可选):通过舵机控制麦克风的旋转,增强系统对声源定位的能力。

常见问题与解决方法
  • 声音定位不准确

    • 确保麦克风模块的位置均匀分布,减少环境噪声的干扰。

    • 增加信号处理算法,过滤掉背景噪声,提高定位精度。

  • 小车行驶不稳定

    • 检查电机和电机驱动模块的连接,确保PWM信号稳定。

    • 确认小车的电池供电充足,避免供电不足导致行驶不稳。

结论

该基于STM32的智能声音跟随小车系统通过麦克风阵列实现了声源定位,并结合电机驱动模块实现了对声音的自动跟随功能。系统能够识别并响应环境中的声音信号,自动朝着声源方向移动,为智能机器人技术提供了良好的实践基础。该系统适用于家庭娱乐、智能小车开发和机器人教育等场景,展示了智能声音交互的潜力。


http://www.mrgr.cn/news/67158.html

相关文章:

  • 学习xxx公司连接sql server数据库的代码逻辑(C#)
  • 理解 Transformer 中的编码器-解码器注意力层(Encoder-Decoder Attention Layer)
  • ESRALLY安装与使用
  • C++网络编程之IO多路复用(一)
  • C中定义字符串有下列几种形式
  • Linux设置openfile
  • html语法
  • 第2章-立项 2.1硬件工程师为什么要关注立项
  • 微服务系列五:避免雪崩问题的限流、隔离、熔断措施
  • 探索人工智能的不同形态与未来方向:从ANI到AGI,再到ASI
  • 写歌词的技巧和方法:精准用词,让歌词熠熠生辉,妙笔生词AI智能写歌词软件
  • MySQL是怎么保证高可用的?
  • 人工智能:引领未来的变革之路
  • K-M算法(图像凭借特征点匹配)
  • [SWPUCTF 2022 新生赛]Cycle Again -拒绝脚本小子,成为工具糕手
  • C++之list的使用
  • 完成程序《大奖赛评分B》
  • 高光谱激光雷达遥感团队成员白杰博士获全国激光雷达优博论文奖
  • 每日科技资讯:2024年11月06日【龙】农历十月初六 ---文末送书
  • Allegro如何恢复被打乱后的菜单
  • 「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
  • Halcon edges_sub_pix
  • 深度学习:自注意力机制(Self-attention)详解
  • 参数跟丢了之JS生成器和包装器
  • [ DOS 命令基础 2 ] DOS 命令详解-网络相关命令
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-15