前言
小車分為兩種模式,自動模式以及手動模式,有小車下位機通過按鍵可以進行模式的切換,自動模式有三個超聲波避障,手動模式可以通過APP連接到小車WIFI進行手動控制,并且會有一個ESP32的圖像采集回傳給小車。
一、視頻效果演示
二、底層硬件端
2.1 使用硬件清單
STM32F103RCT6開發(fā)板(可以替換為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 狀態(tài)手動
//flage=1 狀態(tài)自動
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;
//小車初始狀態(tài)
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 無
*/
/** 小車狀態(tài)碼:
* 1 小車處于正常行駛
* 2 小車處于減速一(距離200)
* 3 小車處于減速二(距離100)
* 4 小車處于低速狀態(tài)(距離50)
*
* 1 小車處于避障狀態(tài)
* 1 小車處于避障狀態(tài)
*/
void Car_run ( void )
{
car_speed(1);
MTR_CarForward();
}
/**
* @brief 小車超聲波測試
* @param 無
* @retval 無
*/
/** 小車狀態(tài)碼:
*/
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 %.1fn",Distance1,Distance2,Distance3);
}
/*********************************************END OF FILE**********************/
三、APP端
編譯平臺
APP使用Android studio平臺編譯
四、資源下載
全部資源
APP+STM32程序+ESP32CAN程序https://download.csdn.net/download/herui_2/85840555
STM32程序+ESP32CAN程序
STM32程序+ESP32CAN程序
https://download.csdn.net/download/herui_2/85840511
APP程序
APP程序https://download.csdn.net/download/herui_2/85840603
聯系方式 微信號:13648103287