智能小车是一种轮式机器人,能够实现自主行驶。与遥控小车不同,智能小车可以通过计算机编程来控制行驶方向、启停和速度,无需人工干预。智能小车具有以下特点:1. 拥有至少一个微控制器,通过微控制器来实现对行驶方向、启停和速度的控制。2. 拥有多个各种功能的传感器,以获取外界环境的情况,以供控制器做出准确的决策。本文将介绍一种基于Arduino与LabVIEW的无线遥控智能小车,可以实现自主(巡线和避障)与遥控两种功能,并且可以在两种功能之间进行切换。智能小车采用Arduino作为控制核心,上位机软件采用LabVIEW,两者通过APC220无线数传模块实现无线通信。智能小车的车体采用两个驱动轮、一个万向轮的三轮式小车模型。驱动电机采用直流减速电机,电机驱动模块采用VNH2SP30模块。循迹传感器采用OPENJUMPER红外巡线传感器OJ-CG307,避障传感器采用OPENJUMPER红外避障传感器OJ-CG303。智能小车的巡线场地为白底黑线,线宽约10mm,场地大小约为200cm×300cm。当小车处于遥控状态时,操作者通过操作LabVIEW上位机软件,利用APC220串口无线模块向小车上的Arduino控制器发送遥控指令,从而使小车做出指定的行为动作。而当小车处于自主状态时,小车上的Arduino控制器通过四个红外巡线传感器和一个红外避障传感器获取小车相对于黑线的位置和前面是否有障碍物的信号,并根据程序中设置的逻辑来控制直流减速电机,以实现巡线和避障的功能。红外巡线传感器模块利用红外对管检测模块本身发出的红外线的反射光来为循迹机器人提供白线或者黑线的跟踪。红外避障传感器发射红外线并根据反射回来的红外光判断前方是否存在障碍物。直流电机需要很大的驱动电流,而像Arduino之类的控制器输出的逻辑电平无法直接驱动直流电机,特别是大功率的减速电机,所以需要通过驱动器件给直流电机提供工作电流。VNH2SP30模块具有驱动电流大、转换效率高等优点,但单个VNH2SP30芯片只能驱动一路直流电机。为了使遥控智能小车具有良好的动力系统和一定的载重能力,选用直流减速电机作为动力来源,并选用颗粒轮胎以提高抓地能力。将两个直流减速电机的两端分别接至VNH2SP30电机驱动模块上的相应端口,并通过Arduino控制器提供转向和调速控制信号。Arduino控制器与驱动及电机部分的硬件连接如下:- 将VNH2SP30电机驱动模块的+5V(IN)、GND分别接至ArduinoUno控制板上的+5V、GND。- 将VNH2SP30电机驱动模块的1INA、1INB、1PWM分别接至ArduinoUno控制板上的数字端口D7、D6、D5。- 将VNH2SP30电机驱动模块的2INA、2INB、2PWM分别接至ArduinoUno控制板上的数字端口D4、D2、D3。将一个APC220模块与ArduinoUno控制板相连接,连接方式如下:- APC220TXD→ArduinoUno控制板RXD- APC220RXD→ArduinoUno控制板TXD- APC220VCC→ArduinoUno控制板5V- APC220GND→ArduinoUno控制板GND将四个红外巡线传感器依次连接至ArduinoUno控制板的数字端口D8、D9、D10、D11,并在将红外巡线传感器安装至智能小车底盘时,对应于左2、左1、右1和右2。将红外避障传感器连接至ArduinoUno控制板的数字端口D12,并将其安装在小车车头的前端。遥控部分的调速将速度分为5档,分别为低速、中低速、中速、中高速和高速,通过VNH2SP30电机驱动模块的PWM输入信号实现在五档之间切换与调速。LabVIEW上位机部分需要完成以下功能:1. 当从遥控状态切换至自主状态时,向下位机Arduino控制器发送自主状态命令,Arduino控制器通过读取红外巡线传感器和红外避障传感器,以实现巡线和避障的功能。2. 当从自主状态切换至遥控状态时,向下位机Arduino控制器发送遥控状态命令,Arduino控制器通过读取LabVIEW软件发来的操作命令,并实现指定的动作和行为,包括前进、后退、左转、右转、停止和调速。LabVIEW前面板分为遥控模式和模式切换两个部分,遥控模式部分用于控制小车的运行状态,包括前进、后退、左转、右转、停止和调速;模式选择部分用于切换遥控模式和自主模式。无线遥控智能小车的LabVIEW上位机前面板如下图所示:LabVIEW上位机主程序的结构为顺序结构+While循环+事件结构。首先,通过设置的串口号来初始化串口通信;然后,程序进入While循环和事件结构,不断地检测是否有事件得到响应并执行;事件结构有“模式选项”、“前进”、“后退”、“左转”、“右转”、“停止”和“”调速”。最后,关闭串口通信。为了更好地实现通信,制定如下的通信协议:帧头+命令码+操作码。0x55为帧头,0xAA为遥控命令,0xFF为自主命令,遥控命令的操作码:0x00为前进,0x10为后退,0x20为左转,0x30为右转,0x40为停止,0x50为速度档1,0x60为速度档2,0x70为速度档3,0x80为速度档4,0x90为速度档5。在“模式选项”事件中,通过读取当前选择的模式,向Arduino控制器分别发送0x55AA和Ox55FF,分别表示切换至遥控模式和自主模式。在“前进”事件中,通过串口向Arduino控制器发送0x55AA00,Arduino控制器将两个直流减速电机均设置为前进方向。在“后退”事件中,通过串口向Arduino控制器发送0x55AA10,Arduino控制器将两个直流减速电机均设置为后退方向。在“左转”事件中,通过串口向Arduino控制器发送0x55AA20,Arduino控制器将右侧电机设置为前进方向、左侧电机设置为后退方向,从而实现左转。在“右转”事件中,通过串口向Arduino控制器发送0x55AA30,Arduino控制器将右侧电机设置为后退方向、左侧电机设置为前进方向,从而实现右转。在“停止”事件中,通过串口向Arduino控制器发送0x55AA40,Arduino控制器将左、右两个电机均设置为停止状态,从而实现小车的停止。在“速度档位”值改变事件中,通过读取当前选择的速度档位,向Arduino控制器分别发送0x55AA50、0x55AA60、0x55AA70、0x55AA80、0x55AA90,分别表示低速、中低速、中速、中高速和高速。项目资源下载请参见:LabVIEWArduino无线蓝牙遥控智能车【实战项目】-单片机文档类资源通过本文的介绍,我们可以了解到智能小车的原理以及如何自制一个简单的遥控系统。智能小车通过微控制器和传感器实现自主行驶,而遥控系统则通过LabVIEW上位机软件和Arduino控制器实现对小车的遥控操作。通过选择合适的电机驱动模块和传感器,以及编写相应的程序代码,我们完全可以自制一个功能完善的遥控智能小车。
智能小车是以轮子作为移动机构,并且能够实现自主行驶的机器人,又被称为轮式机器人。由于具有智能化的特点,可以应用于不适合人类工作的环境中,例如灾难救援、户外探险等。智能小车有别于遥控小车,因为后者需要操作人员来控制其转向、启停和前进后退,以及控制其速度,常见的模型小车,都属于这类遥控车。智能小车,则可以通过计算机编程来实现其对行驶方向、启停以及速度的控制,无须人工干预,也可以通过修改智能小车的程序来改变它的行驶方式。
智能小车的典型特点有:
1、拥有至少一个微控制器,通过微控制器来实现对行驶方向、启停和速度的控制。
2、拥有多个各种功能的传感器,以获取外界环境的情况,以供控制器做出准确的决策。
本节将要介绍一种基于Arduino与LabVIEW的无线遥控智能小车,可以实现自主(巡线和避障)与遥控两种功能,并且可以在两种功能之间进行切换。智能小车采用Arduino作为控制核心,上位机软件采用LabVIEW,两者通过APC220无线数传模块实现无线通信。无线遥控智能小车总体框图如下图所示:
项目资源下载请参见:LabVIEWArduino无线蓝牙遥控智能车【实战项目】-单片机文档类资源
智能小车的车体采用两个驱动轮、一个万向轮的三轮式小车模型,驱动电机采用直流减速电机,电机驱动模块采用VNH2SP30模块,循迹传感器采用OPENJUMPER红外巡线传感器OJ-CG307,避障传感器采用OPENJUMPER红外避障传感器OJ-CG303。
智能小车的巡线场地为白底黑线,线宽约10mm,场地大小约为200cm×300cm。
本节介绍的无线遥控智能小车,可以实现自主与遥控两种功能,并且可以在两种功能之间进行切换。当小车处于遥控状态时,操作者通过操作LabVIEW上位机软件,利用APC220串口无线模块向小车上的Arduino控制器发送遥控指令,从而使小车做出指定的行为动作。而当小车处于自主状态时候,小车上的Arduino控制器通过四个红外巡线传感器和一个红外避障传感器获取小车相对于黑线的位置和前面是否有障碍物的信号,并根据程序中设置的逻辑来控制直流减速电机,以实现巡线和避障的功能。
红外巡线传感器模块是利用红外对管检测模块本身发出的红外线的反射光(深色反射弱,浅色反射强),来为循迹机器人提供白线或者黑线的跟踪,既可以检测白底中的黑线,也可以检测黑底中的白线,若检测到白线则输出高电平,若检测到黑线则输出低电平。
红外避障传感器发射红外线并根据反射回来的红外光判断前方是否存在障碍物,无障碍物时输出高电平,有障碍时输出低电平,在信号输出同时有指示灯指示状态,无障碍物时LED为绿,有障碍物时为红。同时内置38kHz的信号发生器,抗干扰能力强。通过调节模块上的2KΩ电位器,可以调节传感器的探测距离。
红外巡线传感器模块如下图所示:
红外避障传感器模块如下图所示:
一般情况下,直流电机需要很大的驱动电流,而像Arduino之类的控制器输出的逻辑电平无法直接驱动直流电机,特别是大功率的减速电机,所以就需要通过驱动器件给直流电机提供工作电流。
Arduino爱好者常用的直流电机驱动模块主要有L298模块和VNH2SP30模块。
L298电机驱动模块价格较为便宜,而且单个L298芯片可以同时驱动两路直流电机,所以在Arduino爱好者制作机器人小车时使用较多,但是其转化效率较低,发热量较大,不适合驱动大电流直流电机,当驱动大电流电机时容易发生芯片”假死”等故障。
VNH2SP30模块具有驱动电流大、转换效率高等优点但是单个VNH2SP30芯片只能驱动一路直流电机,如果驱动两路直流电机则需要两个VNH2SP30芯片。
为了使得遥控智能小车具有良好的动力系统,具有一定的载重能力,此处选用直流减速电机作为整个遥控智能小车的动力来源,并选用颗粒轮胎,以提高抓地能力。
将两个直流减速电机的两端分别接至VNH2SP30电机驱动模块上的OUT1A、OUT1B和OUT2A、OUT2B,无正负极和电机转向之分。若电机转向相反,则在调试过程中将电机的连接线对调连接。将VNH2SP30电机驱动模块的+5V(IN)、GND分别接至ArduinoUno控制板上的+5V、GND,为电机驱动模块提供工作电压。
将VNH2SP30电机驱动模块的1INA、1INB、1PWM分别接至ArduinoUno控制板上的数字端口D7、D6、D5,为电机1提供转向和调速控制信号;将VNH2SP30电机驱动模块的2INA、2INB、2PWM分别接至ArduinoUno控制板上的数字端口D4、D2、D3,为电机2提供转向和调速控制信号。需要注意的是,1PWM和2PWM需要接在具有模拟输出(PWM)功能的数字端口。
Arduino控制器与驱动及电机部分的硬件连接,如下图所示:
将一个APC220模块与ArduinoUno控制板相连接,连接方式如下:
APC220TXD→ArduinoUno控制板RXD,APC220RXD→ArduinoUno控制板TXD,APC220VCC→ArduinoUno控制板5V,APC220GND→ArduinoUno控制板GND。
将另一块APC220模块通过FT232RL转接板相连接,连接方式如下:
APC220TXD→FT232RL转接板RXD,APC220RXD→FT232RL转接板TXD,APC220VCC→FT232RL转接板5V,APC220GND→FT232RL转接板GND。
将四个红外巡线传感器依次连接至ArduinoUno控制板的数字端口D8、D9、D10、D11,并在将红外巡线传感器安装至智能小车底盘时,对应于左2、左1、右1和右2。将红外避障传感器连接至ArduinoUno控制板的数字端口D12,并将其安装在小车车头的前端。
4个红外巡线传感器在智能小车底盘上的安装示意图如下图所示:
初始状态为黑线位于左1和右1传感器之间,表明小车处于黑线中间部分;当左1传感器检测到黑线时,表明小车相对于黑线略微偏向右侧,需要小幅度左转以修正偏差;当左2传感器检测到黑线时,表明小车相对于黑线偏向右侧较多,需要大幅度左转以修正偏差;当右1传感器检测到黑线时,表明小车相对于黑线略微偏向左侧,需要小幅度右转以修正偏差;当右2传感器检测到黑线时,表明小车相对于黑线偏向左侧较多,需要大幅度右转以修正偏差。
遥控部分的调速将速度分为5档,分别为低速、中低速、中速、中高速和高速,通过VNH2SP30电机驱动模块的PWM输入信号实现在五档之间切换与调速。
ArduinoUno控制器程序代码如下所示:
LabVIEW上位机部分需要完成以下功能:
1、当从遥控状态切换至自主状态时,向下位机Arduino控制器发送自主状态命令,Arduino控制器通过读取红外巡线传感器和红外避障传感器,以实现巡线和避障的功能。
2、当从自主状态切换至遥控状态时,向下位机Arduino控制器发送遥控状态命令,Arduino控制器通过读取LabVIEW软件发来的操作命令,并实现指定的动作和行为,包括前进、后退、左转、右转、停止和调速。
LabVIEW前面板分为遥控模式和模式切换两个部分,遥控模式部分用于控制小车的运行状态,包括前进、后退、左转、右转、停止和调速;模式选择部分用于切换遥控模式和自主模式。
无线遥控智能小车的LabVIEW上位机前面板,如下图所示:
LabVIEW上位机主程序的结构为顺序结构+While循环+事件结构。首先,通过设置的串口号来初始化串口通信;然后,程序进入While循环和事件结构,不断地检测是否有事件得到响应并执行;事件结构有“模式选项”、“前进”、“后退”、“左转”、“右转”、“停止”和“”调速”。最后,关闭串口通信。在程序框图中,我们需要对串口进行配置,并将根据不同的按键按下通过串口发出不同的命令,下位机ArduinoUno收到串口收据,解析出其中的命令代码后执行相应的命令。
为了更好地实现通信,制定如下的通信协议:帧头+命令码+操作码。0x55为帧头,0xAA为遥控命令,0xFF为自主命令,遥控命令的操作码:0x00为前进,0x10为后退,0x20为左转,0x30为右转,0x40为停止,0x50为速度档1,0x60为速度档2,0x70为速度档3,0x80为速度档4,0x90为速度档5。
在“模式选项”事件中,通过读取当前选择的模式,向Arduino控制器分别发送0x55AA和Ox55FF,分别表示切换至遥控模式和自主模式。“模式选项”值改变事件程序框图如下图所示:
在“前进”事件中,通过串口向Arduino控制器发送0x55AA00,Arduino控制器将两个直流减速电机均设置为前进方向。“前进”值改变事件程序框图如下图所示:
在“后退”事件中,通过串口向Arduino控制器发送0x55AA10,Arduino控制器将两个直流减速电机均设置为后退方向。“后退”值改变事件程序框图如下图所示:
在“左转”事件中,通过串口向Arduino控制器发送0x55AA20,Arduino控制器将右侧电机设置为前进方向、左侧电机设置为后退方向,从而实现左转。“左转”值改变事件程序框图如下图所示:
在“右转”事件中,通过串口向Arduino控制器发送0x55AA30,Arduino控制器将右侧电机设置为后退方向、左侧电机设置为前进方向,从而实现右转。“右转”值改变事件程序框图如下图所示:
均在“停止”事件中,通过串口向Arduino控制器发送0x55AA40,Arduino控制器将左、右两个电机均设置为停止状态,从而实现小车的停止。“停止”值改变事件程序框图如下图所示:
在“速度档位”值改变事件中,通过读取当前选择的速度档位,向Arduino控制器分别发送0x55AA50、0x55AA60、0x55AA70、0x55AA80、0x55AA90,分别表示低速、中低速、中速、中高速和高速。“速度档位”值改变事件的程序框图如下图所示:
项目资源下载请参见:LabVIEWArduino无线蓝牙遥控智能车【实战项目】-单片机文档类资源
以上内容由58汽车提供。如有任何买车、用车、养车、玩车相关问题,欢迎在下方表单填写您的信息,我们将第一时间与您联系,为您提供快捷、实用、全面的解决方案。
原创文章,作者:58汽车,如若转载,请注明出处:https://car.58.com/7064313/