ค้นหาโค้ด

บทเรียนที่ 7 จาก 10: การติดตามเส้น การตรวจจับขอบหน้าผา การปรับเทียบเซนเซอร์ระดับสีเทา รถ Raspberry Pi Pico

บทเรียนนี้เป็นส่วนหนึ่งของ: Raspberry Pi Pico 4WD รถอัจฉริยะ

บทเรียนที่ 7 จาก 10: การติดตามเส้น การตรวจจับขอบหน้าผา การปรับเทียบเซนเซอร์ระดับสีเทา รถ Raspberry Pi Pico

ในบทเรียนที่เจ็ดของคอร์ส Raspberry Pi Pico Smart Car นี้ เราจะสำรวจฟังก์ชันสำคัญของการติดตามเส้นและการตรวจจับขอบหน้าผาโดยใช้โมดูลเซนเซอร์ระดับสีเทา โมดูลนี้ทำหน้าที่เป็น "ดวงตา" ของรถของคุณ ช่วยให้รถสามารถตามเส้นทางที่กำหนดไว้ได้โดยอัตโนมัติและหลีกเลี่ยงการตกจากที่สูง โปรเจกต์นี้สาธิตวิธีการปรับเทียบเซนเซอร์เพื่อการอ่านค่าที่แม่นยำและใช้ตรรกะที่ทำให้รถอยู่บนเส้นทาง พร้อมด้วยฟีเจอร์สนุก ๆ อย่าง "Don't Push Me" ที่จำลองการตรวจจับขอบหน้าผา คู่มือนี้เหมาะสำหรับผู้ที่ต้องการก้าวข้ามการควบคุมระยะไกลพื้นฐานและเข้าสู่โลกของหุ่นยนต์ที่นำทางด้วยเซนเซอร์

เทคโนโลยีนี้มีการประยุกต์ใช้จริงมากมายนอกเหนือจากโปรเจกต์ DIY ที่สนุกสนาน หลักการที่คุณจะได้เรียนรู้ที่นี่เป็นพื้นฐานสำหรับการสร้างระบบอัตโนมัติในโลกจริง นี่คือแนวคิดบางอย่างเพื่อสร้างแรงบันดาลใจให้คุณ:

  • หุ่นยนต์จัดส่งอัตโนมัติ: สร้างหุ่นยนต์ขนาดเล็กที่สามารถนำทางในคลังสินค้าหรือพื้นที่สำนักงานโดยการติดตามเส้นที่ทำเครื่องหมายไว้เพื่อจัดส่งสิ่งของ
  • หุ่นยนต์แก้เขาวงกตบนโต๊ะ: สร้างหุ่นยนต์ที่สามารถนำทางเขาวงกตที่ซับซ้อนซึ่งวาดด้วยเทปพันสายไฟสีดำ
  • หุ่นยนต์รักษาความปลอดภัย: สร้างหุ่นยนต์ลาดตระเวนที่ตามเส้นทางที่กำหนดและใช้การตรวจจับขอบหน้าผาเพื่อหลีกเลี่ยงการตกบันไดหรือพื้นผิวที่สูง
  • แพลตฟอร์มการศึกษา: ใช้รถคันนี้เพื่อสอนพื้นฐานของการควบคุม PID การรวมเซนเซอร์ และการนำทางอัตโนมัติ

ฮาร์ดแวร์และส่วนประกอบ

โปรเจกต์นี้ต่อยอดจากชุดรถ SunFounder Raspberry Pi Pico 4WD ส่วนประกอบสำคัญสำหรับบทเรียนนี้คือโมดูลเซนเซอร์ระดับสีเทา ซึ่งจำเป็นทั้งสำหรับการติดตามเส้นและการตรวจจับขอบหน้าผา โมดูลนี้มีเซนเซอร์อิสระสามตัวที่วัดปริมาณแสงที่สะท้อนจากพื้นผิวด้านล่าง ข้อมูลนี้ใช้เพื่อแยกความแตกต่างระหว่างเส้นสีดำ พื้นผิวสีขาว และ "ขอบหน้าผา" หรือพื้นที่เปิดโล่ง ชุดอุปกรณ์เต็มรูปแบบยังรวมถึงโครงรถ Pico มอเตอร์ และชุดแบตเตอรี่เพื่อจ่ายไฟให้กับระบบ

คู่มือการเดินสายไฟ

การเดินสายไฟที่ถูกต้องเป็นขั้นตอนแรกในการทำให้เซนเซอร์ทำงาน โมดูลระดับสีเทาเชื่อมต่อกับ Raspberry Pi Pico โดยใช้สายไฟสี่เส้น การเดินสายไฟไม่ซับซ้อนและมีการสาธิตอย่างชัดเจนในวิดีโอ

นี่คือการกำหนดค่าการเดินสายไฟตามที่แสดงในวิดีโอ (ในวิดีโอที่ 03:01):

  • สายสีดำ: เชื่อมต่อกับพิน GND บน Pico
  • สายสีแดง: เชื่อมต่อกับพิน 3.3V บน Pico
  • สายสีเหลือง (เซนเซอร์ขวา): เชื่อมต่อกับพิน GPIO 28
  • สายสีน้ำตาล (เซนเซอร์กลาง): เชื่อมต่อกับพิน GPIO 27
  • สายสีขาว/เทา (เซนเซอร์ซ้าย): เชื่อมต่อกับพิน GPIO 26

การปรับเทียบเซนเซอร์ระดับสีเทา

ก่อนที่รถจะสามารถติดตามเส้นได้อย่างน่าเชื่อถือ คุณต้องปรับเทียบเซนเซอร์เพื่อให้เข้าใจค่าการอ่านที่แตกต่างกันสำหรับสีขาว สีดำ และพื้นที่ว่าง นี่เป็นขั้นตอนสำคัญเพื่อให้แน่ใจว่ารถของคุณตัดสินใจได้อย่างถูกต้อง ความไวของเซนเซอร์สามารถปรับได้ด้วยโพเทนชิโอมิเตอร์ขนาดเล็กบนโมดูล

วิดีโอสาธิตกระบวนการปรับเทียบ (ในวิดีโอที่ 04:39) เซนเซอร์ควรอยู่ในตำแหน่งที่ความสูงที่เหมาะสมเหนือพื้นดิน—ประมาณ 11 มิลลิเมตรหรือหนึ่งเซนติเมตร—เพื่อให้ได้ค่าที่ชัดเจน โดยการปรับโพเทนชิโอมิเตอร์และสังเกตค่า คุณจะพบจุดที่เหมาะสมที่สุด เป้าหมายคือการมีความแตกต่างอย่างมีนัยสำคัญระหว่างค่าสำหรับพื้นผิวสีขาว (ซึ่งสะท้อนแสงมาก) และเส้นสีดำ (ซึ่งสะท้อนแสงน้อยมาก)

นี่คือสรุปความหมายของค่าที่อ่านได้:

  • พื้นผิวสีขาว: การสะท้อนสูง ส่งผลให้ค่าเซนเซอร์สูง (เช่น ประมาณ 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("ซ้าย: {} กลาง: {} ขวา: {}".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] การสาธิตสดบนรางทดสอบ
ไม่มีรหัสแนบมา

แหล่งข้อมูลและเอกสารอ้างอิง

ยังไม่มีทรัพยากรเลย

ไฟล์📁

ไม่มีไฟล์ที่พร้อมใช้งาน