Caută cod

Lecția 7 din 10: Urmărirea liniei, detectarea marginii Calibrarea senzorului de gri Scale Raspberry Pi Pico Mașină

Această lecție face parte din: Mașină inteligentă Raspberry Pi Pico 4WD

Lecția 7 din 10: Urmărirea liniei, detectarea marginii Calibrarea senzorului de gri Scale Raspberry Pi Pico Mașină

În această a șaptea lecție a cursului Raspberry Pi Pico Smart Car, explorăm funcțiile cruciale de urmărire a liniei și detectare a prăpastiei folosind un modul de senzor în tonuri de gri. Acest modul acționează ca „ochii” mașinii tale, permițându-i să urmeze autonom o cale prestabilită și să evite căderile periculoase. Proiectul demonstrează cum să calibrezi senzorul pentru citiri precise și să implementezi logică care menține mașina pe traseu, cu o funcție distractivă „Nu mă împinge” care simulează detectarea prăpastiei. Acest ghid este perfect pentru oricine dorește să treacă dincolo de controlul remote de bază și să se aventureze în lumea roboticii ghidate de senzori.

Această tehnologie are numeroase aplicații practice dincolo de un simplu proiect DIY distractiv. Principiile pe care le vei învăța aici sunt fundamentale pentru construirea sistemelor autonome din lumea reală. Iată câteva idei pentru a te inspira:

  • Roboți de livrare automatizați: Construiește un robot mic care poate naviga pe podeaua unui depozit sau birou urmând linii marcate pentru a livra obiecte.
  • Rezolvitor de labirint pe masă: Creează un robot care poate naviga un labirint complex desenat cu bandă electrică neagră.
  • Robot de siguranță și securitate: Implementează un robot de patrulare care urmează o cale stabilită și folosește detectarea prăpastiei pentru a evita căderea pe scări sau de pe suprafețe înalte.
  • Platformă educațională: Folosește mașina pentru a preda fundamentele controlului PID, fuziunii senzorilor și navigației autonome.

Hardware și componente

Acest proiect se bazează pe kit-ul SunFounder Raspberry Pi Pico 4WD car. Componenta cheie pentru această lecție este modulul de senzor în tonuri de gri, esențial atât pentru urmărirea liniei, cât și pentru detectarea prăpastiei. Modulul dispune de trei senzori independenți care măsoară cantitatea de lumină reflectată de suprafața de dedesubt. Aceste date sunt folosite pentru a distinge între o linie neagră, o suprafață albă și o „prăpastie” sau spațiu deschis. Kit-ul complet include și șasiul mașinii Pico, motoarele și un pachet de baterii pentru alimentarea sistemului.

Ghid de cablare

Cablarea corectă este primul pas pentru a face senzorul să funcționeze. Modulul în tonuri de gri se conectează la Raspberry Pi Pico folosind patru fire. Cablarea este simplă și este demonstrată clar în videoclip.

Iată configurația de cablare așa cum este prezentată în videoclip (în videoclip la 03:01):

  • Firul negru: Conectează-l la un pin GND de pe Pico.
  • Firul roșu: Conectează-l la pinul 3.3V de pe Pico.
  • Firul galben (senzor dreapta): Conectează-l la pinul GPIO 28.
  • Firul maro (senzor centru): Conectează-l la pinul GPIO 27.
  • Firul alb/gri (senzor stânga): Conectează-l la pinul GPIO 26.

Calibrarea senzorului în tonuri de gri

Înainte ca mașina să poată urmări fiabil o linie, trebuie să calibrezi senzorul pentru a înțelege diferitele citiri pentru alb, negru și spațiu gol. Acesta este un pas critic pentru a te asigura că mașina ta ia deciziile corecte. Sensibilitatea senzorului poate fi ajustată cu un potențiometru mic pe modul.

Videoclipul demonstrează procesul de calibrare (în videoclip la 04:39). Senzorul ar trebui poziționat la o înălțime optimă deasupra solului—în jur de 11 milimetri sau un centimetru—pentru a obține citiri clare. Prin ajustarea potențiometrului și observarea valorilor, poți găsi punctul optim. Scopul este să existe o diferență semnificativă între citirile pentru o suprafață albă (care reflectă multă lumină) și o linie neagră (care reflectă foarte puțin).

