打印
[应用相关]

stm32蓝牙循迹避障小车

[复制链接]
292|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-3-22 16:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、功能介绍

        小车能够通过蓝牙来控制运行方向,同时它也能够循迹,循迹之后不用蓝牙控制就能够自己行走,当前方有障碍物时,它能够扭头,找到没有障碍物的方向然后再走。

二、硬件模块

1、stm32f103主控芯片



2、L298N驱动电机



        若要对直流电机进行 PWM 调速,需设置 IN1 和 IN2,确定电机的转动方向, 然后对使能端输出 PWM 脉冲,即可实现调速。注意当使能信号为 0 时,电机处于自由停止状态;当使能信号为 1,且 IN1 和 IN2 为 00 或 11 时,电机处于制动状 态,阻止电机转动。
         如果要控制小车的速度,则拔开L298N驱动电机的跳线帽,然后使能ENA和ENB引脚。



3、红外循迹模块



        TCRT5000传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,红外接收管一直处于关断状态,此时模块的输出端为高电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,红外接收管饱和,此时模块的输出端为低电平,指示二极管被点亮。

接口说明:

(1) VCC 外接3.3V-5V电压(可以直接与5v单片机和3.3v单片机相连)

(2) GND 外接GND

(3) OUT 小板数字量输出接口(0和1)

4、蓝牙模块



5、小车





三、代码介绍

复用pin6和pin8来使能L298N电机驱动的ENA和ENB引脚来控制速度

pwm.c

void pwm()
{

    // 变量初始化

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_8;      // 6和8引脚   
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    // 50HZ
    GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化接口


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);      //使能定时器4时钟
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   //使能GPIOB时钟



    TIM_TimeBaseStructure.TIM_Period =99;    //设置自动重装载寄存器周期的值
    TIM_TimeBaseStructure.TIM_Prescaler =71;     //设置预分频值
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;   //
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   //向上计数模式
    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);   

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  //脉冲宽度调制模式1
     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;   //比较输出使能
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //
  TIM_OCInitStructure.TIM_Pulse=0;

    TIM_OC1Init(TIM4, &TIM_OCInitStructure);  
    TIM_OC3Init(TIM4, &TIM_OCInitStructure);  


    TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);   //使能TIM4在CCR1上的预装载寄存器
    TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);   //使能TIM4在CCR3上的预装载寄存器


    TIM_Cmd(TIM4, ENABLE);   //使能TIM4
}

// 前进
void front()
{

        TIM_SetCompare1(TIM4,66);  
        TIM_SetCompare3(TIM4,66);
        IN1 = 1;   
        IN2 = 0;

        IN3 = 1;
        IN4 = 0;
}

//后退
//IN1~IN4可根据L298N逻辑图来设置
void back()
{
        TIM_SetCompare1(TIM4,66);
        TIM_SetCompare3(TIM4,66);

        IN1 = 0;
        IN2 = 1;


        IN3 = 0;
        IN4 = 1;
}

//右转
void right()
{
        TIM_SetCompare1(TIM4,0);
        TIM_SetCompare3(TIM4,66);

        IN1 = 1;
        IN2 = 0;

        IN3 = 0;
        IN4 = 0;
}

//左转
void left()
{
        TIM_SetCompare1(TIM4,66);
        TIM_SetCompare3(TIM4,0);

        IN1 = 0;
        IN2 = 0;

        IN3 = 1;
        IN4 = 0;
}

//停下
void stop()
{

         IN1 = 0;
         IN2 = 0;

         IN3 = 0;
         IN4 = 0;
}

HC05.c

void USART1_IRQHandler(void)        //串口中断服务函数
{
    u8 Rec;
    if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
    {

        Rec = USART_ReceiveData(USART1);        //接收蓝牙传输过来的数据

            switch(Rec)
        {
            case '1':                                        //前进
                void front();   
            break;


            case '2':                                        //后退
                back();
            break;


            case '3':                                        //右转
                right();  
            break;


            case '4':                                        //左转
                left();
            break;


            case '5':                                        //停止
               shop();
            break;


            default:                                            //停止
                shop();
            break;
        }
    }
}
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_58664533/article/details/136764878

使用特权

评论回复
沙发
问天少年| | 2024-3-25 11:00 | 只看该作者
循迹还加蓝牙是为了啥呢

使用特权

评论回复
板凳
szt1993| | 2024-3-25 14:29 | 只看该作者
电机驱动器对直流电机进行 PWM 调速,需设置 IN1 和 IN2,确定电机的转动方向, 然后对使能端输出 PWM 脉冲,即可实现调速

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1360

主题

13960

帖子

8

粉丝