上一篇提到了传感器,我们用的是红外灰度传感器,这里我们就对红外灰度传感器展开来说,理清原理实现,最后能够自己动手做出来。

一、原理分析

  我们先来说一个最基本的电路原理:

python红外接收传感器程序 红外传感器程序流程图_python红外接收传感器程序

划重点,电流控制灯泡亮度!那要怎么控制电流呢?我们介绍另一个简单的电路原理,欧姆定律:电流=电压/电阻,划重点,欧姆定律!

python红外接收传感器程序 红外传感器程序流程图_红外_02

  忽略灯泡内阻,我们就得到了 I = U/R ,就可以计算流过灯泡的电流了。

 

  可能会有疑问,我们是分析红外灰度传感器的呀,怎么弄到灯泡来了??我们回顾一下红外灰度传感器的样子:

python红外接收传感器程序 红外传感器程序流程图_红外_03

 

绿色椭圆代表灰度传感器中的透明点,黑色椭圆代表暗黑色点,绿色的是红外线,箭头是传输方向,最下的黑色横条表示障碍物。

 

python红外接收传感器程序 红外传感器程序流程图_红外_04

  红外灯泡通电后,发出红外光,红外光遇到障碍物后,反射到红外接收器。在高中物理中我们有学过,黑色物体吸收光多,越黑越多。所以当障碍物为黑色时,红外接收器接收到的红外光就少,当障碍物为白色的时候,红外接收器接收到的红外光就多。判断接收红外光的多少,就可以知道障碍物的黑白啦。当然,这里的障碍物指的就是黑色跑道和白色背景。

划重点,红外对管!!!透明的那个是红外发射管,暗黑色那个叫红外接收管。回到上面说到了灯泡亮度问题,是不是红外发射管发出的亮度越高越好呢?不是的,发出的亮度应该是适中且固定的。适中容易理解,固定是什么意思?就是亮度应该由始至终都相同,不然就算是检测同一个障碍物的灰度,红外发射管发射的亮度忽明忽暗,红外接收管接收到的反射光也就忽明忽暗,但是明明是同一个障碍物,这样就不对了。我们一般能够在厂商提供的数据手册中找到红外发射管正常工作时的电流(一般是十几毫安到几十毫安),根据这个电流和电源的电压,求出要加的电阻的大小。

  发射讲完了,那接收呢?红外接收管怎么知道接收红外光有多亮。

划重点,光敏元件!!!简单来说就是对光敏感的元件,也就是说,环境亮度大小会导致光敏元件某一个物理量发生变化。我们使用的红外接收管就是一种光敏元件,当接收红外光亮度越大时,电阻就越小。

  接收的原理弄懂了,实际实现要怎么做呢?很简单呀,测电阻就行啦。但是单片机没有办法直接测电阻。。。甚至于一般型号的51单片机连电压值都没办法测,只能测电平高低。暂时不管这些,我们就先知道没办法测电阻。。好吧,我们勉强能测电压,至于为什么说勉强,待会再说。我们先来解决一下怎么把测电阻转换成测电压。

电阻分压原理。图中的RL即红外接收管的电阻,R1是我们挑选的固定阻值的电阻。

python红外接收传感器程序 红外传感器程序流程图_python红外接收传感器程序_05

  从上图,根据电阻分压原理,我们可以得到UL的值,固定电源为5V,我们假设红外接收管在障碍物为黑色的时候(即在跑道上),RL电阻为30K,在障碍物为白色的时候,RL电阻为300,假设R1我们用10K的电阻,求障碍物为黑色的时候电压UL等于多少,障碍物为白色的时候电压UL等于多少。

