材料准备
- 电机驱动模块
- Adruino uno开发板
- 杜邦线若干
- 小车总成
小车线路连接
驱动模块
首先了解电机驱动模块
的组成,电机驱动模块的四个接口分别连接连接电机的正负极,也就是电机1的正负极分别连接out1、out2.同理另外一个电机接到out3、out4。这样就可以通过输出高低电平来控制小车的移动。而VCC(正极)接口用于外界电源的供电,接到板子的VIN接口( 供电范围7~12V )不过最好低于10V,个人不大推荐外接电源,使用USB+充电宝供电即可。中间的GND是地线接口,接到板子的GND接口,第三个5V接口就是通过板子的5V接口给驱动模块供电,但是板子得用充电宝供电。IN1-IN4接口接到板子上对应的输出引脚,需要根据你的代码实际情况进行接入。
开发板
整体连接如下:
Power 引脚: 均是供电所用,提供3.3V、5V、GND(地线)、VIN(外接电源)而
Analog In引脚 :右下方的A0~A5为模拟输入引脚, 开发板可读取外部模拟信号.
13引脚 :连接板载LED灯,可通过控制13引脚来控制LED灯亮灭。一般拿到开发板上电板载灯都会闪烁,可辅助检测开发板是否正常
Digital 引脚 : UNO R3拥有14个数字I/O引脚,其中6个可用于PWM(脉宽调制)输出 ,也就是带波浪线(~)的引脚。PWM引脚可以用于调节电机转速。 数字引脚用于读取逻辑值(0或1),或者作为数字输出引脚来驱动外部模块。
了解了这些引脚的功能后那么我们就可以将控制我们电机的接口连接到PWM接口上,这样就能够控制我们的电机转速,也能调整电机的转动方向
Adruino uno引脚一览图:
代码编写
实现简单的方向控制
首先我们小车要实现前进,那么就需要四个轮子转动方向一致,那么我们通过电机的电流要一致,那么我们控制轮子可以通过引脚输出高低电平的方式实现。前进的代码如下,
analogWrite(引脚,PWM值)
用于调节电机转速,digitalWrite(引脚,高电平/低电平),如果两边轮子设置为HIGH and LOW那么他们的电流方向一致,所以会前进,后退自然就是反过来,转向就是让两边轮子转的方向相反(与坦克转向原理类似)。analogWrite(PIN_PWML,200); digitalWrite(PIN_AIN3,HIGH); digitalWrite(PIN_AIN4,LOW); analogWrite(PIN_PWMR,200); digitalWrite(PIN_AIN1,HIGH); digitalWrite(PIN_AIN2,LOW)
简单源码DEMO,具体在注释中已经十分详细,这里不再做讲解。
#define PIN_PWML 9 #define PIN_AIN3 5//对应板子上INPUT3 #define PIN_AIN4 6//对应板子上INPUT4 #define PIN_PWMR 10 #define PIN_AIN1 9//对应板子上INPUT1 #define PIN_AIN2 10//对应板子上INPUT2 void setup() {//初始化,将引脚设置为输出状态 pinMode(PIN_PWML,OUTPUT); pinMode(PIN_AIN3,OUTPUT); pinMode(PIN_AIN4,OUTPUT); pinMode(PIN_PWMR,OUTPUT); pinMode(PIN_AIN1,OUTPUT); pinMode(PIN_AIN2,OUTPUT); } void loop() {//主循环 analogWrite(PIN_PWML,200); digitalWrite(PIN_AIN3,HIGH); digitalWrite(PIN_AIN4,LOW); analogWrite(PIN_PWMR,200); digitalWrite(PIN_AIN1,HIGH); digitalWrite(PIN_AIN2,LOW) delay(3000); //动作保持3秒以上
}
- 多个动作实现DEMO
```c
#define PIN_PWML 9
#define PIN_AIN3 5
#define PIN_AIN4 6//定义引脚接口,具体看上面的接口讲解
#define PIN_PWMR 10
#define PIN_AIN1 9
#define PIN_AIN2 10/
void carrun(int num){
switch(num){
case 0://前进
analogWrite(PIN_PWML,200);
digitalWrite(PIN_AIN3,LOW);
digitalWrite(PIN_AIN4,HIGH);
analogWrite(PIN_PWMR,200);
digitalWrite(PIN_AIN1,LOW);
digitalWrite(PIN_AIN2,HIGH);
break;
case 1://后退
analogWrite(PIN_PWML,200);
digitalWrite(PIN_AIN3,HIGH);
digitalWrite(PIN_AIN4,LOW);
analogWrite(PIN_PWMR,200);
digitalWrite(PIN_AIN1,HIGH);
digitalWrite(PIN_AIN2,LOW);
break;
case 2://左转弯
analogWrite(PIN_PWML,200);
digitalWrite(PIN_AIN3,HIGH);
digitalWrite(PIN_AIN4,LOW);
analogWrite(PIN_PWMR,200);
digitalWrite(PIN_AIN1,LOW);
digitalWrite(PIN_AIN2,HIGH);
break;
case 3://右转弯
analogWrite(PIN_PWML,200);
digitalWrite(PIN_AIN3,LOW);
digitalWrite(PIN_AIN4,HIGH);
analogWrite(PIN_PWMR,200);
digitalWrite(PIN_AIN1,HIGH);
digitalWrite(PIN_AIN2,LOW);
break;
default://停止
analogWrite(PIN_PWML,200);
digitalWrite(PIN_AIN3,LOW);
digitalWrite(PIN_AIN4,LOW);
analogWrite(PIN_PWMR,200);
digitalWrite(PIN_AIN1,LOW);
digitalWrite(PIN_AIN2,LOW);
break;
}
}
void setup() {
pinMode(PIN_PWML,OUTPUT);
pinMode(PIN_AIN3,OUTPUT);
pinMode(PIN_AIN4,OUTPUT);
pinMode(PIN_PWMR,OUTPUT);
pinMode(PIN_AIN1,OUTPUT);
pinMode(PIN_AIN2,OUTPUT);
}
void loop() {
int i;
for(i=0;i<5;i++){
carrun(i);
delay(3000);
}
}
最后烤入开发板即可
测试效果
看我朋友圈