(1) 上位机软件
使用VB开发。通过MSComm控件来发送和接收串口数据,通过对子机发来数据的处理或由人控制作出决策,然后再通过串口发送出去。
例程:手动控制小车运动的简易程序:
Dim x As Integer
Dim s As String
Private Sub Form_Keydown(KeyCode As Integer, Shift As Integer)
If s <> Chr(KeyCode) Then
MSComm1.Output = Chr(KeyCode)
s = Chr(KeyCode)
Label1.Caption = Label1.Caption + Chr(KeyCode)
End If
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
MSComm1.Output = "0"
s = "0"
Label1.Caption = Label1.Caption + "0"
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "4800,N,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
Label1.Caption = MSComm1.Input
Case comEvSend
End Select
End Sub
(2) 无线通讯PC端
本系统使用的无线通讯模块是上海桑博电子科技有限公司生产的STR-18型微功率无线通讯模块。它的调制方式是FSK半双工,波特率为1.2Kbit – 9.6Kbit。提供8个可选信道,频率为433-919MHz,发射功率10mW,灵敏度-105dBm,工作电压3.6 –5.5V,可支持TTL/RS232/RS485三种电平标准,有效距离400M。
此模块虽然支持3种电平标准,但是实验表明当1方为RS232电平,一方为TTL电平时是没有办法正常传输数据的。所以在信号从上位机到达无线模块之前,先要进行电平转换。这里使用的是MAXIM公司生产的MAX232电平转换芯片,把电脑的RS232电平转换为TTL电平后再交给无线模块发射。
此模块并不自带电源稳压的功能,所以又使用了一片7805给MAX232芯片与无线通讯模块供电。电平转换与电源稳压被做在了一块小的电路板上,固定在了无线通讯模块后面。
由于串口盗电并不是非常稳定,功率也不大,所以这里使用了9V堆叠式干电池给前者单独供电。
(3) 无线通讯子机端
无线通讯子机端所采用的无线通讯模块和上位机端是一样的。由于先前已经作过电平转换,所以单片机可以直接通过无线通讯模块收发数据。子机端的模块配置必须与上位机通讯模块相同,既波特率相同,信道相同,数据位相同才能正常通讯。模块与单片机共用一个5V稳压电源。
(4) 子机控制端
目前本系统所采用的子机控制电路为本人设计的WUDI-T型机器人控制主板。它使用ATMEL公司生产的ATMEGA 16芯片作为主控芯片,ST公司生产的L293桥芯片作为马达控制芯片。它有电源稳压,LCD显示,PWM控制2路马达,一个三极管驱动,1个LED,一个按钮,一个蜂鸣器,8位拓展口等功能。串口通讯的引脚在WUDI-T上被预留了出来。WUDI-T型机器人控制主板是一个简易的控制主板,它可以完成所有的基本任务。
子机控制端的程序使用BASCOMAVR来编写。
(5) 子机执行端
子机执行端为一辆电动小车。它的动力来源为2个直流马达,电源为4节干电池或充电电池。前方有一个万向轮,底盘为单面覆铜板所制。
(6) 子机传感器
目前并没有添加传感器的需要。如果添加,可以采集地面颜色,声音,环境光等环境变量。甚至可以安装无线摄像头在子机上。传感器暂时不在研究范围内。
发展和改进的方向:
本系统应为多机器人同时由一台上位机控制,同时由上位机来协调他们的运动和任务。通讯方面即上位机为主站,单片机为从机,通过主从机制来完成通讯。
制作一个款简易的电脑无线遥控履带小车。
小车配置如下:
1。Arduino控制器 1个
2。DF-MDV1.2电机驱动 1个
3。Arduino扩展板 1个
4。RP5履带 1个
5。APC220无线数传模块 1个
6。12V2300mAH电池包 1个
APC220一对及USB串口转换器一个
Arduino控制器及扩展板各一个
DF-MDV1.2电机驱动一个、一小块压克力及螺钉螺母镙柱若干
履带小车一台及7.2或12V电池包一个
将DF-MDV1.2电机驱动安装在一个裁剪好的压克力背面,
Arduino控制器安装在压克力正面,
一只APC220插在Arduino扩展板上,
然后再将扩展板插到Arduino控制器上,
履带小车的电机线接到电机驱动板上,电机驱动板上的电机接线柱边画有一个圈,分别接2个电机相同颜色的引线,
插上电机的6根控制线和2根给Arduino供电的电源线,
电机控制线和电源线接到Arduino上。
另一只APC220插到电脑USB上,电机驱动接法如下:
电机驱动 Arduino
IN1 PIN2
EN1 PIN3
IN2 PIN4
IN3 PIN5
EN2 PIN6
IN4 PIN7
电脑无线遥控履带小车代码如下:
int IN1 = 2;
int EN1 = 3;
int IN2 = 4;
int IN3 = 5;
int EN2 = 6;
int IN4 = 7;
void stop(void)
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
void advance_l(void)
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
}
void advance_r(void)
{
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
void back_off_l(void)
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
}
void back_off_r(void)
{
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}
void setup(void)
{
int i;
for(i=2;i<=7;i++)
pinMode(i, OUTPUT);
digitalWrite(EN1,HIGH);
digitalWrite(EN2,HIGH);
Serial.begin(19200);
}
void loop(void)
{
char val = Serial.read();
if(val!=-1)
{
switch(val)
{
case 'w'://前进
advance_l();
advance_r();
break;
case 's'://后退
back_off_l();
back_off_r();
break;
case 'a'://左转
advance_r();
back_off_l();
break;
case 'd'://右转
advance_l();
back_off_r();
break;
}
delay(30);
}
else stop();
}