arduino与机器人

99ANYc3cd6 机器人 7

Arduino 在机器人中的角色:机器人的“大脑”

你可以把一个机器人想象成一个生物:

arduino与机器人-第1张图片-广州国自机器人
(图片来源网络,侵删)
  • Arduino:就是机器人的大脑,它负责思考、决策和发出指令。
  • 传感器:就是机器人的眼睛、耳朵、皮肤,它们负责感知外部环境(如光线、距离、颜色、声音等)。
  • 执行器:就是机器人的手、脚、嘴巴,它们负责执行大脑的指令(如转动马达、发光、发声等)。

核心任务: Arduino 的核心任务是读取传感器的数据,根据预设的逻辑进行处理,然后控制执行器做出相应的动作,这个过程被称为控制循环


机器人系统的核心组件

一个基于 Arduino 的机器人通常由以下几个部分组成:

核心控制器

  • Arduino 主板:这是整个系统的核心。
    • 入门首选Arduino UNO R3,它有足够的 I/O 口、社区支持广泛、教程丰富。
    • 进阶选择Arduino Mega(更多I/O口,适合复杂机器人)、Arduino Nano(体积小巧,适合空间有限的机器人)。

执行器

让机器人动起来的部件。

  • 直流减速电机:最常见,用于驱动轮子,实现移动,通常需要配合电机驱动板使用,因为 Arduino 的 I/O 口电流太小,无法直接驱动电机。
  • 舵机:可以精确控制旋转角度(如0-180度),常用于机械臂、云台、头部转动等。
  • 步进电机:可以精确控制转动的步数,适用于需要高精度定位的场景(如 3D 打印机、绘图仪)。
  • 其他:LED灯、蜂鸣器、振动马达等。

传感器

让机器人感知世界的部件。

arduino与机器人-第2张图片-广州国自机器人
(图片来源网络,侵删)
  • 避障传感器超声波传感器(最常用,通过发射和接收超声波来测量距离)、红外避障传感器
  • 巡线传感器红外对管(通过检测地面黑白线的反射光差异来巡线)。
  • 环境传感器光线传感器温湿度传感器
  • 姿态传感器陀螺仪/加速度计(用于保持平衡、测量姿态,如自平衡车)。

结构与底盘

机器人的“骨架”。

  • 可以购买现成的机器人底盘套件,通常包含电机、轮子、螺丝和亚克力/金属底盘。
  • 也可以使用 3D 打印自己设计的外壳,或者用乐高、亚克力板等材料DIY。

电源

为所有部件提供能量。

  • 电池盒:最常用的是使用 6节AA电池盒 提供 9V 电压,或者使用 4V 的锂电池组
  • 注意:电源的功率要足够驱动电机,否则会导致机器人“动力不足”或 Arduino 重启。

Arduino 如何控制机器人:工作流程

一个典型的机器人程序(Sketch)会遵循以下流程:

  1. 包含库:如果使用了复杂的模块(如舵机、超声波传感器),需要先包含对应的库文件。

    arduino与机器人-第3张图片-广州国自机器人
    (图片来源网络,侵删)
    #include <Servo.h> // 包含舵机库
    #include <NewPing.h> // 包含超声波传感器库
  2. 定义引脚:声明 Arduino 的哪个引脚连接到了哪个传感器或执行器。

    #define ECHO_PIN 2
    #define TRIG_PIN 3
    #define SERVO_PIN 9
    #define MOTOR_SPEED_A 5
  3. 初始化:在 setup() 函数中,设置引脚模式(输入/输出)、启动串口通信、初始化传感器和执行器。

    void setup() {
      Serial.begin(9600); // 启动串口,用于调试
      pinMode(TRIG_PIN, OUTPUT);
      pinMode(ECHO_PIN, INPUT);
      myServo.attach(SERVO_PIN); // 将舵机连接到9号引脚
    }
  4. 主循环:在 loop() 函数中,这是机器人持续执行的核心逻辑。

    void loop() {
      // 1. 读取传感器数据
      int distance = readUltrasonicDistance();
      // 2. 处理数据并做出决策
      if (distance < 20) { // 如果距离小于20cm
        // 遇到障碍物,执行避障动作
        avoidObstacle();
      } else {
        // 没有障碍物,直行
        moveForward();
      }
      // 可以加一个短延时,防止循环太快
      delay(50);
    }

一个经典入门项目:避障小车

这是一个几乎每个 Arduino 爱好者都会做的项目,它能帮助你理解所有核心组件如何协同工作。

