|
之前項目做了個簡易的移動平臺方案,圖方便就使用了arduino,然后一個兩軸手柄控制方向,帶動四個兩相步進(jìn)電機(jī) 算是個比較偷懶的解決方案了,但是比較直接明了
arduino源程序如下:
- #include <math.h>
- #include <Stepper.h>
- //Stepper control
- #define LF 6
- #define RF 7
- #define RR 8
- //right and left button
- const int leftBtn = A3;
- const int rightBtn = A2;
- //Joystick
- const int xAxis = A0;
- const int yAxis = A1;
- int range = 10;
- //Initialise the stepper motors
- const int stepsPeRFevolution = 1600; //number of steps per revolution
- Stepper RightFront(stepsPeRFevolution, 2,3,4,5);
- void setup() {
- Serial.begin(9600);
- RightFront.setSpeed(0);
- pinMode(rightBtn, INPUT);
- pinMode(leftBtn, INPUT);
- pinMode(xAxis, INPUT);
- pinMode(yAxis, INPUT);
- pinMode(LF, OUTPUT);
- pinMode(RF, OUTPUT);
- pinMode(RR, OUTPUT);
- digitalWrite(rightBtn, HIGH);
- digitalWrite(leftBtn, HIGH);
- }
- void loop() {
- int xVal = map(analogRead(xAxis), 0, 1023, 0, range);
- int yVal = map(analogRead(yAxis), 0, 1023, 0, range);
- int turnright = digitalRead(rightBtn);
- int turnleft = digitalRead(leftBtn);
- Serial.println(xVal);
- Serial.println(yVal);
- Serial.println(turnright);
- Serial.println(turnleft);
- if (turnright == HIGH)
- {
- RightFront.setSpeed(5);
- moveCW(10); //clockwise rightsideBackwards, leftsideForwards
- }
- else if (turnleft == HIGH)
- {
- RightFront.setSpeed(5);
- moveACW(10); //anticlockwise leftsideBackwards,rightsideForwards
- }
- else if (turnright == LOW && turnleft == LOW)
- {
- if (xVal == 5)
- {
- if (yVal == 0) {
- RightFront.setSpeed(20);
- goBackward(10);
- }
- else if (yVal == 9)
- {
- RightFront.setSpeed(20);
- goForward(10);
- } else {
- if (yVal >= 7 ) {
- RightFront.setSpeed(10);
- goForward(10);
- }
- else if (yVal <= 3) {
- RightFront.setSpeed(10);
- goBackward(10);
- }
- }
- }
- else if (yVal == 5)
- {
- if (xVal == 0) {
- RightFront.setSpeed(20);
- moveRight(10);
- }
- else if (xVal == 9)
- {
- RightFront.setSpeed(20);
- moveLeft(10);
- } else {
- if (xVal >= 6 ) {
- RightFront.setSpeed(10);
- moveLeft(10);
- }
- else if (xVal <= 4) {
- RightFront.setSpeed(10);
- moveRight(10);
- }
- }
- }
- }
- }
- //Methods for stepper movement
- void goForward(int mSteps) {
- RightFront.step(mSteps);
- digitalWrite(LF, LOW);
- digitalWrite(RF, HIGH);
- digitalWrite(RR, HIGH);
- }
- void goBackward(int mSteps) {
- RightFront.step(-mSteps);
- digitalWrite(LF, HIGH);
- digitalWrite(RF, LOW);
- digitalWrite(RR, LOW);
- }
- void moveRight(int mSteps) {
- RightFront.step(-mSteps);
- digitalWrite(LF, LOW);
- digitalWrite(RF, LOW);
- digitalWrite(RR, HIGH);
- }
- void moveLeft(int mSteps) {
- RightFront.step(mSteps);
-
- digitalWrite(LF, HIGH);
- digitalWrite(RF, HIGH);
- digitalWrite(RR, LOW);
- }
- void moveACW(int mSteps) {
- RightFront.step(-mSteps);
- digitalWrite(LF, HIGH);
- digitalWrite(RF, HIGH);
- digitalWrite(RR, HIGH);
- }
- void moveCW(int mSteps) {
- RightFront.step(mSteps);
- digitalWrite(LF, LOW);
- digitalWrite(RF, LOW);
- digitalWrite(RR, LOW);
- }
- void moveRightForward(int mSteps) {
- RightFront.step(mSteps);
- digitalWrite(LF, LOW);
- digitalWrite(RF, LOW);
- digitalWrite(RR, HIGH);
- }
- void moveRightBackward(int mSteps) {
- RightFront.step(mSteps);
- digitalWrite(LF, LOW);
- digitalWrite(RF, LOW);
- digitalWrite(RR, HIGH);
- }
- void moveLeftForward(int mSteps) {
- RightFront.step(mSteps);
- digitalWrite(LF, LOW);
- digitalWrite(RF, LOW);
- digitalWrite(RR, HIGH);
- }
- void moveLeftBackward(int mSteps) {
- RightFront.step(mSteps);
- digitalWrite(LF, LOW);
- digitalWrite(RF, LOW);
- digitalWrite(RR, HIGH);
- }
- void turnRight(int mSteps) {
- RightFront.step(mSteps);
- digitalWrite(LF, LOW);
- digitalWrite(RF, LOW);
- digitalWrite(RR, HIGH);
- }
- void turnLeft(int mSteps) {
- RightFront.step(mSteps);
- digitalWrite(LF, LOW);
- digitalWrite(RF, LOW);
- digitalWrite(RR, HIGH);
- }
- void stopRobot(int delay_ms) {
- RightFront.step(0);
- delay(delay_ms);
- }
- void hardStop() {
- RightFront.step(0);
- }
復(fù)制代碼
所有資料51hei提供下載:
MecanumStepperMotor.7z
(1.03 KB, 下載次數(shù): 62)
2018-9-19 18:20 上傳
點(diǎn)擊文件名下載附件
arduino代碼 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|