Szukaj kodu

Lekcja 7 z 10: Śledzenie linii, wykrywanie krawędzi Kalibracja czujnika skali szarości Samochód Raspberry Pi Pico

Ta lekcja jest częścią: Raspberry Pi Pico 4WD Smart Car

Lekcja 7 z 10: Śledzenie linii, wykrywanie krawędzi Kalibracja czujnika skali szarości Samochód Raspberry Pi Pico

W tej siódmej lekcji kursu Raspberry Pi Pico Smart Car odkrywamy kluczowe funkcje śledzenia linii i wykrywania krawędzi za pomocą modułu czujnika skali szarości. Moduł ten działa jak „oczy” Twojego samochodu, pozwalając mu autonomicznie podążać wyznaczoną trasą i unikać niebezpiecznych spadków. Projekt pokazuje, jak skalibrować czujnik w celu uzyskania dokładnych odczytów i wdrożyć logikę, która utrzymuje samochód na właściwej ścieżce, z zabawną funkcją „Don't Push Me”, która symuluje wykrywanie krawędzi. Ten przewodnik jest idealny dla każdego, kto chce wyjść poza podstawowe sterowanie zdalne i zagłębić się w świat robotyki sterowanej czujnikami.

Ta technologia ma wiele praktycznych zastosowań wykraczających poza zabawny projekt DIY. Zasady, których się tutaj nauczysz, są podstawą do budowania rzeczywistych systemów autonomicznych. Oto kilka pomysłów, które mogą Cię zainspirować:

  • Automatyczne roboty dostawcze: Zbuduj małego robota, który może poruszać się po magazynie lub biurze, podążając za oznaczonymi liniami, aby dostarczać przedmioty.
  • Rozwiązywacz labiryntów stołowych: Stwórz robota, który może poruszać się po złożonym labiryncie narysowanym czarną taśmą izolacyjną.
  • Robot bezpieczeństwa i ochrony: Zaimplementuj robota patrolującego, który podąża ustaloną ścieżką i używa wykrywania krawędzi, aby uniknąć spadnięcia ze schodów lub podwyższonych powierzchni.
  • Platforma edukacyjna: Użyj samochodu, aby uczyć podstaw sterowania PID, fuzji czujników i nawigacji autonomicznej.

Sprzęt i komponenty

Ten projekt opiera się na zestawie SunFounder Raspberry Pi Pico 4WD car kit. Kluczowym komponentem tej lekcji jest moduł czujnika skali szarości, który jest niezbędny zarówno do śledzenia linii, jak i wykrywania krawędzi. Moduł wyposażony jest w trzy niezależne czujniki, które mierzą ilość światła odbitego od powierzchni pod spodem. Dane te służą do rozróżnienia czarnej linii, białej powierzchni i „krawędzi” lub otwartej przestrzeni. Pełny zestaw zawiera również podwozie samochodu Pico, silniki i zestaw baterii do zasilania systemu.

Podłączanie przewodów

Prawidłowe podłączenie przewodów to pierwszy krok do uruchomienia czujnika. Moduł skali szarości łączy się z Raspberry Pi Pico za pomocą czterech przewodów. Podłączenie jest proste i zostało jasno pokazane na filmie.

Oto konfiguracja podłączenia pokazana na filmie (na filmie o 03:01):

  • Czarny przewód: Podłącz do pinu GND na Pico.
  • Czerwony przewód: Podłącz do pinu 3.3V na Pico.
  • Żółty przewód (prawy czujnik): Podłącz do pinu GPIO 28.
  • Brązowy przewód (środkowy czujnik): Podłącz do pinu GPIO 27.
  • Biały/szary przewód (lewy czujnik): Podłącz do pinu GPIO 26.

Kalibracja czujnika skali szarości

Zanim samochód będzie mógł niezawodnie podążać za linią, należy skalibrować czujnik, aby rozumiał różne odczyty dla bieli, czerni i pustej przestrzeni. To krytyczny krok, aby zapewnić, że samochód podejmuje właściwe decyzje. Czułość czujnika można regulować małym potencjometrem na module.

Film pokazuje proces kalibracji (na filmie o 04:39). Czujnik powinien być umieszczony na optymalnej wysokości nad ziemią — około 11 milimetrów lub jednego centymetra — aby uzyskać wyraźne odczyty. Regulując potencjometr i obserwując wartości, można znaleźć idealny punkt. Celem jest uzyskanie znaczącej różnicy między odczytami dla białej powierzchni (która odbija dużo światła) a czarnej linii (która odbija bardzo mało).