python红外接收传感器程序 红外传感器程序流程图_比较器_06

  因此小车在跑道上跑的时候,UL的值就在0.15到3.75之间变化,我们通过检测UL的大小就可以知道这个红外灰度传感器是否在跑道上了。

 

  还记得我们前面提到说,“勉强”可以测量电压吗?为什么要说勉强?实际上一般型号的51单片机(不包括某些增强版)是不具备测电压功能的,也就是说,我们没有办法测得出UL的数值。但是51单片机能够输入高低电平,也就是0和1,输入低于0.4V就相当于输入0,输入高于2.4V就相当于输入1。因此,我们需要一种折中的办法,以达到我们的目的。

  我们回顾一下我们的目的,不就是区分黑线和白色背景吗,而且黑线和白色背景对应的UL相差又比较大,我们大概取一个中间值,约为2V。现在我们设计一个元件,这个元件有一个输入和一个输出。当输入小于2V时,输出为0V;当输出大于2V时,输出为5V。如下图理解:

 

python红外接收传感器程序 红外传感器程序流程图_比较器_07

  这样一来我们就将UL的0.15~3.75这样的一个范围值变成了0和5这样的两个数,对应了单片机输入的0和1,分别代表着白色背景和黑色线路。

划重点,电压比较器!!!

 

python红外接收传感器程序 红外传感器程序流程图_红外_08

  中间那个带+ -号的三角形叫做运放,这个不用划重点,这里涉及到数字电路的知识,不展开讲,只需要知道的是,当+(正)端输入的电压大于-(负)端电压时,输出5V,否则输出0V。

 

  回顾一下上面说到的几个电路,电阻限流,电阻分压,比较器。综合以上三个电路,一个红外灰度传感器的电路就出现了,如下图:VCC连接电源正极,GND连接电源负极,TCRT5000是一组红外对管,左边带两个箭头的是红外发射管,右边的是红外接收管。

python红外接收传感器程序 红外传感器程序流程图_比较器_09

  电路看起来挺复杂的,实际上这个电路分析起来很简单。首先我们应该注意到,这个电路里面有很多从VCC分出来的并联支路,我们就通过分析每一个支路来进行整个电路的分析。

  首先看下电源支路,有电容滤波支路和电源灯支路,如下图红色部分所示:

python红外接收传感器程序 红外传感器程序流程图_灰度_10

  从VCC开始,经过104电容(10^4次方pf,也就是0.1uf)后连接到GND,主要用作电源滤波,就是减少电源波动对电路的影响。其次,VCC经过电源指示led,接一个1k的限流电阻然后接到GND,用作电源指示作用,也就是当VCC和GND接到电源的正负极时,电源指示led发亮。这部分电路只要是辅助作用,不是必须的。

 

  接下来分析红外发射对管驱动电路。如下图绿色部分所示:

python红外接收传感器程序 红外传感器程序流程图_红外_11

  把VCC换成电源正极,GND换成电源负极,红外发射对管换成灯泡,这不就是本文开头说的电阻限流电路吗?一模一样的,通过一个180欧姆的电阻进行限流,使通过红外发射对管的电流符合厂商提供的工作电流范围。这样红外发射对管就能发出亮度适中且固定的红外光了。

 

  接下来我们再看红外接收对管的接收电路。如下图蓝色部分所示:

python红外接收传感器程序 红外传感器程序流程图_比较器_12

  与发射管同理,将VCC换成电源正极,GND换成电源负极,红外接收管换成电阻RL,这不就和我们上面分析的电阻分压电路一样了吗?而且测量电压的取样点也是在RL之前,跟上面所分析的电路一模一样,这条支路可以输出0.15~3.75之间的信号给比较器。

 

  下面分析比较器电路,如下图红色部分所示:

python红外接收传感器程序 红外传感器程序流程图_红外_13

 

  上面我们说的,比较器的原理是什么来着,当运放+(正)输入电压大于-(负)输入电压时,运放输出就为5V,反之输出就为0V。观察此时的+-极输入是什么。+极输入是前面电阻分压电路得到的UL,-极输入是VCC和GND之间的电压经过滑动变阻器(也叫电位器)分压后得到的某一固定电压,在上文的分析中,我们把这个固定电压设置为2V,在这里我们调节滑动变阻器,获得一个2V的电压提供给运放-(负)极即可。

  电路中的其他部分都是辅助部分或者实现别的功能的部分,跟本次所做的红外灰度传感器关系不大,可暂时忽略。

  至此,红外灰度传感器的电路原理分析部分就完成了,其实所用的核心电路知识都是高中物理电学的基础,理解起来还是比较简单的。

 二、实物制作

  开始实物制作,其实也很简单,按照上面的电路图,把电子元件焊起来就行了。先看看需要什么电子元件:红外对管,电阻,电源指示led灯,电容,运算放大器和万能板。大概就是下面这些东西:

 

