Arduino追光小车 您所在的位置:网站首页 ev3遥控小车知识点 Arduino追光小车

Arduino追光小车

2023-12-29 05:41| 来源: 网络整理| 查看: 265

Arduino追光小车之光敏电阻传感器的应用 硬件准备1.组装小车2.模块介绍 电路设计1.硬件连线 程序设计1.设计思路2.部分程序3.不足之处

“想要迪迦奥特曼复活的方式只有一种,那就是大古变成光!”各位童鞋,你们相信光吗?哈哈,这里的光可不是奥特曼之光,这是小编特意为大家准备的追光小车!!!

硬件准备 1.组装小车

我们今天要做的追光小车的主体就是小车,小编就不啰嗦了,大家自行准备吧,只要保证它能前进、后退、左转和右转就可以了,然后我们在此基础上加四个光敏电阻传感器用来检测光照。 注意: ①小编用的电机驱动器是L298N,7.4V的锂电池供电,大家可以自行查阅该模块的资料,也可以使用其他类型的电机驱动器。 ②主控还是Arduino UNO,小编在UNO上加了一块扩展板,其实不用扩展板也可以,小编本来是为了省事,结果这破扩展板太难用了,反而增加了工作量。

2.模块介绍

小编用了四个光敏电阻传感器模块来检测光线强弱,分别安装在小车的前、后、左、右,用来检测不同方向的光线。 在这里插入图片描述

光敏电阻传感器是一种利用半导体的光电效应制成的电阻值随着入射光的改变而发生变化的电阻器,当入射光增强时,它的电阻值会减小,当入射光减弱时,它的电阻值增大。我们常用的这种光敏电阻传感器模块是将光敏电阻集成到了一小块电路板上,该模块有四个引脚,除了VCC(正极)和GND(负极)之外,还有D0和A0两个引脚,D0是数字引脚,只能输出高电平或低电平信号,不能准确表示光线的强弱变化,而A0引脚输出0V ~ 5V的电压变化,这个电压再通过Arduino UNO的A0 ~ A5引脚的模数转换即可得到0~1023范围内的数值。 在这里插入图片描述 注:模数转换即A/D转换,是把模拟信号转换成数字信号的转换器(即电子电路),Arduino UNO的A0 ~ A5就是模数转换引脚,转换精度为10bit,它们能够读取模拟电压,并转换为0~1023范围内的整数,也就是利用1024个数字表示模拟电压,以供主控器处理。

电路设计 1.硬件连线

追光小车的电路设计可以分为两部分,一部分是电机驱动的电路接线,另一部分是光敏电阻传感器的接线。 在这里插入图片描述 ①电机驱动部分:小编把小车左侧的电机接到了驱动器的OUT3、OUT4端口,把右侧电机接到了驱动器的OUT1、OUT2端口,所以在编程时要注意IN3、IN4和ENB引脚要接到Arduino控制左侧电机的引脚上,IN1、IN2和ENA要接到Arduino控制右侧电机的引脚上,接线如下:

电机驱动器           Arduino UNO

IN3           ------------           4

IN4           ------------           6

ENB           ------------           5

IN1           ------------           2

IN2           ------------           7

ENA           ------------           3

②传感器部分:小编用的是4针脚的光敏电阻传感器模块,其中传感器的D0引脚没用到,所以直接悬空不接线。 光敏电阻传感器模块           Arduino UNO VCC           -------------           +5V GND           -------------           GND A0           -------------           A0~A5

小编在接线时,把小车前面的传感器接到了Arduino的A0引脚,左侧传感器接到了A1引脚,右侧传感器接到了A3引脚,后面的传感器接到了A4引脚。

注:由于小编买的扩展板占用了Arduino的A2引脚,导致传感器读数有问题,所以这里没有用到A2引脚,大家自己设计电路的时候可以正常使用A2引脚。

程序设计 1.设计思路

电路部分搞定了,接下来就是程序设计了,小编先分享一下自己的设计思路,具体的数据采集和处理各位童鞋自行看代码吧!

首先,在小车上电初始时先通过光敏电阻传感器采集一次当前环境的基本光照数据,然后在该数据的基础上再增加一定比例的数值作为环境光的基础数据,如:(100-70*fdLight/1023.0),加上这个数值的目的是为了增加一定的容差,使采集的光照在指定变化范围内不会对控制小车产生影响,毕竟环境光照一直在变化,这样处理可以使小车更稳定一些。

然后,在主循环中采集光照数据,该数据的范围是在基础数据到1023之间的,我们可以利用计算将其映射到-2550和0255范围内,目的是为了和控制电机速度的PWM值匹配上,便于后面控制小车的速度。小编是按照摇杆模块的方法来处理光照数据的,这里把前、后两个传感器当做摇杆的纵轴,左右两个传感器当做横轴,所以左、后两个传感器的数值范围是-2550,前、右两个传感器数值范围是0255,就像是一个坐标轴一样。

最后,把处理后的四个数据通过加减法计算出可以控制小车左侧电机的速度和右侧电机的速度,从而控制小车前进、后退、左转、右转;需要注意的是在计算过程中,数据可能会超出0255或者-2550的范围,也就是超出PWM的数值范围,所以还要利用判断语句进行多次限定。

总之,小编是按照处理摇杆模块的方法来处理光照数据的,大家看代码的时候可以按照这个思路去理解;如果大家有比较好的处理算法也可以告诉小编哈

2.部分程序 /* 这完整程序请移步公粽号:初芯未来 */ void setup() { pinMode(IL1, OUTPUT); pinMode(IL2, OUTPUT); pinMode(ENL, OUTPUT); pinMode(IR1, OUTPUT); pinMode(IR2, OUTPUT); pinMode(ENR, OUTPUT); pinMode(A0, INPUT); //小车前面的光敏电阻传感器 pinMode(A1, INPUT); //左 pinMode(A3, INPUT); //右 pinMode(A4, INPUT); //后 delay(100); //由于传感器的值是随着光照增强逐渐减小的,为了避免后续计算中会出现负数的情况, //可以利用1023减去采集的数值,这样就变成了采集的数值随着光照增强逐渐增加了。 fdLight = 1023 - analogRead(A0); //前 ltLight = 1023 - analogRead(A1); //左 rtLight = 1023 - analogRead(A3); //右 bkLight = 1023 - analogRead(A4); //后 fdMidLt = fdLight + (100 - 70 * fdLight / 1023.0); //增加的数值可以根据需求更改,例如可用直接增加50:fdMidLt = fdLight +50 ltMidLt = ltLight + (100 - 70 * ltLight / 1023.0); rtMidLt = rtLight + (100 - 70 * rtLight / 1023.0); bkMidLt = bkLight + (100 - 70 * bkLight / 1023.0); delay(100); } 3.不足之处

小编设计的追光小车在室内光线均匀的情况下效果还是很好的,但是在室外或者太阳光比较强烈的情况下就不太理想了,这是因为光照太强,小车开机时采集的基础数据就比较大,即使再增加光照强度也无法计算出有效的电机速度了;

另外在光线分布不均匀的地方小车会一直追着强光的方向前进。这些问题小编暂时还没想到很好的解决方法,各位看官如果有更好的想法一定要分享给小编哈。

追光小车

追光小车的完整程序已经上传到网盘了,想要程序的同学,请移步公粽号并回复“追光小车”即可获得下载链接,好东西不容错过。 本期分享就到这里咯,撰文不易,欢迎各位小伙伴持续关注 初芯未来,更多内容分享等着你哦~!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有