0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STM32的智能循迹小车

cm880808 来源:cm880808 作者:cm880808 2024-05-08 14:43 次阅读

智能循迹小车

1、小车架构

(1)车架:

车架是淘宝上买的双层亚克力的两轮小车,配备了两个直流电机,两个驱动轮,两个辅助万向轮,一个两节的电池盒,这些东西淘宝上很多都是打包售卖的。

wKgZomY65L6AE7UEAAOeOacMLiA770.png底部照片

wKgZomY65PyAPdVDAB-_uEJRGFo300.png正面照片

(2)电源模块

wKgZomY65heAYmXPACNcHzwcYIk067.png电源模块

电源模块采用的是两节高电压的5号可充电电池(没节电池3.2V),由于手上没有DC线,干脆直接将电池盒连上了两根飞线插在面包板上,然后又将DC接口下面的正负极引脚焊接了两根公对公的杜邦线然后插在面包板上,这样就可以直接利用电池给这块HW-131面包板供电模块供电了。这块供电模块内置稳压芯片可以输出多路的3.3V和5V的电压,这样就正好可以解决电机和循迹班5V供电的问题啦。

(3)驱动板

wKgaomY66LSAVnl1ACwkIYXU-zE030.png驱动板

非常尴尬,不会利用画图软件画原理图,所以用的洞洞板焊接,用的是一块STM32F103C8T6、TB6612电机驱动模块,另外还预留了一块NRF24L01-2.4G无线通信模块想要后面做个遥控器,加上遥控功能。刚练习焊接,所以洞洞板的后面其实焊得跟块大便一样,就不做介绍了,核心思想就是用飞线各种飞。。。。。。好在利用万用表一直测,没有出现短路烧板子之类的坏现象,并且最后功能也都可以完成。

2、采用TCRT5000五路循迹模块实现循迹功能

wKgaomY66rmAN-A9ACV5yd0sYzM771.png循迹模块

循迹模块用的是TCRT5000五路循迹模块,便宜好用,非常nice,至少自己用来玩玩是可以的,如果比赛要用的话应该需要哪种灰度循迹模块(太贵了舍不得买),循迹函数的话中规中矩。

void Track_Correct(uint8_t RoadwayData)
{
	if(RoadwayData == 0x00)
	{
		Track_Flag=0;
		Stop_Flag=1;
		
	}else if(RoadwayData==0x1B)//11011
	{
		LSpeed=Car_Speed;
		RSpeed=Car_Speed;
		
	}else if(RoadwayData==0x1D)//11101
	{
		LSpeed=Car_Speed+20;
		RSpeed=Car_Speed-20;
		
	}else if(RoadwayData==0x19)//11001	有向右的大弯道
	{
		LSpeed=Car_Speed+20;
		RSpeed=Car_Speed-40;
		
	}else if(RoadwayData==0x18)//11000	有向右的直角弯道
	{
		LSpeed=Car_Speed;
		RSpeed=-Car_Speed;
		
	}else if(RoadwayData==0x1E)//11110
	{
		LSpeed=Car_Speed+40;
		RSpeed=Car_Speed-40;
		
	}else if(RoadwayData==0x17)//10111
	{
		LSpeed=Car_Speed-20;
		RSpeed=Car_Speed+20;
		
	}else if(RoadwayData==0x13)//10011	有向左的大弯道
	{
		LSpeed=Car_Speed-40;
		RSpeed=Car_Speed+20;
		
	}else if(RoadwayData==0x03)//00011	有向左的直角弯道
	{
		LSpeed=-Car_Speed;
		RSpeed=Car_Speed;
		
	}else if(RoadwayData==0x0F)//01111
	{
		LSpeed=Car_Speed-40;
		RSpeed=Car_Speed+40;
		
	}else 
	{
		LSpeed=Car_Speed;
		RSpeed=Car_Speed;
	}
	if(Track_Flag != 0)
	{
		Track_Go(LSpeed,RSpeed);
	}
}