所需组件:

  1. Arduino UNO R3
  2. L298N 电机驱动板
  3. 超声波传感器 (HC-SR04)
  4. TT 减速电机 + 轮子
  5. 机器人底盘套件
  6. 电池盒(6节AA或7.4V锂电池)

连接方式:

  • 超声波传感器:
    • VCC -> Arduino 5V
    • GND -> Arduino GND
    • Trig -> Arduino 数字引脚 3
    • Echo -> Arduino 数字引脚 2
  • L298N 电机驱动板:
    • 控制信号:
      • IN1 -> Arduino 数字引脚 4
      • IN2 -> Arduino 数字引脚 5
      • IN3 -> Arduino 数字引脚 6
      • IN4 -> Arduino 数字引脚 7
    • 电源:
      • +12V (或 VMS) -> 电池盒正极
      • GND -> 电池盒负极 Arduino GND (共地非常重要!)
      • +5V -> 可以不接,从外部取电,如果需要给 Arduino 供电,可以接 Arduino 的 5V 和 VIN。
    • 电机:
      • OUT1, OUT2 -> 接左轮电机
      • OUT3, OUT4 -> 接右轮电机

示例代码:

// 定义引脚
const int trigPin = 3;
const int echoPin = 2;
// 电机控制引脚
const int motorA1 = 4; // 左电机 IN1
const int motorA2 = 5; // 左电机 IN2
const int motorB1 = 6; // 右电机 IN3
const int motorB2 = 7; // 右电机 IN4
void setup() {
  // 初始化串口通信
  Serial.begin(9600);
  // 设置引脚模式
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(motorA1, OUTPUT);
  pinMode(motorA2, OUTPUT);
  pinMode(motorB1, OUTPUT);
  pinMode(motorB2, OUTPUT);
}
// 读取超声波距离
long readUltrasonicDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // pulseIn 函数会等待高电平并返回其持续时间(微秒)
  long duration = pulseIn(echoPin, HIGH);
  // 声速 = 340m/s = 0.034cm/μs
  // 距离 = (时间 * 声速) / 2 (因为一来一回)
  long distance = duration * 0.034 / 2;
  return distance;
}
// 控制电机函数
void moveForward() {
  digitalWrite(motorA1, HIGH);
  digitalWrite(motorA2, LOW);
  digitalWrite(motorB1, HIGH);
  digitalWrite(motorB2, LOW);
}
void moveBackward() {
  digitalWrite(motorA1, LOW);
  digitalWrite(motorA2, HIGH);
  digitalWrite(motorB1, LOW);
  digitalWrite(motorB2, HIGH);
}
void turnLeft() {
  digitalWrite(motorA1, LOW);
  digitalWrite(motorA2, HIGH);
  digitalWrite(motorB1, HIGH);
  digitalWrite(motorB2, LOW);
}
void turnRight() {
  digitalWrite(motorA1, HIGH);
  digitalWrite(motorA2, LOW);
  digitalWrite(motorB1, LOW);
  digitalWrite(motorB2, HIGH);
}
void stopMotors() {
  digitalWrite(motorA1, LOW);
  digitalWrite(motorA2, LOW);
  digitalWrite(motorB1, LOW);
  digitalWrite(motorB2, LOW);
}
void loop() {
  long distance = readUltrasonicDistance();
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
  if (distance < 20 && distance > 0) { // 检测到障碍物且读数有效
    stopMotors();
    delay(500);
    turnRight(); // 遇到障碍物,向右转
    delay(1000); // 转向1秒
  } else {
    moveForward(); // 否则,前进
  }
  delay(50); // 短暂延时,稳定控制
}

进阶方向

当你掌握了基础后,可以探索更复杂的机器人项目:

  1. 蓝牙/WiFi 机器人:添加蓝牙模块(如 HC-05)或 WiFi 模块(如 ESP8266),可以用手机 App 或网页远程控制机器人。
  2. 循迹机器人:使用红外巡线传感器,让机器人沿着地上的黑线行走。
  3. 机械臂:使用 2-4 个舵机来控制机械臂的关节,实现抓取和放置物体的功能。
  4. 自平衡车:这是最经典也最具挑战性的项目之一,需要使用 MPU-6050 陀螺仪/加速度计,并运用复杂的控制算法(如 PID 算法)来保持车身平衡。

Arduino 是进入机器人世界的绝佳平台,它成本低、易于上手、社区庞大、资源丰富,从最简单的避障小车开始,你可以一步步学习硬件连接、编程逻辑、传感器融合和控制算法,最终创造出属于你自己的、功能强大的机器人。

祝你玩得开心!

标签: arduino机器人制作教程 arduino机器人编程入门 arduino机器人项目案例

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