python红外接收传感器程序 红外传感器程序流程图_灰度_14

python红外接收传感器程序 红外传感器程序流程图_红外_15

python红外接收传感器程序 红外传感器程序流程图_比较器_16

    TCRT5000红外对管          电阻                发光led

python红外接收传感器程序 红外传感器程序流程图_灰度_17

python红外接收传感器程序 红外传感器程序流程图_红外_18

python红外接收传感器程序 红外传感器程序流程图_python红外接收传感器程序_19

      瓷片电容        LM339四路比较器          万能板

 

  来说一下选型,红外对管选择了TCRT5000,方便而且便宜,也可以单独买发射管和接收管,都是可以的。电阻,对电压和功率的要求不大,就一般的碳膜电阻就行了,阻值要有180,1k和10k的。电容,就只是用到了一个作为电源滤波的104电容,瓷片电容足够了。LM339四路比较器,内部其实就是四个运放,做循迹小车用到的红外灰度传感器的数量最少要有5个才能跑得比较好,所以推荐用两个LM339,焊接7路红外灰度传感器。万能板推荐选用这种绿色的玻纤板,黄色那种电木板材质太差,大小选择合适能放下元件和线路即可。

  漏掉了电位器(滑动变阻器)。。。大概是下面这个样子的,能进行分压就行,对阻值要求不大,用10k的就行。

  

python红外接收传感器程序 红外传感器程序流程图_灰度_20

  焊接方面就没什么好说的了,电子元件按照电路图放置在万用板上,用焊锡焊起来就行。可以将电路拆分,将红外对管的发送接收电路焊在一块万用板上,电压比较器焊在另外一块万用板上,前一块板就负责输出电压UL到后一块板的比较器+极。焊好之后是下面的样子:

python红外接收传感器程序 红外传感器程序流程图_灰度_21

                红外对管板元件面

python红外接收传感器程序 红外传感器程序流程图_灰度_22

                  讲解图

  红圈处就是一个红外对管单元的电路,橙色的“1”是红外对管,“2”是180欧限流电阻,“3”是10k分压电阻。电流从VCC流入,经过限流电阻2,对红外发射管供电,然后流入GND。同样地,电流从VCC流入,经过分压电阻3,再连接到红外接收管,最后连到GND,分压电阻与红外接收管中间点的电压就是我们上面分析的电压UL,即0.15v~3.75v那个电压。可以看到在这个中心点连接了一根黑线出来(上面的原图可能清晰一点),这根黑线就可以与比较器的+极相连了。其余六个红外对管单元的电路和这个单元是一模一样的,看看背面线路图:

python红外接收传感器程序 红外传感器程序流程图_灰度_23

 

 

  接下来看比较器板:

  

python红外接收传感器程序 红外传感器程序流程图_灰度_24

  每个LM339比较器芯片有四路比较器,所以做七路的红外灰度传感器用两个LM339比较器芯片就行了。红色的“1”表示这里是比较器+(正)端输入的地方,“2”表示这是分压电位器,以获取2V电压,然后连接到比较器-(负)端。“3”就是比较器输出端输出信号连接单片机的地方。这块板的线路会有一点点复杂,所以建议分两块板,看看这块板的背面线路图:

  

python红外接收传感器程序 红外传感器程序流程图_灰度_25

 

到这里,红外灰度传感器就写完了。回顾一下有什么:

  1. 电阻限流电路,用来点亮红外发射管。
  2. 电阻分压电路,用来测量红外接收管接收到的反射红外光的强度。
  3. 电位器分压电路,分压出一个2V电压提供给比较器-(负)端。
  4. 电压比较器,+(正)端接红外接收管的电阻分压电路得到的UL,-(负)端接电位器分压出来的2V。
  5. 实物制作的材料选型,元件的布局,焊接线路的布线。