3、超声波

超声波用的是一个HC-SR04超声波模块,实现了正向避障的功能,该模块有一个Trig引脚和Echo引脚,当给Trig触发引脚一个大于10us的高电平脉冲,则Echo会开始工作,模块会给出一个与距离等比的高电平脉冲信号,在Echo工作前清零计数器的计数值,并在电平重新变为低电平后获取计数值,就可以根据计数值的大小来计算距离。

wKgaomY7HU6AaW9SAACVkApngOA226.pngwKgaomY7HZKAZOagACBEYTyIvkU068.png
void Wave_TimerInit(void){			//超声波定时器初始化函数
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	TIM_InternalClockConfig(TIM1);						
	
	TIM_TimeBaseInitTypeDef Timer_InitStructure;
	Timer_InitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
	Timer_InitStructure.TIM_CounterMode=TIM_CounterMode_Up;
	Timer_InitStructure.TIM_Period=10000-1;
	Timer_InitStructure.TIM_Prescaler=7200-1;//7200Hz=0.0001s=0.1ms=10us
	Timer_InitStructure.TIM_RepetitionCounter=0;
	TIM_TimeBaseInit(TIM1,&Timer_InitStructure);
		
	//TIM_Cmd(TIM3,ENABLE);
}

void Wave_Init(void){	//超声波中断初始化函数
	
	Wave_TimerInit();

	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);

	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource11);
	EXTI_InitTypeDef EXTI_InitStructure;
	EXTI_InitStructure.EXTI_Line=EXTI_Line11;
	EXTI_InitStructure.EXTI_LineCmd=ENABLE;
	EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
	EXTI_Init(&EXTI_InitStructure);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
	NVIC_Init(&NVIC_InitStructure);
}

void Wave_Start(void){			//超声波开始函数
	if(Wave_Flag==1){
		GPIO_SetBits(GPIOA,GPIO_Pin_5);
		Delay_us(50);
		GPIO_ResetBits(GPIOA,GPIO_Pin_5);
	}
}

void Wave_Check(void){			//超声波避障实现函数
		if(Distance<=1300){
			Car_Stop();Delay_ms(500);
			Car_Back(60);Delay_ms(1000);
			Car_Stop();Delay_ms(500);
			Car_Left(40);
		}else if(Distance >=2000){
			Car_Go(Car_Speed);
		}
}

void EXTI15_10_IRQHandler(void){	//外部中断处理函数
	Delay_us(10);
	if(EXTI_GetITStatus(EXTI_Line11)!=RESET){
		TIM_SetCounter(TIM1,0);
		TIM_Cmd(TIM1,ENABLE);
		while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11));
		TIM_Cmd(TIM1,DISABLE);
		Distance=TIM_GetCounter(TIM1)*340/2.0;
		OLED_ShowNum(2,6,Distance,5);
		Wave_Check();
		EXTI_ClearITPendingBit(EXTI_Line11);
	}
}

4、总结

学习单片机以来的第一个小项目,也是受到了江科大的一期视频的启发,就决定复刻一下这个小车,后面还会再做一个遥控器,继续去完善,初学者我很菜,仅供参考。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44553

    浏览量

    634729
  • STM32
    +关注

    关注

    2270

    文章

    10896

    浏览量

    355768
  • 智能循迹小车

    关注

    1

    文章

    11

    浏览量

    10593
