arduino 智能机器人

99ANYc3cd6 机器人 9

什么是 Arduino 智能机器人?

它是一个以 Arduino 作为“大脑”,通过各种传感器感知世界,再根据预设的逻辑(代码)控制执行器(如电机)来完成任务或与环境互动的物理装置。

arduino 智能机器人-第1张图片-广州国自机器人
(图片来源网络,侵删)

Arduino 的角色:

  • 大脑: 负责读取传感器数据,运行程序逻辑,并向执行器发出指令。
  • 中枢神经: 连接所有传感器和执行器,让它们协同工作。

机器人的核心组成部分

一个典型的 Arduino 机器人由以下几个部分构成:

  1. 控制器:

    • Arduino UNO R3: 最经典、最适合初学者的选择,社区资源丰富,扩展性强。
    • Arduino Nano: 体积更小,适合对尺寸有要求的紧凑型机器人。
    • Arduino Mega: 拥有更多的 I/O 引脚和内存,适合功能复杂、需要连接大量传感器的机器人。
  2. 执行器:

    arduino 智能机器人-第2张图片-广州国自机器人
    (图片来源网络,侵删)
    • 直流减速电机 + 轮子: 最常见的移动方式,用于驱动轮子。
    • 舵机: 可以精确控制角度,常用于机械臂、云台、头部转动等。
    • 步进电机: 能精确控制转动角度和速度,适用于 3D 打印机、CNC 机器人等。
  3. 传感器:

    • “眼睛” - 感知环境:
      • 超声波传感器: 测量前方障碍物的距离,常用于避障。
      • 红外循迹传感器: 检测黑白线条,用于循迹小车。
      • 红外避障传感器: 与超声波类似,但精度较低,成本低。
      • 摄像头模块 (如 OV7670): 可以进行图像识别,是高级机器人的关键。
    • “耳朵” - 感知指令:
      • 蓝牙/WiFi 模块 (如 HC-05/HC-06, ESP8266): 实现手机 App 或电脑远程控制。
      • 麦克风模块: 可以实现语音控制(需要额外处理)。
    • “平衡感” - 感知自身状态:
      • 陀螺仪/加速度计 (如 MPU-6050): 用于自平衡机器人,检测机器人的倾角。
  4. 结构/底盘:

    可以是购买的机器人小车底盘套件,也可以是 3D 打印或自己动手制作的,底盘需要稳固,能够承载所有电子元件。

  5. 电源:

    arduino 智能机器人-第3张图片-广州国自机器人
    (图片来源网络,侵删)
    • 电池盒: 最常用,通常使用 4-8 节 5 号/7 号电池盒,提供 6V 或 12V 电压。
    • 锂电池组: 能量密度高,但需要配合充电管理模块,且要注意安全。
  6. 电机驱动:

    • L298N: 经典的双 H 桥电机驱动模块,可以驱动两个直流电机,支持正反转和调速。注意: L298N 发热较大,大电流时需要散热片。
    • TB6612FNG: 更新、更高效的电机驱动模块,发热小,体积小,是 L298N 的一个很好的替代品。

Arduino 机器人项目分级(从易到难)

入门级 - 线性控制机器人

这类机器人只能按照预设的程序顺序执行动作,没有感知和决策能力。

  • 项目实例:

    1. 基础遥控车: 通过蓝牙模块接收手机指令,控制前进、后退、左转、右转。
    2. 自动循迹小车: 使用红外循迹传感器,沿着地上的黑线自动行驶。
    3. 避障小车: 使用超声波传感器,检测到前方障碍物后自动转向避开。
  • 核心技能:

    • 数字/模拟引脚的读写。
    • pinMode(), digitalRead(), digitalWrite(), analogRead(), analogWrite()
    • if-else 条件判断。
    • 简单的电机控制逻辑。

进阶级 - 反馈控制机器人

