Arduino小车的制作

最近在琢磨Arduino,淘宝了很多,决定做个小车来玩玩,很简单,结果却折腾了许久。算是刚刚上道。废话少说,先上一张初步成品图片。

image

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

image具体的直流电机驱动模块的图片如下

image

具体的接线部位的照片

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

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

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

image

扩展版的图片为

image

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

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

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

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

具体的插点,看图

image

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

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

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

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

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

image

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

具体我们是这样子的,

1.Arduino 2560  扩展版的 任意一个 “-”与超声传感器的“VCC”,注意,由于扩展版印反了,因此实际上的“-”其实是“+”

2.Arduino 2560  扩展版的 任意一个 “+”与超声传感器的“GND”,注意,由于扩展版印反了,因此实际上的“-”其实是“+”

3.超声传感器的“Trige”与 Arduino 2560  扩展版的 任意一个  数字接口连线,本例中用到了 48 号口子,原因仅仅是因为布线比较方便,其实可以任意口子。该接口应当在代码中初始化为输出端口,用来给传感器发送工作信号。

4..超声传感器的“Echo”与 Arduino 2560  扩展版的 任意一个  数字接口连线,本例中用到了 49 号口子,原因仅仅是因为布线比较方便,其实可以任意口子。该接口应当在代码中初始化为输入端口,用来读取传感器发回的数据。

至此,基本的布线已经完成。

硬件部分完成,接下来就是软件部分的逻辑了,直接先上代码

//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);
		// &nbsp;digitalWrite(MosfetLeftTailWheel0, LOW);
		digitalWrite(MosfetRightTailWheel0, LOW);

		digitalWrite(MosfetLeftFrontWheel1, HIGH);
		// digitalWrite(MosfetRightFrontWheel1, HIGH);
		// digitalWrite(MosfetLeftTailWheel1, HIGH);
		digitalWrite(MosfetRightTailWheel1, HIGH);
		delay(200);
	}
}

代码还是比较简单的,具体的控制端口,还是要根据当时布线的方便性来处理,这个都是可以变动的。

以上仅供暂时的参考,电机控制部分的代码没有使用PWM,所以,小车走走停停,呵呵,后期继续改动了,暂时就写到这里吧。

发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注