这个三轮小车的第一课,再这一课中,我们将介绍如何安装底盘、直流电机、arduino uno控制器、电机控制器、电源等部件,安装完必要部件后,会介绍如何驱动直流电机,让小车能前进、后退、左右转。
所需配件:
M3*30十字螺丝 x 4颗
M3螺帽 x 4颗
用M3*30螺丝加螺帽按照图示把两个驱动轮安装到底盘上,将左右两个车轮装在直流电机轴上。(记得加图片!)
所需配件:
M3*12双通铜柱 x 4根
M3*5十字螺丝 x 8颗
用M3*5十字螺把铜柱一端固定在亚克力底盘上,用M3*5螺丝将万向轮固定在铜柱另一端。(记得加图片!)
所需配件:
M3*10十字螺丝 x 4颗
M3*10螺帽 x 4颗
将电池盒用4和M3*10十字螺丝固定在亚克力底盘表面,并用M3螺帽拧紧(记得加图片!)
所需配件:
M3*10十字螺丝 x 4颗
M3*10螺帽 x 4颗
用四颗M3*10螺丝和螺帽把arduino uno固定在亚克力底盘表面上(记得加图片!)
所需配件:
M3*10十字螺丝 x 4颗
M3*10螺帽 x 4颗
用四颗M3*10螺丝和螺帽把L298N电机驱动板固定在亚克力底盘表面上(记得加图片!)
整个小车的电源由安装在电池盒中18650电池供电。电池盒上有红黑两条线,将红黑两条线分别接到DC头上标记有“+”和“-”的接线端子上,DC头插到Arduino UNO,这样Arduino UNO就能工作了。再从DC头上接出一条红黑线给L298N电机驱动板供电。如图所示
要驱动直流电机需要借助L298N电机驱动器,不能直接用arduino uno GPIO口驱动,因为单片机GPIO带负载能力是比较弱的。L298N上分别有ENA、IN1-IN4、ENB。其中ENA和ENB分别用于控制两路输出的速度;IN1、IN2用于控制第一路输出方向;IN3、IN4用于控制第二路输出的方向。
关于L298N的详解介绍请移步到这里
https://osoyoo.com/2017/08/15/l298npro-motor-driver-module/
用公对母杜邦线按照下表将L298N与arduino uno对应连接起来
Arduino UNO | L298N |
D5 | ENA |
D7 | IN1 |
D8 | IN2 |
D9 | IN3 |
D10 | IN4 |
D6 | ENB |
(补张图!!)
右边电机插到K1或K2口上;左边电机插到K3或K4口上(做张图!)
至此硬件部分算是告一段落了,接下来是软件部分。
下载示例代码并解压,用arduino IDE打开lesson-1.ino,下面对部分代码作简单说明。
#define IN1 7 //K1、K2 motor direction #define IN2 8 //K1、K2 motor direction #define IN3 9 //K3、K4 motor direction #define IN4 10 //K3、K4 motor direction #define ENA 5 // Needs to be a PWM pin to be able to control motor speed ENA #define ENB 6 // Needs to be a PWM pin to be able to control motor speed ENA
上面是L298N与arduino之间的接口定义,需要注意的是,ENA和ENB需要接到PWM口上去,对于arduino uno而言D3、D5、D6、D9、D10、D11带PWM输出功能。IN1-IN4可以随便接。
void go_ahead() //motor rotate clockwise -->robot go ahead { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4,HIGH); } void go_back() //motor rotate counterclockwise -->robot go back { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4,LOW); } void go_stop() //motor brake -->robot stop { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4,LOW); } void turn_right(int t) //left motor rotate clockwise and right motor rotate counterclockwise -->robot turn right { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); delay(t); } void turn_left(int t) //left motor rotate counterclockwise and right motor rotate clockwise -->robot turn left { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); delay(t); }
这几个函数分别用于控制小车前进、后退、停止、右转和左转。
void set_motorspeed(int lspeed,int rspeed) //change motor speed { analogWrite(ENA,lspeed);//lspeed:0-255 analogWrite(ENB,rspeed);//rspeed:0-255 }
这个函数用于改变电机转速,lspeed是左边电机转速,rspeed是右边电机转速。给的值越大电机转的越快。这个函数参数合法的范围是:0-255
用USB线将arduino 和PC连接起来,选择正确的板卡型号和端口将其烧录到arduino uno中。小车会按照下面的顺序运动:
DownLoad Url osoyoo.com