Skocz do zawartości

program do linefollowera, prosze o sprawdzenie


Pomocna odpowiedź

Napisano

Witam

Buduje linefollowera. Robot zbudowany jest na atmedze8 i 5 czujnikach CNY70. Problem tkwi chyba w oprogramowaniu. Zaprogramowałem 5 ledów, które informują o stanie czujników. Po podłączeniu wszystkie diody świeca, ale silniki nie reagują. może problem tkwi w samych czujnikach, które nie reagują na linie. Oto kod.

$regfile = "m8def.dat"
$crystal = 16000000



Config Pinb.1 = Output
Config Pinb.2 = Output
Config Servos = 2 , Servo1 = Portb.1 , Servo2 = Portb.2 , Reload = 10
Enable Interrupts

Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Dioda1 Alias Portd.0
Dioda2 Alias Portd.1
Dioda3 Alias Portd.2
Dioda4 Alias Portd.3
Dioda5 Alias Portd.4


Config Pinb.0 = Input
Przycisk Alias Pinb.0

Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
Config Pinc.5 = Input
Czujnik1 Alias Pinc.5
Czujnik2 Alias Pinc.4
Czujnik3 Alias Pinc.3
Czujnik4 Alias Pinc.2
Czujnik5 Alias Pinc.1

Dioda1 = 1
Dioda2 = 1
Dioda3 = 1
Dioda4 = 1
Dioda5 = 1

Set Portb.0

Dim Aktywny As Bit
Aktywny = 0

Dim I As Integer
I = 10

Do
Gosub Sygnalizuj_czujniki
Debounce Przycisk , 0 , Startuj , Sub

If Aktywny = 1 Then
 Gosub Wysteruj
Else
 Servo(1) = 20
 Servo(2) = 20
End If
Loop
'-----------------

'---Przod
Wysteruj:
If Czujnik1 = 0 And Czujnik2 = 0 And Czujnik3 = 1 And Czujnik4 = 0 And Czujnik5 = 0 Then
 Servo(1) = 20 + I
 Servo(2) = 20 - I
End If

'---W prawo
If Czujnik1 = 0 And Czujnik2 = 0 And Czujnik3 = 0 And Czujnik4 = 0 And Czujnik5 = 1 Then
 Servo(1) = 20 + I
 Servo(2) = 20
End If

If Czujnik1 = 0 And Czujnik2 = 0 And Czujnik3 = 0 And Czujnik4 = 1 And Czujnik5 = 1 Then
 Servo(1) = 20 + I
 Servo(2) = 20
End If

If Czujnik1 = 0 And Czujnik2 = 0 And Czujnik3 = 1 And Czujnik4 = 1 And Czujnik5 = 1 Then
 Servo(1) = 20 + I
 Servo(2) = 20
End If

If Czujnik1 = 0 And Czujnik2 = 0 And Czujnik3 = 1 And Czujnik4 = 1 And Czujnik5 = 0 Then
 Servo(1) = 20 + I
 Servo(2) = 20
End If


If Czujnik1 = 0 And Czujnik2 = 0 And Czujnik3 = 0 And Czujnik4 = 1 And Czujnik5 = 0 Then
 Servo(1) = 20 + I
 Servo(2) = 20
End If

'---W lewo
If Czujnik1 = 1 And Czujnik2 = 0 And Czujnik3 = 0 And Czujnik4 = 0 And Czujnik5 = 0 Then
 Servo(1) = 20
 Servo(2) = 20 - I
End If

If Czujnik1 = 1 And Czujnik2 = 1 And Czujnik3 = 0 And Czujnik4 = 0 And Czujnik5 = 0 Then
 Servo(1) = 20
 Servo(2) = 20 - I
End If

If Czujnik1 = 1 And Czujnik2 = 1 And Czujnik3 = 1 And Czujnik4 = 0 And Czujnik5 = 0 Then
 Servo(1) = 20
 Servo(2) = 20 - I
End If

If Czujnik1 = 0 And Czujnik2 = 1 And Czujnik3 = 1 And Czujnik4 = 0 And Czujnik5 = 0 Then
 Servo(1) = 20
 Servo(2) = 20 - I
End If

If Czujnik1 = 0 And Czujnik2 = 1 And Czujnik3 = 0 And Czujnik4 = 0 And Czujnik5 = 0 Then
 Servo(1) = 20
 Servo(2) = 20 - I
End If



Return

Startuj:
Toggle Aktywny
I = I + 1
Return

Sygnalizuj_czujniki:
If Czujnik1 = 1 Then
 Dioda1 = 0
Else
 Dioda1 = 1
End If
If Czujnik2 = 1 Then
 Dioda2 = 0
Else
 Dioda2 = 1
End If
If Czujnik3 = 1 Then
 Dioda3 = 0
Else
 Dioda3 = 1
End If
If Czujnik4 = 1 Then
 Dioda4 = 0
