Skocz do zawartości

[Bascom] Line Follower algorytm


Pomocna odpowiedź

Jeżeli liczysz prąd opornika+diody, to powinieneś uwzględnić spadek napięcia także na niej samej, tj. ok. 1.2V dla podczerwonej.

Dla Vcc=5V, diody IRED i opornika 150R masz zatem:

I=(Vcc-Uf)/150=(5-1.2)/150=25mA

co daje moc strat w diodzie:

P=Uf*I=1.2*0.025=30mW

to niewiele, więc jeśli czujniki są naprawdę ciepłe to może jest jakiś błąd gdzie indziej.

Np. czy Twoje oporniki są SMD? Jeżeli tak, to nadruk na nich "150" oznacza 15Ω a nie 150Ω 😐 bo trzecia cyfra mówi o liczbie zer dopisywanych do dwóch pierwszych cyfr.

Mierzyłeś ten prąd, choćby dla wszystkich czujników razem?

  • Lubię! 1
Link to post
Share on other sites

Dzięki Marku za wyjaśnienie,.

Tak, mój rezystor jest SMD i ma nadruk 151 czyli 150 Ohm.

Nie, nie liczyłem prądu dla wszystkich czujników.

Treker, czy Twoim zdaniem algorytm/program, który napisałem i widziałeś na filmiku idzie w dobrą stronę? Tzn. czy mogę z niego jeszcze więcej wyciągnąć dodając, np. człon D??

Link to post
Share on other sites

Racja, nie ma sensu brać się za coś innego (dalej), gdy jeszcze nie jest dokończone to pierwsze.

Tak więc muszę znaleźć przyczynę czemu te czujniki nie chcą współpracować z resztą.

Edit:

Tak mnie naszło... sprawdziłem listwę z czujnikami i wydaje mi się, że jest trochę wygięta (taki mały półokrąg) i skrajne czujniki (lewa, prawa strona) są niżej niż środkowe i wydaje mi się, że to może trochę wpływać na działanie tychże czujników, bo granica reagowania na linie jest taka sama dla wszystkich.

Link to post
Share on other sites

Napisałem Ci wcześniej, co musisz sprawdzić po kolei. Sprawdź reakcję każdego czujnika, wyliczoną pozycje i ilość czujników, jakie wykryły linie. Podaj wyniki i będziemy działać dalej.

Link to post
Share on other sites

1.Sprawdź reakcję każdego czujnika.

2.Sprawdź wyliczoną pozycje.

3.Sprawdź ilość czujników, jakie wykryły linie.

Ad.1.

*Czujnik 8 podpięty do ADC7 nie widzi czarnej linii.

Na białym tle na wyjściu napięcie wynosi 0,16V, ana czarnym 1,72V i wydaje mi się, że to napięcie jest za małe, aby uC wykrył stan wysoki, jak u innych czujników napięcie na czarnym tle wynosi ponad 3,6V.

Ad.2.

*Napisałem kod, aby dioda czerwona zapalała się kiedy moja Aktualna_pozycja jest dodatnia, czyli > 0 (to jest prawa strona robota) i jest całkiem dobrze poza jedą rzeczą, drugi czujnik (podpięty do ADC1) nie wykazuje się jako dodatni, bo jak ten czujnik jest nad czarną linią to dioda gaśnie, a nie powinna. Na wyjściu jest 1,2V jak u innych jest (które są nad czarną linią) jest ponad 3,6V.

*Teraz dioda niebieska ma się zapalić jak mamy Aktualną_pozycję ujemną < 0 i wszystko działa poza 8 czujnikiem (odwołanie do Ad.1.)

*A teraz Aktualna_pozycja ma być równa zero = 0 i jak bot jest środkowymi czujnikami na linii to obie diody się zapalają, czyli tak powinno być, jak jest na dodatniej i ujemnej stronie to gasną, tylko nie działa to na tych dwóch czujnikach (drugi i ósmy). W przypadku drugiego czujnika diody się zapalają i tak samo dla czujnika ósmego. Diody się zapalają jak wszystkimi czujnikami bot stoi na białym tle. Wagi środkowych czujników wynoszą: prawa 5 i lewa -5.

