基于STM32智能小车->红外寻迹篇
嵌入式之路,贵在日常点滴
---阿杰在线送代码
目录
前言
一、TCRT5000循迹模块介绍
二、红外寻迹小车原理
三、寻迹小车设计注意事项
四、寻迹小车程序
前言
系列文章之红外寻迹篇(库函数版本)
在介绍循迹模块时,先介绍一个知识点:
黑色的东西吸收比较强,反射能力弱
一、TCRT5000循迹模块介绍
TCRT5000就是一个红外发射和接收器,不断发射和接收红外线。
产品用途:
1、电度表脉冲数据采样
2、传真机碎纸机纸张检测
3、障碍检测
4、黑白线检测
深色(黑色)的是发射端,白色(透明)的是接收端。中间蓝色的是可以调节灵敏度的旋钮。
TCRT5000光电传感器模块是基于TCRT5000红外光电传感器设计的一款红外反射式光电开关。传感器采用高发射功率红外光电二极管和高灵敏度光电晶体管组成,输出信号经施密特电路整形,稳定可靠。
总共有4个管脚,分别是VCC、GND、A0、D0。
A0是模拟信号输出,D0是TTL电平输出(即数字信号)。使用TCRT5000主要就是用来循迹,只需要连接VCC、GND、D0就可以了。
(1)工作电压 3.3V-5V,推荐工作电压为5V
(2)模块上的电位器是用来调节灵敏度的
(3)检测反射距离:1mm~25mm 适用
(4)输出形式 :数字开关量输出(0 和 1)
(5)设有固定螺栓孔,方便安装
(6)小板 PCB 尺寸:3.2cm x 1.4cm
(7)使用宽电压 LM393 比较器
二、红外寻迹小车原理
循迹模块我用的是红外传感器。黑线的检测原理是红外发射管发射光线到路面,红外光遇到白底则被反射,接收管接收到反射光,经施密特触发器整形后输出低电平,指示灯点亮;当红外光遇到黑线时则被吸收,接收管没有接收到反射光,经施密特触发器整形后输出高电平,输出指示灯熄灭。简单的说就是当红外寻迹模板遇见黑线时会产生一个高电平,遇见白线时会返回一个低电平。所以根据原理设计思路为当左侧红外传感器遇见黑线时左拐,右边红外传感器遇见黑线时右拐。这样就可以完成小车寻迹。
当然除了遇到黑线熄灭,当距离太远红外线反射后检测不到,此时指示灯也会熄灭。
那么如果要循迹,模块离地面要近,在没有遇到黑线时确保指示灯长亮,一旦指示灯熄灭就说明遇到黑线了。
三、寻迹小车设计注意事项
(1)因为硬件条件有限,反应速度不是很快会有一定的误差,所以小车的速度要尽量慢下来,从而弥补硬件的不足让小车有足够的反应时间。
(2)在设置两个红外传感器的IO口模式时要设置为浮空输入,这样才能通过程序读取IO口的状态来判断。
(3)在测试小车时尽量在光线较暗的条件下来测试小车,避免光线过亮影响测试。
(4)红外寻迹模块的OUT不能接在有上拉电阻的IO口。
四、寻迹小车程序
在这里,我利用的主控是STM32F103C8T6最小板,主芯片通过读取四路红外循迹模块判断小车偏离中心黑线的情况,主芯片根据小车偏离情况对电机的差速进行控制调整,通过左右电机的不同转速,实现寻黑线的功能。
通过GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)函数获得对应端口的电平。
我的原理图 红外对管依次连接 PB5 、PB4 、PB3 、PA15
注意:这里需要使用的PB3、PB4、PA15是单片机的'特殊引脚
打开数据手册:STM32F103x8B_DS_CH_V10,在引脚定义章节,说明了复位后的主功能和默认复用功能以及重定义功能。
在参考手册:STM32中文参考手册_V10, 在8.3.5 JTAG/SWD复用功能重映射中,说明了引脚使用情况。
怎么办呢?
需要关闭JTAG-DP 启用SW-DP ,我们重映射配置应写为
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
话不多说上代码
#include "xunji.h"void xunji_init(void)
{GPIO_InitTypeDef GPIO_InitStructure;//定义一个结构体变量//使能GPIOA和GPIOB 使能PC端口时钟 rcc.h-693RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);//重映射配置关闭JTAG-DP 启用SW-DP从而可以使用PA15 PB3 PB4GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//PA15 设置成下拉输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHzGPIO_Init(GPIOA,&GPIO_InitStructure);//根据设定参数初始化GPIOE.5GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 设置成下拉输入GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB 5 4 3}
#ifndef _XUNJI_H
#define _XUNJI_H
#include "stm32f10x.h"
#include "sys.h"#define HW_1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)//读取 PB5 电平
#define HW_2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)//读取 PB4 电平
#define HW_3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3)//读取 PB3 电平
#define HW_4 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)//读取 PA15 电平void xunji_init(void);#endif
main.c//转弯时速度不适宜太快,这里我设置的占空比是1/4。小伙伴只需调试每个动作执行时间的长短来使你的车在寻迹时丝滑起来if(HW_1 == 0 && HW_2 == 0 && HW_3 == 0 && HW_4 == 0){qian(500);delay_ms(50);} if(HW_1 == 0 && HW_2 == 1 && HW_3 == 0 && HW_4 == 0){zuo(500);delay_ms(150);}if(HW_1 == 1 && HW_2 == 0 && HW_3 == 0 && HW_4 == 0){zuo(500);delay_ms(250);} if(HW_1 == 1 && HW_2 == 1 && HW_3 == 0 && HW_4 == 0){zuo(500);delay_ms(300);} if(HW_1 == 0 && HW_2 == 0 && HW_3 == 1 && HW_4 == 0){you(500);delay_ms(150);} if(HW_1 == 0 && HW_2 == 0 && HW_3 == 0 && HW_4 == 1){you(500);delay_ms(250);} if(HW_1 == 0 && HW_2 == 0 && HW_3 == 1 && HW_4 == 1){you(500);delay_ms(300);}
基于STM32智能小车->红外寻迹篇相关推荐
- 基于STM32F103智能小车黑线寻迹运动实验(有代码)
小车设计 利用STM32作为智能小车的主控制器来驱动智能小车的直流电机工作,电机驱动芯片采用L298N微型集成电路电机驱动芯片,配合STM32核心板使用实现四个直流电机运行和pwm软件调速,通过改变直 ...
- 用matlab结合STM32作上位机,基于stm32智能小车视觉控制导航的设计参考.pdf
第 25 卷 第 9 期 电子设计工程 2017 年 5 月 Vol.25 No.9 Electronic Design Engineering May. 2017 基于STM32 智能小车视觉控制导 ...
- 智能小车红外循迹原理
循迹电路 循迹电路由收发一体的红外收发管P1,P2:电位器R18,R29:发光二极管D6,D7和芯片LM324等组成.一共有两路,对应的红外电位器用于调节灵敏度.LM234用于信号的比较,并产生比较结 ...
- 基于51单片机的智能小车(寻迹功能)
题目:基于C52的智能小车设计与制作 1设计目的 通过构建智能小车,培养设计并实现自动控制系统的能力,在实践过程中,熟悉以单片机为核心控制芯片,设计小车的检测,驱动和显示等外围电路,采用智能控制算法实 ...
- 39、基于51单片机小车红外循迹、避障、遥控控制系统设计
毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.程序 部分代码 七.资料包括 摘要 随着计算机.微电子.信息技术的快速进 ...
- 循迹智能小车 循黑线 智能小车 红外循迹传感器 单片机
循迹智能小车 循黑线 文章目录 循迹智能小车 循黑线 硬件菜单 硬件使用 硬件组装 程序设计前的理解 程序代码 个人原创博客: 点我浏览 硬件菜单 单片机型号:STC16F40K128 4路红外循迹模 ...
- 基于STM32智能小车蓝牙遥控实验(有代码含上位机)
小车设计 利用STM32作为智能小车的主控制器来驱动智能小车的直流电机工作,电机驱动芯片采用L298N微型集成电路电机驱动芯片,配合STM32核心板使用实现四个直流电机运行和pwm软件调速,通过改变直 ...
- 51智能小车黑线寻迹(防出线)
此实验需要pwm的知识,实验用到的传感器主要就是RPR220传感器:实验原理就是左右两个传感器通过对红外光进行判断,如果是黑线的话输出0,否则输出1 实验之前需要调节左右两个电位器,用一根宽度为2.6 ...
- STM32智能小车------TCRT5000循迹
文章目录 一.原理讲解 1.实物图 2.工作原理: 3.接线: 二.软件驱动代码 1.接口定义 2.驱动函数 总结 最终效果 ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的普通大学生. ...
最新文章
- centos jdbc配置mysql_CentOS安装glassfish4.0配置jdbc连接mysql
- 分享一些 WINDOWS 资源站点(备用)
- pom.xml内容没有错,但一直报错红叉 解决办法
- 和平精英清明节服务器维修时间,和平精英体验服关服维护要多久 和平精英体验服什么时候开放...
- php 非阻塞mysql_php多进程中的阻塞与非阻塞操作实例分析
- 无法加载 DLL“oramts.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)
- 【SSH异常】InvalidDataAccessApiUsageException异常
- spring 中 Hibernate 事务和JDBC事务嵌套问题
- v-region 地址组件无法回显问题(选择地址保存后,打开编辑,发现刚才选择的地址【省市县乡】信息消失,信息不回显)
- (46)Xilinx ILA IP核配置(七)(第10天)
- JavaScript学习(四十四)—in关键字的使用和for in循环遍历对象的属性
- python画球面投影_使用opencv-python对图片进行球面投影
- 熊国正版游戏之TXT文字乱码【已解决】【rutracker】【byrut】【单机】【破解】【俄罗斯】
- zblogphp 广告联盟_zblog模板添加广告位置的方法
- 使用dns-over-https 手动测试域名解析
- python花瓣长度和花瓣宽度散点图鸢尾花_matplotlib可视化操作及案例分析
- 干货分享:app推广新人如何做好应用商店推广
- Excel如何给单元格加斜线
- iOS 越狱-砸壳工具的使用
- 二战暨南大学网络空间安全经验贴,纯干货!
热门文章
- 【Python机器学习】01_机器学习概述
- dist打包报 ERROR Failed to compile with 606 errors,These dependencies were not found
- requireJS 加载css、less文件
- PPT学习资源和实用技巧
- 2019-2020记罗振宇“时间的朋友”跨年演讲(一)
- 通过response返回json数据到前端
- leetcode|剑指offter|面试题6:从尾到头打印链表
- 艾伟也谈项目管理,工作感言:任务分配及管理
- 中职计算机网络技术教学大纲,中职中专学校《计算机网络基础》教学大纲.doc...
- 华为自研分布式时序数据库集群:初始GaussDB(for Influx)