Arduino 循迹机器人代码:自动转向与沿墙行走

本文将通过 Arduino IDE 编写代码,实现一个能够在地面传感器检测到黑线时自动转向,并在右转后沿墙行走的小机器人。

代码功能:

  • 地面传感器未检测到黑线时直行
  • 左右两个地面传感器同时感应到黑线时停止 5 秒,随后进行转向:
    • 第一次左转
    • 第二次右转
    • 第三次左转
    • 第四次右转
  • 右转后开始沿墙运动

代码:

int leftSensor = 2; // 左侧传感器引脚
int rightSensor = 3; // 右侧传感器引脚
int motor1 = 4; // 电机 1 引脚
int motor2 = 5; // 电机 2 引脚

void setup() {
  pinMode(leftSensor, INPUT);
  pinMode(rightSensor, INPUT);
  pinMode(motor1, OUTPUT);
  pinMode(motor2, OUTPUT);
}

void loop() {
  int leftValue = digitalRead(leftSensor);
  int rightValue = digitalRead(rightSensor);
  
  if (leftValue == LOW && rightValue == LOW) { // 当两个传感器都未检测到黑线时
    digitalWrite(motor1, HIGH);
    digitalWrite(motor2, HIGH);
  } else if (leftValue == HIGH && rightValue == HIGH) { // 当两个传感器同时检测到黑线时
    digitalWrite(motor1, LOW);
    digitalWrite(motor2, LOW);
    delay(5000); // 停止 5 秒
    // 在此处添加代码,使小机器人进行左右转向
  } else { // 当只有一个传感器检测到黑线时
    digitalWrite(motor1, HIGH);
    digitalWrite(motor2, LOW);
  }
}

代码解释:

  • leftSensorrightSensor: 变量分别定义了左右地面传感器的引脚编号。
  • motor1motor2: 变量分别定义了电机 1 和电机 2 的引脚编号。
  • setup() 函数: 初始化传感器引脚为输入模式,电机引脚为输出模式。
  • loop() 函数: 循环读取传感器状态,根据状态控制电机运行。
  • if (leftValue == LOW && rightValue == LOW): 当两个传感器都未检测到黑线时,两个电机同时正转,机器人直行。
  • else if (leftValue == HIGH && rightValue == HIGH): 当两个传感器同时检测到黑线时,两个电机停止,机器人停止 5 秒,并在此处添加转向代码。
  • else: 当只有一个传感器检测到黑线时,一个电机正转,另一个电机反转,机器人转向。

转向代码添加:

else if 语句中的注释处添加以下代码,实现机器人自动转向:

static int turnCount = 0; // 转弯计数器

if (turnCount == 0) { // 第一次左转
  digitalWrite(motor1, LOW);
  digitalWrite(motor2, HIGH);
  delay(500); // 旋转 0.5 秒
  turnCount++;
} else if (turnCount == 1) { // 第二次右转
  digitalWrite(motor1, HIGH);
  digitalWrite(motor2, LOW);
  delay(500); // 旋转 0.5 秒
  turnCount++;
} else if (turnCount == 2) { // 第三次左转
  digitalWrite(motor1, LOW);
  digitalWrite(motor2, HIGH);
  delay(500); // 旋转 0.5 秒
  turnCount++;
} else if (turnCount == 3) { // 第四次右转
  digitalWrite(motor1, HIGH);
  digitalWrite(motor2, LOW);
  delay(500); // 旋转 0.5 秒
  turnCount = 0; // 重置计数器
}

沿墙行走代码:

else if 语句中的注释处添加以下代码,实现机器人右转后沿墙行走:

static bool wallFollowing = false; // 沿墙标识

if (turnCount == 1) { // 第二次右转
  wallFollowing = true;
}

if (wallFollowing) { // 沿墙行走
  if (rightValue == HIGH) { // 当右侧传感器检测到黑线时
    digitalWrite(motor1, HIGH);
    digitalWrite(motor2, LOW);
  } else { // 当右侧传感器未检测到黑线时
    digitalWrite(motor1, LOW);
    digitalWrite(motor2, HIGH);
  }
}

代码完善:

  • 此代码示例仅供参考,实际应用中可能需要根据具体情况进行调整。
  • 可以根据需要调整转向和沿墙行走的时间和速度。
  • 可以添加其他功能,例如超声波传感器避障、红外线传感器检测等。

总结:

本文介绍了使用 Arduino IDE 编写循迹机器人代码,实现了自动转向和沿墙行走功能。代码解释了关键部分,并提供了转向和沿墙行走代码的实现方式。希望本文能够帮助您更好地理解循迹机器人的工作原理,并为您的机器人项目提供参考。

Arduino 循迹机器人代码:自动转向与沿墙行走

原文地址: https://www.cveoy.top/t/topic/jpRG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录