【 STM32实例 】 智能小车的红外循迹

这篇具有很好参考价值的文章主要介绍了【 STM32实例 】 智能小车的红外循迹。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

这篇文章我主要讲的是让基于stm32单片机下的智能小车实现红外循迹功能,智能小车的项目非常多,比如说循迹避障、蓝牙遥控、视觉控制等等,我将会一步一步带大家走进stm32单片机的项目当中。


项目源码置文章底部,可自提

一、硬件选择与连接

在硬件部分,与前几节我所介绍的51智能小车大致一样,所不同的是把51最小系统板换成了stm32最小系统板,其他驱动、红外循迹模块都一样,具体可前往【51单片机实例】智能小车(一)了解详情。

下面我还是会对相关重要模块进行简单介绍:

1. STM32F103C8T6最小系统板

stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言
stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言
配套资源:

  1. STM32F103C8主芯片一片
  2. 贴片8M晶振(通过芯片内部PLL最高达72M)ST官方标准参数
  3. 3.3V稳压芯片,最大提供800mA电流
  4. 一路miniUSB接口,可以给系统版供电,预留USB通讯功能
  5. 复位按键
  6. 标准SWD口一个,支持JLink,STLink,JLINK OB
  7. BOOT选择端口
  8. IO扩展排针 20pin x 2
  9. 电源指示灯1个
  10. 功能指示灯一个,用于验证IO口基本功能
  11. 预留串口接口,方便和5V开发板连接,用串口即可程序
  12. 高性能爱普生32768Hz晶振,价格是直插晶振的10倍价格,易起振
  13. 20K RAM,64K ROM ,TQFP48封装

2. L298N双路电机驱动

L298N,是一款接受高电压的电机驱动器,直流电机和步进电机都可以驱动。一片驱动芯片可同时控制两个直流减速电机做不同动作,在6V到46V的电压范围内,提供2安培的电流,并且具有过热自断和反馈检测功能,可对电机进行直接控制,通过主控芯片的I/O输入对其控制电平进行设定,就可为电机进行正转反转驱动,操作简单、稳定性好,可以满足直流电机的大电流驱动条件。
stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言

3. 红外循迹模块

stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言

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

接口说明:
(1) VCC 外接3.3V-5V电压(可以直接与5v单片机和3.3v单片机相连)
(2) GND 外接GND
(3) OUT 小板数字量输出接口(0和1)

二、环境配置

1. Device

我们选用的是STM32F103C8T6最小系统板,所以Device应选择STM32F103C8
stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言

2. Output

Output中应创建HEX可执行文件
stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言

3. C/C++

C/C++中应定义宏和包含文件路径
stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言
stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言

4. Debug

若选用 ST-link 或 J-link 还是其他下载器or串口,都需要事先安装相应的驱动和配置相关环境,这里我以ST-link为例配置相关环境
stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言
stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言

三、项目管理与代码实现

1. 项目结构

stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言

2. 工程管理

应在相应的工程文件下面添加上对应的.c文件
stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言

3. 具体文件

以下我主要说明几个比较重要的文件

stm32循迹小车csdn,STM32,stm32,单片机,物联网,嵌入式硬件,c语言

xunji.c

#include "xunji.h"  
#include "stm32f10x.h"

void motor_gpio()
{

  GPIO_InitTypeDef  GPIO_InitStructure;
	 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11; 		
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	  //推挽输出 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 
  GPIO_Init(GPIOB, &GPIO_InitStructure);			     

}

