介绍
本文主要介绍小车电机实验。包括前进调试、前后左右综合实验、花式动作。
注意:由于小车电机在出厂时马达会有各种不同的磨损,所以直走前进的方向会偏左或偏右。这个可以通过模拟输出调节
所需硬件
连接图
注意:使能引脚P1.4/EN1和P1.5/EN2悬空电压为2V,默认为高电平,所以可以不连接。Arduino的3,5,6,9,10,11引脚为PWM输出引脚,均可控制电机PWM输出
代码
//===============================================================// 智能小车前进调整实验//===============================================================//#include int Left_motor_back=5; //左电机后退(IN1)int Left_motor_go=6; //左电机前进(IN2)int Right_motor_go=9; // 右电机前进(IN3)int Right_motor_back=10; // 右电机后退(IN4)void setup(){ //初始化电机驱动IO为输出方式 pinMode(Left_motor_go,OUTPUT); // PIN 5 (PWM) pinMode(Left_motor_back,OUTPUT); // PIN 6 (PWM) pinMode(Right_motor_go,OUTPUT);// PIN 9 (PWM) pinMode(Right_motor_back,OUTPUT);// PIN 10 (PWM)}void run(int time) // 前进{ analogWrite(Right_motor_go,200);//右电机前进,PWM比例0~255调速,左右轮差异略增减 analogWrite(Right_motor_back,0); analogWrite(Left_motor_go,200);//左电机前进,PWM比例0~255调速,左右轮差异略增减 analogWrite(Left_motor_back,0); delay(time * 100); //执行时间,可以调整 }void brake(int time) //刹车,停车{ digitalWrite(Right_motor_go,LOW); digitalWrite(Right_motor_back,LOW); digitalWrite(Left_motor_go,LOW); digitalWrite(Left_motor_back,LOW); delay(time * 100);//执行时间,可以调整 }void loop(){ delay(2000); //延时2s后启动 run(10);//前进1s brake(5);//停车}
//===============================================================// 智能小车前后左右综合实验//===============================================================//#include int Left_motor_back=5; //左电机后退(IN1)int Left_motor_go=6; //左电机前进(IN2)int Right_motor_go=9; // 右电机前进(IN3)int Right_motor_back=10; // 右电机后退(IN4)void setup(){ //初始化电机驱动IO为输出方式 pinMode(Left_motor_go,OUTPUT); // PIN 5 (PWM) pinMode(Left_motor_back,OUTPUT); // PIN 6 (PWM) pinMode(Right_motor_go,OUTPUT);// PIN 9 (PWM) pinMode(Right_motor_back,OUTPUT);// PIN 10 (PWM)}void run(int time) // 前进{ analogWrite(Right_motor_go,200);//右电机前进,PWM比例0~255调速,左右轮差异略增减 analogWrite(Right_motor_back,0); analogWrite(Left_motor_go,200);// 左电机前进,PWM比例0~255调速,左右轮差异略增减 analogWrite(Left_motor_back,0); delay(time * 100); //执行时间,可以调整 }void brake(int time) //刹车,停车{ digitalWrite(Right_motor_go,LOW); digitalWrite(Right_motor_back,LOW); digitalWrite(Left_motor_go,LOW); digitalWrite(Left_motor_back,LOW); delay(time * 100);//执行时间,可以调整 }void left(int time) //左转(左轮不动,右轮前进){ analogWrite(Right_motor_go,200); //右电机前进,PWM比例0~255调速 analogWrite(Right_motor_back,0); digitalWrite(Left_motor_go,LOW); //左轮不动 digitalWrite(Left_motor_back,LOW); delay(time * 100); //执行时间,可以调整 }void spin_left(int time) //左转(左轮后退,右轮前进){ analogWrite(Right_motor_go,200); //右电机前进,PWM比例0~255调速 analogWrite(Right_motor_back,0); analogWrite(Left_motor_go,0); analogWrite(Left_motor_back,200);//左轮后退PWM比例0~255调速 delay(time * 100); //执行时间,可以调整 }void right(int time) //右转(右轮不动,左轮前进){ digitalWrite(Right_motor_go,LOW); //右电机不动 digitalWrite(Right_motor_back,LOW); analogWrite(Left_motor_go,200); analogWrite(Left_motor_back,0);//左电机前进,PWM比例0~255调速 delay(time * 100); //执行时间,可以调整 }void spin_right(int time) //右转(右轮后退,左轮前进){ analogWrite(Right_motor_go,0); analogWrite(Right_motor_back,200);//右电机后退,PWM比例0~255调速 analogWrite(Left_motor_go,200); //左电机前进,PWM比例0~255调速 analogWrite(Left_motor_back,0); delay(time * 100); //执行时间,可以调整 }void back(int time) //后退{ analogWrite(Right_motor_go,0); analogWrite(Right_motor_back,150);//右轮后退,PWM比例0~255调速 analogWrite(Left_motor_go,0); analogWrite(Left_motor_back,150);//左轮后退,PWM比例0~255调速 delay(time * 100); //执行时间,可以调整 }void loop(){ delay(2000); //延时2s后启动 back(10); //后退1s brake(5);//停止0.5s run(10);//前进1s brake(5);//停止0.5s left(10);//向左转1s right(10);//向右转1s spin_right(20); //向右旋转2s spin_left(20);//向左旋转2s brake(5);//停车}
//===============================================================// 智能小车指定花式动作//===============================================================//#include int Left_motor_back=5; //左电机后退(IN1)int Left_motor_go=6; //左电机前进(IN2)int Right_motor_go=9; // 右电机前进(IN3)int Right_motor_back=10; // 右电机后退(IN4)void setup(){ //初始化电机驱动IO为输出方式 pinMode(Left_motor_go,OUTPUT); // PIN 5(PWM) pinMode(Left_motor_back,OUTPUT); // PIN 6 (PWM) pinMode(Right_motor_go,OUTPUT);// PIN 9 (PWM) pinMode(Right_motor_back,OUTPUT);// PIN 10 (PWM)}void run(int time) // 前进{ analogWrite(Right_motor_go,200);//右电机前进,PWM比例0~255调速,左右轮差异略增减 analogWrite(Right_motor_back,0); analogWrite(Left_motor_go,200);// 左电机前进,PWM比例0~255调速,左右轮差异略增减 analogWrite(Left_motor_back,0); delay(time * 100); //执行时间,可以调整 }void brake(int time) //刹车,停车{ digitalWrite(Right_motor_go,LOW); digitalWrite(Right_motor_back,LOW); digitalWrite(Left_motor_go,LOW); digitalWrite(Left_motor_back,LOW); delay(time * 100);//执行时间,可以调整 }void left(int time) //左转(左轮不动,右轮前进){ analogWrite(Right_motor_go,200); //右电机前进,PWM比例0~255调速 analogWrite(Right_motor_back,0); digitalWrite(Left_motor_go,LOW); //左轮不动 digitalWrite(Left_motor_back,LOW); delay(time * 100); //执行时间,可以调整 }void spin_left(int time) //左转(左轮后退,右轮前进){ analogWrite(Right_motor_go,200); //右电机前进,PWM比例0~255调速 analogWrite(Right_motor_back,0); analogWrite(Left_motor_go,0); analogWrite(Left_motor_back,200);//左轮后退PWM比例0~255调速 delay(time * 100); //执行时间,可以调整 }void right(int time) //右转(右轮不动,左轮前进){ digitalWrite(Right_motor_go,LOW); //右电机不动 digitalWrite(Right_motor_back,LOW); analogWrite(Left_motor_go,200); analogWrite(Left_motor_back,0);//左电机前进,PWM比例0~255调速 delay(time * 100); //执行时间,可以调整 }void spin_right(int time) //右转(右轮后退,左轮前进){ analogWrite(Right_motor_go,0); analogWrite(Right_motor_back,200);//右电机后退,PWM比例0~255调速 analogWrite(Left_motor_go,200); //左电机前进,PWM比例0~255调速 analogWrite(Left_motor_back,0); delay(time * 100); //执行时间,可以调整 }void back(int time) //后退{ analogWrite(Right_motor_go,0); analogWrite(Right_motor_back,150);//右轮后退,PWM比例0~255调速 analogWrite(Left_motor_go,0); analogWrite(Left_motor_back,150);//左轮后退,PWM比例0~255调速 delay(time * 100); //执行时间,可以调整 }void loop(){ int i; delay(2000); //延时2s后启动 run(10); back(10);//全速前进急停后退 brake(5); for(i=0;i<5;i++) {="" run(10);//小车间断性前进5步="" brake(1);="" }="" for(i="">5;i++)><5;i++) {="" back(10);//小车间断性后退5步="" brake(1);="" }="" for(i="">5;i++)><5;i++) {="" left(10);//大弯套小弯连续左旋转="" spin_left(5);="" }="" for(i="">5;i++)><5;i++) {="" right(10);//大弯套小弯连续右旋转="" spin_right(5);="" }="" for(i="">5;i++)><10;i++) {="" right(1);//间断性原地右转弯="" brake(1);="" }="" for(i="">10;i++)><10;i++) {="" left(1);//间断性原地左转弯="" brake(1);="" }="" for(i="">10;i++)><10;i++) {="" left(3);//走s形前进="" right(3);="" }="" for(i="">10;i++)><10;i++) {="" spin_left(3);//间断性原地左打转="" brake(3);="" }="" for(i="">10;i++)><10;i++) {="" spin_right(3);//间断性原地右打转="" brake(3);="" }="">10;i++)>
结果
注意:不同小车,需要调节的PWM值不一样
相关资料
步进电机
联系客服