Skocz do zawartości
EscapeMaster

Minisumo problem z programem

Pomocna odpowiedź

Witam,
postanowiłem zacząć przygodę z minisumo. Kupiłem ten zestaw: http://botland.com.pl/zbuduj-robota/1226-minisumo-kit.html. Program wygląda tak: http://wklej.to/sGX81. Niestety robot zachowuje się nie tak jak oczekiwałem. Otóż kiedy stoi na czarnej powierzchni cofa się a gdy wykryje przeciwnika zaczyna się obracać. Problemy z elektroniką wykluczyłem więc zostaje program.

Z góry dziękuję pozdrawiam

Udostępnij ten post


Link to post
Share on other sites

Witaj

Wydaje mi się, że wystarczy pozamieniać przewody od silników miejscami. Jeśli robot jedzie do tyłu zamiast do przodu to oba silniki masz odwrotnie podłączone, natomiast jeśli się kręci zamiast jechać prosto to trzeba zamienić miejscami kable z jednego silnika.

Można, też zmienić to w programie, ale nie otwiera mi się podany link.

Udostępnij ten post


Link to post
Share on other sites

Jak jest mowa o programie, to nie musisz wklejać go na jakiś inny serwer (zewnętrzny), ponieważ możesz to tutaj zrobić używając znaczników "[ Code ][ /Code ]".

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dzięki za radę co do wklejania kodu 😉 znajduje się on poniżej. Jak już wyżej napisałem wady konstrukcyjne wykluczyłem.

$regfile = "m8def.dat"
$crystal = 1000000                                          'taktowanie 16MHz - trzeba koniecznie wlaczyc odpowiednie fusebity!

Config Portd = &B10111111 : Portd = &B00000000              'konfiguracja portow
Config Portb = &B11111111 : Portb = &B00000000
Config Portc = &B00000000 : Portc = &B00000000

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up       'konfiguracja timera - PWM
Config Adc = Single , Prescaler = Auto , Reference = Avcc   'konfiguracja ADC



Dioda Alias Portd.2                                         'przypisanie nazw do portow - dla ulatwienia
Przycisk Alias Pind.6
Mset1a Alias Portd.1
Mset1b Alias Portd.0
Mset2a Alias Portb.0
Mset2b Alias Portd.7

Reset Dioda
Set Mset1a : Reset Mset1b                                   'silnik prawy (patrzac na tyl robota) - robot jedzie naprzod
Set Mset2a : Reset Mset2b                                   'silnik lewy (patrzac na tyl robota) - robot jedzie naprzod

Dim Linia1 As Word                                          'prawy czujnik linii (patrzac na tyl robota)
Dim Linia2 As Word                                          'lewy czujnik linii (patrzac na tyl robota)
Dim Sharp1 As Word
Dim I As Integer
Dim Lewo As Byte

Set Lewo

Const Granicalinii = 900                                    'te wartosc zmieniamy tak, zeby czujniki wykrywaly linie
Const Granicasharpa = 100
Const Makspredkosc = 180                                    'maksymalna wartosc PWM z zakresu 0-255 (silniki Pololu ruszaja od ok. 140)
Const Minpredkosc = 140                                     'minimalna wartosc PWM przy ktorej ruszaja silniki

Pwm1a = 0                                                   'silnik prawy (patrząc na tyl robota) - wypelnienie PWM
Pwm1b = 0                                                   'silnik lewy (patrzac na tyl robota) - wypelnienie PWM

  Do
     While Przycisk > 0                                    'czekaj na wcisniecie przycisku
        Waitms 100
     Wend

     For I = 1 To 4 Step 1                                 'odliczanie 5 sekund (4 zapalenia diody krotkie, 1 dlugie)
        Set Dioda
        Waitms 100
        Reset Dioda
        Waitms 900
     Next
        Set Dioda
        Waitms 1000
        Reset Dioda



     While Przycisk > 0                                    'wykonuje petle programu dopoki znow nie wcisniemy przycisku

        Gosub Odczytadc

        If Linia1 > Granicalinii Then                      'jesli prawy czujnik wykryje linie
           Gosub Jazdaprzod
           Waitms 500
           Gosub Obrotlewo
           Waitms 500
           Set Lewo
        Elseif Linia2 > Granicalinii Then
           Gosub Jazdaprzod
           Waitms 500
           Gosub Obrotprawo
           Waitms 500
           Reset Lewo
        Else
           If Sharp1 < Granicasharpa Then
              Gosub Jazdaprzod
              Reset Dioda
           Else
              Set Dioda
              If Lewo = 1 Then
                 Gosub Obrotlewo
              Else
                 Gosub Obrotprawo
              End If
           End If
        End If

        Waitms 50

     Wend

     Set Dioda                                             'sygnalizacja konca pracy
     Pwm1a = 0
     Pwm1b = 0
     Set Mset1a : Reset Mset1b                             'silnik prawy (patrzac na tyl robota) - robot jedzie naprzod
     Set Mset2a : Reset Mset2b
     Waitms 2000
     Reset Dioda

  Loop

End



Odczytadc:
  Start Adc

  Linia1 = Getadc(0)
  Linia2 = Getadc(1)
  Sharp1 = Getadc(2)

  Stop Adc
Return


Jazdaprzod:
  Set Mset1a : Reset Mset1b
  Set Mset2a : Reset Mset2b
  Pwm1a = Makspredkosc
  Pwm1b = Makspredkosc
Return

Jazdatyl:
  Reset Mset1a : Set Mset1b
  Reset Mset2a : Set Mset2b
  Pwm1a = Makspredkosc
  Pwm1b = Makspredkosc
Return

Obrotlewo:
  Set Mset1a : Reset Mset1b
  Reset Mset2a : Set Mset2b
  Pwm1a = Makspredkosc
  Pwm1b = Makspredkosc - 10
Return

Obrotprawo:
  Reset Mset1a : Set Mset1b
  Set Mset2a : Reset Mset2b
  Pwm1a = Makspredkosc - 10
  Pwm1b = Makspredkosc
Return

Luklewo:
  Set Mset1a : Reset Mset1b
  Reset Mset2a : Set Mset2b
  Pwm1a = Makspredkosc - 10
  Pwm1b = 0
Return

Lukprawo:
  Reset Mset1a : Set Mset1b
  Set Mset2a : Reset Mset2b
  Pwm1a = 0
  Pwm1b = Makspredkosc - 10
Return

Udostępnij ten post


Link to post
Share on other sites
Jazdaprzod: 
  Set Mset1a : Reset Mset1b 
  Set Mset2a : Reset Mset2b 
  Pwm1a = Makspredkosc 
  Pwm1b = Makspredkosc 
Return 

Zmieniając:

set Mset1a : Reset Mset1b

na :

reset Mset1a : set Mset1b

zmienisz kierunek obrotów jednego silnika. Analogicznie z drugim.

Udostępnij ten post


Link to post
Share on other sites

No ok to rozumiem tylko największy problem stanowi fakt iż robot zamiast obracać się zanim czujnik coś wykryje, kręci się jak oszalały po wykryciu.

Udostępnij ten post


Link to post
Share on other sites

Sprawdź, które koło obraca się do tyłu po wykryciu i zmień set i reset, tak aby oba kręciły się do przodu.

Udostępnij ten post


Link to post
Share on other sites

zmieniłem set reset lewego silnika (tego który obracał się do tyłu) i wtedy zmienił on kierunek obrotu ale niestety teraz prawy obraca się do tyłu

Udostępnij ten post


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

Gość
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...