制作出来的实物图如下:
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附件下载:
stm32f103智能小车超声波加舵机.7z
(188.31 KB, 下载次数: 56)
|