找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9297|回复: 2
收起左侧

使用单个arduino nano控制使用麦克纳姆轮小车的简易源码方案

[复制链接]
ID:400160 发表于 2018-9-19 18:21 | 显示全部楼层 |阅读模式
之前项目做了个简易的移动平台方案,图方便就使用了arduino,然后一个两轴手柄控制方向,带动四个两相步进电机 算是个比较偷懒的解决方案了,但是比较直接明了

arduino源程序如下:
  1. #include <math.h>
  2. #include <Stepper.h>

  3. //Stepper control
  4. #define LF 6
  5. #define RF 7
  6. #define RR 8

  7. //right and left button
  8. const int leftBtn = A3;
  9. const int rightBtn = A2;
  10. //Joystick
  11. const int xAxis = A0;
  12. const int yAxis = A1;
  13. int range = 10;

  14. //Initialise the stepper motors
  15. const int stepsPeRFevolution = 1600;  //number of steps per revolution
  16. Stepper RightFront(stepsPeRFevolution, 2,3,4,5);

  17. void setup() {
  18.   Serial.begin(9600);
  19.   RightFront.setSpeed(0);

  20.   pinMode(rightBtn, INPUT);
  21.   pinMode(leftBtn, INPUT);

  22.   pinMode(xAxis, INPUT);
  23.   pinMode(yAxis, INPUT);

  24.   pinMode(LF, OUTPUT);
  25.   pinMode(RF, OUTPUT);
  26.   pinMode(RR, OUTPUT);
  27.   digitalWrite(rightBtn, HIGH);
  28.   digitalWrite(leftBtn, HIGH);
  29. }

  30. void loop() {
  31.   int xVal = map(analogRead(xAxis), 0, 1023, 0, range);
  32.   int yVal = map(analogRead(yAxis), 0, 1023, 0, range);
  33.   int turnright = digitalRead(rightBtn);
  34.   int turnleft = digitalRead(leftBtn);
  35.   Serial.println(xVal);
  36.   Serial.println(yVal);
  37.   Serial.println(turnright);
  38.   Serial.println(turnleft);
  39.   if (turnright == HIGH)
  40.   {
  41.     RightFront.setSpeed(5);
  42.     moveCW(10);   //clockwise rightsideBackwards, leftsideForwards
  43.   }
  44.   else if (turnleft == HIGH)
  45.   {
  46.     RightFront.setSpeed(5);
  47.     moveACW(10);   //anticlockwise leftsideBackwards,rightsideForwards
  48.   }
  49.   else if (turnright == LOW && turnleft == LOW)
  50.   {
  51.     if (xVal == 5)
  52.     {
  53.         if (yVal == 0) {
  54.           RightFront.setSpeed(20);
  55.           goBackward(10);
  56.         }
  57.         else if (yVal == 9)
  58.         {
  59.           RightFront.setSpeed(20);
  60.           goForward(10);
  61.         } else {
  62.           if (yVal >= 7 ) {
  63.             RightFront.setSpeed(10);
  64.             goForward(10);
  65.           }
  66.           else if (yVal <= 3) {
  67.             RightFront.setSpeed(10);
  68.             goBackward(10);
  69.           }
  70.         }
  71.     }
  72.     else if (yVal == 5)
  73.     {

  74.         if (xVal == 0) {
  75.           RightFront.setSpeed(20);
  76.           moveRight(10);
  77.         }
  78.         else if (xVal == 9)
  79.         {
  80.           RightFront.setSpeed(20);
  81.           moveLeft(10);
  82.         } else {
  83.           if (xVal >= 6 ) {
  84.             RightFront.setSpeed(10);
  85.             moveLeft(10);
  86.           }
  87.           else if (xVal <= 4) {
  88.             RightFront.setSpeed(10);
  89.             moveRight(10);
  90.           }
  91.         }
  92.     }
  93.   }
  94. }

  95. //Methods for stepper movement
  96. void goForward(int mSteps) {
  97.   RightFront.step(mSteps);
  98.   digitalWrite(LF, LOW);
  99.   digitalWrite(RF, HIGH);
  100.   digitalWrite(RR, HIGH);
  101. }

  102. void goBackward(int mSteps) {
  103.   RightFront.step(-mSteps);
  104.   digitalWrite(LF, HIGH);
  105.   digitalWrite(RF, LOW);
  106.   digitalWrite(RR, LOW);
  107. }

  108. void moveRight(int mSteps) {
  109.   RightFront.step(-mSteps);
  110.   digitalWrite(LF, LOW);
  111.   digitalWrite(RF, LOW);
  112.   digitalWrite(RR, HIGH);
  113. }

  114. void moveLeft(int mSteps) {
  115.   RightFront.step(mSteps);
  116.   
  117.   digitalWrite(LF, HIGH);
  118.   digitalWrite(RF, HIGH);
  119.   digitalWrite(RR, LOW);
  120. }

  121. void moveACW(int mSteps) {
  122.   RightFront.step(-mSteps);
  123.   digitalWrite(LF, HIGH);
  124.   digitalWrite(RF, HIGH);
  125.   digitalWrite(RR, HIGH);
  126. }

  127. void moveCW(int mSteps) {
  128.   RightFront.step(mSteps);
  129.   digitalWrite(LF, LOW);
  130.   digitalWrite(RF, LOW);
  131.   digitalWrite(RR, LOW);
  132. }

  133. void moveRightForward(int mSteps) {
  134.   RightFront.step(mSteps);
  135.   digitalWrite(LF, LOW);
  136.   digitalWrite(RF, LOW);
  137.   digitalWrite(RR, HIGH);
  138. }

  139. void moveRightBackward(int mSteps) {
  140.   RightFront.step(mSteps);
  141.   digitalWrite(LF, LOW);
  142.   digitalWrite(RF, LOW);
  143.   digitalWrite(RR, HIGH);
  144. }

  145. void moveLeftForward(int mSteps) {
  146.   RightFront.step(mSteps);
  147.   digitalWrite(LF, LOW);
  148.   digitalWrite(RF, LOW);
  149.   digitalWrite(RR, HIGH);
  150. }

  151. void moveLeftBackward(int mSteps) {
  152.   RightFront.step(mSteps);
  153.   digitalWrite(LF, LOW);
  154.   digitalWrite(RF, LOW);
  155.   digitalWrite(RR, HIGH);
  156. }

  157. void turnRight(int mSteps) {
  158.   RightFront.step(mSteps);
  159.   digitalWrite(LF, LOW);
  160.   digitalWrite(RF, LOW);
  161.   digitalWrite(RR, HIGH);
  162. }

  163. void turnLeft(int mSteps) {
  164.   RightFront.step(mSteps);
  165.   digitalWrite(LF, LOW);
  166.   digitalWrite(RF, LOW);
  167.   digitalWrite(RR, HIGH);
  168. }

  169. void stopRobot(int delay_ms) {
  170.   RightFront.step(0);
  171.   delay(delay_ms);
  172. }

  173. void hardStop() {
  174.   RightFront.step(0);
  175. }
复制代码

所有资料51hei提供下载:
MecanumStepperMotor.7z (1.03 KB, 下载次数: 60)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:539741 发表于 2020-1-31 11:10 | 显示全部楼层
正好   毕设需要用这个
回复

使用道具 举报

ID:813064 发表于 2020-12-10 17:44 | 显示全部楼层
不错,简单明了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表