Skocz do zawartości

[Dla początkujących] Przepis na robota - w pełni programowalny Line Follower


Pomocna odpowiedź

Odpowiedź jest w tym wątku

może być też tak, że silniki sieją straszne zakłócenia do układu i restartują procka - w tej sytuacji trzeba dodać kilka kondensatorów filtrujących. Bierzesz kilka 100nF ceramicznych, lutujesz po jednym między zaciskami silnika (inaczej mówiąc - równolegle do silnika) i między VCC a GND blisko procesora (możesz kilka w różnych miejscach).

Zobacz na mojego https://www.forbot.pl/forum/topics7/line-follower-moj-pierwszy-robot-vt3670.htm budowałem również według tej instrukcji. Dodaj kondensatory żeby wyeliminować zakłócenia

Zasadnicze pytanie - czy zmieniałeś coś w programie? Z tego co widzę, to dioda nie powinna wcale pulsować...ani wolno, ani szybko. Kondensatory faktycznie warto wlutować - równolegle do silników i można jeszcze dodać między VCC a GND, mam wrażenie, że pisałem już o tym gdzieś w tym temacie...

Dioda powinna pulsować bo wstawiłem pulsującą diodę a nie zwykłą.

Teraz już zmieniłem jest zwykła.

Problem rozwiązany. Już się nie tnie, ponieważ zmieniłem prędkość silników na wolniejsze z 255 na 200.

To był cały problem. 😅

Ale nadal nie skręca w prawo na liniach. 😥

Jestem bardzo smutny.

Sprawdziłem wszystkie połączenia z tym artykułem i multimerem.

I na płytce z procem i na module.

Nie wiem\

Czy możliwe, że mimo w tym jednym czujniku IR się pali to jest zepsuty???

Gdyby ten czujnik był zepsuty to wcale nie reagował by na linę, a nie jak napisałeś skręca w lewo, gdy linia skręca w prawo. Sprawdź czy nie masz gdzieś zwarcia

Najlepiej wrzuć kod programu po tych wszystkich zmianach. Jeśli faktycznie wszystko dobrze podłączyłeś, to nie ma siły żeby nie śmigało.

Jeszcze jedna myśl... Spróbuj podłączyć jeden z silników odwrotnie, czyt. z odwrotną polaryzacją... Zastanawiam się czy to coś da, ale za duży upał na takie rozmyślania 😉 najprościej sprawdzić..

Najlepiej wrzuć kod programu po tych wszystkich zmianach. Jeśli faktycznie wszystko dobrze podłączyłeś, to nie ma siły żeby nie śmigało.

Jeszcze jedna myśl... Spróbuj podłączyć jeden z silników odwrotnie, czyt. z odwrotną polaryzacją... Zastanawiam się czy to coś da, ale za duży upał na takie rozmyślania 😉 najprościej sprawdzić..

A nie będzie tak, że jak zamieni polaryzację jednego z silników, to na prostym odcinku nad linią będzie mu się kręcił w kółko (jeden silnik w przód, drugi w tył) ?

Podejrzewam, że coś rozgrzebane jest w programie (np identyczna reakcja silników na silnię pod lewym, jak i prawym czujnikiem) ...

A nie będzie tak, że jak zamieni polaryzację jednego z silników, to na prostym odcinku nad linią będzie mu się kręcił w kółko (jeden silnik w przód, drugi w tył) ?

To tylko myśl, również podejrzewam program - ale póki go nie zobaczę, to to wszystko co mi przychodzi do głowy na chwilę obecną 😉

TO program bez kompilacji. Ten sam co twój tylko zmieniłem prędkość silników.

Teraz już sie nie tnie ale nadal nie skręca w jedną stronę tylko kręci się w kółko gdy dojeżdza do zakretu w prawo. W lewo jest spoko.

$regfile = "m8def.dat"

$crystal = 1000000

'Konfiguracja przetwornika analog-cyfra (ADC)

Config Adc = Single , Prescaler = Auto

'Konfiguracja sterowania sprzętowym PWM

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

'Konfiguracja portów

Config Portd = Output

Config Portb = Output

'Opis portów

'Enable1 - Silnik lewy - Portb.1 (PWM1A)

'Enable2 - Silnik prawy - portb.2 (PWM1B)

'Input1 - Silnik lewy A - Portd.3

'Input2 - Silnik lewy B - Portd.2

'Input4 - Silnik prawy A - Portd.0

