零基础入门Arduino:搭建循迹小车(一)
·
经过驱动L298N和寻迹模块的学习,相信大家有能力做出一个最简单的循迹小车,也是最经典的。现在让我们动手开始搭建!
硬件准备
- Arduino UNO 开发板
- 两路红外循迹模块(TCRT5000或其他型号)
- L298N 电机驱动模块
- 直流减速电机 ×2
- 小车底盘及轮子(如下图)
- 7.4V 锂电池(或其他合适电源)
- 杜邦线若干
电路连接
-
红外循迹模块
- 左传感器 OUT 接 Arduino A0
- 右传感器 OUT 接 Arduino A1
- VCC 接 5V,GND 接 GND
-
L298N 电机驱动
- IN1 接 Arduino D5(控制左侧电机方向)
- IN2 接 Arduino D6(控制左侧电机方向)
- IN3 接 Arduino D9 (控制右侧电机方向)
- IN4 接 Arduino D10(控制右侧电机方向)
- ENA 接 Arduino D3(左侧电机 PWM 调速)也可直接跳帽
- ENB 接 Arduino D11(右侧电机 PWM 调速)也可直接跳帽
- 驱动模块电源输入接 7.4V 锂电池
-
电机接线
- 左侧电机接 L298N 的 OUT1 和 OUT2
- 右侧电机接 L298N 的 OUT3 和 OUT4
代码实现
// 定义引脚
const int leftSensor = A0; // 左循迹传感器
const int rightSensor = A1; // 右循迹传感器
const int IN1 = 5; // 左电机方向1
const int IN2 = 6; // 左电机方向2
const int IN3 = 9; // 右电机方向1
const int IN4 = 10; // 右电机方向2
const int ENA = 3; // 左电机PWM
const int ENB = 11; // 右电机PWM
// 电机速度(0-255)
const int baseSpeed = 150; // 基础速度
const int turnSpeed = 200; // 转向速度
void setup() {
pinMode(leftSensor, INPUT);
pinMode(rightSensor, INPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
Serial.begin(9600);
}
void loop() {
int leftValue = digitalRead(leftSensor); // 读取左传感器
int rightValue = digitalRead(rightSensor); // 读取右传感器
// 打印传感器值(调试用)
Serial.print("Left: ");
Serial.print(leftValue);
Serial.print(" | Right: ");
Serial.println(rightValue);
// 循迹逻辑
if (leftValue == LOW && rightValue == LOW) {
moveForward(); // 两侧均检测到黑线,直行
} else if (leftValue == HIGH && rightValue == LOW) {
turnLeft(); // 左侧偏离黑线,左转
} else if (leftValue == LOW && rightValue == HIGH) {
turnRight(); // 右侧偏离黑线,右转
} else {
stopCar(); // 其他情况停车
}
}
// 前进函数
void moveForward() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, baseSpeed);
analogWrite(ENB, baseSpeed);
}
// 后退函数
void moveBackward() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, baseSpeed);
analogWrite(ENB, baseSpeed);
}
// 左转函数
void turnLeft() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, turnSpeed);
analogWrite(ENB, turnSpeed);
}
// 右转函数
void turnRight() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, turnSpeed);
analogWrite(ENB, turnSpeed);
}
// 停车函数
void stopCar() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}
调试与优化
- 传感器校准:将小车放在黑线上,调整传感器高度,确保能稳定检测黑线(输出 LOW)和背景(输出 HIGH)
- 逻辑扩展:如需更复杂路径(如十字路口),可增加延时或状态判断逻辑。
注意事项
- 确保电机电源与 Arduino 电源共地。
- 若电机反转,调换 IN1/IN2 或 IN3/IN4 的接线。
- 红外传感器易受环境光干扰,尽量在稳定光照条件下测试。
更多推荐



所有评论(0)