最近在琢磨Arduino,淘宝了很多,决定做个小车来玩玩,很简单,结果却折腾了许久。算是刚刚上道。废话少说,先上一张初步成品图片。
来一张没有盖上盖子的,盒子内部是一个四路直流电机驱动模块。
具体的接线部位的照片
注意接线点,途中的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 号口子,原因仅仅是因为布线比较方便,其实可以任意口子。该接口应当在代码中初始化为输入端口,用来读取传感器发回的数据。
至此,基本的布线已经完成。
硬件部分完成,接下来就是软件部分的逻辑了,直接先上代码
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 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); } } |
代码还是比较简单的,具体的控制端口,还是要根据当时布线的方便性来处理,这个都是可以变动的。
以上仅供暂时的参考,电机控制部分的代码没有使用PWM,所以,小车走走停停,呵呵,后期继续改动了,暂时就写到这里吧。