分享

Arduino小车

 昵称53002736 2018-04-28

介绍
本文主要介绍小车电机实验。包括前进调试、前后左右综合实验、花式动作。

注意:由于小车电机在出厂时马达会有各种不同的磨损,所以直走前进的方向会偏左或偏右。这个可以通过模拟输出调节

所需硬件

  • 智能小车 *1

连接图

  • 电机/Arduino引脚连接:
    P1.2/IN1→Ard/pin5
    P1.3/IN1→Ard/pin6
    P1.6/IN1→Ard/pin9
    P1.7/IN1→Ard/pin10
  • 小车组装

注意:使能引脚P1.4/EN1和P1.5/EN2悬空电压为2V,默认为高电平,所以可以不连接。Arduino的3,5,6,9,10,11引脚为PWM输出引脚,均可控制电机PWM输出

代码

  • 调整左右电机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=0;i<5;i++) { back(10);//小车间断性后退5步 brake(1); } for(i=0;i<5;i++) { left(10);//大弯套小弯连续左旋转 spin_left(5); } for(i=0;i<5;i++) { right(10);//大弯套小弯连续右旋转 spin_right(5); } for(i=0;i<10;i++) { right(1);//间断性原地右转弯 brake(1); } for(i=0;i<10;i++) { left(1);//间断性原地左转弯 brake(1); } for(i=0;i<10;i++) { left(3);//走S形前进 right(3); } for(i=0;i<10;i++) { spin_left(3);//间断性原地左打转 brake(3); } for(i=0;i<10;i++) { spin_right(3);//间断性原地右打转 brake(3); } }

结果

  • 本小车的左电机调到190,右电机调到200时,小车前进相对较直。注意:不同小车,需要调节的PWM值不一样
  • 小车做前后左右综合动作。
  • 小车做花式动作。

相关资料
步进电机

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约