这类机器人通过传感器获取环境反馈,并做出实时决策,具有“智能”的雏形。

  • 项目实例:

    1. 迷宫探索机器人: 结合了循迹和避障功能,可以探索简单的迷宫。
    2. 跟随小车: 使用红外或超声波传感器,跟随前方的物体或人移动。
    3. 机械臂: 使用多个舵机,通过蓝牙或按钮控制,抓取物体。
  • 核心技能:

    • PID(比例-积分-微分)控制算法(用于平滑控制,如速度、平衡)。
    • 状态机编程思想,处理更复杂的逻辑。
    • 串口通信与数据解析。

高级 - 智能感知机器人

这类机器人能够处理更复杂的信息(如图像、语音),并进行高级决策。

  • 项目实例:

    1. 视觉巡线机器人: 使用摄像头代替红外传感器,可以识别更复杂的颜色、形状或二维码。
    2. 人脸/物体跟随机器人: 通过摄像头识别特定的人或物体,并始终跟随。
    3. 自平衡机器人: 使用 MPU-6050 陀螺仪,通过 PID 算法实时调整电机转速,保持直立不倒,这是 Arduino 机器人领域的“圣杯”项目之一。
  • 核心技能:

    • 图像处理算法(如 OpenMV, TensorFlow Lite for Microcontrollers)。
    • 复杂的 PID 参数整定。
    • 多传感器数据融合技术。

一个经典项目:智能避障小车(代码与思路)

这是最经典的入门项目,能让你快速掌握机器人开发的核心流程。

硬件清单

  • Arduino UNO R3
  • L298N 电机驱动模块
  • 超声波传感器
  • 直流减速电机 x2
  • 轮子 x2
  • 机器人底盘
  • 电池盒 (6V 或 12V)
  • 杜邦线若干

连接图

  • L298N -> Arduino:
    • IN1 -> Pin 7
    • IN2 -> Pin 6
    • IN3 -> Pin 5
    • IN4 -> Pin 4
    • ENA -> Pin 9 (PWM)
    • ENB -> Pin 10 (PWM)
  • L298N -> 超声波传感器:
    • VCC -> 5V
    • GND -> GND
    • Trig -> Pin 12
    • Echo -> Pin 11
  • L298N -> 电机:
    • 将两个电机分别接到 OUT1/OUT2OUT3/OUT4
  • 电源:
    • 电池盒正负极分别接到 L298N 模块的 +12VGND注意: 不要直接接到 Arduino 的 VIN,因为电流可能过大损坏 Arduino,L298N 会为 Arduino 提供 5V 电源。

Arduino 代码

// 定义引脚
const int enA = 9;  // 使能电机A (PWM)
const int in1 = 7;  // 输入1
const int in2 = 6;  // 输入2
const int enB = 10; // 使能电机B (PWM)
const int in3 = 5;  // 输入3
const int in4 = 4;  // 输入4
const int trigPin = 12; // 超声波 Trig
const int echoPin = 11; // 超声波 Echo
// 定义变量
long duration;
int distance;
void setup() {
  // 设置所有引脚模式
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(trigPin, OUTPUT); // Trig is an output
  pinMode(echoPin, INPUT);  // Echo is an input
  // 初始化串口通信,用于调试
  Serial.begin(9600);
}
void loop() {
  // 1. 测量距离
  distance = getDistance();
  Serial.print("Distance: ");
  Serial.println(distance);
  // 2. 根据距离做出决策
  if (distance > 20) {
    // 距离大于20cm,前进
    moveForward();
  } else {
    // 距离小于等于20cm,停止并转向
    stopRobot();
    delay(500); // 停止半秒
    turnRight(); // 假设右转
    delay(1000); // 转向1秒
  }
}
// --- 电机控制函数 ---
void moveForward() {
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  analogWrite(enA, 200); // 设置速度 (0-255)
  analogWrite(enB, 200);
}
void turnRight() {
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH); // 右轮后退
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);  // 左轮前进
  analogWrite(enA, 200);
  analogWrite(enB, 200);
}
void stopRobot() {
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}
// --- 超声波测距函数 ---
int getDistance() {
  // 发送一个10us的高电平来触发Trig
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // 读取Echo引脚返回的脉冲时间,单位为微秒
  duration = pulseIn(echoPin, HIGH);
  // 计算距离: 声速 = 340m/s = 0.034cm/us
  // 距离 = (时间 * 声速) / 2 (因为去回)
  int distance = duration * 0.034 / 2;
  return distance;
}

