arduino黑线循迹小车程序_循迹小车:给我一条线,我能自己走完全程
在老少通吃的智能小车到底是什么呢?科普来喽!一文中,我们介绍了智能小车的分类及组成,为什么循迹小车能够追踪黑线轨迹呢?
智能小车在画有黑线的白纸 “路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线利用了简单、应用比较普遍的检测方法—发光二极管+光敏电阻。发光二极管+光敏电阻,即利用光线在不同颜色的物理表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射白光,当白光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号。
让我们一起来试验一下吧!
一.实验说明
1、使用寻线传感器控制开发板自带LED。
2、红外寻迹模块是利用红外线反射的原理,根据反射的强度来判定颜色。本寻迹模块是用来识别黑白线,黑线输出低电平,白线输出高电平。
二.物料清单
三.模块说明
四.连线图
五.实验代码
int num1;int num2;int num3;int num4;int num5;void setup(){ pinMode(7, INPUT); pinMode(8, INPUT); pinMode(9, INPUT); pinMode(10, INPUT); pinMode(11, INPUT); //定义该接口为接口为输入接口 pinMode(13,OUTPUT);}void loop(){ num1 = digitalRead(7); num2 = digitalRead(8); num3 = digitalRead(9); num4 = digitalRead(10); num5 = digitalRead(11); //读出信号接口的值 if (num1 ==LOW) { //如果1号传感器监测到黑线,灯亮一次 digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(5000); } else if (num2 == LOW) { //如果2号传感器监测到黑线,灯亮两次 digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(5000); } else if (num3 == LOW) { //如果3号传感器监测到黑线,灯亮三次 digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(5000); } else if (num4 == LOW) { //如果4号传感器监测到黑线,灯亮四次 digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(5000); } else if (num5 == LOW) { //如果5号传感器监测到黑线,灯亮五次 digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(5000); }}
六.相关介绍
1、寻线传感器
寻线传感器是光电传感器的一种,是根据反射式光电传感器原理开发的专用机器人产品,可以帮助你的机器人进行白线或黑线跟踪,可以检测白底中的黑线,也可以检测黑底中的白线。寻线反馈信号可以提供稳定的TTL电平输出(开关量),使寻线更准确更稳定。其可用于光电测速、程控小车寻线,是轮式机器人的必备传感器。
2、光电传感器
光电传感器是各种光电检测系统中实现光电转换的关键元件,它是把光信号(红外、可见及紫外光辐射)转变成为电信号的器件。由于光电传感器具有结构简单、重量轻、体积小、响应快、性能稳定及具有很高的灵敏度等优点,因此在检测和自动控制等领域中应用广泛。
光电传感器按其工作原理可分为模拟式和脉冲式两类。所谓模拟式,是指光敏器件的光电流的大小随光通量的大小而变,为光通量的函数。而脉冲式光敏器件的输出状态仅有两种稳定的状态,也就是“通”与“断”的开关状态,即光敏器件受光照时,有电信号输出,不受光照射时,无电信号输出。
光电传感器在工业应用中可归纳为直射式、透射式、反射式和遮蔽式等四种基本形式。Mini红外寻线传感器是根据反射式光电传感器原理开发设计的,所以简单介绍下此种工作方式。当光源发射出的光通量(红外线)投射到被测物体上,被测物体又将部分光通量反射到光敏器件上。反射的光通量取决于被测物体的反射条件。该形式常用于表面测量和转速测量。
七、总结和经验
根据以上原理我们设计了一个智能循迹小车,经过不断调试最终能在规定的黑线跑道上行驶。智能循迹小车作为机器人的典型代表,能够实现自动导引功能。它的原理是主要通过传感器来感知导引线实现自动识别路线,选择正确的行进路线,并作出判断和相应的执行动作。
此次循迹小车由5个传感器传输信号,中间传感器检测黑线小车直行,左右各2个负责转弯,当检测到黑线时,循迹模块红灯亮起,管脚读取值为0,检测到白线时红灯熄灭,管脚读取值为1。
这里的循迹是指小车在白色地板上循黑线行走,采取的方法是红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光。单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。
在我们对小车进行调试的过程中,遇到了几个问题,现进行总结,希望对大家有所帮助。
1、传感器检测距离原理上为0.5~40mm,但小车前方五个循迹传感器灵敏度很低,需紧贴地面才能识别到黑线,导致传感器与地面摩擦影响小车行驶。
2、小车左右两个电机电压分配不平均。虽然不影响小车循迹但是对转向大小的修改产生一定影响,导致左右轮转不一致,要注意调节左右转轮速度。
3、一开始程序设定处两侧灯检测到黑线以外,所有情况均直行。但这种方法不适合直角等角度拐角过大的弯道,总会超出跑道,于是我们修改了代码,只有中间检测到黑线才会执行,两侧检测到黑线则拐弯。
但是随之产生的问题是小车摇摆剧烈,经过修改代码参数,我们把摇摆幅度降到了最低。当遇到直角转弯,或者急转弯的时,可将一次车轮转速设为0,加大转向幅度。
4、开始时if-else语句过于复杂给小车运行带来了一定的延迟。此时选择代码优先级,当碰到3个灯同时亮时,if else语句优先执行第一个满足条件的语句,同时要注意处理好转向问题。
代码如下:
#include "config.h"int right1;int right2;int middle;int left2;int left1;void setup(){ setPin();}void loop(){ readDigitalValue(); judge(); //delay(50);}/*定义接口模式*/void setPin(){ pinMode(SensorRight1, INPUT); pinMode(SensorRight2, INPUT); pinMode(SensorMiddle, INPUT); pinMode(SensorLeft2, INPUT); pinMode(SensorLeft1, INPUT); pinMode(right, OUTPUT); pinMode(left, OUTPUT);}/*读出信号接口的值*/void readDigitalValue(){ right1 = digitalRead(SensorRight1); right2 = digitalRead(SensorRight2); middle = digitalRead(SensorMiddle); left2 = digitalRead(SensorLeft2); left1 = digitalRead(SensorLeft1);}/*对运行状态进行判断并作出响应*/void judge(){ if(right1==low&&right2==low&&left2==low){ analogWrite(right,0); analogWrite(left,180); } else if (right1 ==low) turnRightRapidly(); else if (right2== low) turnRight(); else if (middle== low) goStraight(); else if (left2 == low) turnLeft(); else if(left1 == low) turnLeftRapidly(); //else goStraight();}/*直行 返回值为空*/void goStraight(){ analogWrite(right,speedLow); analogWrite(left,speedSpecial);}/*快速左转 当检测到左侧第一个信号灯信号时 返回值为空*/void turnLeftRapidly(){ analogWrite(right,0); analogWrite(left,speedHigh);}/*快速右转 当检测到右侧第一个信号灯信号时 返回值为空*/void turnRightRapidly(){ analogWrite(right,speedHigh); analogWrite(left,0);}/*左转 当检测到左侧第二个灯信号时 返回值为空*/void turnLeft(){ analogWrite(right,20); analogWrite(left,speedMiddle);}/*右转 当检测到右侧第二个灯信号时 返回值为空*/void turnRight(){ analogWrite(right,speedMiddle); analogWrite(left,20);}配置文件 /* * right 右电机pwm输出引脚 * left 左电机pwm输出引脚 * low 检测到黑线,指示灯亮 * high 检测到白线,指示灯灭 * speedHigh 高速pwm值 * speedMiddle 中速pwm值 * speedLow 低速pwm值 * speedSpecial 直行左轮速度pwm值,调节两个电机转速误差 * SensorRight1 右侧第一个信号灯的引脚 * SensorRight2 右侧第二个信号灯的引脚 * SensorMiddle 中间信号灯的引脚 * SensorLeft2 左侧第二个信号灯的引脚 * SensorLeft1 左侧第一个信号灯的引脚 * right1 读取的右侧第一个信号灯的信号 * right2 读取的右侧第二个信号灯的信号 * middle 读取的中间信号灯的信号 * left2 读取的左侧第二个信号灯的信号 * left1 读取的左侧第一个信号灯的信号 */ #define right 3 #define left 6 #define low 0 #define high 1 #define speedHigh 222 #define speedMiddle 150 #define speedLow 70 #define speedSpecial 80 #define SensorRight1 4 #define SensorRight2 5 #define SensorMiddle 9 #define SensorLeft2 10 #define SensorLeft1 12
关注我们的微信公众号:xunmingiot,后台回复“智能小车”,即可免费获得智能小车超级详细的制作视频,更可以获取Arduino教程以及其他学习资源。有任何问题欢迎评论或在后台留言!
arduino黑线循迹小车程序_循迹小车:给我一条线,我能自己走完全程相关推荐
- 单面机51小车程序_西门子PLC从入门到精通的5个实例,理论讲解加程序演示!
可编程控制器的分类 按组成结构:整体式.模块式和紧凑式 按I/O点数:大 (>1024).中 (256-1024) .小型 (<256点) 按功能:低.中.高档. PLC硬件系统:输入部分 ...
- 模拟灰度传感器循迹的程序_灰度传感器的工作原理
灰度传感器是模拟传感器,有一只发光二极管和一只光敏电阻,安装在同一面上.灰度传感器利用不同颜色的检测面对光的反射程度不同,光敏电阻对不同检测面返回的光其阻值也不同的原理进行颜色深浅检测.在有效的检测距 ...
- 单面机51小车程序_车辆工程学院举行“51单片机智能小车”电子设计成果答辩展示...
用理论指导实践,以实践检验理论.6月28日,车辆工程学院在汽车科技馆二楼举行了"51单片机智能小车"电子设计成果展示,旨在加强学生学以致用能力,提升学生实践创新水平.2017级教改 ...
- 单面机51小车程序_连续打印1200平,实战告诉你这款彩白彩UV机真的行!
我们都知道,在广告印刷.装修装饰.建筑包装.礼品玩具等行业的打印应用中,单调的色彩.简单的图案早就已经无法满足市场的需求了. 因此,画面同步输出.模式自由切换.不降打印速度的彩白彩功能就成为UV打印的 ...
- python程序_正确配置Python应用程序
让我们来讨论一下如何配置Python应用程序,特别是那些可能存在于多个环境中的应用程序--开发环境.模拟环境.生产环境等等-- 应用程序中使用的工具和框架并不是特别重要,因为我将在下面概述的方法是基于 ...
- 循迹小车程序编程_电子编程?其实很容易!
7月17日至18日,重庆大学分营第八组的部分成员在重庆大学A区第八教学楼参加了"科创生活之初体验"活动.在老师的指导下,营员们拼接电子硬件,使用智能电子编程软件完成了呼吸灯.调速风 ...
- 基于Arduino UNO可蓝牙操控、避障、循迹、鸣笛的四驱智能小车
采用 Arduino Uno单片机作为主控单元,采用四轮式移动平台,四轮均可驱动,可以通过蓝牙控制小车前进.后退.原地转向等操作,可调节车速,可鸣笛警报,可自动识别并躲避障碍物,可遵循特定轨道自动行驶 ...
- 简单循迹小车实验心得_智能循迹小车总结 智能循迹小车报告.doc
智能循迹小车总结 智能循迹小车报告 西京学院 自动化1002班 概要 本寻迹小车是以万能板为车架,STC12C5A60S2单片机为控制核心,将各传 感器的信号传至单片机分析处理,从而控制 L293D电 ...
- stm32项目_stm32f103c8t6项目_循迹避障小车完整制作过程_智能小车设计_STM32智能小车教程-循迹-避障-蓝牙遥控-跟随
[硬件] 元件选型 照片上传出问题了,改天补上,着急的可以看视频 视频链接在这里 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sKjJGMXv-16463139639 ...
最新文章
- python 进制转换_Python数据结构与算法——递归应用之进制转换
- 深入理解分布式技术 - ServiceMesh 服务网格
- 带你深入理解分布式事务,掌握后台分布式核心技术,PS:送5本!
- Redis:10---List对象
- [原创] IAR7.10安装注册教程
- html 高德地图坐标,点标记-调起高德地图-示例中心-JS API 示例 | 高德地图API
- 数据库课程设计报告——员工工资管理系统
- java-php-python-ssm制药企业人力资源管理系统计算机毕业设计
- 有些歌,放在这慢慢听
- 秸秆开启黑土地绿色低碳循环经济链 国稻种芯绿色沃土计划
- 运算放大器的基本电路符号
- 人都“爆”了有这么好的东西《vtdakz.com》顶硬了!
- Linux源码安装pgadmin4,如何在 Ubuntu 18.04 上安装 pgAdmin4
- 语句摘抄——第11周
- android 自定义ImageView实现图片手势滑动 多点触摸放大缩小效果
- 64位 Eclipse IDE for Java EE Developers 下载地址
- Check failed: top_shape[j] == bottom[i]-shape(j) (1 vs. 2) All inputs must have the same shape, exc
- 揭秘橙子钱包拥有40万+用户的背后
- 高等代数_第6章:二次型·矩阵的合同
- 通关4级之听力(2021.02.26)
热门文章
- 入侵和反击 动态规划
- GitHub的初次使用记录
- v3s 全志_基于全志V3s的开源开发板,提供pcb和系统源码和资料
- 【Java报错】mapper传入array\collection\list类型的参数时报BindingException:Parameter `` not found(问题复现+3种解决方法)
- cdh jar包 sqoop2_安装sqoop1.4.6-cdh5.5.2
- LeetCode 13 罗马数字转整数
- Codeforces 1196D RGB Substring
- Match Points
- SpringBoot+AOP实现多数据源动态切换
- oracle自定义函数获取省份,oracle自定义函数查询数据字典项