制作出來的實物圖如下:
8b35eebffd8c7ba92bf8412eaa967be.jpg (113.73 KB, 下載次數: 113)
下載附件
2021-7-30 13:02 上傳
8b64279da78b36c6af1f6b6dd4641b1.jpg (5.51 MB, 下載次數: 101)
下載附件
2021-7-30 13:02 上傳
STM32單片機源程序如下:
****************************超聲波避障模*******************************************************
float disleft,disright;
void Wave_BZ(void)
{
int i;
Distance = Wave_Start(); //超聲波測距存到Wave_Start() 函數中
SG90_Front; //舵機轉向正前方
delay_ms(700);
if(Distance>80) //若距離大于80cm
{
forward(); //車輛繼續直行
for(i = 0; i <= 300; i++) //速度不斷上升
{
TIM_SetCompare2(TIM3, i);
TIM_SetCompare3(TIM3, i);
}
}
else //若距離小于80cm
{
stop(); //車子停下來
TIM_SetCompare2(TIM3,0); //電機pwm為0
TIM_SetCompare3(TIM3,0);
SG90_Right_45; //舵機右轉測距
delay_ms(900);
disright=Wave_Start();
//printf("right:%f cm\r\n",disright); //可打印串口
SG90_Left_45; //舵機左轉測距
delay_ms(900);
disleft=Wave_Start();
SG90_Front; //舵機轉向正前
delay_ms(900);
if(disleft>=disright) //若左邊距離大于右邊距離,左轉
{
do
{
delay_ms(10);
Distance = Wave_Start();
delay_ms(10);
Turn_Left();
TIM_SetCompare3(TIM3,450);
}
while(Distance<50); //距離小于50cm,停下來超聲波測距
}
else if(disleft<disright) //若右邊距離大于左邊距離,右轉
{
do
{
delay_ms(10);
Distance = Wave_Start();
delay_ms(10);
Turn_Right();
TIM_SetCompare2(TIM3,450);
}
while(Distance<50); //距離小于50cm,停下來超聲波測距
}
}
}
*************************************電機模塊*****************************************************
#include "motor.h"
void Motor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50Mhz
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_ResetBits(GPIOA, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
}
void forward(void) //前進
{
M1=0;M2=1; M3=0;M4=1;
M5=0;M6=1; M7=0;M8=1;
}
void back(void) //后退
{
M1=1;M2=0; M3=1;M4=0;
M5=1;M6=0; M7=1;M8=0;
}
void Turn_Right(void) //右轉
{
M1=0;M2=1; M3=1;M4=1;
M5=0;M6=1; M7=1;M8=1;
}
void Turn_Left(void) //左轉
{
M1=1;M2=1; M3=0;M4=1;
M5=1;M6=1; M7=0;M8=1;
}
void stop(void) //停止
{
M1=1;M2=1; M3=1;M4=1;
M5=1;M6=1; M7=1;M8=1;
}
***********************************主函數**********************************************************
#include "key.h"
#include "delay.h"
#include "led.h"
#include "ultrasonic.h" //超聲波
#include "motor.h" //電機
#include "Engine.h" //舵機
#include "pwm.h" //電機pwm
int main()
{
TIM3_PWM_Init(899,0); //電機pwm初始化
Motor_Init(); //電機初始化
Wave_IO_Init(); // 超聲波初始化
sg90_Init(); //舵機初始化
delay_init();
while(1)
{
Wave_BZ(); //超聲波+舵機避障
}
}
51hei.png (3.59 KB, 下載次數: 105)
下載附件
2021-7-30 18:22 上傳
全部代碼51hei附件下載:
stm32f103智能小車超聲波加舵機.7z
(188.31 KB, 下載次數: 56)
2021-7-30 18:23 上傳
點擊文件名下載附件
里面有詳細工程代碼,親試有效 下載積分: 黑幣 -5
|