Iată un rezumat al semnificației citirilor:

  • Suprafață albă: Reflecție ridicată, rezultând valori mari ale senzorului (de exemplu, în jur de 20.000).
  • Linie neagră: Reflecție scăzută, rezultând valori mici ale senzorului (de exemplu, în jur de 3.000).
  • Prăpastie (spațiu gol): Fără reflecție, rezultând cele mai mici valori ale senzorului (de exemplu, în jur de 1.200).

Explicația codului

Deoarece nu a fost furnizat niciun cod pentru această lecție, ne vom concentra pe logica conceptuală și pe funcțiile cheie din biblioteca Robojax folosite pentru a face mașina să funcționeze. Videoclipul explică cele două funcții principale pe care le vei folosi din biblioteca furnizată.

Testarea senzorului

Primul pas este să îți testezi senzorul cu un script simplu. Acest script folosește o funcție numită get_grayscale_value() pentru a citi valorile brute de la cei trei senzori. Le afișează pe monitorul serial pentru a putea vedea cum se schimbă atunci când senzorul este deasupra diferitelor suprafețe. Acest lucru este util pentru verificarea cablării și efectuarea calibrării.


# Acesta este un exemplu conceptual al funcției de testare
from machine import Pin, ADC
import time

# Definește pinii ADC pentru senzorii în tonuri de gri
grayscale_pins = [26, 27, 28]
sensors = [ADC(Pin(pin)) for pin in grayscale_pins]

while True:
    # Citește valorile brute pe 16 biți de la senzori
    values = [sensor.read_u16() for sensor in sensors]
    print("Stânga: {} Centru: {} Dreapta: {}".format(values[0], values[1], values[2]))
    time.sleep_ms(100)

Logica de urmărire a liniei

Pentru urmărirea liniei, codul nu folosește valorile analogice brute. În schimb, le convertește într-un status digital simplu: 1 dacă senzorul este deasupra liniei negre și 0 dacă este deasupra suprafeței albe. Acest lucru este gestionat de o funcție care returnează o listă de trei valori (de exemplu, [0, 1, 0]). Bucla principală de control folosește apoi această listă pentru a determina acțiunile mașinii.

Logica se bazează pe compararea stării senzorului cu condiții predefinite. De exemplu, dacă starea este [0, 1, 0], mașina este perfect pe linie și ar trebui să meargă înainte. Dacă starea este [1, 0, 0], mașina a deviat spre stânga și trebuie să își corecteze traiectoria spre dreapta. Videoclipul explică aceste condiții în detaliu (în videoclip la 13:05), arătând cum diferite combinații de citiri ale senzorului corespund diferitelor comenzi pentru motor, cum ar fi virarea la stânga, virarea la dreapta sau efectuarea unei corecții bruște.


# Acesta este un exemplu conceptual al logicii de urmărire a liniei
# Presupunem că 'status' este o listă ca [0, 1, 0] de la senzorul în tonuri de gri

if status == [0, 1, 0]:  # Senzorul central pe linie
    # Mergi înainte
    pass
elif status == [1, 0, 0]:  # Senzorul stâng pe linie
    # Virează la dreapta
    pass
elif status == [0, 0, 1]:  # Senzorul drept pe linie
    # Virează la stânga
    pass
# ... alte condiții pentru viraje mai bruște

Demonstrație Live a Proiectului

În demonstrația din videoclip, mașina este plasată pe o pistă imprimată cu o linie neagră groasă. Mașina urmează cu succes linia, făcând viraje și corecții pe măsură ce se deplasează de-a lungul traseului. Videoclipul evidențiază o problemă comună în care roțile se pot slăbi în timpul virajelor bruște și arată o soluție simplă de a adăuga o bucată mică de bandă adezivă pe axul roții pentru o fixare mai strânsă. Odată ce aceasta este rezolvată, mașina navighează întreaga pistă fără probleme, demonstrând eficiența calibrării și a logicii de urmărire a liniei.

Capitolele Videoclipului

  • [00:00] Introducere în Urmărirea Liniei și Detectarea Stâncilor
  • [03:01] Conectarea Modulului Senzorului în Tonuri de Gri
  • [04:39] Calibrarea Senzorului în Tonuri de Gri
  • [13:05] Înțelegerea Logicii de Urmărire a Liniei
  • [19:43] Testarea Codului de Urmărire a Liniei
  • [24:50] Demonstrație Live pe o Pistă de Test
Nu există cod atașat.

Resurse și referințe

Încă nu sunt resurse.

Fișiere📁

Nu sunt disponibile fișiere.