python arduino小车,Arduino小车的制作

f752434439fc73679aa08efd28bb4cc6.png

来一张没有盖上盖子的,盒子内部是一个四路直流电机驱动模块。

4cff5855e0af8a556270fc4df04f17df.png具体的直流电机驱动模块的图片如下

cc187433dd7f6ac932fadfab305adcc1.png

具体的接线部位的照片

053ea4e454ac56072edea0eb1c00c6b4.png注意接线点,途中的D1,D2 为一个电机的控制信号线,C1,C2 为另一个电机的控制线,传输的信号可以为 00,01,10,11四种信号,控制电机的正反转动。

图中的黄线和蓝线,是连接电机的线。

控制板为 Arduino MEGA2560  的主板外加传感器扩展版。

51d33b1b300af5c7df2944046f08b904.png

扩展版的图片为

d1755a52b699dd1142eec0dbe5359694.png

组合在一块以后,电机控制板与Arduino 2560 的控制板的具体接线为

68adf197a6dfe744956d95cb35c879ee.png

注意的情况是,这个扩展版的正负极印反了,因此凡是标记着 “+”的为负极,凡是标记着“-”的为正极。

具体的情况根据实际情况来,如D1,D2 与 7,8 号线连接,通过控制这两个端口的信号的高低来控制控制电机控制板。

注意控制板上面的标记着VIN和GND的那个插点,那个是外界电源的插点。

具体的插点,看图

1279d564f32f654cabbdc5217769716d.png

81b64d10693ae92ff731c5a80f4bb7a6.png注意上图圈中的部分,其中黄线圈中的部分是电机驱动板的连线,用来控制电机驱动板。

红线部分圈中的为超声传感器的连接线。

黑色线圈中的为电源线的连接线。

其中 黑色线标记的连线与电机控制板的电源输入端,共享一个电源,也就是电机驱动板和Arduino 2560板子是并联到电池的。

接下来,我们看看 Arduino 2560 与超声传感器的链接方式

ec1c17e7eb2ef051bc543b306dfd0af3.png

注意超声传感器有四根接线,应当如何接线呢?

具体我们是这样子的,

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,所以,小车走走停停,呵呵,后期继续改动了,暂时就写到这里吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值