搜索代码

第7课,共10课:循线追踪、悬崖检测 校准灰度传感器 树莓派Pico小车

本课是……的一部分: Raspberry Pi Pico 四驱智能车

第7课,共10课:循线追踪、悬崖检测 校准灰度传感器 树莓派Pico小车

在本树莓派Pico智能小车课程的第七课中,我们探索使用灰度传感器模块进行循迹和悬崖检测的关键功能。该模块充当您小车的“眼睛”,使其能够自主沿预定路径行驶并避免危险跌落。本项目演示了如何校准传感器以获得准确读数,并实现使小车保持正确轨迹的逻辑,同时还有一个有趣的“别推我”功能来模拟悬崖检测。本指南非常适合任何希望超越基本遥控操作、深入传感器引导机器人世界的人。

这项技术除了作为一个有趣的DIY项目外,还有众多实际应用。您将在这里学到的原理是构建真实世界自主系统的基础。以下是一些启发您的想法:

  • 自动送货机器人:构建一个能够通过跟随标记线在仓库或办公室地板上导航以递送物品的小型机器人。
  • 桌面迷宫求解器:创建一个能够导航用黑色电工胶带绘制的复杂迷宫的机器人。
  • 安全与安防机器人:实现一个巡逻机器人,它遵循设定路径并使用悬崖检测来避免从楼梯或高处跌落。
  • 教育平台:使用该小车教授PID控制、传感器融合和自主导航的基础知识。

硬件与组件

本项目基于SunFounder树莓派Pico四驱小车套件。本课的关键组件是灰度传感器模块,它对于循迹和悬崖检测都至关重要。该模块具有三个独立传感器,用于测量下方表面反射的光量。这些数据用于区分黑线、白色表面和“悬崖”或开放空间。完整套件还包括Pico小车底盘、电机和为系统供电的电池组。

接线指南

正确的接线是让传感器工作的第一步。灰度模块使用四根线连接到树莓派Pico。接线很简单,视频中已清晰演示。

以下是视频中显示的接线配置(视频03:01处):

  • 黑线:连接到Pico上的GND引脚。
  • 红线:连接到Pico上的3.3V引脚。
  • 黄线(右侧传感器):连接到GPIO引脚28
  • 棕线(中心传感器):连接到GPIO引脚27
  • 白/灰线(左侧传感器):连接到GPIO引脚26

校准灰度传感器

在小车能够可靠地循迹之前,您必须校准传感器以了解白色、黑色和空白的不同读数。这是确保小车做出正确决策的关键步骤。传感器的灵敏度可以通过模块上的一个小电位器进行调整。

视频演示了校准过程(视频04:39处)。传感器应放置在地面上方的最佳高度——大约11毫米或1厘米——以获得清晰的读数。通过调整电位器并观察数值,您可以找到最佳点。目标是使白色表面(反射大量光)和黑线(反射很少光)的读数之间存在显著差异。

以下是读数含义的总结:

  • 白色表面:高反射,导致高传感器值(例如,约20,000)。
  • 黑线:低反射,导致低传感器值(例如,约3,000)。
  • 悬崖(空洞空间):无反射,导致最低传感器值(例如,约1,200)。

代码解释

由于本课未提供代码,我们将重点介绍概念逻辑以及Robojax库中用于使小车工作的关键函数。视频解释了您将从提供的库中使用的两个主要函数。

测试传感器

第一步是使用一个简单脚本测试您的传感器。该脚本使用一个名为get_grayscale_value()的函数来读取三个传感器的原始值。它将这些值打印到串行监视器,以便您可以看到当传感器位于不同表面上时这些值如何变化。这对于验证接线和执行校准步骤非常有用。


# 这是测试函数的概念示例
from machine import Pin, ADC
import time

# 定义灰度传感器的ADC引脚
grayscale_pins = [26, 27, 28]
sensors = [ADC(Pin(pin)) for pin in grayscale_pins]

while True:
    # 读取传感器的原始16位值
    values = [sensor.read_u16() for sensor in sensors]
    print("Left: {} Center: {} Right: {}".format(values[0], values[1], values[2]))
    time.sleep_ms(100)

循迹逻辑

对于循迹,代码不使用原始模拟值。相反,它将它们转换为简单的数字状态:如果传感器位于黑线上则为1,如果位于白色表面上则为0。这由一个返回三个值列表(例如,[0, 1, 0])的函数处理。主控制循环然后使用此列表来确定小车的动作。

该逻辑基于将传感器状态与预设条件进行比较。例如,如果状态为[0, 1, 0],则小车完美位于线上,应向前行驶。如果状态为[1, 0, 0],则小车向左偏移,需要向右修正路径。视频详细解释了这些条件(视频13:05处),展示了传感器读数的不同组合如何对应不同的电机指令,例如左转、右转或进行急转弯修正。


# 这是巡线逻辑的概念示例
# 假设'status'是来自灰度传感器的列表,如[0, 1, 0]

if status == [0, 1, 0]:  # 中心传感器在线上
    # 向前行驶
    pass
elif status == [1, 0, 0]:  # 左侧传感器在线上
    # 向右转
    pass
elif status == [0, 0, 1]:  # 右侧传感器在线上
    # 向左转
    pass
# ... 其他用于更急转弯的条件

现场项目演示

在视频的演示中,小车被放置在印有粗黑线的测试轨道上。小车成功沿线路行驶,在行进过程中进行转弯和修正。视频强调了一个常见问题,即急转弯时车轮可能松动,并展示了一个简单解决方案:在轮轴上添加一小块胶带以使其更紧密贴合。修复后,小车平稳地跑完整个轨道,展示了校准和巡线逻辑的有效性。

视频章节

  • [00:00] 巡线与悬崖检测简介
  • [03:01] 连接灰度传感器模块
  • [04:39] 校准灰度传感器
  • [13:05] 理解巡线逻辑
  • [19:43] 测试巡线代码
  • [24:50] 在测试轨道上进行现场演示
没有附加代码。

资源与参考

尚无可用资源。

文件📁

没有可用的文件。