Ad.3.

*Napisałem taki program, żeby zapaliły się dwie diody jak nie wykryje żaden czujnik linii, czyli:

Sensor_on_black = 0 i to działą.

Później napisałem program, aby dioda czerwona się zapaliła jak jakikolwiek czujnik wykrył linie i to też działa, tylko bez czujników: drugiego i ósmego.

*Jak tylko dwa czujniki wykryją linie to ma sięzapalić dioda niebieska i to też ładnie działa poza czujnikami: drugi i ósmy.

I to już wszystko. Mam nadzieję, że wyczerpująco odpowiedziałem na Twoje pytania i będzie można ruszyć dalej.

Link to post
Share on other sites
Ad.1.

*Czujnik 8 podpięty do ADC7 nie widzi czarnej linii.

Na białym tle na wyjściu napięcie wynosi 0,16V, ana czarnym 1,72V i wydaje mi się, że to napięcie jest za małe, aby uC wykrył stan wysoki, jak u innych czujników napięcie na czarnym tle wynosi ponad 3,6V.

W takim razie musisz go najpierw naprawić. Po drugie stwierdzenie "napięcie jest za małe, aby uC wykrył stan wysoki" jest błędne - dokonujesz przecież pomiaru analogowego.

Ad.2.

*Napisałem kod, aby dioda czerwona zapalała się kiedy moja Aktualna_pozycja jest dodatnia, czyli > 0 (to jest prawa strona robota) i jest całkiem dobrze poza jedą rzeczą, drugi czujnik (podpięty do ADC1) nie wykazuje się jako dodatni, bo jak ten czujnik jest nad czarną linią to dioda gaśnie, a nie powinna. Na wyjściu jest 1,2V jak u innych jest (które są nad czarną linią) jest ponad 3,6V.

*Teraz dioda niebieska ma się zapalić jak mamy Aktualną_pozycję ujemną

A co, gdy pozycja jest równa zero?

Ad.3.

*Napisałem taki program, żeby zapaliły się dwie diody jak nie wykryje żaden czujnik linii, czyli:

Sensor_on_black = 0 i to działą.

Później napisałem program, aby dioda czerwona się zapaliła jak jakikolwiek czujnik wykrył linie i to też działa, tylko bez czujników: drugiego i ósmego.

*Jak tylko dwa czujniki wykryją linie to ma sięzapalić dioda niebieska i to też ładnie działa poza czujnikami: drugi i ósmy.

No to chyba teraz nie masz innej opcji niż znalezienie usterek w czujnikach 2 i 8 😉

Link to post
Share on other sites
Po drugie stwierdzenie "napięcie jest za małe, aby uC wykrył stan wysoki" jest błędne - dokonujesz przecież pomiaru analogowego.

No fakt 😉 Zapomniałem, że dokonuję pomiar analogowy.

A co, gdy pozycja jest równa zero?

Napisałem:

A teraz Aktualna_pozycja ma być równa zero = 0 i jak bot jest środkowymi czujnikami na linii to obie diody się zapalają, czyli tak powinno być, jak jest na dodatniej i ujemnej stronie to gasną, tylko nie działa to na tych dwóch czujnikach (drugi i ósmy). W przypadku drugiego czujnika diody się zapalają i tak samo dla czujnika ósmego. Diody się zapalają jak wszystkimi czujnikami bot stoi na białym tle. Wagi środkowych czujników wynoszą: prawa 5 i lewa -5.
No to chyba teraz nie masz innej opcji niż znalezienie usterek w czujnikach 2 i 8 😉

To teraz priorytetem jest naprawa właśnie tych czujników 🙂

Link to post
Share on other sites

Edit 02.02.2014:

