麦轮小车

栏目: 服务器 · 发布时间: 5年前

内容简介:如何造一辆可遥控的麦克纳姆轮小车。嵌入式系统的课程要求我们设计小车底盘,于是我造了一辆麦克纳姆轮的小车。

如何造一辆可遥控的麦克纳姆轮小车。

麦轮小车

嵌入式系统的课程要求我们设计小车底盘,于是我造了一辆麦克纳姆轮的小车。

原理

麦克纳姆轮:

麦轮驱动的特点是可以全方向平滑移动,适应狭小/不利转弯的地形;缺点是功率损耗大、贵、加工难、维护麻烦,寿命也相较短。

转向原理:

麦轮小车

元件清单

名称 参考链接
麦克纳姆轮小车底盘(带 TT 电机) 链接
Arduino UNO
L293D 电机驱动
HC-06 蓝牙
9g 舵机
HC-SR04 超声波
11.1V 锂电池

代码实现

小车主控用的是 Arduino UNO.

项目文件: My-Arduino-projects / 麦轮小车

L293D 库文件: AFMotor.rar

代码:

//by YX Lin
#include <AFMotor.h> //L293D 驱动库文件
#include <Servo.h>//舵机库文件

#define SR04_Trig 11
#define SR04_Echo 12

int distance = 0;
int delay_time = 300;
int micro_delay_time = 100;
int pos = 0;
int motor_speed = 200;

AF_DCMotor motor1(1);
AF_DCMotor motor2(4);
AF_DCMotor motor3(3);
AF_DCMotor motor4(2);

Servo myservo;

void setup() {
  Serial.begin(9600);
  myservo.attach(2);
  motor1.setSpeed(motor_speed);
  motor2.setSpeed(motor_speed);
  motor3.setSpeed(motor_speed);
  motor4.setSpeed(motor_speed);
  pinMode(SR04_Trig, OUTPUT);
  pinMode(SR04_Echo, INPUT);
  //serve();
}
void loop() {
  if (Serial.available()) {
    Serial.println("Hello");
    char x = Serial.read();
    if (x == 'W') move_forward();
    if (x == 'S') move_backward();
    if (x == 'D') move_right();
    if (x == 'A') move_left();
    if (x == 'E') right_front();
    if (x == 'Q') left_front();
    if (x == 'C') rotate_right();
    if (x == 'Z') rotate_left();
    if (x == 'X') off();

    if (x == 'F') serve();
    if (x == 'V')sr04(); //超声波测距

    Serial.println("ok");
  }
  delay(5);
}

void move_forward() {
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
  delay(delay_time);
  off();
}
void move_backward() {
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
  delay(delay_time);
  off();
}

void move_right() {
  motor1.run(FORWARD);
  motor2.run(BACKWARD);
  motor3.run(FORWARD);
  motor4.run(BACKWARD);
  delay(delay_time);
  off();
}
void move_left() {
  motor1.run(BACKWARD);
  motor2.run(FORWARD);
  motor3.run(BACKWARD);
  motor4.run(FORWARD);
  delay(delay_time);
  off();
}
void right_front() {
  motor1.run(FORWARD);
  motor2.run(RELEASE);
  motor3.run(FORWARD);
  motor4.run(RELEASE);
  delay(delay_time);
  off();
}
void left_front() {
  motor1.run(RELEASE);
  motor2.run(FORWARD);
  motor3.run(RELEASE);
  motor4.run(FORWARD);
  delay(delay_time);
  off();
}
void rotate_right() {
  motor1.run(FORWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(FORWARD);
  delay(micro_delay_time);
  off();
}
void rotate_left() {
  motor1.run(BACKWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(BACKWARD);
  delay(micro_delay_time);
  off();
}
void off() {
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}
void serve() {
  for (pos = 0; pos <= 180; pos += 5) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 5) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}
void sr04() {
  digitalWrite(SR04_Trig, LOW); //给Trig发送一个低电平
  delayMicroseconds(2);    //等待 2微妙
  digitalWrite(SR04_Trig, HIGH); //给Trig发送一个高电平
  delayMicroseconds(10);    //等待 10微妙
  digitalWrite(SR04_Trig, LOW); //给Trig发送一个低电平
  distance = ((float(pulseIn(SR04_Echo, HIGH)) * 17 ) / 100); //把回波时间换算成毫米,并减去距离差值

  if (distance < 9999 && distance > 0) {
    Serial.print("测距:");
    Serial.println(distance);
  } else {
    Serial.println("距离过大");
  }
}

蓝牙遥控:下载 Arduino bluetooth controller 这个 App,按代码设置相应的键位,就可以遥控了。

麦轮小车

FAQ

Q:项目后期有跟进吗?

A:有,我打算寒假把代码移植到 STM32 上面,并实现用 PS2 手柄遥控。

总结

小车总体能实现基本功能,但蓝牙的遥控有距离限制,也无法做得相对平滑。靠以后的算法慢慢优化了。

麦轮小车

参考与致谢


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

O2O进化论

O2O进化论

板砖大余、姜亚东 / 中信出版社 / 2014-5 / 49

在互联网的1.0时代,Online的商业和Offline的商业就像是两条平行线,没有交汇点,在移动浪潮下,他们正在交汇,这就是O2O(Online to Offline)。于是,人们认为:O2O就是线下将线上作为销售前台。结论是对的,但并非简单相加就可以达到。人们已经进入数据革命时期,O2O是线上和线下全流通的数据化工具,电子商务就是非数据商品的数据化。其次,O2O还是一种竞争格局。这决定了以O2......一起来看看 《O2O进化论》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具