Arduino 循迹机器人代码:自动转向与沿墙行走
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);
}
}
代码解释:
leftSensor和rightSensor: 变量分别定义了左右地面传感器的引脚编号。motor1和motor2: 变量分别定义了电机 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 编写循迹机器人代码,实现了自动转向和沿墙行走功能。代码解释了关键部分,并提供了转向和沿墙行走代码的实现方式。希望本文能够帮助您更好地理解循迹机器人的工作原理,并为您的机器人项目提供参考。
原文地址: https://www.cveoy.top/t/topic/jpRG 著作权归作者所有。请勿转载和采集!