Else
 Dioda4 = 1
End If
If Czujnik5 = 1 Then
 Dioda5 = 0
Else
 Dioda5 = 1
End If
Return

nie rozumie pytania, chodzi o napiecia na czujniku ? na diodzie jest 1.15V, na tranzystorze 2,5V, calosc zasilam 3V

[ Dodano: 31 Sty 10 01:54 ]

udalo mi sie uruchomic wszyskie czujniki, kazdy z nich reaguje na zmiane podloza, o czym sygnalizuja diody, program zostal napisany ze wzoru, z ktorego wynika, ze musze zastosowac serwomechanizmy o ciaglej rotacji. Co to znaczy ? Sa to narmalne silniczki pradu stalego, czy przerobione serwomechanizmy, czy jeszcze cos innego ?

ze wzoru, z ktorego wynika, ze musze zastosowac serwomechanizmy o ciaglej rotacji. Co to znaczy ?

Przerobione serwomechanizmy, ale zamiast nich możesz użyć silników DC z przekładnią

problem polega na tym, ze silniki nie reaguja, diody od czujnikow sygnalizuja wykrycie lini, ale silniki nie ruszaja, zauwazylem, ze gdy odwrotnie przyloze polaryzacje napiecia jeden z silnikow kreci sie,

z mojej dedukcji wynika, ze mostek H jest zbedny, robot mial w zalozeniu skrecac w sposob jeden silnik stop, drugi start, a mozliwe jest dolaczenie do ukladu mostka H ? jezeli to niezbedne moge do dolutowac "na pajaka" i zmodernizowac program

z mojej dedukcji wynika, ze mostek H jest zedny, robot mial w zalozeniu skrecac w sposob jeden silnik stop, drugi start

I co, zamierzasz zasilać silniki bezpośrednio z pinów procesora? Nie widzę nawet jednego tranzystora na tym schemacie.

zasilanie do serw jest wyrowadzone zaraz przy tranzystorze na wejsciu, sygnal do serw chcialem pociagna z atmegi z pinow 15 i 16 (wg. mojego schematu),

Wybacz, nie czytałem całego tematu, tylko odpowiedziałem na Twoje ostatnie pytanie. Skoro sterujesz serwami, to mostka nie trzeba.

mam zapytanie, mianowicie z tego co wiem bede musial przerobic serwa modelarski (pozbyc sie ogranicznika na zebatce) ale czy serwo mege sterowac sygnalem PWN aby obracalo sie o wielokrotnosc kata 360 stopni ? mam problem z programem, serwa nie reaguja w ogole, bardzo prosze o przeanalizowanie programu przez jakas tega glowe, pisalem go ze wzorcow z internetu, nie jestem w tym mistrzem, moglem sie gdzis pomyslic, a z tego co mi sie wydaje o raczej wina programu, z strony elektroniki nie widze zadnych usterekt

[ Dodano: 03 Lut 10 11:34 ]

przed chwila, udalo mi sie uruchomic serwomechanizm, ale pojawily sie nowe problemy, pierwszy polega na tym, ze serwo przesowa sie o bardzo maly kat i zatrzymuje sie, dopiero kilkakrotne podlaczenia i odlaczenie napiecia powoduje dalszy ruch, drugim jest problem ogranicznika na kole zebatym, czy po jego usunieciu serwo bedzie krecic wielokrotnosc kata 360 stopni ?

Po usunięciu blokady mechanicznej, będziesz miał jeszcze problem z potencjometrem. Skoro upierasz się na sterowanie takim serwem w sposób "tradycyjny", to przeczytaj mój temat, gdzie takie rozwiązanie wykorzystałem:

https://www.forbot.pl/forum/topics7/prototyp-robota-edukacyjnego-na-wakacyjne-zajecia-w-gimnazju-vt2157.htm

Możesz wykorzystać funkcję "servo" z bascoma, choć osobiście za nią nie przepadam z kilku opisanych już na forum względów...

Zastanawiam się nad potencjometrem, w linku który został zamieszczony. W przerobionym serwie został "oryginalny" potencjometr czy był wlutowany nowy ? Na moje oko chyba był wlutowany nowy. Na ogół w serwach są montowane malutkie potencjometry sprzężone z półosią silnika w serwie. Moim drugim problemem jest to czy po obrocie serwa nie nastąpi zatrzymanie, a wznowienie obrotu będzie możliwe tylko przez ponowne podłączenie zasilania (mam taki problem przy moim obecnym programie), jestem ciekawy dlaczego tak się dzieje, może mi ktoś wytłumaczy zachowanie serwa na podstawie w/w program ?

(przepraszam za błędy, za dużo pośpiechu)

__________

Komentarz dodany przez: Sabre

Spodziewasz się pomocy od innych? To pisz tak aby każdy mógł cię zrozumieć!

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...