景 蕾
(咸阳职业技术学院,陕西 咸阳 712000)
随着微机电系统、新传感器技术、物联网技术的快速发展,智能小车的应用面逐渐拓宽。智能排爆、物流分拣、电力巡线等行业出现了可替代人工作业的智能小车[1]。原始的一对一人车系统逐渐不能满足系统级的工作需求,不利于系统级管控。本文从这一点出发,完成了一款基于GSM/GPS的遥控小车[2-3],在小车平台上,增加了通信定位模块,通过控制遥控器的拨码开关,实现定位信息的发送,具有良好的应用前景。此外,小车平台还可进行功能扩展,根据具体技术要求,搭载其他测试设备,如火焰传感器、小型机械臂、图像识别系统等,实现相关设计需要。本设计具备较好的参考价值。
Arduino是一款硬件资源丰富的开源硬件平台。一般分为硬件(各种型号的Arduino板)和软件(Arduino IDE)两部分。Arduino硬件家族包括Arduino UNO,Arduino Leonardo,Arduino101(Curie),Arduino NANO,Arduino MEGA等,每一款硬件平台在板上资源、性能、可扩展性上存在不同。本文选用Arduino MEGA作为主控开发板。该开发板有54路数字输入/输出引脚(其中15路可以用作PWM输出)、16路模拟输入、4个UART(硬件串口)、1个16 MHz的晶振、1个USB接口、1个电源接头、ICSP接口以及复位按钮。具有存储空间较大(8 KB SRAM, 4KB EEPROM,256 KB FLASH),硬件串口多、IO端口多等特点。综上所述,MEGA板可以满足小车系统设计需求。
Arduino IDE软件基于processing IDE开发。操作界面简单,灵活性强。Arduino语言基于wiring语言开发,是对 avr-gcc库的二次封装,不需要过多研究底层函数实现方法,在掌握各类标准库和顶层函数的使用方法后,即可上手使用。
该智能小车基于Arduino软硬件平台,但是和普通Arduino小车只是让小车动起来不同,在主控芯片中植入了通信和定位程序,在小车遥控运行的同时,可以通过操作者的控制,实现定位信息的发送[4]。小车的整体系统框架划分为:主控部分、小车车体部分、小车动力部分(电池、电机及其控制电路)、通信/定位部分、遥控部分。
小车部分包括车体和动力两部分。小车车体主要材料为塑料,具有一定的使用强度。搭载4只直流减速电机,该电机方向性好,四轮驱动,动力充沛。每只电机工作电流100 mA左右,工作电压3~6 V,最快速度为48 m/min。
智能车配备了ATmega2560 单片机 的 Arduino MEGA开发板作为主控板。主控部分的功能包括:采用2.4 GHz通信方式处理遥控信号,实现智能车的远程控制。自动避障模块使用超声波距离传感器,当智能车前方出现无法跨越的障碍时,自动避障模块会触发主控板的自动避障功能。在基本遥控基础上,加入GSM通信模块,在获取定位信息后,通过遥控器开关的控制,实现经纬度信息的发送。
动力部分包括航模用3S电池,满电压12.5 V左右,使用L298N电机驱动板驱动小车运动。L298N作为主控芯片,有驱动能力强、发热量低、抗干扰能力强等特点,工作电压最高可达48 V,可便于采用各类型号锂电池供电;输出电流瞬间峰值达到3 A,持续工作电流为2 A,额定功率25 W,功耗在允许范围内,足以满足驱动小车电机。内部采用标准的逻辑电平控制信号,具有两个使能端,两个端口独立工作,互不干扰,使得小车控制抗干扰性增强。
L298N电机驱动板模块共包含6个引脚:IN1,IN2,IN3,IN4,ENA,ENB。其中IN1,IN2为一组,IN3,IN4为一组,共两组。小车的4路电机,同一侧的两路电机并联,共两组,分别对应IN1~IN4进行控制。IN1,IN2,IN3,IN4既可以控制电机的转速,也可以控制电机的方向,通过软件的输出实现实际控制。ENA与IN1,IN2一组,实现这一路电机的开关,同理ENB与IN3,IN4一组。本文用MEGA的数字引脚4,5,6,7接L298N模块的IN1,IN3,IN4,IN2。用数字引脚9,10接ENA和ENB。
图1 L298N电机驱动板模块
遥控器采用9通道AT09S,其通信系统采用抗干扰最强的DSSS(直接序列扩频系统),在复杂环境下性能优异。人机交互界面简洁,油门通道可编程,可设置符合操作习惯的使用方式。具有低电压报警、空旷场地遥控距离500米以上等优势。
定位采用AI-Thinker的A7模块,支持GSM通信、GPRS数据业务、语音通话和GPS位置信息。定位信息使用国际标准NMEA-0183协议。
NMEA协议[6]是为了在不同的GPS导航设备中建立统一的RTCM(海事无线电技术委员会)标准,它最初是由美国国家海洋电子协会(NMEA—The NationalMarine Electronics Association)制定的。符合NMEAO183标准的GPS接收机的硬件接口能够兼容计算机的RS-232C协议串口,在实际使用中,如果只是接收GPS的输出,则只需两根信号线 GPS数据输出线和信号地线,可以直接将EIA-422输出通道两条信号线的中一条同计算机的Rs232C输入线相连。NMEA通信协议所规定的通信语句都是以ASCII码为基础的,NMEA-0183协议语句的数据格式如下:“$”为语句起始标志;“,”为域分隔符;“ *”为校验和识别符,其后面的两位数为校验和,代表了“$”和“*”之间所有字符的按位异或值(不包括这两个字符);“/”为终止符,所有的语句必须以来结束,也就是ASCII 字符的“回车”(十六进制的0D)和“换行”(十六进制的0A)。输出何种语句,可以对定位模块进行相应的配置。
系统上电后主要完成GPS,GPRS模块的初始化设置,包括波特率设置、工作状态检测两项任务。本文设计的波特率为9 600 bps。系统初始化成功后,进入小车控制程序,通过遥控器开关状态的改变来实现数据的传输。
void setup() {
DebugSerial.begin(9600);
GprsSerail.begin(9600);
GpsSerial.begin(9600);
Timer1.initialize(1000);
Timer1.attachInterrupt(Timer1_handler);
initGprs(); //初始化模块
clrGprsRxBuffer();
}
switch (i)
{
case 1: memcpy(Save_Data.UTCTime, subString, subStringNext - subString); break; //获取UTC时间
case 2: memcpy(usefullBuffer, subString, subStringNext - subString); break; //获取UTC时间
case 3: memcpy(Save_Data.latitude, subString, subStringNext - subString); break; //获取纬度信息
case 4: memcpy(Save_Data.N_S, subString, subStringNext - subString); break; //获取N/S
case 5: memcpy(Save_Data.longitude, subString, subStringNext - subString); break; //获取纬度信息
case 6: memcpy(Save_Data.E_W, subString, subStringNext - subString); break; //获取E/W
default: break;
}
控制信号的获取使用MEGA的A0,A1,A2端口,通过使用PulseIn()函数[5]获取高电平时间,可准确地得到遥控器的控制信号大小,实现精确控制。
CH1 = pulseIn(A0, HIGH);
CH2 = pulseIn(A1, HIGH);
GSM程序主要包括模块的初始化、各部分状态检测,如果通信条件检测准备好,可以进行通信。
void initGprs()
{
if (sendCommand("AT+RST ", "OK ", 3000, 10) == Success);
else errorLog(1);
if (sendCommand("AT ", "OK ", 3000, 10) == Success);
else errorLog(2);
delay(10);
if (sendCommand("AT+GPS=1 ","OK ", 1000, 10) == Success);
else errorLog(3);
delay(10);
…
}
在进行了软、硬件设计、模拟运行后,对小车进行了实际测试。首先对小车上电预热,各种指示灯正常。预热成功后,手机端收到了小车发来的开始信号,表明可以对小车进行操控。开始信号接收之前小车不允许操控。随后拨动预设好的位置信息发送开关,手机成功收到了该信息。测试结果满足设计要求。
本文设计的视频监控智能车经软硬件调试后,能够实现自动避障、无线遥控操作、定位信息获取等实用功能。由于GSM在移动网络覆盖面下,均可实现通信。目前该智能车有待进一步探讨的问题有:(1)目前使用的遥控器遥控距离还可以加大,配置性能更加优异的遥控器可实现更远的作业距离;(2)智能车的车体本身越障能力有限,缺乏复杂地形的实际应用,系统稳定性和实用性有待进一步提高。在现有的基础上,智能车有望在进一步强化结构、提高稳定性以及移植到飞行器、水面移动作业平台等,实现更加广泛的应用。