标题:
使用单个arduino nano控制使用麦克纳姆轮小车的简易源码方案
[打印本页]
作者:
leotheknight
时间:
2018-9-19 18:21
标题:
使用单个arduino nano控制使用麦克纳姆轮小车的简易源码方案
之前项目做了个简易的移动平台方案,图方便就使用了arduino,然后一个两轴手柄控制方向,带动四个两相步进电机
算是个比较偷懒的解决方案了,但是比较直接明了
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);
}
复制代码
所有资料51hei提供下载:
MecanumStepperMotor.7z
(1.03 KB, 下载次数: 62)
2018-9-19 18:20 上传
点击文件名下载附件
arduino代码
下载积分: 黑币 -5
作者:
spendell
时间:
2020-1-31 11:10
正好 毕设需要用这个
作者:
xuebj
时间:
2020-12-10 17:44
不错,简单明了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1