void xunji_gpio()
{

  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_7;		
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //上拉输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);		

}
void pwm()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_8; 		
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用输出 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 
    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;     //设置用来作为TIMx时钟频率除数的预分频值
	TIM_TimeBaseStructure.TIM_ClockDivision = 0;   //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   //TIM向上计数模式 
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);    
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  //选择定时器模式:TIM脉冲宽度调制模式1
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;   //比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;    //输出极性:TIM输出比较极性高
 	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 run()
{

		TIM_SetCompare1(TIM4,30);
   		TIM_SetCompare3(TIM4,30);
		IN1 = 1;
		IN2 = 0;
		
		IN3 = 1;
		IN4 = 0;
}
void back()
{
		TIM_SetCompare1(TIM4,70);
		TIM_SetCompare3(TIM4,70);
	
		IN1 = 0;
		IN2 = 1;
		
 
		IN3 = 0;
		IN4 = 1;
}
void right()
{
		TIM_SetCompare1(TIM4,0);
		TIM_SetCompare3(TIM4,30);
	
		IN1 = 1;
		IN2 = 0;
	
		IN3 = 0;
		IN4 = 0;
}
void left()
{
		TIM_SetCompare1(TIM4,30);
		TIM_SetCompare3(TIM4,0);
		
		IN1 = 0;
		IN2 = 0;
		
		IN3 = 1;
		IN4 = 0;
}

void stop()
{

		 IN1 = 0;
		 IN2 = 0;
		
		 IN3 = 0;
		 IN4 = 0;
	}

xunji.h


#ifndef __xunji_H
#define __xunji_H 	

#include "sys.h"  

#define      IN1         PBout(0)
#define      IN2         PBout(1)

#define      IN3         PBout(10)
#define      IN4         PBout(11)


#define      LEFT_ONE      PAin(3)  
#define      LEFT_TWO      PAin(7) 
 
void run(void);
void left(void);
void right(void);
void back(void);;
void stop(void);
void motor_gpio(void);
void xunji_gpio(void);
void pwm(void);
#endif

main.c

#include "stm32f10x.h"
#include "xunji.h"
#include "delay.h"

 void Init()
{
	TIM_SetCompare1(TIM4,25);
	TIM_SetCompare3(TIM4,25);
	IN1=1;
	IN2=0;
	IN3=1;
	IN4=0;
}
 
 int main(void)
 {	

		motor_gpio();
		xunji_gpio();
		pwm();             
		delay_init();
	  	Init();
			while(1)
			{

					if(LEFT_ONE==0&&LEFT_TWO==0)
					{
							 run();
					}
					
					else if(LEFT_ONE==0&&LEFT_TWO==1)
					{
					
							right();
					}
					
					else if(LEFT_ONE==1&&LEFT_TWO==0)
					{
					
							left();
					}
					
		      else if(LEFT_ONE==1&&LEFT_TWO==1)
					{
							run();
					}
					else
						stop();
			 }
}

总结

本节是以STM32F103C8T6最小系统为CPU,通过一些外围电路和软件编程实现小车红外循迹的功能。整个设计过程中最大的特点是利用简单的理论原理将红外循迹模块、L298N驱动模块、51单片机这三个模块有效的结合起来,利用红外循迹原理与pwm调节占空比的简单结合实现对小车红外循迹奠定编程理论基础,提高了效率,降低了编程的复杂度,具有很强的研究的意义,智能化的发展促使了智能小车往功能更加强大的方向发展。

项目源码

链接:https://pan.baidu.com/s/1_-j6TJepvMkMjUdHvDWS6w 
提取码:s0hj

一键三连啦😊
技术交流可加下方wx联系👇👇👇文章来源地址https://www.toymoban.com/news/detail-781656.html

