Skocz do zawartości

[Bascom] Line Follower algorytm


aixI

Pomocna odpowiedź

If P > 128 Then 
  P = 128 
Elseif P < -128 Then 
  P = -128 
End If

To są takie luźne przemyślenia 😃 miałem to usunąć zanim wstawie kod na forum, ale widać zapomniałem.

A tu czasami możesz dzielić przez zero:
Roznica = Sensor_value_sum / Sensor_on_black

Jak są dwa środkowe czujniki nad linią to ich wagi się znoszą i są równe 0, a przez zero nie można dzielić. :/

Link do komentarza
Share on other sites

No tak. Sensor_value_sum to suma wag czujników (czyli dwa środkowe to -11 i 11 (+11)), a to ilość czujników nad czarną linią, czyli w naszym przypadku 2 i wychodzi nam wynik 0/2 = 0.

To można zrobić coś takiego?

If Roznica = 0 Then
  Pwm1a = 127
  Pwm1b = 127
End If
Link do komentarza
Share on other sites

Nie ma takiej potrzeby. Jeśli uchyb (różnica) jest równa 0, to mamy:

P = Kp*Uchyb = 0

Nowa_prędkość = Tp + P = Tp

Czyli samo powinno ustawić się na domyślną prędkość, czyli 127.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

No to sprawdź jakoś co się dzieje, wykorzystaj diody do debugowania. Włącz diodę przykładowo, gdy:

- linie wykryły dwa czujniki

- P = 0

- Nowa prędkość = Tp

Posprawdzaj sobie etap, po etapie 😉

Link do komentarza
Share on other sites

Postanowiłem zrobić tak jak mi mówisz i przy P = 0 trochę szaleje, raz pali się dioda na skrajnym czujniku (lewym), na dwóch środkowych i na przedostatnim czujnikiem (prawym), a później już nic.

Ustawiłem tak, żeby jedna dioda (niebieska) świeciła kiedy P nie jest równe 0, a diodę (czerwoną) kiedy P jest równe 0 i dziwnie się to zachowuje, tzn. nie tak jak powinno.

Później ustawiłem diody, aby czerwona się zapaliła kiedy V_L_temp = Tp, a zapaliła się niebieska kiedy to nie jest równe i nic.

Link do komentarza
Share on other sites

No dobra, zakładam, że pamiętałeś o gaszeniu i zapalaniu diod w dobrych miejscach.

Podaj proszę wagi wszystkich Twoich czujników oraz powiedz ile czujników na raz może widzieć linie.

Link do komentarza
Share on other sites

Sensor_value(1) = -50

Sensor_value(2) = -30

Sensor_value(3) = -20

Sensor_value(4) = -10

Sensor_value(5) = 10

Sensor_value(6) = 20

Sensor_value(7) = 30

Sensor_value(8) = 50

Na raz widzieć linie może 2 albo 3. 3 to max ile moze na raz widzieć.

Link do komentarza
Share on other sites

W takim razie przy liczeniu pozycji czasami mogą wyjść wartości z ułamkiem. Sprawdziłeś, co się wtedy dzieje, jakie masz wtedy wartości ?

Podpowiem Ci kolejność rzeczy jakie musisz posprawdzać bazując na "diodach" (chyba, że masz jakiś interfejs do debugowania):

1) Czy poprawnie działają wszystkie czujniki

2) Czy poprawnie liczona jest ilość czujników widzących linię

3) Czy poprawnie liczona jest pozycja. Nie ma takiej opcji, aby przy dwóch środkowych wyliczona pozycja była różna od 0, a przykładowo przy jednym skrajnym 50.

Bez sprawdzenia tych rzeczy będzie ciężko dalej badać sprawę 😉

Link do komentarza
Share on other sites

W takim razie przy liczeniu pozycji czasami mogą wyjść wartości z ułamkiem. Sprawdziłeś, co się wtedy dzieje, jakie masz wtedy wartości ?

Szczerze to nie liczyłem (ale teraz policzyłem i się zgadza co mówiłeś). A muszę mieć takie wagi, że przy wyliczaniu nie będę mial wartości z ułamkiem?

Podpowiem Ci kolejność rzeczy jakie musisz posprawdzać bazując na "diodach" (chyba, że masz jakiś interfejs do debugowania):

Mam 4 LEDy.

Ad.1.

Czyli, czy do nich dochodzi napięcie i czy wykrywają poprawnie linie, tak?

Ad.2.

Raczej tak, jest to zrobione podobnie jak Ty masz w staaarym artykule "Człon P".

Ad.3.

To samo jak w pkt. 2. Podobie jak w Twoim artykule.

Link do komentarza
Share on other sites

Co do wszystkich punktów miałem raczej na myśli konkretne testy. To znaczy, robisz sobie jakieś warunki świecenia diod w robocie i testujesz. Wtedy zobaczysz czy wszystko działa tak jak to zakładasz.

Link do komentarza
Share on other sites

Ad.1.

Tak więc wziąłem się za testy czujników i co...? Piszę sobie kod (najzwyklejszy: Dim W As Word, Dim Sensor As Word, Const Granica = 600, dioda Led, Gosub Pomiar) i okazuje się, że każdy czujnik "niby nie widzi linii czarnej, (testowałem na każdym) bo inaczej jedna dioda zgasiła się, a druga zapaliła, a tu kicha, więc napisałem inny kod (odczytywanie czujników za pomocą For ... = 0 To 7 itp., sprawdzenie czy czujnik wykrył linie: If Sensor.sensor_num = 1 Then) jedna dioda do sprawdzenia, czy czujnik wykrył linie i co się okazuje...? Działa. Dioda mryga jak się listwą z czujnikami przejedzie przez czarną linie.

Punktu 2 i 3 nie sprawdzałem jeszcze, bo akumulator muszę naładować.

PS

Przy włączonym robocie listwa z czujnikami (może bardzie, czujniki) się baaardzo grzeją, może przesadzam, ale są wyczuwalnie gorące.

Link do komentarza
Share on other sites

Możliwe, że tak. Dla rezystora 150R prąd wynosi ok. 33mA, co daje nam 165mW mocy na diodzie IR, a dla diody IR KTIR'a max. prąd to 50mA.

Dla rezystora 220R prąd i moc wynosi ok. 22mA, 110mW. A ja mam wlutowane rezystory 150R.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.