Oto podsumowanie znaczenia odczytów:

  • Biała powierzchnia: Wysokie odbicie, co daje wysokie wartości czujnika (np. około 20 000).
  • Czarna linia: Niskie odbicie, co daje niskie wartości czujnika (np. około 3 000).
  • Krawędź (pusta przestrzeń): Brak odbicia, co daje najniższe wartości czujnika (np. około 1 200).

Wyjaśnienie kodu

Ponieważ nie dostarczono kodu do tej lekcji, skupimy się na logice koncepcyjnej i kluczowych funkcjach z biblioteki Robojax, które są używane do uruchomienia samochodu. Film wyjaśnia dwie główne funkcje, które będziesz używać z dostarczonej biblioteki.

Testowanie czujnika

Pierwszym krokiem jest przetestowanie czujnika za pomocą prostego skryptu. Ten skrypt używa funkcji o nazwie get_grayscale_value() do odczytu surowych wartości z trzech czujników. Wypisuje te wartości na monitorze szeregowym, abyś mógł zobaczyć, jak się zmieniają, gdy czujnik znajduje się nad różnymi powierzchniami. Jest to przydatne do weryfikacji podłączenia przewodów i wykonania kroku kalibracji.


# To jest koncepcyjny przykład funkcji testowej
from machine import Pin, ADC
import time

# Zdefiniuj piny ADC dla czujników skali szarości
grayscale_pins = [26, 27, 28]
sensors = [ADC(Pin(pin)) for pin in grayscale_pins]

while True:
    # Odczytaj surowe 16-bitowe wartości z czujników
    values = [sensor.read_u16() for sensor in sensors]
    print("Lewy: {} Środkowy: {} Prawy: {}".format(values[0], values[1], values[2]))
    time.sleep_ms(100)

Logika śledzenia linii

Do śledzenia linii kod nie używa surowych wartości analogowych. Zamiast tego konwertuje je na prosty status cyfrowy: 1, jeśli czujnik znajduje się nad czarną linią, i 0, jeśli znajduje się nad białą powierzchnią. Obsługuje to funkcja, która zwraca listę trzech wartości (np. [0, 1, 0]). Główna pętla sterowania używa następnie tej listy do określenia działań samochodu.

Logika opiera się na porównywaniu statusu czujnika z predefiniowanymi warunkami. Na przykład, jeśli status to [0, 1, 0], samochód znajduje się idealnie na linii i powinien jechać prosto. Jeśli status to [1, 0, 0], samochód zboczył w lewo i musi skorygować tor jazdy w prawo. Film szczegółowo wyjaśnia te warunki (w filmie o 13:05), pokazując, jak różne kombinacje odczytów czujników odpowiadają różnym poleceniom silników, takim jak skręt w lewo, skręt w prawo lub ostra korekta.


# To jest przykładowa koncepcja logiki podążania za linią
# Zakładamy, że 'status' to lista, np. [0, 1, 0] z czujnika skali szarości

if status == [0, 1, 0]:  # Środkowy czujnik na linii
    # Jedź prosto
    pass
elif status == [1, 0, 0]:  # Lewy czujnik na linii
    # Skręć w prawo
    pass
elif status == [0, 0, 1]:  # Prawy czujnik na linii
    # Skręć w lewo
    pass
# ... inne warunki dla ostrzejszych skrętów

Prezentacja na żywo projektu

W demonstracji na filmie samochód umieszczony jest na wydrukowanym torze z grubą czarną linią. Samochód skutecznie podąża za linią, wykonując skręty i korekty podczas jazdy po trasie. Film zwraca uwagę na częsty problem, jakim jest poluzowanie kół podczas ostrych skrętów, i pokazuje proste rozwiązanie polegające na dodaniu małego kawałka taśmy na oś koła, aby zapewnić ciaśniejsze dopasowanie. Po tej poprawce samochód płynnie pokonuje cały tor, co pokazuje skuteczność kalibracji i logiki podążania za linią.

Rozdziały filmu

  • [00:00] Wprowadzenie do śledzenia linii i wykrywania krawędzi
  • [03:01] Podłączanie modułu czujnika skali szarości
  • [04:39] Kalibracja czujnika skali szarości
  • [13:05] Zrozumienie logiki podążania za linią
  • [19:43] Testowanie kodu śledzenia linii
  • [24:50] Prezentacja na żywo na torze testowym
Brak załączonego kodu.

Zasoby i odniesienia

Brak zasobów.

Pliki📁

Brak dostępnych plików.