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 +50ltMidLt = ltLight + (100 - 70 * ltLight / 1023.0);rtMidLt = rtLight + (100 - 70 * rtLight / 1023.0);bkMidLt = bkLight + (100 - 70 * bkLight / 1023.0);delay(100);
}

3.不足之处

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

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

追光小车

追光小车的完整程序已经上传到网盘了,想要程序的同学,请移步公粽号并回复“追光小车”即可获得下载链接,好东西不容错过。

本期分享就到这里咯,撰文不易,欢迎各位小伙伴持续关注 初芯未来,更多内容分享等着你哦~!

Arduino追光小车相关推荐

  1. matlab智能小车避障,Arduino智能小车系列教程4——超声波避障

    Arduino智能小车系列教程4--超声波避障 Arduino智能小车系列教程 准备材料 超声波模块HC-SR04 舵机固定架 舵机安装 超声波接线 代码测试 代码详解 int getDistance ...

  2. Arduino智能小车——蓝牙小车

    Arduino智能小车--蓝牙小车 Arduino智能小车系列教程时空门: Arduino智能小车--拼装篇 点击跳转 Arduino智能小车--测试篇 点击跳转 Arduino智能小车--调速篇 点 ...

  3. Arduino平衡小车

    Arduino平衡小车 1.概述 此Arduino平衡小车在主控方面由Arduino UNO R3和Arduino sensor shield v5.0传感器扩展板组成.采用TB6612FNG作为电源 ...

  4. Arduino智能小车设计(一)

    可接课程设计!!!有需要私聊博主! 这一个月来 距离实验室纳新后,已经过去一个月左右了.听取了学长的建议,这段时间也一直在搞Arduino这个软件,还算不错的认识了这个开源软件.(自我认为..) 但是 ...

  5. 一步步制作Arduino智能小车

    ​ Arduino nano的制作智能小车 1.引脚配置 首先是板子的图片 ​ Nano 技术参数 控制器 ATmega328P Flash 32KB Sram 2KB EEPROM 1KB Sram ...

  6. Arduino智能小车设计(七)

    上回书说到,小车的超声波避障功能基本完成.那么本篇就来介绍最后一个功能,蓝牙智能控制功能. 废话不多说,来吧. 蓝牙控制功能 最令我感动的是,我原以为最困难的一个功能在实际操作下居然成为了最简单的那个 ...

  7. Arduino智能小车——循迹篇

    Arduino智能小车--循迹篇 Arduino智能小车系列教程时空门: Arduino智能小车--拼装篇 点击跳转 Arduino智能小车--测试篇 点击跳转 Arduino智能小车--调速篇 点击 ...

  8. arduino控制小车转向_舵机和舵机控制板

    在很多项目中需要用到舵机.比如机器人,伺服系统等方面.步进电机是可以设定转过多少角度,而舵机是可以设定转到的位置,可以说是指哪打哪,Arduino智能小车的前轮转弯系统便是用的这种原理,在工业上机器人 ...

  9. Arduino智能小车电机控制方向及运动

    为后续的研究先做资料的铺垫,如果错误,欢迎指正 Arduino智能小车--测试篇 Arduino 智能小车-电机控制 delay 延时处理:delay(10000)某个操作运行10秒后再进行其他操作

最新文章

  1. 字符串操作系列库函数
  2. 春天闻香食花——品尝一顿愉悦的花餐
  3. MFC Dll的详细介绍及创建
  4. anaconda3下opencv安装
  5. vue组件化通信之父向子传值
  6. 关于C10K问题详解-突破单机性能是高性能网络编程
  7. SQL中and和or的区别是?
  8. 2015蓝桥杯b组java_Java实现第十一届蓝桥杯JavaB组 省赛真题
  9. 继承演练 c# 1613706361
  10. 老程序员如何避免沦落出局?
  11. 关于Android直接连MySQL获取数据的真机测试的一些坑
  12. android 如何进入安全模式,手机怎么进入安全模式
  13. 什么是天线阵列及天线阵列类型
  14. 《百万IT毕业生的心声:IT专业大学生毕业前必做的十件事》
  15. 使用 pandoc 进行文档转换(markdown转pdf)
  16. 深度学习训练经验之迭代次数与准确率之惑
  17. [SDN]使用mininet搭建单臂路由的VLAN网络
  18. 超融合服务器是什么?和超融合一体机什么区别?
  19. 如何将任意辣鸡话题写成一篇优秀的毕业论文——以本文为例
  20. linux 字符设备驱动实战

热门文章

  1. 荣耀最强拍照手机诞生:荣耀20系列塑造的“潮流科技宇宙”
  2. HTML显示证件页面图形,证件信息.html
  3. 高德地图定位的简单实现
  4. html5仿网页版微信聊天界面代码
  5. 03、江苏专转本(专业课笔记)第三章、计算机软件
  6. 东方通TongWeb创建GBase数据库连接池
  7. 如何使用ps的扭曲里面的旋转扭曲
  8. HTML+CSS伸缩式导航栏
  9. 数字验证的正则表达式
  10. android编程xml动画,Android中xml设置Animation动画效果详解