stm32循迹小车详细制作过程(附加完全版代码)「建议收藏」

stm32循迹小车详细制作过程(附加完全版代码)「建议收藏」stm32循迹小车详细制作过程一.材料准备1、主控板Stm32f103c8t6(推荐,便宜够用)2、下载器USB转TTL串口模块3、电源12v锂电池组、配套充电器(推荐下图这种,方便,好接线,12v!12v!12v!)4、电机驱动模块L298n电机驱动模块(尽量多备一两个,容易烧)5、循迹模块TCRT5000循迹模块(多买几个,四个吧)6、杜邦线公对公、母对母、公对母(都买上,不贵,消耗品)7、开关避免出现意外还是备一个吧8、小车底座有四个轮的,三个轮的(

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

stm32循迹小车详细制作过程

一.材料准备

1、主控板
Stm32f103c8t6 (推荐,便宜够用)

在这里插入图片描述

2、下载器
USB转TTL串口模块
在这里插入图片描述

3、电源
12v锂电池组、配套充电器(推荐下图这种,方便,好接线,12v!12v! 12v!)
在这里插入图片描述

4、电机驱动模块
L298n电机驱动模块(尽量多备一两个,容易烧)
在这里插入图片描述

5、循迹模块
TCRT5000循迹模块(多买几个,四个吧)
在这里插入图片描述

6、杜邦线
公对公、母对母、公对母(都买上,不贵,消耗品)

在这里插入图片描述

7、开关
避免出现意外还是备一个吧
在这里插入图片描述

8、小车底座
有四个轮的,三个轮的(其中一个是万向轮)。
三个轮:好接线,可以转直角弯。
四个轮:稳定,也可以转直角弯,但相对来说比三个轮难转。
在这里插入图片描述

9、蜂鸣器模块
在这里插入图片描述

二.各器件详细解释

1.L298N介绍
如图,中间的三个接线端从左到右分别为VCC、GND、+5,其中VCC为12V供电,GND为供电地,+5为5V供电;左右两边的接线端分别为输出A和输出B;排针部分引脚分别为ENA、IN1、IN2、IN3、IN4、ENB,其中IN1~4为逻辑输入,ENA和ENB为PWM使能,已经默认被接到5V,若要使用PWM调速
可取下跳帽使用。
在这里插入图片描述
2.stm32c8t6
(1) STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。
在这里插入图片描述
(2)程序下载方法
stm32f103c8t6的TX引脚为PA9 RX引脚为PA10。

串口下载的引脚

在这里插入图片描述

stm32f103c8t6的引脚

在这里插入图片描述

接法的说明

STM32 cp2102
3.3V 3.3V
PA9(TXD引脚) RXD引脚
PA9(RXD引脚) TXD引脚
GND GND

下载程序:

打开flymcu,设置如下
下载前将 boot0 = 1

在这里插入图片描述

然后就可以下载成功了
注意:下载程序完毕后,把boot0跳线帽复位即boot0 = 0
3.循迹模块
循迹原理非常简单,模块上配有一个输出指示灯,部分模块还有电源指示灯,我们主要关注输出指示灯。红外发射器一直发射红外线,红外线经发射后被接收,此时输出低电平,输出指示灯点亮。黑色是不反射红外线的,也就是说循迹模块遇到黑线,模块输出高电平,输出指示灯熄灭。当然除了遇到黑线熄灭,当距离太远红外线反射后检测不到,此时指示灯也会熄灭。那么如果要循迹,模块离地面要近,在没有遇到黑线时确保指示灯长亮,一旦指示灯熄灭就说明遇到黑线了。
在这里插入图片描述
如上图中4个管脚的,分别是VCC、GND、A0、D0。A0是模拟信号输出,D0是TTL电平输出。使用TCRT5000主要就是用来循迹,只需要连接VCC、GND、D0就可以了。

三.代码详细介绍

首先是主函数(main.c):


#include "stm32f10x.h"
#include "motor.h"
#include "delay.h"

 



 void Delay(u32 count)
 { 
   
   u32 i=0;
   for(;i<count;i++);
 }
 int main(void)
 { 
   	

 motor_gpio();
 xunji_gpio();
 pwm();             
	 delay_init();
	 if(GO==  0)
	 { 
   
  while(1)
	{ 
   

//¼ì²âµ½ºÚÏßΪ1 ¼ì²â²»µ½ºÚÏßΪ0
      if(LEFT_ONE==0&&LEFT_TWO==0&&RIGHT_ONE==0&&RIGHT_TWO==0)
			{ 
   
					 run();
			}
					else if(LEFT_ONE==0&&LEFT_TWO==1&&RIGHT_ONE==0&&RIGHT_TWO==0)
			{ 
   
			
			  left();
			}
						else if(LEFT_ONE==0&&LEFT_TWO==0&&RIGHT_ONE==0&&RIGHT_TWO==1)
			{ 
   
			
			 right();
			}
			else if(LEFT_ONE==1&&LEFT_TWO==1&&RIGHT_ONE==1&&RIGHT_TWO==1)
			{ 
   
			 
			  turn();
				delay_ms(200);
				stop();
				delay_ms(5000);	
			}

				
				
				
			
			
	}
}
 }

其次是pwm,循迹,及电机的初始化:
.h 文件


#ifndef __motor_H
#define __motor_H 			   
#include "sys.h"  

#define      IN1         PAout(6)
#define      IN2         PAout(5)
#define      IN3         PAout(4)
#define      IN4         PAout(3)


#define      LEFT_ONE      PBin(4)  
#define      LEFT_TWO      PBin(6) 
#define      RIGHT_ONE      PBin(7) 
#define      RIGHT_TWO      PBin(8) 
#define      GO        PBin(5) 
void run(void);
void left(void);
void right(void);
void back(void);
void qleft(void);
void qight(void);
void stop(void);
void turn(void);
void motor_gpio(void);
void xunji_gpio(void);
void pwm(void);
#endif



.c文件


#include "motor.h"  
#include "stm32f10x.h"

void motor_gpio()
{ 
   

  GPIO_InitTypeDef  GPIO_InitStructure;
	 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_4|GPIO_Pin_3;		
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 
  GPIO_Init(GPIOA, &GPIO_InitStructure);			     

}

void xunji_gpio()
{ 
   

  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_5;		
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
  GPIO_Init(GPIOB, &GPIO_InitStructure);		

}
void pwm()
{ 
   
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  | RCC_APB2Periph_AFIO, ENABLE); 
	  
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;		
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);	

	
	TIM_TimeBaseStructure.TIM_Period = 899; 
	TIM_TimeBaseStructure.TIM_Prescaler =0; 
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 

	
	TIM_OC2Init(TIM2, &TIM_OCInitStructure);  
	TIM_OC3Init(TIM2, &TIM_OCInitStructure);  
	

	TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); 
	TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); 

	
	TIM_Cmd(TIM2, ENABLE);
}
void run()
{ 
   

		TIM_SetCompare2(TIM2,380);
   	TIM_SetCompare3(TIM2,380);
   IN1 = 1;
	 IN2 = 0;
	
	 IN3 = 1;
	 IN4 = 0;
}
void back()
{ 
   
	TIM_SetCompare2(TIM2,300);
	TIM_SetCompare3(TIM2,300);
	
   IN1 = 0;
	 IN2 = 1;
	
	 IN3 = 0;
	 IN4 = 1;
}
void right()
{ 
   
	TIM_SetCompare2(TIM2,400);
	TIM_SetCompare3(TIM2,400);
	
   IN1 = 1;
	 IN2 = 0;
	
	 IN3 = 0;
	 IN4 = 0;
}
void left()
{ 
   
	TIM_SetCompare2(TIM2,400);
	TIM_SetCompare3(TIM2,400);
	
   IN1 = 0;
	 IN2 = 0;
	
	 IN3 = 1;
	 IN4 = 0;
}
void turn()
{ 
   
	TIM_SetCompare2(TIM2,250);
	TIM_SetCompare3(TIM2,250);
	
   IN1 = 0;
	 IN2 = 1;
	
	 IN3 = 1;
	 IN4 = 0;
}
void stop()
{ 
   

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

四.效果展示

请添加图片描述
请添加图片描述
请添加图片描述

stm32循迹小车系列文章:
1.stm32循迹小车详细制作过程(附加完全版代码)
2.L298n电机驱动详细介绍(stm32循迹小车中L298n的用法)
3.超声波模块详细介绍(stm32循迹小车中超声波的介绍)

寻迹程序在群资料,有问题可以直接在群里问,互相交流学习。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/191340.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 记录一次mysql 主从不同步的问题操作(hashlinux)

    记录一次mysql 主从不同步的问题操作(hashlinux)

  • CentOS8国内镜像下载地址

    CentOS8国内镜像下载地址目录CentOS介绍CentOSLinux和CentOSStream区别镜像下载说明CentOS介绍CentOS是基于RedHatEnterpriseLinux(RHEL/业界最知名的发行版)源代码再编译出来的免费版,因此不仅继承RHEL优越的稳定性(与Debian不分上下),还提供免费更新,因此在服务器提供商、中小型公司中装机量几乎是最大最流行的Linux系统,现在也已正式加入红帽公司。从事互联网技术的同学,CentOS应该是值得你深入了解学习研究的……Ce

  • 六大主流大数据采集平台架构分析[通俗易懂]

    六大主流大数据采集平台架构分析[通俗易懂]日志收集的场景DT时代,数以亿万计的服务器、移动终端、网络设备每天产生海量的日志。中心化的日志处理方案有效地解决了在完整生命周期内对日志的消费需求,而日志从设备采集上云是始于足下的第一步。随着大数据越来越被重视,数据采集的挑战变的尤为突出。今天为大家介绍几款数据采集平台:ApacheFlumeFluentdLogstashChukwaScribeSplunkForwar

  • 拓扑图怎么看_拓扑排序算法图解

    拓扑图怎么看_拓扑排序算法图解一条单向的铁路线上,依次有编号为 1, 2, …, n 的 n 个火车站。每个火车站都有一个级别,最低为 1 级。现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠。(注意:起始站和终点站自然也算作事先已知需要停靠的站点)例如,下表是 5 趟车次的运行情况。其中,前 4 趟车次均满足要求,而第 5 趟车次由于停靠了 3 号火车站(2 级)却未停靠途经的 6 号火车站(亦为 2 级)而不满足要求。现有 m

  • svn汉化包为什么装不上(3dm汉化补丁怎么安装)

    问题描述:我安装了svn,也下载了LanguagePack,但是svn却没有中文选项。问题分析:没有下载相对应的汉化版本包,我的svn版本是1.10,而下载的汉化包却是1.12.解决办法:下载路径:https://osdn.net/projects/tortoisesvn/storage/路径里面有比较全面的汉化包。最后成功解决:…

  • 适合做回归分析的数据_时序数据库与实时数据库

    适合做回归分析的数据_时序数据库与实时数据库JTSGeometry关系分析:缓冲区分析(Buffer)包含所有的点在一个指定距离内的多边形和多多边形凸壳分析(ConvexHull)包含几何形体的所有点的最小凸壳多边形(外包多边形)交叉分析(Intersection)A∩B交叉操作就是多边形AB中所有共同点的集合联合分析(Union)AUBAB的联合操作就是AB所有点的集合差异分析(Diff…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号