收藏 人收藏

    评论

    相关推荐

    第13章-循迹功能 STM32智能小车循迹教程 PID循迹算法分析

    第13章-循迹功能 循迹小车讲解 原理分析 STM32智能小车
    的头像 发表于 08-21 16:27 1419次阅读
    第13章-<b class='flag-5'>循迹</b>功能 <b class='flag-5'>STM32</b><b class='flag-5'>智能</b><b class='flag-5'>小车</b><b class='flag-5'>循迹</b>教程 PID<b class='flag-5'>循迹</b>算法分析

    20.3-使用两个通道进行电磁循迹 智能车竞赛 电磁杆原理图 电磁循迹小车 STM32电磁小车 电磁循迹算法

    20.3-使用两个通道进行电磁循迹 智能车竞赛 电磁杆原理图 电磁循迹小车 智能车电磁组 STM32
    的头像 发表于 08-20 10:56 770次阅读
    20.3-使用两个通道进行电磁<b class='flag-5'>循迹</b> <b class='flag-5'>智能</b>车竞赛 电磁杆原理图 电磁<b class='flag-5'>循迹</b><b class='flag-5'>小车</b> <b class='flag-5'>STM32</b>电磁<b class='flag-5'>小车</b> 电磁<b class='flag-5'>循迹</b>算法

    智能循迹小车简介

    简介智能循迹小车是基于自动引导机器人系统,用以实现小车自动识别路线,以及选择正确的路线。智能循迹
    发表于 07-21 07:29

    怎样去设计基于STM32智能循迹小车

    基于STM32智能循迹小车设计硬件准备1、小车底盘+四直流电机(带轮)2、STM32F103C
    发表于 08-04 06:34

    基于STM32智能循迹小车设计

    的应用,如自动驾驶威廉希尔官方网站 、引导机器人、自动化生产线上的物料陪送机器人等。循迹小车也是智能小车的一种,归属于机器人的范畴。目前,自动驾驶和智能
    发表于 08-11 08:36

    怎样去设计基于STM32智能循迹小车

    基于STM32智能循迹小车设计(基础版)想看IF-WHILE代码块直接拉到底,在最下面硬件准备1、小车底盘+四直流电机(带轮)2、
    发表于 08-11 08:02

    怎样去设计一种基于STM32智能循迹小车

    怎样去设计一种基于STM32智能循迹小车?四驱车为啥用L298N电机驱动模块?
    发表于 10-19 07:32

    怎么实现基于STM32智能循迹往返小车设计?

    怎么实现基于STM32智能循迹往返小车设计?
    发表于 11-02 08:07

    基于51单片机循迹智能小车

    基于51单片机循迹智能小车基于51单片机循迹智能小车基于51单片机
    发表于 11-13 15:55 0次下载

    智能循迹小车程序

    智能循迹小车,基于stm32智能循迹小车HC-SR
    发表于 12-04 10:30 39次下载

    智能循迹小车程序

    智能小车循迹 没有pwm的调速机制
    发表于 12-17 11:38 25次下载

    基于STM32智能循迹往返小车电路设计

    基于STM32智能循迹往返小车电路设计
    发表于 04-10 09:30 62次下载

    基于stm32单片机的红外避障及循迹小车

    设计简介:本设计是基于单片机的红外避障、循迹小车,主要实现以下功能:小车可通过手机控制 实现红外避障与循迹功能标签:STM32单片机、红外避
    发表于 11-19 09:21 261次下载
    基于<b class='flag-5'>stm32</b>单片机的红外避障及<b class='flag-5'>循迹</b><b class='flag-5'>小车</b>

    基于stm32循迹小车运动实例

    基于stm32循迹小车运动实例#include “motor.h”#include “Math.h”#include “delay.h”#include “stm32
    发表于 12-22 19:40 17次下载
    基于<b class='flag-5'>stm32</b><b class='flag-5'>循迹</b><b class='flag-5'>小车</b>运动实例

    基于stm32智能小车作品(循迹避障蓝牙)(上)

    基于stm32智能小车作品(循迹避障蓝牙)(上)前言一、材料准备二、AD画板+焊接1.原理图2.pcb图3.裸板成品4.焊好后成品三、让轮子动起来并实现pwm调速1.接线2.实现pw
    发表于 01-14 11:53 67次下载
    基于<b class='flag-5'>stm32</b>的<b class='flag-5'>智能</b><b class='flag-5'>小车</b>作品(<b class='flag-5'>循迹</b>避障蓝牙)(上)