Walczę z tymi czujnikami i jakoś naprawiłem czujnik 2, ale ósmy jest nieugięty :/ Poprawiam luty, zmieniam rezystory, wymieniam KTIR'y i nic... Macie jakieś pomysły ?

Link to post
Share on other sites

Może masz jakieś zwarcie? Złe wartości rezystorów lub coś w programie (konf wej/wyj, podicągnięcia etc.)

Link to post
Share on other sites

Zwarcie...hmm... Wydaje mi się, że nie ma zwarcia. Wartości rezystorów to 150R i 10k, w programie mam tylko zaimplementowaną konfigurację ADC, nie używałem: Config PORTC = Input + konfiguracja ADC, zawsze tak robiłem i nie było problemu.

Link to post
Share on other sites

Po przerwie (szkoła) mogę zacząć testować płytkę z czujnikami (8 sztuk) na nowej płytce, którą przed chwilą skończyłem. Jeżeli jutro uda mi się ją polutować to napiszę co i jak.

[ Dodano: 15-02-2014, 20:16 ]

Ok. Polutowana skończona płytka z czujnikami i działająca 🙂 Sprawdzałem jak ona się zachowuje, czyli robiłem testy jak parę postów wyżej i wszystko jest ok - jak chodzi o czujniki, bo testy robiłem na innym podwoziu (coś w stylu Pololu 3pi) i skrajne czujniki są baaardzo blisko kół i robot dziwnie jeździ, ale to już nie problem, bo zrobię nowy moduł na jakiejś atmedze i nowe podwozie (takie jak na LF'a przystało) i wtedy powtórzę testy (no i zapewne bot będzie jeździł lepiej, bo będzie miał listwę z czujnikami wysuniętą dalej w porównaniu do teraz).

Link to post
Share on other sites

Testy nadal trwają, na razie na podwoziu testowym.

Filmik:

Regulator P

Kp = 1

Tp =127 (założone wolniejsze silniki)

-----------

EDIT:

*Ogólnie w lf'ach lepiej mieć parzystą, czy nieparzystą ilość czujników?

*Lepiej używać ADC, czy komparatorów (LM339)?

*Jak przypisywać wagi czujnikom, które są wysterowane przez komparatory? (czyli pin uC dostaje od razu 1/0)

U mnie nadal występuje ten problem, że jak czujnik 4 i 5 razem widzą linie to bot stoi, a jak zaimplementuje takie coś:

If Aktualna_poz = 0 Then
    Pwm1a = 127
    Pwm1b = 127
End If

To tego problemu nie ma, ale program sam powinien ustawić prędkość kół po dodaniu i odjęciu zera... (czyli prędkość zadana, np. 127 się nie zmieni)

Jeszcze spróbowałem pokombinować z czujnikami i programem i wyszło tak:

*Prawa storna robota (listwy czujników) jest dodatnia (wagi czujników są dodatnie), a lewa ujemna.

*Aktualna_poz = 0 to mają się zapalić dwie diody LED, czyli na czujnikach 4 i 5 (wagi 60 i -60), 60+(-60)/2

Sprawdzałem to obliczenie na Google i wynik wyszedł 30...! I jeżeli Bascom też tak liczy to prawdą jest, że diody wtedy nie świecą.

Link to post
Share on other sites

Treker czy mógłbyś mi zdradzić jak napisałeś swój soft do Feniksa 2, bo mój kod chyba ma dłuuugą odległość do takiego chociażby Twojego :/ Jeżeli chcesz zobaczyć mój (teraźniejszy) kod i pomóc mi go dopasować, to spoko, powiedz tylko to go wstawię.

https://www.forbot.pl/forum/topics53/ftl-feniks2-worklog-vt3820,15.htm

Link to post
Share on other sites

Obliczenie na Googlach był poprawne, bo 60+(-60)/2=60-30=30

Ale w twoim programie chyba dzieliłeś sumę, a nie tylko ostatnią liczbę, choć nie wiem, bo nie znam Bascoma

Link to post
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

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.