前言
小车分为两种模式,自动模式以及手动模式,有小车下位机通过按键可以进行模式的切换,自动模式有三个超声波避障,手动模式可以通过APP连接到小车WIFI进行手动控制,并且会有一个ESP32的图像采集回传给小车
一、视频效果演示
资源包
?
?
二、底层硬件端
2.1 使用硬件清单
STM32F103RCT6开发板(可以替换为STM32其他系列)
三个超声波测距模块(使用time时钟进行距离的计算)
两个电机驱动板(L2980)---- 使用PWM控制小车的速度
ESP32-CAN模块? ? ? ? ? ? ? ?---- 使用串口与STM32经行连接
?2.2原理图
?
?2.3 主函数代码
main.h
#include "stm32f10x.h"
#include "bsp_usart.h"
#include "bsp_SysTick.h"
#include "stm32f10x_it.h"
#include "hc_sr04.h"
#include "./dwt_delay/core_delay.h"
#include "./pwm/user_timer_pwm.h"
#include "L298N.h"
#include "car.h"
#include "timer.h"
#include "usart_openmv.h"
#include "timer.h"
#include "HC_SR04.h"
#include "car.h"
#include "key.h"
//全局变量
//flage=0 状态手动
//flage=1 状态自动
extern int flag;
局部变量
//float Distance1 = 0; //距离
//float Distance2 = 0; //距离
//float Distance3 = 0; //距离
//定义函数
void Car_run ( void );
void Hc_rs04 ( void );
/**
* @brief 主函数
* @param 无
* @retval 无
*/
extern int flage;
//小车初始状态
u8 dir=1;
u16 led0pwmval=0;
int main ( void )
{
/* 初始化 */
/* 配置SysTick 为1us中断一次 */
SysTick_Init();
CPU_TS_TmrInit(); //初始化DWT计数器,用于延时函数
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
USART_Config (); //初始化串口1
OpenMV_USART_Config();
EXTI_Key_Config();
MTR_GPIOInit();
TIM3_PWM_Init(899,0); //不分频,PWM频率=72000000/900=80Khz
//超声波定时器
HC_SR04_IO1_Init(); //超声波模块GPIO初始化
TIM2_Init(7199,0); //以10KHz计数,定时100us
HC_SR04_IO2_Init(); //超声波模块GPIO初始化
TIM4_Init(7199,0); //以10KHz计数,定时100us
HC_SR04_IO3_Init(); //超声波模块GPIO初始化
TIM5_Init(7199,0); //以10KHz计数,定时100us
Delay_ms(500); /* 延时500个tick */
printf("初始化成功\n");
while ( 1 )
{
//Car_run ();
if(flag==1){
Avoid_Car();
}else MTR_CarBrakeAll();
}
}
/**
* @brief 小车测试
* @param 无
* @retval 无
*/
/** 小车状态码:
* 1 小车处于正常行驶
* 2 小车处于减速一(距离200)
* 3 小车处于减速二(距离100)
* 4 小车处于低速状态(距离50)
*
* 1 小车处于避障状态
* 1 小车处于避障状态
*/
void Car_run ( void )
{
car_speed(1);
MTR_CarForward();
}
/**
* @brief 小车超声波测试
* @param 无
* @retval 无
*/
/** 小车状态码:
*/
void Hc_rs04 ( void )
{
// Distance1 = (Get_SR04_Distance1() * 331) * 1.0/1000;
// Delay_ms(5);
// Distance2 = (Get_SR04_Distance2() * 331) * 1.0/1000;
// Delay_ms(5);
// Distance3 = (Get_SR04_Distance3() * 331) * 1.0/1000;
// Delay_ms(5); //Get_SR04_Distance()返回单程声波传输时间 us,转换为秒=时间*10^(-6);331m/s等于331000mm/s,
// //最终换算为Distance =Get_SR04_Distance()*10^(-6)*331000=(Get_SR04_Distance() * 331) * 1.0/1000;
// //if(Distance1<1000&&Distance2<1000&&Distance3<1000)
// printf("%.1f %.1f %.1f\n",Distance1,Distance2,Distance3);
}
/*********************************************END OF FILE**********************/
?
三、APP端
编译平台
APP使用Android studio平台编译
?
四、资源下载
全部资源
APP+STM32程序+ESP32CAN程序https://download.csdn.net/download/herui_2/85840555
STM32程序+ESP32CAN程序
APP程序
APP程序https://download.csdn.net/download/herui_2/85840603
|