基于STM32声控智能小车

发布时间:2024-11-18 02:08

'智能照明'声控灯,便利且节能 #生活乐趣# #生活体验# #家居生活小物# #家居用品推荐#

目录

一、项目需求

二、方案设计

三、实物演示视频

四、原理图

五、PCB

六、代码

七、资料清单

资料下载地址:基于STM32的声控智能小车

一、项目需求

1.能够通过声音控制小车,小车具备语音识别功能;

2.小车实现加速、减速、转向以及前方避障功能;

3.能够根据设计路线自动行驶。

二、方案设计

本课题采用STM32单片机作为主控芯片,结合语音识别技术、电机驱动技术等设计出了一款基于STM32单片机的智能机器人要车。系统通过STM32F103C6T6单片机作为主控芯片,采用ASR01语音识别模块进行语音识别,识别输出的指令输出给STM32单片机,通过L293D电机驱动芯片实现机器人小车的驱动控制,单片机根据接收到的指令对机器人实现“前进、后退、左转、右转”等功能的控制。同时系统通过超声波检测车头与障碍物的距离,当低于设定阈值时,系统自动控制小车作出绕行动作,实现避障。

 三、实物演示视频

四、原理图

 五、PCB

六、代码

#include "main.h"

void Bluetooth_Config(uint32_t baud)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

USART_InitStructure.USART_BaudRate = baud;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No ;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_Init(USART1, &USART_InitStructure);

USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

USART_ClearFlag(USART1,USART_FLAG_TC);

USART_Cmd(USART1, ENABLE);

}

uint8_t aRxBuffer[100];

uint8_t RxCounter=0;

uint8_t ReceiveState;

void USART1_IRQHandler(void)

{

uint8_t Clear=Clear;

if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)

{

aRxBuffer[RxCounter++]=USART1->DR;

}

else

if(USART_GetITStatus(USART1,USART_IT_IDLE)!=RESET)

{

Clear=USART1->SR;

Clear=USART1->DR;

ReceiveState=1;;

}

}

void USART1_Send_byte(uint8_t val)

{

USART_SendData(USART1, val);

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

}

uint8_t USART1_Recv_byte(void)

{

while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

return USART_ReceiveData(USART1);

}

u8 car_zhiling=0;

u16 sd_value=0;

u32 JL=0;

int main()

{

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

RCC_Config();

SystemInit();

KEY_Init();

TIM3_PWM_Init();

CGQ_Init();

LED_Init();

LED1=LED2=LED3=1;

delay_init();

Bluetooth_Config(9600);

xx=0;yy=3;zz=1;

Hcsr04Init();

while(1)

{

key_SMG();

if(yy==1) sd_value=750;

else

if(yy==2) sd_value=800;

else

if(yy==3) sd_value=850;

if(xx==1)

{ LED1=0;

if(zz==1)

{

LED2=1;LED3=0;

if(ReceiveState==1)

{

ReceiveState=0;

RxCounter=0;

if(aRxBuffer[0]==0)

{

car_zhiling=0;

}

if(aRxBuffer[0]==1)

{

car_zhiling=1;

}

if(aRxBuffer[0]==2)

{

car_zhiling=2;

}

if(aRxBuffer[0]==3)

{

car_zhiling=3;

}

if(aRxBuffer[0]==4)

{

car_zhiling=4;

}

}

if(car_zhiling==1)

{

SetMotorVoltageAndDirection(sd_value,sd_value);

}else

if(car_zhiling==2)

{

SetMotorVoltageAndDirection(-sd_value,-sd_value);

}

else

if(car_zhiling==3)

{

SetMotorVoltageAndDirection(sd_value,0);

}

else

if(car_zhiling==4)

{

SetMotorVoltageAndDirection(0,sd_value);

}

else

{

SetMotorVoltageAndDirection(0,0);

}

}

if(zz==2)

{

LED2=0;LED3=1;

if(CG_Z1==0&&CG_Y1==0)

{

SetMotorVoltageAndDirection(sd_value,sd_value);

}

else

if(CG_Z1==1&&CG_Y1==1)

{

SetMotorVoltageAndDirection(0,0);

}

else

if(CG_Z1==0&&CG_Y1==1)

{

SetMotorVoltageAndDirection(0,sd_value);

}

else

if(CG_Z1==1&&CG_Y1==0)

{

SetMotorVoltageAndDirection(sd_value,0);

}

}

if(zz==3)

{

LED2=0;LED3=0;

JL=(uint32_t) Hcsr04GetLength();

if(JL>99) JL=99;

JL=JL%100;

if(JL<30)

{

SetMotorVoltageAndDirection(-sd_value,-sd_value);

delay_ms(1000);

SetMotorVoltageAndDirection(0,sd_value);

delay_ms(1000);

}

else

{

SetMotorVoltageAndDirection(sd_value,sd_value);

}

}

}

else

{

LED1=LED2=LED3=1;

SetMotorVoltageAndDirection(0,0);

}

}

}

void RCC_Config(void)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

}

七、资料清单

网址:基于STM32声控智能小车 https://www.yuejiaxmz.com/news/view/112330

相关内容

基于STM32的智能扫地机器人设计
基于STM32的智能浴室除雾通风系统设计
基于STM32的智能节能风扇的设计与实现
基于STM32的家庭温湿度控制系统的设计
基于STM32的智能家居系统:MQTT、AT指令、TCP\HTTP、IIC技术
STM32毕业设计——基于STM32+MQTT+WiFi技术的智能家居系统设计与实现(毕业论文+程序源码)——智能家居系统
基于 STM32 的室内环境监测系统的背景和研究意义
基于stm32的室内空气质量检测的意义
基于STM32的智能宠物看护喂养系统(程序源码+原理图+PCB+Boom表+实物操作说明)
基于STM32的宠物远程投喂和监测系统设计

随便看看