保姆级的Arduino循迹小车研发日志及一些坑

  • 循迹小车的研发日志
  • 技术设计路线
    • 硬件部分
      • 简单的TCRT5000
      • 玄妙的L298N
    • 安装部分
    • 软件部分
      • 结语
      • 成品图:
      • 完整代码

循迹小车的研发日志

开发要求如下:

引言:为什么会用到米思齐这个青少年编程软件是有两个原因:

  1. 接到了某所小学的研发项目需求,研发成果给小学生参加无人车循迹比赛。
  2. 实验室的师弟师妹并不是所有都有编程基础,因此米思齐可以作为简单的编程引入课程。

技术设计路线

  1. 首先我认为 TCRT5000红外循迹传感器 是最重要的,有两个需要考虑的点,一个是数量,另一个则是排放方式
  2. 其次我认为地图的走势也是很重要的,因此我手绘了一副地图并且分析了无人车的走向;(可以减少很多无用功
  3. 最后就是 L298N 和 Arduino UNO的接线和应用。(没想到他是最麻烦的!!!

下面附上我的大致思路:(中途有所修改)
在开发过程中,看到师弟师妹的做法有用排列的方法来实现的,也有用分情况触发来实现的,也不失为一种好办法。(排列指的是列出24=16,16种可能性之后再一个个加判断条件;分情况触发指的是用一些特殊的位置进行判断,然后分段分析地图。)
但下面为我目前想到最简单的代码,调用尽量少的函数、尽量少的判断条件


硬件部分

简单的TCRT5000


TCRT5000红外循迹传感器的发射二极管可以不断的发射红外线,通过检测反射回来的红外线的强大进行判断是否处于黑线上。当指示灯一直处于熄灭状态也就是没有检测到反射,即检测到黑色,此时模块输出端为高电平1;反之,指示灯点亮时为检测到反射,此时模块输出端为低电平0,即检测到白色。
需要3.3-5V供电。
资料下载链接:
https://pan.baidu.com/s/1Dqri3AanZbPhnMMCU1HZRQ
提取码:1234
在本设计路线中,用到四个TCRT5000,且排放方式在简易装配图中有画出。


玄妙的L298N


L298N作为直流步进电机驱动模块的主驱动芯片,所以该模块就简称为L298N了,该模块内置78M0通过驱动电源部分取电工作,因此当大于12V驱动电压是,应该使用外置的5V逻辑供电。

在产品介绍中也看到了,L298N不仅价格亲民,接线也很简单,逻辑也没什么毛病,那为什么说L298N这个直流电机驱动模块玄妙呢?大致分成以下几个说法:

  1. 电机有震动的声音但不转动
  2. 电机没有震动的声音且不转动
  3. 通电后测电压电压一直下降
  4. 一只轮子不转另一只转动
  5. 两只轮子转速有差别

解决方法如下:

  1. 电压不足,换电池,L298N虽然写的是5V可以供电,但会出现供电不足的问题,因为Arduino板也占用了电压,相当于串联分压。经过测试8.5-9V电机都能正常工作,而且转速不会特别低。
  2. 估计L298N的ENA/ENB出现问题,可以采用ENA/ENB短接,然后再IN1/IN3上面输入PWM信号,一样可以实现PWM控制
  3. L298N与Arduino短接,可能是接线的时候误触导致,把所有的线都拔了重新插一次,如果还有上述问题,L298N本身串联了大容量的电容器,随着充电过程,电路充满电电路没有电流通过,导致电压降为零。
  4. 接线松掉,考虑3种情况,IN1/ENA没有接好;Arduino接IN1/ENA的线没接好;代码有问题,可以试着用我下面提供的PWM代码测试,如果两个轮子都转动,那就是代码出现问题。
  5. L298N的H桥的电阻电容大小不是一样的,因此会有差别,倘若电机不太好,差别会更明显,建议用电压表来测试转速*(PWM控制其实就是控制电压,具体可以看公众号发布的文章。)*
    如果只是平时自己玩玩这个小车,千万不要这么傻用单电源单驱动的方式,直接双电源双驱动,电压稳定之余PWM调节转换后也是一样的转速!!

资料下载链接:
https://pan.baidu.com/s/1teVnq1LJ3VTQ55Lj8gTnFg
提取码:1234


安装部分


掏个洞,走线更好看。

轮子是外八的,更稳定一些。原因如下:



千万注意!!!!!L298N要用一个木板跟Arduino隔开!!!不然可能短路!!!


软件部分

在通过分析比赛赛道后了解到全部弯道都是左转,因此我们将代码分成4种主要判断条件。
其中直行最为关键,因此我们用3个主要的逻辑判断是否在走直线,并且他能走完直线的巡线。

L==0 && R==0;//识别到白色,直走;
L==1 && R==0;//中间靠左的传感器识别到黑线微微向左边调整;
L==0 && R==1;//中间靠右的传感器识别到黑线微微向右边调整;

写入新的函数,分别是直行,直行左转,直行右转。

void Forward()
{analogWrite(5,120);analogWrite(6,140);digitalWrite(4,LOW);//我采用的是IN1 IN3作为PWM输入,没有用到ENA ENBdigitalWrite(7,LOW);
}
void Forwardturnleft()
{analogWrite(5,40);analogWrite(6,120);digitalWrite(4,LOW);digitalWrite(7,LOW);
}
void Forwardturnright()
{analogWrite(5,120);analogWrite(6,40);digitalWrite(4,LOW);digitalWrite(7,LOW);
}

当出现到十字路口时逻辑也应该判断为直走,因此我们需要加入判断全黑时直行。

LL==1 && L==1 && R==1 && RR==1;//识别到全黑,直走;

纵观全图,可以发现:几乎每一个十字路口即(全黑)都是一次重要的转折点。因此我们可以将全黑的情况设置为计数;加入一个新的判断函数即可

void Timer()
{a=a+1;Serial.print(a);delay(300);
}

上诉的几个函数并不能完美的通过直角弯,因此加入新判断:

LL == 1//大左转

进入直角弯道后,会进入到虚线部分,虚线部分会因为我们前面程序检测到全白直行,导致冲出赛道,因此我们需要在这时候进入新的循环,也就是可以通过前面函数Timer中跳转进入循环。
且设置全白为微右调整,同时以防车子左微调会出去,可以在左微调时加入延时;
代码如下:

 if (a == 5) {if (L == 0 && R == 0) {Forwardturnright2();}if ((L == 1 && R == 0) && LL == 0) {Forwardturnleft2();delay(150);}if (((L == 0 && R == 1) && RR == 0 || (L == 0 && R == 1) && RR == 1) || (L == 0 && R == 0) && RR == 1) {Forwardturnright2();}if (LL == 1) {turnleft();}}

在最后一个十字路口我加了一个加速(可加可不加)

   if(a==6){if(L==0 && R==0)//均未检测到黑线Speedup();if(L==1 && R==0 && LL==0)//左侧检测到黑线,右侧没有,所以要左转Forwardturnleft();if(L==0 && R==1 && RR==0)//右侧检测到黑线,左侧没有,所以右转Forwardturnright();     }

结语

Emmm小车的结构、代码可能都不是最优的。希望各位大佬可以指正修改,也欢迎大家关注我们的公众号,一起分享关于开源机器人的项目和见解!!

成品图:

完整代码

提取码:open
如果崩了请联系我

保姆级的Arduino循迹小车研发日志及一些坑(其中包含L298N、Arduino、TCRT5000以及1:48的TT电机的使用)相关推荐

  1. Arduino循迹小车教程四----代码篇

    文章目录 一.完整的代码 二.循迹代码详解 1.循迹的原理 2.判断情况 3.调速代码 4.循迹代码 5.调试问题 总结 代码分享给同学们啦,在同学们运行小车的过程中,总会遇见各种奇怪的情况,比如小车 ...

  2. Arduino循迹小车教程一----材料篇

    文章目录 前言 1.亚克力板*1片 2.T型支架*2个 3.双轴直流减速电机*4 4.杜邦线*n条 5.M3螺柱*50 6.2.54mm排针排母*1把 7.黑工胶布*1卷 8.TCRT5000循迹模块 ...

  3. Arduino循迹小车(三路红外)

    利用红外线传感器让小车在规定路线上行进 1. 所需材料 小车车架及车轮(可以用sw建模然后利用3D打印机打印,也可以在网上直接购买小车地板,用纸板最廉价O(∩_∩)O哈哈~) 该图为3D打印效果 Ar ...

  4. 基于Arduino3路循迹小车

    本人西伯利亚蟑螂,最近抽空回顾了一下arduino,顺手做了个arduino循迹小车 (条件所限我的小车为两驱三路循迹模块小车) 话不多说,先上干货. #define STOP      0 #def ...

  5. arduino黑线循迹小车程序_循迹小车:给我一条线,我能自己走完全程

    在老少通吃的智能小车到底是什么呢?科普来喽!一文中,我们介绍了智能小车的分类及组成,为什么循迹小车能够追踪黑线轨迹呢? 智能小车在画有黑线的白纸 "路面"上行驶,由于黑线和白纸对光 ...

  6. 基于arduino的5路循迹小车(1)

    基于arduino的5路循迹小车(1) 初步小车运动 1.硬件选用 1.开发板使用arduino 2560 2.电机驱动板使用 大功率电机驱动板(PWM由两个端子控制) 3.电源12V锂电池 4.降压 ...

  7. 基于arduino的5路循迹小车(2)

    基于arduino的5路循迹小车(2) 小车5路红外循线 接第一篇链接 https://blog.csdn.net/weixin_45984029/article/details/103437347 ...

  8. ARDUINO NANO 的 PID 循迹小车

    [Arduino项目]使用 ARDUINO NANO 的 PID 循迹小车 -------------------------------------------------------------- ...

  9. 基于arduino的5路循迹小车(4)与舵机控制板的通信控制

    基于arduino的5路循迹小车(4) arduino与舵机控制板的通信控制 以及语音播报模块 接第一篇链接 https://blog.csdn.net/weixin_45984029/article ...

  10. 基于arduino的5路循迹小车(3)

    基于arduino的5路循迹小车(3) 使用红外模块的定位停车 以及超声波避障 接第一篇链接 https://blog.csdn.net/weixin_45984029/article/details ...

最新文章

  1. C++实现字符串和整数之间的相互转换
  2. 网络推广费用浅析网站具备哪些特点能更受蜘蛛的青睐?
  3. 谁来护航储能电池安全?
  4. wp自定义帖子没标签_谷歌对nofollow标签重新定义,百度是否有变化哪?
  5. 关于js浅拷贝与深拷贝的理解
  6. OpenCV VideoCapture与捕获设备,视频文件或图像序列一起使用的实例
  7. Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator
  8. 以虚拟现实骨灰级开发者视角,来看VR智能硬件平台
  9. tkinter的pack布局与place布局结合
  10. elementUI中登录页form表单重复跳转登陆页
  11. Eclipse启动时指定jdk版本
  12. 第一章 Shell基础知识
  13. freeimage 安装错误
  14. 写九宫格日记模块设计
  15. 第三方支付接口现号,第三方支付接口对接,第三方支付接口申请
  16. 如何在linux下玩lol_英雄联盟新手教程 教你怎么玩lol
  17. 行驶证核验-行驶证核验查询-行驶证核验接口-行驶证核验查询接口-行驶证核验api接口-行驶证核验api
  18. 最新云开发王者荣耀战力查询微信小程序源码免费下载支持双系统双区,内置接口
  19. 移动端百度强引蜘蛛SEO工具
  20. 洛谷 P1309 瑞士轮 归并

热门文章

  1. QEMU文档之bypass iommu
  2. WinAppDriver UI自动化测试环境搭建
  3. 研究生课程笔记:软件包在流行病学中的应用(一)——PASS软件
  4. “做教练”之硬笔书法
  5. 数据分析sql面试必会6题经典_经典SQL面试题及答案分析
  6. 专业的PRD撰写模板
  7. (4.2.48)MVPArms源码分析
  8. java服务器 c 服务器_c 编写服务器
  9. 直线扫描转换-DDA算法
  10. VS编译错误:winsock.h winsock2.h ws2def.h 重定义