代码思路解析

  1. setup() 函数:

    • 定义所有引脚的输入输出模式。
    • pinMode(enA/enB, OUTPUT):将使能引脚设为输出,用于控制电机速度。
    • pinMode(in1-in4, OUTPUT):将控制引脚设为输出,用于控制电机正反转。
    • pinMode(trigPin, OUTPUT):超声波的 Trig 引脚需要 Arduino 发送信号。
    • pinMode(echoPin, INPUT):超声波的 Echo 引脚需要 Arduino 接收信号。
    • Serial.begin(9600):启动串口,方便我们在电脑上看到 distance 的值,便于调试。
  2. loop() 函数:

    • 这是机器人的主循环,会不断重复执行。
    • getDistance():调用测距函数,获取前方障碍物的距离。
    • if-else 判断:这是机器人的“决策中心”。
      • 如果距离大于 20cm,就调用 moveForward() 函数前进。
      • 如果距离小于等于 20cm,就先调用 stopRobot() 停止,然后调用 turnRight() 右转,并延时 1 秒,给机器人足够的时间转过身去。
  3. 电机控制函数 (moveForward, turnRight, stopRobot):

    • 通过控制 in1, in2, in3, in4 的电平组合,来决定两个电机的转动方向。
    • analogWrite() 函数可以输出一个 PWM 信号,从而平滑地控制电机的转速。
  4. 超声波测距函数 (getDistance):

    • 触发:Trig 引脚一个 10 微秒的高电平脉冲,这是超声波模块开始工作的“启动信号”。
    • 接收: 模块收到信号后,会从 Echo 引脚发送一个高电平脉冲,这个脉冲的宽度就是超声波从发射到返回所经过的时间。
    • 计算: 使用 pulseIn(echoPin, HIGH) 函数可以精确测量这个脉冲的宽度(duration),根据声速和时间,计算出距离。

学习资源与建议

  1. 购买套件: 强烈建议初学者购买一个包含 Arduino UNO、传感器、电机、底盘和导线的机器人小车套件,这能让你免去采购和组装的麻烦,专注于编程和逻辑实现。
  2. 在线教程:
    • Bilibili: 有大量优秀的中文视频教程,搜索“Arduino 小车”、“Arduino 机器人”等关键词。
    • YouTube: 国外有很多高质量的教程,如 Paul McWhorter, GreatScott! 等,可以开启字幕学习。
    • 官方文档: Arduino 官网有最权威的函数库和引脚说明。
  3. 社区论坛:
    • Arduino 中文社区: 国内的 Arduino 爱好者聚集地,遇到问题可以在这里提问。
    • GitHub: 搜索你的机器人项目,可以找到很多开源的代码和设计参考。

给你的建议:

  • 从模仿开始: 先跟着教程做一个完整的项目,确保它能正常工作。
  • 理解原理: 不要只复制代码,一定要搞清楚每一行代码的作用,以及硬件连接的逻辑。
  • 大胆修改: 尝试修改代码,比如改变避障的距离、调整电机的速度,看看会发生什么。
  • 分步调试: 如果项目不工作,先测试最简单的部分,先让电机转起来,再测试传感器读数是否正确,最后再把它们组合起来。

祝你玩得开心,做出属于你自己的智能机器人!

标签: arduino智能机器人制作教程 arduino智能机器人编程入门 arduino智能机器人配件清单

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