线性跟随器机器人因其简单性而成为学生和初学者中最受欢迎的机器人技术之一。它遵循一条黑色或白色的线,具体取决于您对微控制器的编程方式。在这里,我们使用德州仪器(TI)的MSP430启动板制造了一个跟随直线的机器人,该机器人跟随黑色的线条。如果您不熟悉MSP430启动板,请阅读我们的《 MSP430入门指南》。
所需材料
- 德州仪器(TI)的MSP430G2 LaunchPad
- L298D电机驱动器模块
- 连接线
- 红外传感器模块
- 底盘,车轮,过山车
- 能源IDE
- 电源(3.3v)和5v-12v
线路跟随器的概念
线跟随器的概念与光有关。我们已经使用了黑色和白色表面的光的行为。当光落在白色表面上时,它将几乎完全反射,如果是黑色表面,则黑色表面会吸收光。此行跟随器机器人使用了光的这种解释的行为 。
在 基于MSP430的线路跟随器机器人中, 我们使用了红外发射器和红外接收器(也称为光电二极管)。它们用于发送和接收光。红外透射红外光。当红外线落在白色表面上时,它会反射回来并被光电二极管捕获,从而产生一些电压变化。当红外光落在黑色表面上时,黑色表面会吸收光,并且不会反射任何光线,因此光电二极管不会接收任何光线。要了解有关红外传感器的更多信息,请点击链接。
在此基于MSP430的线跟随器机器人中,当传感器感测到白色表面时,MSP将得到1作为输入,而当感测到黑线时,MSP将得到0作为输入。
电路说明
我们可以将整个直线跟随器机器人分为多个部分,例如传感器部分,控制部分和驱动器部分。
传感器部分: 此部分包含IR二极管,电位计,比较器(Op-Amp)和LED。电位计用于在比较器的一个端子上设置参考电压,IR传感器感测线路并在比较器的第二个端子上提供电压变化。然后,比较器将两个电压进行比较,并在输出端生成数字信号。在此电路中,我们为两个传感器使用了两个比较器。LM358用作比较器。LM358内置了两个低噪声运算放大器。
控制部分: MSP430 Launchpad用于控制线路跟随器机器人的整个过程。比较器的输出连接到MPS430 Launchpad的数字引脚P1_3和P1_4。MSP430 Launchpad读取这些信号并将命令发送到驱动器电路以驱动线路跟随器。
驱动器部分: 驱动器部分包括电动机驱动器和两个直流电动机。电动机驱动器用于驱动电动机,因为MSP430 Launchpad无法为电动机提供足够的电压和电流。因此,我们添加了一个电动机驱动器电路,以为电动机获得足够的电压和电流。在这里,我们已使用L298d驱动器来驱动直流电动机。MSP430 Launchpad将命令发送到此电动机驱动器,然后驱动电动机。
我们使用不同的Micrcontroller开发了Line Follower机器人:
- 使用8051单片机的线跟随机器人
- 使用Arduino的Line Follower机器人
- 使用Raspberry Pi的Line Follower机器人
- 使用PIC单片机的Line Follower机器人
使用MSP430的线跟随机器人的工作
行跟随器的工作非常有趣。直线跟随器机器人通过使用传感器感应黑线,然后将信号发送到MSP430 Launchpad。然后,MSP430 Launchpad根据传感器的输出驱动电动机。
在此项目中,我们使用两个红外传感器模块,即左传感器和右传感器。当左右传感器都感应到白色时,机器人将向前移动。
如果左传感器在黑线上,则机器人向左转。
如果右传感器感应到黑线,则机器人会向右旋转,直到两个传感器都到达白色表面。当白色表面出现时,机器人开始再次向前移动。
如果两个传感器都在黑线上,则机器人将停止。
电路原理图
该MSP430线性跟随器机器人的电路非常简单。比较器的输出直接连接到MSP430 Launchpad的数字引脚号p1_3和P1_4。电机驱动器的输入引脚IN1,IN2,IN3和IN4分别连接到MSP430 Launchpad的数字引脚P1_5,P2_0,P2_1,P2_2。一台电机连接到电机驱动器OUT1和OUT2的输出引脚,另一台电机连接到OUT3和OUT4。在这里,我们使用3.3v电源为除电机驱动器模块以外的整个电路供电。我们已经为电机驱动器模块提供了8v电源。用户可以使用5v-12v。
您也可以像在Perf Board上构建的那样构建自己的IR模块。以下是红外模块的电路:
编程说明
完整的程序和视频可在本文末尾找到。
首先,在程序中,我们定义了传感器和电机的输入和输出引脚。然后为行跟随器的方向定义一些宏,然后编写指令以选择传感器输出
注意: 传感器可能为低电平有效或高电平有效,因此首先检查传感器的输出是什么,然后通过注释或取消注释 activeLowMode 选择指令。对于活动的HIGH,请注释 activeLowMode 宏。
#define l_sensor P1_3 #define r_sensor P1_4 int引脚= {P1_5,P2_0,P2_1,P2_2}; #define forward 0x05 #define left 0x06 #define right 0x09 #define stop 0x00 //#define activeLowMode #ifdef activeLowMode int res = {forward,left,right,stop}; #else int res = {停止,向右,向左,向前}; #万一
之后,在 设置 功能中,我们将方向指示给传感器和电机引脚。然后在 循环 功能中,我们检查输入并将输出发送到电机驱动器模块以运行电机。
void setup() { for(int i = 0; i <4; i ++) pinMode(pins,OUTPUT); pinMode(l_sensor,INPUT); pinMode(r_sensor,INPUT); } void loop(){int sense =(digitalRead(l_sensor)<< 1)-digitalRead(r_sensor); for(int i = 0; i <4; i ++)digitalWrite(pins,(res >> i)&0x01); }
我们使用MSP430 Launchpad读取此行跟随器中的四个条件。我们使用了两个传感器,即左传感器和右传感器。
条件:高电平有效输出
输入值 |
输出量 |
运动 机器人的 |
||||
左传感器 |
右传感器 |
左马达 |
右马达 |
|||
LS |
RS |
LM1 |
LM2 |
RM1 |
RM2 |
|
0 |
0 |
0 |
0 |
0 |
0 |
停止 |
0 |
1个 |
1个 |
0 |
0 |
0 |
右转 |
1个 |
0 |
0 |
0 |
1个 |
0 |
转左 |
1个 |
1个 |
1个 |
0 |
1个 |
0 |
前锋 |
程序是根据上表条件编写的。查看下面的 完整代码和演示视频 。