米兔机器人Arduino怎么玩?

99ANYc3cd6 机器人 8

“米兔机器人”通常指的是基于开源硬件 Me Arm 的桌面级机械臂套件,它结构简单、价格亲民,是学习 Arduino、舵机控制、机器人基础的绝佳入门项目。

米兔机器人Arduino怎么玩?-第1张图片-广州国自机器人
(图片来源网络,侵删)

下面我将从项目简介、所需硬件、组装步骤、Arduino 编程扩展功能,为你提供一个完整的指南。


项目简介

  • 目标: 通过 Arduino 控制 Me Arm 机械臂,实现抓取、移动等基本动作。
  • 核心原理: Arduino 作为主控板,通过向舵机发送不同角度的 PWM 信号,精确控制机械臂的四个关节(底座、大臂、小臂、夹爪)的运动。
  • 控制方式:
    1. 电位器控制: 最直观的方式,通过旋转电位器来控制对应舵机的角度。
    2. 蓝牙控制: 通过手机 App 或蓝牙模块发送指令,实现无线遥控。
    3. 代码预设: 编写代码让机械臂自动执行一系列动作(如抓取、放置)。

所需硬件

  1. 核心控制:

    • Arduino UNO R3 (或任何其他 Arduino 主板)
    • USB 数据线
  2. 机械臂套件:

    • Me Arm 4 自由度机械臂套件 (通常包含所有激光切割的亚克力/木板件、螺丝、舵机等)
    • 特别注意: 确保套件包含4个舵机,通常型号是 MG90SSG90
  3. 控制输入 (选择一种即可):

    米兔机器人Arduino怎么玩?-第2张图片-广州国自机器人
    (图片来源网络,侵删)
    • 方案A (电位器控制):
      • 4个 10kΩ 电位器
      • 杜邦线若干 (公对母、公对公)
    • 方案B (蓝牙控制):
      • HC-05 或 HC-06 蓝牙模块
      • 杜邦线若干
  4. 电源:

    • 非常重要: 舵机需要较大的电流,直接从 Arduino 的 5V 引脚供电会导致不稳定甚至烧毁 Arduino。
    • 推荐方案: 使用一个独立的 5V/2A 或 5V/3A 的电源适配器(如手机充电头)为机械臂供电,Arduino 可以通过 USB 供电,舵机则通过外部电源供电。

组装步骤

这部分通常套件里会有详细的说明书,主要步骤如下:

  1. 安装舵机: 将4个舵机分别安装在底座、大臂、小臂和夹爪的指定位置,并用螺丝固定。
  2. 连接连杆: 用亚克力/木制的连杆将舵机与机械臂的各个部分连接起来,注意对齐螺丝孔,确保活动顺畅。
  3. 组装整体: 按照从底座到夹爪的顺序,将所有部件组装起来,这个过程需要耐心,确保所有关节都能自由活动,没有卡顿。
  4. 接线:
    • 找到舵机的三根线:通常是红色(电源)、棕色/黑色(接地)、黄色/橙色(信号)
    • 将所有舵机的红线连接到外部电源的 5V+
    • 将所有舵机的棕/黑线连接到外部电源的 GND (接地)
    • 将4个舵机的信号线分别连接到 Arduino 的 数字 PWM 引脚 (如 D3, D5, D6, D9, D10, D11),我们稍后会在代码中指定。

Arduino 编程

我们将分两种方案提供代码。

准备工作:安装舵机库

在编写代码之前,你需要安装一个强大的舵机库:Servo.h,这个库是 Arduino IDE 自带的,所以你不需要额外下载,直接在代码中 #include <Servo.h> 即可使用。

米兔机器人Arduino怎么玩?-第3张图片-广州国自机器人
(图片来源网络,侵删)

方案A:电位器控制 (最简单)

这是最直观的控制方式,旋转一个电位器,机械臂的对应部分就会转动。

接线:

  • 电位器1 (控制底座) -> Arduino 5V, GND, A0
  • 电位器2 (控制大臂) -> Arduino 5V, GND, A1
  • 电位器3 (控制小臂) -> Arduino 5V, GND, A2
  • 电位器4 (控制夹爪) -> Arduino 5V, GND, A3

