如何使用MSP430启动板制作一个线路跟随机器人

机器人

517人已加入

描述

线路跟随机器人因其简单性而成为学生和初学者中流行的机器人项目之一。它遵循一条线,黑色或白色,具体取决于您如何对微控制器进行编程。在这里,我们使用德州仪器的MSP430 启动板制作一个线路跟随机器人,它遵循黑线。

所需材料

德州仪器 (TI) 的 MSP430G2 启动板

L298D 电机驱动模块

连接线

红外传感器模块

底盘,轮子,过山车

Energia IDE

电源 (3.3v) 和 5v-12v

msp430

线路跟随器的概念

线跟随器的概念与光有关。我们在黑白表面上使用了光的行为。当光线落在白色表面上时,它几乎会完全反射,如果是黑色表面,光线会被黑色表面吸收。这种解释的光行为用于该线跟随机器人。

msp430

 

msp430

在这个基于 MSP430 的线路跟随机器人中,我们使用了红外发射器和红外接收器,也称为光电二极管。它们用于发送和接收光。红外透射红外光。当红外线落在白色表面上时,它会被反射回来并被光电二极管捕获,从而产生一些电压变化。当红外光落在黑色表面上时,光被黑色表面吸收,没有光线被反射回来,因此光电二极管不会接收任何光或光线。要了解有关红外传感器的更多信息,请点击链接。

在这个基于 MSP430 的线路跟随机器人中,当传感器检测到白色表面时,MSP 得到 1 作为输入,当感应黑线 MSP 得到 0 作为输入时。

电路说明

我们可以将全线跟随机器人分为不同的部分,如传感器部分、控制部分和驱动器部分。

msp430

传感器部分:本节包含红外二极管、电位计、比较器(运算放大器)和 LED。电位计用于在比较器的一个端子上设置基准电压,红外传感器检测线路并在比较器的第二个端子上提供电压变化。然后比较器比较两个电压并在输出端产生数字信号。在本电路中,我们为两个传感器使用了两个比较器。LM358用作比较器。LM358 内置两个低噪声运算放大器。

控制部分:MSP430启动板用于控制随行机器人的整个过程。比较器的输出连接到数字引脚P1_3和 MPS430 启动板的P1_4。MSP430 快速启动板读取这些信号,并将命令发送到驱动电路以驱动线路跟随器。

驱动程序部分:驱动器部分由电机驱动器和两个直流电机组成。电机驱动器用于驱动电机,因为 MSP430 启动板不能为电机提供足够的电压和电流。因此,我们增加了一个电机驱动电路,为电机提供足够的电压和电流。在这里,我们使用L298d驱动器来驱动直流电机。MSP430 快速启动板向此电机驱动程序发送命令,然后驱动电机。

我们开发了使用不同 Micrcontroller 的线路跟随机器人:

使用8051微控制器的线路跟随机器人

使用Arduino的线路跟随机器人

使用树莓派的线跟随机器人

使用PIC微控制器的线路跟随机器人

使用MSP430的随线机器人的工作

线路跟随器的工作非常有趣。线路跟随机器人使用传感器感应黑线,然后将信号发送到 MSP430 启动板。然后 MSP430 启动板根据传感器的输出驱动电机。

在这个项目中,我们使用两个红外传感器模块,即左传感器和右传感器。当左右传感器都感应到白色时,机器人向前移动。

msp430

如果左侧传感器出现在黑线上,则机器人转向左侧。

msp430

如果右传感器感应到黑线,则机器人向右转动,直到两个传感器都位于白色表面。当白色表面出现时,机器人再次开始向前移动。

msp430

如果两个传感器都位于黑线上,则机器人停止。

msp430

电路图

这款MSP430 线路跟随机器人的电路非常简单。比较器的输出直接连接到 MSP430 快速启动板的数字引脚编号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。

msp430

 

msp430

您还可以构建自己的 IR 模块,就像我在 Perf Board 上构建的那样。以下是红外模块的电路:

msp430

编程说明

完整的程序和视频可以在本文末尾找到。

在程序中,首先,我们定义传感器和电机的输入和输出引脚。然后为线路跟随器的方向定义一些宏,然后编写指令来选择传感器输出

注意:传感器可能是低电平有效或高电平有效,因此首先检查传感器的输出是什么,然后通过注释或取消注释 activeLowMode 来选择指令。对于活动高电平,请注释活动低模式宏。

#define l_sensor P1_3

#define r_sensor P1_4

int pins[4]={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[4]={forward,left,right,stop};

#else

int res[4]={stop,right,left,forward};

#endif

之后,在设置功能中,我们为传感器和电机引脚提供方向。然后在循环功能中,我们检查输入并将输出发送到电机驱动器模块以运行电机。

void setup()

{

for(int i=0;i<4;i++)

pinMode(pins[i], 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[i], (res[sense]>>i) & 0x01); }

我们使用 MSP430 启动板读取此行追随者中的四个条件。我们使用了两个传感器,即左传感器和右传感器。

条件:高电平有效输出

 

输入 输出 运动
机器人的
左传感器 正确的传感器 左电机 右电机
LS RS 微型企业 彩信 马币1 马币2  
0 0 0 0 0 0
0 1 1 0 0 0 右转
1 0 0 0 1 0 左转
1 1 1 0 1 0 向前

 

#define l_sensor P1_3

#define r_sensor P1_4


int pins[4]={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[4]={forward,left,right,stop};

#else

int res[4]={stop,right,left,forward};

#endif


void setup() 

{

for(int i=0;i<4;i++)

pinMode(pins[i], 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[i], (res[sense]>>i) & 0x01);

}

 


 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分