'Input3 - Silnik prawy B - Portd.1

'Dioda - Portd.6

'Czujnik lewy - ADC5

'Czujnik środkowy - ADC4

'Czujnik prawy - ADC3

Silnik_lewy_a Alias Portd.3

Silnik_lewy_b Alias Portd.2

Silnik_prawy_b Alias Portd.0

Silnik_prawy_a Alias Portd.1

Dioda Alias Portd.6

'Granica reagowania na linię - należy dobrać doświadczalnie

Const Granica = 500

'Deklaracje zmiennych

Dim Czujnik_lewy As Single

Dim Czujnik_srodkowy As Single

Dim Czujnik_prawy As Single

Dim W As Word

'Blok instrukcji

Set Dioda

Set Silnik_lewy_a

Reset Silnik_lewy_b

Set Silnik_prawy_a

Reset Silnik_prawy_b

Do

Gosub Wczytaj_stany_przetwornikow

If Czujnik_srodkowy > Granica Then

'Silnik lewy - maksymalna prędkość

Pwm1a = 200

'Silnik prawy - maksymalna prędkość

Pwm1b = 200

Elseif Czujnik_lewy > Granica Then

Pwm1a = 0

Pwm1b = 200

Elseif Czujnik_prawy > Granica Then

Pwm1a = 200

Pwm1b = 0

Else

Pwm1a = 200

Pwm1b = 200

End If

Loop

End

Wczytaj_stany_przetwornikow:

Start Adc

W = Getadc(5)

W = Getadc(5)

Stop Adc

Czujnik_lewy = W

Start Adc

W = Getadc(4)

W = Getadc(4)

Stop Adc

Czujnik_srodkowy = W

Start Adc

W = Getadc(3)

W = Getadc(3)

Stop Adc

Czujnik_prawy = W

Return

Teraz coś próbowałem ruszać na module z czujnikami i nie działa w ogóle.

Znaczy jedzie normalnie ale nie wykrywa lini w ogóle.

Faktycznie poza PWMem nic nie zmienione, jeśli zmniejszenie do 200 coś Ci pomogło, to spróbuj jeszcze zmienić tą jedną wartość co została.

Skoro program jest ok (w każdym razie działał jak ostatnio sprawdzałem go na robocie z kursu - chociaż dzisiaj odpuściłbym już to podwójne wywoływanie adc 😉 ), to wina leży w połączeniach.

Nie wiem co masz na myśli mówiąc, że "ruszałeś". Dotknąłeś i przestało działać? W takim razie masz zimne luty i warto je wyszukać i poprawić. Na pewno nie "nasmarkałeś" lutowiem na połączenia, jak to robi większość początkujących? W kursie jest link do poradnika jak to prawidłowo zrobić. Jeśli lutujesz prawidłowo, to musiałeś się gdzieś pomylić w połączeniach, może masz gdzieś przypadkowe zwarcie.

  • 3 tygodnie później...

Witam,
świetny przepis dla kogoś początkującego, ale mam kilka pytań. Czy procesor ATMEGA8-16PU też nadaje się do tego robota?

Pytam ponieważ podczas programowania wyskakuje mi błąd: "Could not identify with ID:000000"

Programator którego używam to AVR-ISP STK200/300

podepnij mu zasilanie 5V z USB pod pin 7. vcc i 8. gnd i tak nadaje się

Odradzam - jeśli masz jakiś błąd w połączeniach, możesz sobie np. spalić kontroler USB w kompie. Skoro nie masz programatora na USB (takie mogą dostarczać 5V, wystarczy przełączyć zworkę), to polecam tanią ładowarkę do telefonu - nie musi być idealnie 5V, wystarczy 4.5 - 5.5V. Pamiętaj, żeby GND programowanego układu było połączone z GND programatora! I polecam SinaProg .

hmm, za późno 🙂 na szczęście usb działa i udało się zaprogramować. Błąd znalazłem potem, okazał się banalny - nie stykała jedna z baterii 🙂

  • 2 tygodnie później...

Co oznacza ta granica w programie?

Domyślam się że to jest granica napięcia z czujników, na które reaguje procesor.

Granica 500 to 0,5V. Dobrze myślę?

Już tyle robię tego robota i dalej nie działa 😖 Pewnego dnia przez niecałą godzinę

działał, a później znowu nie 😕 Już nie wiem co jest nie tak...

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...