Search Code

Bài 7/10: Theo dõi đường line, Phát hiện vách đá Hiệu chỉnh cảm biến xám Xe Raspberry Pi Pico

Bài học này là một phần của: Xe thông minh Raspberry Pi Pico 4WD

Bài 7/10: Theo dõi đường line, Phát hiện vách đá Hiệu chỉnh cảm biến xám Xe Raspberry Pi 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])的函数处理。主控制循环随后使用此列表来确定小车的动作。

Logic này dựa trên việc so sánh trạng thái cảm biến với các điều kiện được xác định trước. Ví dụ, nếu trạng thái là [0, 1, 0], xe đang nằm chính xác trên vạch và nên tiến thẳng. Nếu trạng thái là [1, 0, 0], xe đã lệch sang trái và cần điều chỉnh hướng sang phải. Video giải thích chi tiết các điều kiện này (trong video tại 13:05), cho thấy các tổ hợp khác nhau của tín hiệu cảm biến tương ứng với các lệnh động cơ khác nhau, như rẽ trái, rẽ phải hoặc điều chỉnh gắt.


# Đây là ví dụ khái niệm về logic bám vạch
# Giả sử 'status' là một danh sách như [0, 1, 0] từ cảm biến grayscale

if status == [0, 1, 0]:  # Cảm biến trung tâm trên vạch
    # Tiến thẳng
    pass
elif status == [1, 0, 0]:  # Cảm biến trái trên vạch
    # Rẽ phải
    pass
elif status == [0, 0, 1]:  # Cảm biến phải trên vạch
    # Rẽ trái
    pass
# ... các điều kiện khác cho các cú rẽ gắt hơn

Trình Diễn Dự Án Trực Tiếp

Trong phần trình diễn của video, xe được đặt trên một đường đua in sẵn với một vạch đen dày. Xe bám theo vạch thành công, thực hiện các cú rẽ và điều chỉnh khi di chuyển dọc theo đường. Video nêu bật một vấn đề phổ biến là bánh xe có thể bị lỏng trong các cú rẽ gắt, và đưa ra giải pháp đơn giản là thêm một miếng băng dính nhỏ vào trục bánh xe để khớp chặt hơn. Sau khi khắc phục, xe di chuyển mượt mà trên toàn bộ đường đua, chứng minh hiệu quả của việc hiệu chuẩn và logic bám vạch.

Các Chương Trong Video

  • [00:00] Giới thiệu về Bám Vạch và Phát Hiện Vách Đá
  • [03:01] Đấu Dây Mô-đun Cảm Biến Grayscale
  • [04:39] Hiệu Chuẩn Cảm Biến Grayscale
  • [13:05] Hiểu Logic Bám Vạch
  • [19:43] Kiểm Tra Mã Bám Vạch
  • [24:50] Trình Diễn Trực Tiếp Trên Đường Đua Thử Nghiệm
Không có mã đính kèm.

Tài nguyên & tài liệu tham khảo

Chưa có tài nguyên nào.

Tập tin📁

Không có tệp nào khả dụng.