乐高机器人 arduino

99ANYc3cd6 机器人 9

乐高机器人 vs. Arduino:核心区别

在结合之前,我们先要理解它们各自的特点。

乐高机器人 arduino-第1张图片-广州国自机器人
(图片来源网络,侵删)
特性 乐高机器人 Arduino
核心优势 结构搭建、机械传动 电子控制、编程灵活性
编程方式 图形化编程为主(如LEGO MINDSTORMS EV3 Classroom, SPIKE Prime App),C++为辅(EV3 C/C++)。 C/C++语言,直接操作硬件,对底层控制能力极强。
硬件接口 专用传感器(颜色、陀螺仪、超声波等)和电机,接口固定。 通用I/O口,可连接各种传感器(温湿度、红外、超声波模块等)和执行器(舵机、继电器、LED等)。
供电方式 专用锂电池组。 USB供电或外部电源(如9V电池、DC电源适配器)。
生态系统 封闭且成熟,所有部件高度集成,易于上手。 开放且庞大,全球有海量库和社区支持,组件选择极多。

简单比喻:

  • 乐高机器人 像一辆顶配的、设计精良的汽车,它的引擎(电机)、底盘(结构)和驾驶系统(传感器)都是原厂匹配好的,你很容易就能开上路,但它很难改装成一辆飞机或船。
  • Arduino 像一个功能强大的发动机,它本身没有外壳,你需要自己设计车身(结构),连接各种部件(传感器、轮子),并用代码精确控制它的每一个动作,它非常灵活,可以创造出各种意想不到的东西。

为什么要将两者结合?

结合的核心思想是 “各取所长”

  1. 发挥乐强的结构优势:利用乐高积木搭建出坚固、灵活、可扩展的机械结构,如机械臂、小车、履带底盘等。
  2. 发挥 Arduino 的控制优势
    • 更强大的传感器:可以轻松接入乐高机器人没有的传感器,如 温湿度传感器、气体传感器、红外避障传感器、心率传感器 等,让你的项目能感知更复杂的世界。
    • 更灵活的控制:可以使用 Arduino 的 PWM(脉冲宽度调制) 来更精细地控制电机速度,或者控制 舵机 实现更复杂的关节运动。
    • 更丰富的输出:可以控制 LED灯带、蜂鸣器、LCD显示屏 等,让项目有更丰富的视觉和听觉反馈。
    • 更强的处理能力:对于一些需要复杂计算(如PID算法控制电机)或通信(如蓝牙、WiFi)的项目,Arduino 的性能和扩展性(通过WiFi模块)可能更优。
    • 成本效益:相比原厂乐高传感器,许多通用的 Arduino 传感器模块价格更便宜。

如何实现连接?(关键步骤)

连接的核心是 电平匹配,乐高电机和传感器的电压通常是 9V,而 Arduino 的I/O口是 5V3V,直接连接可能会烧毁 Arduino 的引脚,你需要一个“翻译官”——电机驱动板

推荐方案:使用 L298N 或其他电机驱动板

这是最常见、最可靠的方案。

乐高机器人 arduino-第2张图片-广州国自机器人
(图片来源网络,侵删)

所需硬件:

  1. Arduino 主板 (如 Arduino Uno R3)
  2. 乐高电机 (EV3 或 Technic)
  3. L298N 电机驱动板 (或类似的,如 TB6612FNG)
  4. 9V电池盒 (为乐高电机和L298N供电)
  5. 杜邦线 (用于连接)

连接步骤:

  1. 电源连接

    • 9V电池盒 的正负极分别连接到 L298NVMSGND 端子,这是为电机提供动力。
    • L298N+5VGND 端子连接到 Arduino5VGND,这是为Arduino和L298N的逻辑电路供电(如果你的L298N有+5V跳线,可以拔掉,由外部供电)。
  2. 电机连接

    乐高机器人 arduino-第3张图片-广州国自机器人
    (图片来源网络,侵删)
    • 乐高电机 的两根导线连接到 L298N 的任意一个电机输出端(如 OUT1OUT2)。
  3. 控制信号连接

    • Arduino数字引脚(如 Pin 7Pin 8)连接到 L298NIN1IN2,这两个引脚控制电机的正转、反转和停止。
    • (可选,用于调速)将 Arduino 的一个 PWM引脚(如 Pin 9)连接到 L298NENA,通过改变这个引脚的PWM值,可以控制电机的速度。

接线示意图(简化):

       9V Battery Box
          |   |
          |   |
          V   V
      +-------+  (L298N Motor Driver)
      | VMS   |----> To LEGO Motor (+)
      | GND   |----> To LEGO Motor (-)
      | +5V   |----> Arduino 5V
      | GND   |----> Arduino GND
      | IN1   |----> Arduino Pin 7
      | IN2   |----> Arduino Pin 8
      | ENA   |----> Arduino Pin 9 (PWM)
      +-------+

传感器连接

对于乐高传感器,情况会复杂一些,因为它们通常是I²C或数字/模拟信号,你可以:

  • 使用传感器适配器:市面上有专门的“传感器适配器”,可以将乐高传感器的信号转换为Arduino可以读取的信号。
  • 逆向工程:通过查阅资料,了解乐高传感器的引脚定义和通信协议,自己设计电路来读取数据(有一定难度)。
  • 直接使用Arduino传感器:对于初学者,最简单的方法是直接购买与Arduino兼容的传感器,如HC-SR04超声波传感器,然后将其固定在乐高结构上。