到了这里,关于【 STM32实例 】 智能小车的红外循迹的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 智能小车STM32——蓝牙循迹

    1、功能介绍 蓝牙切换功能:智能小车内置了蓝牙模块,可以通过手机或其他蓝牙设备与之连接。用户可以通过手机发送指令控制小车的运动方向,实现远程控制。 循迹功能:智能小车配备了红外线传感器,可以实现循迹功能。通过检测地面上的黑线或白线,小车能够自动沿着

    2024年01月19日
    浏览(55)
  • STM32智能小车循迹教程

    本篇文章将带大家学习STM32智能小车的循迹功能。 电路工作描述 以其中一路为例 TCRT5000传感器的红外发射二极管不断发射红外线,当发射的红外线没有被反射回来或者反射回的强度不够大时,红外接收管一直处于关闭状态,此时比较器LM393的2脚的电压低于3脚的电压,输出O

    2023年04月08日
    浏览(56)
  • STM32智能小车------TCRT5000循迹

    ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的普通大学生。 ⏩进入正题,最近在做小车,目前已经加入红外避障、超声波测距、红外遥控、红外循迹四个传感器,分别实现遥控切换模式、超声波控制距离、避障、循迹功能。 ⏩本次文章说说 循迹功能 的

    2024年02月14日
    浏览(44)
  • 基于STM32的智能循迹避障小车实验(循迹部分)

    接上一部分基于STM32的智能循迹避障小车实验(小车运动部分) 上一篇我们成功让小车动起来了,现在我们试着让小车听话地运动。 这一部分主要利用了循迹模块两个 图 1循迹模块 就是这个东西: 一共三个引脚 VCC :电源线,连接单片机的 3.3V-5V GND :地线,连接单片机的接

    2024年02月11日
    浏览(49)
  • 基于stm32的智能小车(远程控制、避障、循迹)

    学完stm32,总是想做点东西“大显身手”一下,智能小车就成了首选项目,其核心只是就是PWM输出,I/O口引脚电平判断。 制作智能小车的硬件名单: 由于我们做的控制功能可以使用2.4G控制,也可以使用蓝牙进行控制, 两种传输方式所需购买的模块不同,已在硬件名单中加以

    2024年02月03日
    浏览(50)
  • 基于STM32的智能循迹避障小车实验(小车运动部分)

    写在前面 这个实验是关于智能小车的实验,现在的想法就是先做出一个循迹和避障功能,后续可能会再添加一些其他的模块。 我在做这个实验之前基本了解了F1系列开发板的大部分模块,如果没有学习之前的模块,建议先学习下开发板的基本模块。 实验所需的硬件 本来是想

    2024年02月06日
    浏览(58)
  • STM32智能循迹避障小车(1)循迹调速功能的实现

    1.stm32f103rct6最小系统板 2.两个TB6612FNG电机驱动模块 线路连接请参考实际程序连线,此图为网上下载仅供参考。 3.三个TCRT5000循迹模块 这种是单路TCRT5000循迹模块,有四个接口,VCC电源接口、GND地接口,DO就是它的输出信号,然后AO口(模拟信号输出)。一般DO口接在stm32系统板

    2024年02月04日
    浏览(46)
  • 基于STM32的智能巡检小车系统设计--循迹模块设计

    作者:车 邮箱:692604135@qq.com 学校:西安工程大学硕士研究生 方向:机器视觉、图像分割、深度学习 灰度循迹传感器是主要 用于小车沿黑色赛道循迹 的传感器。 灰度传感器利用不同颜色的检测面对光的反射程度不同,灰度感应接收管对不同检测面返回的光,其阻值也不同

    2024年02月07日
    浏览(60)
  • [STM32F103C8T6]基于stm32的循迹,跟随,避障智能小车

    目录 1.小车驱动主要是通过L9110S模块来驱动电机 motor.c 2.我们可以加入串口控制电机驱动(重写串口接收回调函数,和重定向printf) Uart.c main.c  3.点动功能 uart.c main.c 为什么使用的是HAL_Delay()要设置滴答定时器的中断优先级呢? 4.小车PWM调速,  6.跟随功能 7.避障功能 超声波测距

    2024年02月13日
    浏览(57)
  • 基于STM32的智能循迹避障小车实验(超声波部分)

    接上一篇基于STM32的智能循迹避障小车实验(舵机旋转部分) 最后这部分我们实现超声波部分和最后代码的整合 本部分实验采用的是 超声波模块 HC-SR04 ,它长这样:   买这个的时候最好再买一个支架,可以直接架在舵机上,探查周围的距离。 超声波模块有 4 个引脚 ,分别

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包