打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Arduino小车

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

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

所需硬件

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

结果

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

相关资料
步进电机

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何使用L298N和Arduino板控制直流电机
微型直流电机控制基本方法 L298N模块
自平衡机器人
自平衡小车,无论如何立不起来,可能是什么原因?改,...
[原创]通过Raspberry Pi(树莓派)的GPIO接口控制步进电机/Control ...
Arduino L298N 电机驱动扩展板
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服