简单入门项目:乐高小车 + Arduino

目标:搭建一个乐高小车,用Arduino代码控制它前进、后退、左转、右转。

步骤 1:搭建 用乐高积木搭建一个简单的两轮小车,并将两个乐高电机分别作为左右轮的驱动。

步骤 2:硬件连接 按照上面“L298N方案”的接线图,连接好 Arduino、L298N 和两个乐高电机,假设:

  • 左电机连接到 L298N 的 OUT1/OUT2,由 Arduino Pin 7, 8, 9 控制。
  • 右电机连接到 L298N 的 OUT3/OUT4,由 Arduino Pin 10, 11, 12 控制。

步骤 3:Arduino 代码

// 定义控制引脚
const int leftMotor_IN1 = 7;
const int leftMotor_IN2 = 8;
const int leftMotor_ENA = 9;  // PWM引脚
const int rightMotor_IN1 = 10;
const int rightMotor_IN2 = 11;
const int rightMotor_ENB = 12; // PWM引脚
void setup() {
  // 设置所有控制引脚为输出模式
  pinMode(leftMotor_IN1, OUTPUT);
  pinMode(leftMotor_IN2, OUTPUT);
  pinMode(leftMotor_ENA, OUTPUT);
  pinMode(rightMotor_IN1, OUTPUT);
  pinMode(rightMotor_IN2, OUTPUT);
  pinMode(rightMotor_ENB, OUTPUT);
  // 初始化,让电机停止
  stopMotors();
}
void loop() {
  // 1. 前进 2秒
  moveForward(255); // 255是最大速度
  delay(2000);
  // 2. 停止 1秒
  stopMotors();
  delay(1000);
  // 3. 左转 1秒
  turnLeft(255);
  delay(1000);
  // 4. 停止 1秒
  stopMotors();
  delay(1000);
  // 5. 右转 1秒
  turnRight(255);
  delay(1000);
  // 6. 停止
  stopMotors();
  // 程序会从头开始循环
}
// --- 自定义函数 ---
// 前进函数
void moveForward(int speed) {
  // 左电机前进
  digitalWrite(leftMotor_IN1, HIGH);
  digitalWrite(leftMotor_IN2, LOW);
  analogWrite(leftMotor_ENA, speed);
  // 右电机前进
  digitalWrite(rightMotor_IN1, HIGH);
  digitalWrite(rightMotor_IN2, LOW);
  analogWrite(rightMotor_ENB, speed);
}
// 后退函数
void moveBackward(int speed) {
  // 左电机后退
  digitalWrite(leftMotor_IN1, LOW);
  digitalWrite(leftMotor_IN2, HIGH);
  analogWrite(leftMotor_ENA, speed);
  // 右电机后退
  digitalWrite(rightMotor_IN1, LOW);
  digitalWrite(rightMotor_IN2, HIGH);
  analogWrite(rightMotor_ENB, speed);
}
// 左转函数(左轮停,右轮前进)
void turnLeft(int speed) {
  // 左电机停止
  digitalWrite(leftMotor_IN1, LOW);
  digitalWrite(leftMotor_IN2, LOW);
  analogWrite(leftMotor_ENA, 0);
  // 右电机前进
  digitalWrite(rightMotor_IN1, HIGH);
  digitalWrite(rightMotor_IN2, LOW);
  analogWrite(rightMotor_ENB, speed);
}
// 右转函数(右轮停,左轮前进)
void turnRight(int speed) {
  // 左电机前进
  digitalWrite(leftMotor_IN1, HIGH);
  digitalWrite(leftMotor_IN2, LOW);
  analogWrite(leftMotor_ENA, speed);
  // 右电机停止
  digitalWrite(rightMotor_IN1, LOW);
  digitalWrite(rightMotor_IN2, LOW);
  analogWrite(rightMotor_ENB, 0);
}
// 停止函数
void stopMotors() {
  // 停止左电机
  digitalWrite(leftMotor_IN1, LOW);
  digitalWrite(leftMotor_IN2, LOW);
  analogWrite(leftMotor_ENA, 0);
  // 停止右电机
  digitalWrite(rightMotor_IN1, LOW);
  digitalWrite(rightMotor_IN2, LOW);
  analogWrite(rightMotor_ENB, 0);
}

进阶玩法

当你掌握了基本连接后,可以尝试更酷的项目:

  • 避障小车:在车头装一个Arduino超声波传感器,让小车能自动检测前方障碍物并绕行。
  • 遥控小车:给Arduino加装一个蓝牙模块,然后用手机App通过蓝牙发送指令,控制小车移动。
  • 机械臂:用乐高搭建一个多关节机械臂,用Arduino和多个舵机来精确控制每个关节的运动。
  • 天气站:用乐高搭建一个底座,上面安装Arduino温湿度、气压传感器,并将数据显示在Arduino的OLED屏幕上。

乐高 + Arduino = 无限可能

这个组合让你既享受了乐高带来的创造乐趣,又体验了从底层控制硬件的编程成就感,它是一个绝佳的STEAM(科学、技术、工程、艺术、数学)学习项目,无论是孩子还是成人,都能在其中找到乐趣和挑战,从简单的电机控制开始,逐步加入传感器和更复杂的逻辑,你完全可以打造出独一无二的智能机器人!

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