课30/31:使用SunFounder Arduino套件的智能车进行Car-8线路追踪 | Robojax
本指南将引导您使用SunFounder 3合1 Arduino套件构建一个循线路径的智能车。
该项目在视频中演示,使用红外线追踪模块检测白色表面上的黑线,并控制两个电动机保持汽车在轨道上。这是一个基础的机器人项目,可以教会你传感器读取、条件逻辑和电机控制。其实际价值巨大——这是仓库自动导引车(AGVs)、沿房间边缘行驶的机器人吸尘器以及用于学习自主导航的教育平台的基础。除了基本的构建,你还可以将这个概念应用于:

- 创建一个简单的机器人,能够在迷宫或轨道上沿着预定路径导航。
- 为小型办公室或实验室建造一个自动化配送小车。
- 为学校科学项目或竞赛开发一款循迹机器人。
- 为工业输送带原型设计一种根据位置对物品进行分类的系统。
硬件和组件
该项目的核心是线路跟踪模块,它使用一对红外(IR)发射器和接收器。以下是关键组件的细分:
- 线路跟踪模块 (TCRT5000):此传感器发出红外光并测量反射强度。该模块包含一个LM393比较器,将模拟信号转换为数字高或低输出。
- 智能汽车底盘与电机:SunFounder套件包括一个车架,配有两个齿轮电机,这些电机由Arduino控制以转向车辆。
- Arduino 板:操作的“大脑”,读取传感器并向电动机发送指令。
- 汽车护盾上的电机驱动器:该电路允许Arduino的低功耗引脚控制高电流电机。
接线指南
线路跟踪模块的接线很简单。视频显示了连接方式如下(视频时长 04:04):
- 线路跟踪器 VCC (中间引脚):连接到Arduino的5伏针。
- 线跟踪接地(左引脚):连接到Arduino的GND插销。
- 线路跟踪器输出(右引脚):连接到Arduino的数字针脚 2.
电机连接到汽车的保护板上的电机驱动器。代码中,右侧电机由引脚5和6控制,左侧电机由引脚9和10控制,如视频演示中所示(视频在12:28)。
代码解释
该代码旨在读取线路追踪器的数字信号并相应地控制电机。以下是一些关键的用户可配置部分:
const int in1 = 5; // in1,2 for right motor
const int in2 = 6;
const int in3 = 9; // in3,4 for left motor
const int in4 = 10;
const int lineTrack = 2;- 电机引脚(in1,in2,in3,in4):这些常量定义了连接到电机驱动器的Arduino引脚。如果您的接线不同,您需要更改这些值以匹配您的设置。
- 线追踪针 (lineTrack):这定义了连接到传感器信号输出的数字引脚。代码读取这个引脚以确定传感器是位于黑色还是白色表面上。
在主循环中,您可以调整speed控制汽车转弯速度的变量。该值范围从0到255,数值越高,汽车转弯越快。
int speed = 150;//0 to 255逻辑很简单:如果传感器读取到HIGH(黑线) 汽车向左转;否则,它向右转。自定义函数moveLeft()和moveRight()控制电机以实现这一目标。例如,要向左转时,右侧电机旋转,而左侧电机停止,从而使汽车转向。这个行为在视频中有详细解释(视频时间为 10:39)。
将线路追踪器放置在黑线上。同时调整灵敏度。
实时项目演示
视频以一段实时演示结束,展示了跟踪线路的小车(视频在 13:13)。小车被放置在黑色轨道上,传感器直接定位在线路上方。随着小车的移动,传感器检测到黑色线路和白色背景,向电机发送信号以调整方向。演示显示小车成功完成一个完整的循环,证明了简单的左右修正逻辑的有效性。
章节
- [00:00] 线追踪介绍
- [01:09] 线追踪模块的工作原理
- [04:04] 接线线路追踪模块
- [04:23] 使用串口监视器测试传感器
- [07:27] 理解循迹逻辑
- [09:08] 线跟随车的代码
- [11:37] 跟随线路的汽车演示
- [13:13] 在黑色跑道上的实时测试
/*
this is code for the tutorial: Lesson 30/31: Car-8 Line Tracking by Smart Car from SunFounder Arduino Kit
YouTube video: https://www.youtube.com/watch?v=Cp2rD5RkYug
Get the code from: 📚⬇️ Download and resource page https://robojax.com/RJT613
www.robojax.com
*/
const int in1 = 5; // in1,2 for right motor
const int in2 = 6;
const int in3 = 9; // in3,4 for left motor
const int in4 = 10;
const int lineTrack = 2;
void setup() {
Serial.begin(9600);
//motor
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
//line track
pinMode(lineTrack, INPUT);
}
void loop() {
int speed = 150;//0 to 255
int lineColor = digitalRead(lineTrack); // 0:white 1:black
// Serial.println(lineColor); //print on the serial monitor
if (lineColor) {
Serial.print("Black ");
moveLeft(speed);
} else {
Serial.print("White ");
moveRight(speed);
}
}
void moveLeft(int speed) {
Serial.println("LEFT");
analogWrite(in1, 0);
analogWrite(in2, speed);
analogWrite(in3, 0);
analogWrite(in4, 0);
}
void moveRight(int speed) {
Serial.println("RIGHT");
analogWrite(in1, 0);
analogWrite(in2, 0);
analogWrite(in3, speed);
analogWrite(in4, 0);
}
Common Course Links
Common Course Files
资源与参考
尚无可用资源。
文件📁
没有可用的文件。