代码:

#include <Servo.h>
// 创建4个舵机对象
Servo baseServo;   // 底座
Servo shoulderServo; // 大臂 (肩部)
Servo elbowServo;   // 小臂 (肘部)
Servo clawServo;    // 夹爪
// 定义舵机连接的Arduino引脚
const int basePin = 3;
const int shoulderPin = 5;
const int elbowPin = 6;
const int clawPin = 9;
// 定义电位器连接的模拟引脚
const int basePot = A0;
const int shoulderPot = A1;
const int elbowPot = A2;
const int clawPot = A3;
// 定义舵机的初始角度 (根据你的机械臂安装方向调整)
int baseAngle = 90;
int shoulderAngle = 90;
int elbowAngle = 90;
int clawAngle = 90;
void setup() {
  // 将舵机连接到指定的引脚
  baseServo.attach(basePin);
  shoulderServo.attach(shoulderPin);
  elbowServo.attach(elbowPin);
  clawServo.attach(clawPin);
  // 初始化串口通信,用于调试 (可选)
  Serial.begin(9600);
}
void loop() {
  // 读取4个电位器的值 (0-1023)
  int baseVal = analogRead(basePot);
  int shoulderVal = analogRead(shoulderPot);
  int elbowVal = analogRead(elbowPot);
  int clawVal = analogRead(clawPot);
  // 将模拟值 (0-1023) 映射到舵机角度 (0-180)
  // 你可能需要根据实际情况调整最小和最大角度,30-150,防止舵机撞到限位
  baseAngle = map(baseVal, 0, 1023, 30, 150);
  shoulderAngle = map(shoulderVal, 0, 1023, 30, 150);
  elbowAngle = map(elbowVal, 0, 1023, 30, 150);
  clawAngle = map(clawVal, 0, 1023, 0, 90); // 夹爪通常不需要0-180度
  // 将计算出的角度发送给对应的舵机
  baseServo.write(baseAngle);
  shoulderServo.write(shoulderAngle);
  elbowServo.write(elbowAngle);
  clawServo.write(clawAngle);
  // 在串口监视器中打印角度值,方便调试
  Serial.print("Base: "); Serial.print(baseAngle);
  Serial.print(" | Shoulder: "); Serial.print(shoulderAngle);
  Serial.print(" | Elbow: "); Serial.print(elbowAngle);
  Serial.print(" | Claw: "); Serial.println(clawAngle);
  // 短暂延时,让舵机有时间到达目标位置
  delay(15);
}

方案B:蓝牙控制 (更酷炫)

通过手机蓝牙App发送指令,无线控制机械臂。

接线:

  • HC-05 VCC -> Arduino 5V
  • HC-05 GND -> Arduino GND
  • HC-05 TXD -> Arduino RX (D0)
  • HC-05 RXD -> Arduino TX (D1) 注意:交叉连接!
  • 舵机接线同方案A。

代码:

#include <Servo.h>
Servo baseServo, shoulderServo, elbowServo, clawServo;
const int basePin = 3;
const int shoulderPin = 5;
const int elbowPin = 6;
const int clawPin = 9;
// 定义各个舵机的初始角度和中立位置
int baseAngle = 90;
int shoulderAngle = 90;
int elbowAngle = 90;
int clawAngle = 45; // 夹爪初始半开
void setup() {
  Serial.begin(9600); // 与电脑通信,用于调试
  Serial.println("Me Arm Bluetooth Control Ready!");
  // 蓝牙模块通过硬件串口与电脑通信,软件串口留给其他用途
  // 如果你的蓝牙模块接在软件串口,需要定义 SoftwareSerial mySerial(rx, tx);
  baseServo.attach(basePin);
  shoulderServo.attach(shoulderPin);
  elbowServo.attach(elbowPin);
  clawServo.attach(clawPin);
  // 初始化到中立位置
  updateServos();
}
void loop() {
  // 检查是否有来自蓝牙模块的数据
  if (Serial.available() > 0) {
    char command = Serial.read(); // 读取一个字符指令
    Serial.print("Received Command: ");
    Serial.println(command);
    // 根据指令更新对应舵机的角度
    switch (command) {
      case 'F': baseAngle += 5; break; // 前转
      case 'B': baseAngle -= 5; break; // 后转
      case 'U': shoulderAngle += 5; break; // 大臂上抬
      case 'D': shoulderAngle -= 5; break; // 大臂下降
      case 'R': elbowAngle += 5; break; // 小臂伸展
      case 'L': elbowAngle -= 5; break; // 小臂收缩
      case 'O': clawAngle += 5; break; // 夹爪张开
      case 'C': clawAngle -= 5; break; // 夹爪闭合
      case 'H': // 回到初始位置 (Home)
        baseAngle = 90;
        shoulderAngle = 90;
        elbowAngle = 90;
        clawAngle = 45;
        break;
    }
    // 限制角度在安全范围内 (0-180)
    baseAngle = constrain(baseAngle, 0, 180);
    shoulderAngle = constrain(shoulderAngle, 0, 180);
    elbowAngle = constrain(elbowAngle, 0, 180);
    clawAngle = constrain(clawAngle, 0, 90);
    // 更新所有舵机位置
    updateServos();
  }
}
// 一个辅助函数,用于同时更新所有舵机
void updateServos() {
  baseServo.write(baseAngle);
  shoulderServo.write(shoulderAngle);
  elbowServo.write(elbowAngle);
  clawServo.write(clawAngle);
  // 短暂延时,让舵机稳定
  delay(20);
}

如何使用蓝牙代码:

  1. 下载蓝牙App: 在手机上下载一个蓝牙串口调试 App,如 "Arduino Bluetooth Controller" 或 "Serial Bluetooth Terminal"。
  2. 配对蓝牙: 将 Arduino 和 HC-05 模块通电,在手机的蓝牙设置中搜索 "HC-05" 并配对,密码通常是 12340000
  3. 连接串口: 打开蓝牙 App,连接到 HC-05 模块。
  4. 发送指令: 在 App 的发送框中输入单个字符并发送,输入 F 底座就会向右转,输入 C 夹爪就会闭合。

进阶与扩展

当你掌握了基本控制后,可以尝试以下进阶功能:

  1. 实现抓取和放置循环:

    • 编写一个函数,pickAndPlace(),让机械臂自动执行:移动到物体上方 -> 下降 -> 闭合夹爪 -> 抬起 -> 移动到目标位置 -> 下降 -> 张开夹爪 -> 抬起
    • 你可以使用 delay() 来控制动作时间,但更高级的做法是使用 状态机millis() 函数来实现非阻塞的延时,这样程序可以同时做其他事情。
  2. 增加限位开关:

    在机械臂的底座或大臂上安装限位开关,防止舵机转动过度而损坏机械结构或舵机本身。

  3. 使用游戏手柄控制:

    • 使用带 USB 或蓝牙的游戏手柄(如 Xbox 手柄)代替电位器,提供更流畅的控制体验,这需要使用像 USB_Host_Shield 这样的库来解析手柄信号。
  4. 加装摄像头和视觉识别:

    在机械臂上加装一个 Raspberry Pi Camera 或 USB 摄像头,结合 OpenCV 库,可以实现颜色识别、物体跟踪,让机械臂能够自动抓取特定颜色的物体。

总结与注意事项

  • 电源是关键: 务必使用独立的外部电源为舵机供电,这是项目稳定运行的第一步。
  • 校准角度: map() 函数中的角度范围需要根据你自己的机械臂进行微调,如果舵机转动方向反了,可以在 write() 前加一个 180 - angle 来反转。
  • 安全第一: 机械臂在运动时,不要将手伸入其运动范围内,以免被夹到或撞伤。
  • 耐心调试: 机器人项目很少有“一次成功”的,多利用 Serial.print() 来打印变量值,这是调试最有效的工具。

希望这份详细的指南能帮助你成功制作并玩转你的米兔机器人!祝你玩得开心!

标签: 米兔机器人Arduino编程教程 米兔机器人Arduino扩展玩法 米兔机器人Arduino传感器应用

抱歉,评论功能暂时关闭!