来一张没有盖上盖子的,盒子内部是一个四路直流电机驱动模块。
具体的直流电机驱动模块的图片如下
具体的接线部位的照片
注意接线点,途中的D1,D2 为一个电机的控制信号线,C1,C2 为另一个电机的控制线,传输的信号可以为 00,01,10,11四种信号,控制电机的正反转动。
图中的黄线和蓝线,是连接电机的线。
控制板为 Arduino MEGA2560 的主板外加传感器扩展版。
扩展版的图片为
组合在一块以后,电机控制板与Arduino 2560 的控制板的具体接线为
注意的情况是,这个扩展版的正负极印反了,因此凡是标记着 “+”的为负极,凡是标记着“-”的为正极。
具体的情况根据实际情况来,如D1,D2 与 7,8 号线连接,通过控制这两个端口的信号的高低来控制控制电机控制板。
注意控制板上面的标记着VIN和GND的那个插点,那个是外界电源的插点。
具体的插点,看图
注意上图圈中的部分,其中黄线圈中的部分是电机驱动板的连线,用来控制电机驱动板。
红线部分圈中的为超声传感器的连接线。
黑色线圈中的为电源线的连接线。
其中 黑色线标记的连线与电机控制板的电源输入端,共享一个电源,也就是电机驱动板和Arduino 2560板子是并联到电池的。
接下来,我们看看 Arduino 2560 与超声传感器的链接方式
注意超声传感器有四根接线,应当如何接线呢?
具体我们是这样子的,
1.Arduino 2560 扩展版的 任意一个 “-”与超声传感器的“VCC”,注意,由于扩展版印反了,因此实际上的“-”其实是“+”
2.Arduino 2560 扩展版的 任意一个 “+”与超声传感器的“GND”,注意,由于扩展版印反了,因此实际上的“-”其实是“+”
3.超声传感器的“Trige”与 Arduino 2560 扩展版的 任意一个 数字接口连线,本例中用到了 48 号口子,原因仅仅是因为布线比较方便,其实可以任意口子。该接口应当在代码中初始化为输出端口,用来给传感器发送工作信号。
4..超声传感器的“Echo”与 Arduino 2560 扩展版的 任意一个 数字接口连线,本例中用到了 49 号口子,原因仅仅是因为布线比较方便,其实可以任意口子。该接口应当在代码中初始化为输入端口,用来读取传感器发回的数据。
至此,基本的布线已经完成。
硬件部分完成,接下来就是软件部分的逻辑了,直接先上代码
Arduino
//this file is a example for motor control board
//Control LeftFrontWheel
int MosfetLeftFrontWheel0 = 8; //Left Front Wheel
int MosfetLeftFrontWheel1 = 9; //Left Front Wheel
int MosfetRightFrontWheel0 = 2; //right front wheel
int MosfetRightFrontWheel1 = 3; //right front wheel
int MosfetLeftTailWheel0 = 4;
int MosfetLeftTailWheel1 = 5;
int MosfetRightTailWheel0 = 6;
int MosfetRightTailWheel1 = 7;
//超声传感器部分
const int TrigPin = 49;
const int EchoPin = 48;
float cm;
#define MAX_CAR_SPAN_CM 40 //CM
void setup() {
pinMode(MosfetLeftFrontWheel0, OUTPUT);
pinMode(MosfetRightFrontWheel0, OUTPUT);
pinMode(MosfetLeftTailWheel0, OUTPUT);
pinMode(MosfetRightTailWheel0, OUTPUT);
pinMode(MosfetLeftFrontWheel1, OUTPUT);
pinMode(MosfetRightFrontWheel1, OUTPUT);
pinMode(MosfetLeftTailWheel1, OUTPUT);
pinMode(MosfetRightTailWheel1, OUTPUT);
//超声传感器部分
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数
Serial.print(cm);
Serial.print("cm");
Serial.println();
while(cm>MAX_CAR_SPAN_CM)
{
//init MOSFE Pin
digitalWrite(MosfetLeftFrontWheel0, HIGH);
digitalWrite(MosfetRightFrontWheel0, HIGH);
digitalWrite(MosfetLeftTailWheel0, HIGH);
digitalWrite(MosfetRightTailWheel0, HIGH);
digitalWrite(MosfetLeftFrontWheel1, LOW);
digitalWrite(MosfetRightFrontWheel1, LOW);
digitalWrite(MosfetLeftTailWheel1, LOW);
digitalWrite(MosfetRightTailWheel1, LOW);
delay(200);
//停车
digitalWrite(MosfetLeftFrontWheel0, LOW);
digitalWrite(MosfetRightFrontWheel0, LOW);
digitalWrite(MosfetLeftTailWheel0, LOW);
digitalWrite(MosfetRightTailWheel0, LOW);
digitalWrite(MosfetLeftFrontWheel1, LOW);
digitalWrite(MosfetRightFrontWheel1, LOW);
digitalWrite(MosfetLeftTailWheel1, LOW);
digitalWrite(MosfetRightTailWheel1, LOW);
//delay(200);
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数
Serial.print(cm);
Serial.print("cm");
Serial.println();
}
//前方有障碍物,转弯
if(cm<=MAX_CAR_SPAN_CM)
{
digitalWrite(MosfetLeftFrontWheel0, LOW);
//digitalWrite(MosfetRightFrontWheel0, LOW);
// digitalWrite(MosfetLeftTailWheel0, LOW);
digitalWrite(MosfetRightTailWheel0, LOW);
digitalWrite(MosfetLeftFrontWheel1, HIGH);
// digitalWrite(MosfetRightFrontWheel1, HIGH);
// digitalWrite(MosfetLeftTailWheel1, HIGH);
digitalWrite(MosfetRightTailWheel1, HIGH);
delay(200);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//this file is a example for motor control board
//Control LeftFrontWheel
intMosfetLeftFrontWheel0=8;//Left Front Wheel
intMosfetLeftFrontWheel1=9;//Left Front Wheel
intMosfetRightFrontWheel0=2;//right front wheel
intMosfetRightFrontWheel1=3;//right front wheel
intMosfetLeftTailWheel0=4;
intMosfetLeftTailWheel1=5;
intMosfetRightTailWheel0=6;
intMosfetRightTailWheel1=7;
//超声传感器部分
constintTrigPin=49;
constintEchoPin=48;
floatcm;
#define MAX_CAR_SPAN_CM 40 //CM
voidsetup(){
pinMode(MosfetLeftFrontWheel0,OUTPUT);
pinMode(MosfetRightFrontWheel0,OUTPUT);
pinMode(MosfetLeftTailWheel0,OUTPUT);
pinMode(MosfetRightTailWheel0,OUTPUT);
pinMode(MosfetLeftFrontWheel1,OUTPUT);
pinMode(MosfetRightFrontWheel1,OUTPUT);
pinMode(MosfetLeftTailWheel1,OUTPUT);
pinMode(MosfetRightTailWheel1,OUTPUT);
//超声传感器部分
Serial.begin(9600);
pinMode(TrigPin,OUTPUT);
pinMode(EchoPin,INPUT);
}
voidloop()
{
digitalWrite(TrigPin,LOW);//低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin,LOW);
cm=pulseIn(EchoPin,HIGH)/58.0;//将回波时间换算成cm
cm=(int(cm*100.0))/100.0;//保留两位小数
Serial.print(cm);
Serial.print("cm");
Serial.println();
while(cm>MAX_CAR_SPAN_CM)
{
//init MOSFE Pin
digitalWrite(MosfetLeftFrontWheel0,HIGH);
digitalWrite(MosfetRightFrontWheel0,HIGH);
digitalWrite(MosfetLeftTailWheel0,HIGH);
digitalWrite(MosfetRightTailWheel0,HIGH);
digitalWrite(MosfetLeftFrontWheel1,LOW);
digitalWrite(MosfetRightFrontWheel1,LOW);
digitalWrite(MosfetLeftTailWheel1,LOW);
digitalWrite(MosfetRightTailWheel1,LOW);
delay(200);
//停车
digitalWrite(MosfetLeftFrontWheel0,LOW);
digitalWrite(MosfetRightFrontWheel0,LOW);
digitalWrite(MosfetLeftTailWheel0,LOW);
digitalWrite(MosfetRightTailWheel0,LOW);
digitalWrite(MosfetLeftFrontWheel1,LOW);
digitalWrite(MosfetRightFrontWheel1,LOW);
digitalWrite(MosfetLeftTailWheel1,LOW);
digitalWrite(MosfetRightTailWheel1,LOW);
//delay(200);
digitalWrite(TrigPin,LOW);//低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin,LOW);
cm=pulseIn(EchoPin,HIGH)/58.0;//将回波时间换算成cm
cm=(int(cm*100.0))/100.0;//保留两位小数
Serial.print(cm);
Serial.print("cm");
Serial.println();
}
//前方有障碍物,转弯
if(cm<=MAX_CAR_SPAN_CM)
{
digitalWrite(MosfetLeftFrontWheel0,LOW);
//digitalWrite(MosfetRightFrontWheel0, LOW);
// digitalWrite(MosfetLeftTailWheel0, LOW);
digitalWrite(MosfetRightTailWheel0,LOW);
digitalWrite(MosfetLeftFrontWheel1,HIGH);
// digitalWrite(MosfetRightFrontWheel1, HIGH);
// digitalWrite(MosfetLeftTailWheel1, HIGH);
digitalWrite(MosfetRightTailWheel1,HIGH);
delay(200);
}
}
代码还是比较简单的,具体的控制端口,还是要根据当时布线的方便性来处理,这个都是可以变动的。
以上仅供暂时的参考,电机控制部分的代码没有使用PWM,所以,小车走走停停,呵呵,后期继续改动了,暂时就写到这里吧。