logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Linefollower Zdzichu z opuszczanym ramieniem i planem dodania czujnika

wader_669 25 Lut 2008 21:27 7353 12
REKLAMA
  • #1 4845724
    wader_669
    Poziom 28  
    Posty: 1512
    Pomógł: 93
    Ocena: 15
    Moj linefollower nie odroznia sie niczym od innych, procz tym ze posiada opuszczane ramie ktore ma przymocowany wklad od dlugopisu, pozwala to pokazac droge robota.
    Ogolnie nigdy nie mailem zamiaru budowac linefollowera, ale byl to projekt na studia.
    Wydaje mi sie ze go jeszcze rozwine cos podobnego do elebota.
    Pierwsze co zrobie to dodam jeszcze dodatkowy czujnik w sumie wtedy beda 4, zrobie to po to by jeszcze szybciej jezdzil za linia.

    Linefollower Zdzichu z opuszczanym ramieniem i planem dodania czujnika

    Linefollower Zdzichu z opuszczanym ramieniem i planem dodania czujnika

    Linefollower Zdzichu z opuszczanym ramieniem i planem dodania czujnika

    ROBOT „ZDZICHU” (linefollower – śledzący linie)

    1. Anatomia robota
    · Układ zasilania „serce”. Źródłem prądu jest bateria Ni-Cd (5xAA) 6.0V 700mAh.
    Układ lm2940-5.0 stabilizuje napięcie na 5V, potrzebne do zasilania procesora (przy większym napięciu układ by się spalił) podobnie z komparatorem.

    Linefollower Zdzichu z opuszczanym ramieniem i planem dodania czujnika


    · Procesor attiny2313 firmy Atmel. On jest „mózgiem” bada stany na wejściu I lub 0 i według tego wykonuje odpowiednią czynność (która wcześniej mu zaprogramujemy) i wystawia I lub 0 na wyjściu. Mikrokontroler działa na oscylatorze 8mHz

    Linefollower Zdzichu z opuszczanym ramieniem i planem dodania czujnika

    · Czujniki CNY70. Jest to dioda nadawcza podczerwieni i fototranzystor reagujący na światło podczerwone

    Linefollower Zdzichu z opuszczanym ramieniem i planem dodania czujnika

    · Komparator LM324. Sprawdza na którym z 2 wejść bramki jest wyższe napięcie i wtedy wystawia I lub 0 na wyjściu bramki. W moim robocie nie możemy podpiąć czujników prosto do procesora, ponieważ mikrokontroler rozpoznaje tylko stan logiczna 1 to jest ok.5V i 0 ok.0V. Moje czujniki maja na wyjściu od 0v do 5v, dlatego zastosowałem komparator.
    LM324 składa się z 4 bramek ja użyłem tylko 3 (3 czujniki). Na 1 wejściu bramek dołączony jest czujnik, na 2 potencjometr (którym możemy sterować czułość). Komparator sprawdza gdzie jest wyższe napięcie i daje odpowiedz wystawiając 1 lub 0 na wyjście bramki które idzie do procesora

    Linefollower Zdzichu z opuszczanym ramieniem i planem dodania czujnika

    · Mostek-h (h-bridge) L293D „mięśnie”. Nie możemy podłączyć silniczków prosto do procesora, nie jest on wstanie uciągnąć tak dużego poboru natężenia, dlatego użyłem L293D. Można do niego podłączyć max. 4 silniczki tylko wtedy będziemy nimi mogli sterować tylko w jednym kierunku. Gdy chcemy obsługę w 2 strony możemy max. podłączyć 2 silniczki.

    Linefollower Zdzichu z opuszczanym ramieniem i planem dodania czujnika

    Kompletny schemat:
    (jak widać na schemacie dodałem jeszcze przycisk resetu, działanie podobne jak w komputerze czyli powoduje reset procesora i rozpoczęcie od nowa programu. Można to samo osiągnąć włączając i wyłączając zasilanie)

    Linefollower Zdzichu z opuszczanym ramieniem i planem dodania czujnika

    · Dodatki:
    Dodałem jeszcze 2 diody, 2 włączniki i odbiornik TSOP1736 za pomocą tego czujnika odbieramy fale podczerwoną 36hz (na takie działają piloty)

    2. Zasada działania.
    Dioda podczerwona emituje światło podczerwone które odbija się od jasnych powierzchni i wpada do fototranzystora(działa podobnie jak fotorezystor) który odpowiednio się zamyka lub otwiera. Jest on podłączony do masy i jak się otwiera powoduje to mniejsze napięcie które idzie do komparatora.
    Komparator porównuje napięcie na czujniki i na potencjometrze. Później wystawia 1 lub 0
    Procesor sprawdza stany które przesyła mu komparator i daje odpowiedz wystawiając 1 lub 0 na wyjściach do mostka h.


    Linefollower Zdzichu z opuszczanym ramieniem i planem dodania czujnika

    oto kod
    
    $crystal = 8000000
    
    Config Portd.0 = Output                                     'lewy do przodu
    Config Portd.1 = Output                                     'lewy do tylu
    
    Config Portd.2 = Output                                     'prawy do tylu
    Config Portd.3 = Output                                     'prawy do przodu
    
    
    Config Rc5 = Pind.6                                         'pinb.5 odbiornik rc5
    
    Config Pinb.0 = Input                                       'fototranzystor lewy
    Config Pinb.1 = Input                                       'fototranzystor srodkowy
    Config Pinb.2 = Input                                       'fototranzystor prawy
    
    Config Pinb.3 = Input
    
    Set Pinb.3
    
    Do
    
    If Pinb.2 = 1 And Pinb.1 = 0 And Pinb.0 = 1 Then
    Do
    Portd.0 = 1
    Portd.1 = 0
    Portd.2 = 0
    Portd.3 = 1
    Loop Until Pinb.2 = 0 Or Pinb.0 = 0
    End If
    
    If Pinb.2 = 0 And Pinb.1 = 1 And Pinb.0 = 1 Then
    Do
    Portd.0 = 0
    Portd.1 = 1
    Portd.2 = 0
    Portd.3 = 1
    Loop Until Pinb.1 = 0
    End If
    
    If Pinb.2 = 0 And Pinb.1 = 0 And Pinb.1 = 1 Then
    Do
    Portd.0 = 0
    Portd.1 = 1
    Portd.2 = 0
    Portd.3 = 1
    Loop Until Pinb.1 = 0 Or Pinb.2 = 1
    End If
    
    If Pinb.2 = 1 And Pinb.1 = 1 And Pinb.0 = 0 Then
    Do
    Portd.0 = 1
    Portd.1 = 0
    Portd.2 = 1
    Portd.3 = 0
    Loop Until Pinb.1 = 0
    End If
    
    If Pinb.2 = 1 And Pinb.1 = 0 And Pinb.0 = 0 Then
    Do
    Portd.0 = 1
    Portd.1 = 0
    Portd.2 = 1
    Portd.3 = 0
    Loop Until Pinb.1 = 0 Or Pinb.0 = 1
    End If
    
    If Pinb.2 = 0 And Pinb.1 = 0 And Pinb.0 = 0 Then
    Do
    Portd.0 = 1
    Portd.1 = 1
    Portd.2 = 1
    Portd.3 = 1
    Loop Until Pinb.2 = 1 And Pinb.1 = 1 And Pinb.0 = 1 Or Pinb.3 = 0
    End If
    
    If Pinb.2 = 1 And Pinb.1 = 1 And Pinb.0 = 1 Then
    Do
    Portd.0 = 1
    Portd.1 = 1
    Portd.2 = 1
    Portd.3 = 1
    Loop Until Pinb.2 = 1 Or Pinb.1 = 1 Or Pinb.0 = 1 Or Pinb.3 = 0
    End If
    
    Loop
    End
    


    kod do ramienia
    
    
    $regfile = "attiny2313.dat"
    
    Config Portd.0 = Output                                     'jak 0 do gory
    Config Portd.1 = Output                                     'jak 0 na dol
    
    Config Pind.2 = Input                                       'czunjik gorny
    Config Pind.3 = Input                                       'czujnik dolny
    
    Config Pind.4 = Input
    
    
    Set Pind.2
    Set Pind.3
    Set Pind.4
    
    Do
    
    Portd.0 = 0
    Portd.1 = 0
    
    If Pind.4 = 0 Then
    Do
    Portd.0 = 1
    Portd.1 = 0
    Loop Until Pind.4 = 1 Or Pind.2 = 0
    End If
    
    If Pind.4 = 1 Then
    Do
    Portd.0 = 0
    Portd.1 = 1
    Loop Until Pind.4 = 0 Or Pind.3 = 0
    End If
    
    If Pind.4 = 1 And Pind.3 = 0 Then
    Do
    Portd.0 = 0
    Portd.1 = 0
    Loop Until Pind.4 = 0 Or Pind.3 = 1
    End If
    
    If Pind.4 = 0 And Pind.2 = 0 Then
    Do
    Portd.0 = 0
    Portd.1 = 0
    Loop Until Pind.4 = 1 Or Pind.2 = 1
    End If
    
    
    Loop
    End
    


    Gdyby cos sie nie zgadzalo prosze pisac.
    Kod tez musi byc zoptymalizowany :D
  • REKLAMA
  • Pomocny post
    #2 4845883
    Ikar_91
    Poziom 13  
    Posty: 87
    Pomógł: 8
    Nawet fajnie ci to wyszło.
    Zaskoczył mnie ten wkład od długopisu. Wyjaśnij na jakiej zasadzie on ma zaznaczać trasę robota skoro on jeździ po linii :?:
    Nadajesz pilotem uniwersalnym czy zbudowałeś swój :?:
    pozdrawiam
  • REKLAMA
  • #3 4845992
    wader_669
    Poziom 28  
    Posty: 1512
    Pomógł: 93
    Ocena: 15
    pilota mam od jakiegos starego tv czy satelity.
    Co do wkladu zaznacza ta linie ale jest ona tak cienka albo nie jest wystarczajaco ciemna (nie testowalem tego) i nie wykrywa jej.
    Teraz kartka jest dosyc pokreslona i w niczym to nie przeszkadza.
    Kiedys chcialem uzyc zielonego markera zeby zaznaczal linie i z przodu czujnik koloru. Jak by widzial znowu zielona linie to by sie zatrzymal. Jednak musialem dotrzymac deadlinie i z tego zrezygnowalem. Tesotowalem czy od zielonego odbija sie podczerwien i odbija sie wiec nie zakluca niczego.
  • #4 4847680
    krzych_u
    Poziom 12  
    Posty: 26
    Ciekawa konstrukcja, gratuluję.
    Czy mógłbyś napisać w jaki sposób przymocowałeś silniczki do kół LEGO? Ewentualnie dodać jakieś dokładniejsze zdjęcie?
  • #5 4848170
    wader_669
    Poziom 28  
    Posty: 1512
    Pomógł: 93
    Ocena: 15
    nie polecam ci mojej metody bo jedno kolo chodzi w miare ok a 2 robi 8'emke. Ja zrobilem cos typu adapter, lego posiada takie szare plaskie talerze z 6 dziurami i w srodku gwiazdka ta gwiazdke wywiercilem nastepnie wlozylem ten talerz na bolec od silnika (jest on ksztaltu porstokata) i zalalem zywica epoksydowa. Chyba ciezko bedzie zrozumiec to co napisalem, postaram sie jeszcze pozniej zalaczyc fotki.
    Tak jak mowilem nie polecam tej metody, jednak dziala super robot nie skreca no moze troche :D
  • REKLAMA
  • #6 4848343
    krzych_u
    Poziom 12  
    Posty: 26
    Chyba rozumiem o co chodzi. Dzięki za wskazówki.
    Sam kilka razy próbowałem zamontować koło LEGO na wale silnika, ale moje metody były niedoskonałe. Wypróbuje Twój pomysł.
    Co prawda posiadam silniczki LEGO, ale fakt, że są 9V, trochę komplikuje zasilanie robota.
  • #7 4848549
    misiek1994
    Poziom 17  
    Posty: 350
    Pomógł: 12
    Ocena: 7
    Wpisz do programu rozwidlenie dróg, bo inaczej jeżeli ktoś wpadnie na pomysł żeby dać linię w dwie różne strony to ci procek zwarjuje.
  • #8 5714493
    eternal656
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    mam pytanie czy ten kod
    Kod:

    $crystal = 8000000

    Config Portd.0 = Output 'lewy do przodu
    Config Portd.1 = Output 'lewy do tylu

    Config Portd.2 = Output 'prawy do tylu
    Config Portd.3 = Output 'prawy do przodu


    Config Rc5 = Pind.6 'pinb.5 odbiornik rc5

    Config Pinb.0 = Input 'fototranzystor lewy
    Config Pinb.1 = Input 'fototranzystor srodkowy
    Config Pinb.2 = Input 'fototranzystor prawy

    Config Pinb.3 = Input

    Set Pinb.3

    Do

    If Pinb.2 = 1 And Pinb.1 = 0 And Pinb.0 = 1 Then
    Do
    Portd.0 = 1
    Portd.1 = 0
    Portd.2 = 0
    Portd.3 = 1
    Loop Until Pinb.2 = 0 Or Pinb.0 = 0
    End If

    If Pinb.2 = 0 And Pinb.1 = 1 And Pinb.0 = 1 Then
    Do
    Portd.0 = 0
    Portd.1 = 1
    Portd.2 = 0
    Portd.3 = 1
    Loop Until Pinb.1 = 0
    End If

    If Pinb.2 = 0 And Pinb.1 = 0 And Pinb.1 = 1 Then
    Do
    Portd.0 = 0
    Portd.1 = 1
    Portd.2 = 0
    Portd.3 = 1
    Loop Until Pinb.1 = 0 Or Pinb.2 = 1
    End If

    If Pinb.2 = 1 And Pinb.1 = 1 And Pinb.0 = 0 Then
    Do
    Portd.0 = 1
    Portd.1 = 0
    Portd.2 = 1
    Portd.3 = 0
    Loop Until Pinb.1 = 0
    End If

    If Pinb.2 = 1 And Pinb.1 = 0 And Pinb.0 = 0 Then
    Do
    Portd.0 = 1
    Portd.1 = 0
    Portd.2 = 1
    Portd.3 = 0
    Loop Until Pinb.1 = 0 Or Pinb.0 = 1
    End If

    If Pinb.2 = 0 And Pinb.1 = 0 And Pinb.0 = 0 Then
    Do
    Portd.0 = 1
    Portd.1 = 1
    Portd.2 = 1
    Portd.3 = 1
    Loop Until Pinb.2 = 1 And Pinb.1 = 1 And Pinb.0 = 1 Or Pinb.3 = 0
    End If

    If Pinb.2 = 1 And Pinb.1 = 1 And Pinb.0 = 1 Then
    Do
    Portd.0 = 1
    Portd.1 = 1
    Portd.2 = 1
    Portd.3 = 1
    Loop Until Pinb.2 = 1 Or Pinb.1 = 1 Or Pinb.0 = 1 Or Pinb.3 = 0
    End If

    Loop
    End
    jest do zaprogramowania attiny2313
    i czy trzeba programować LM324 i L293 ????
  • REKLAMA
  • #9 5714709
    wader_669
    Poziom 28  
    Posty: 1512
    Pomógł: 93
    Ocena: 15
    kurde zauwazylem blad :/
    
    Config Pinb.0 = Input 'fototranzystor lewy
    Config Pinb.1 = Input 'fototranzystor srodkowy
    Config Pinb.2 = Input 'fototranzystor prawy 
    
    set pinb.0
    set pinb.1
    set pinb.2
    


    i kod jest napisany dla attiny2313 mozesz tez wgrac go w kazdy inny procek tylko zmien regfile i piny moga sie nie zgadzac.
    Radze jeszcze dodac
    
    $regfile="attiny2313def.dat"
    


    eternal656 napisał:

    i czy trzeba programować LM324 i L293 ????


    hehhe poczytaj tematy na elektrodzie, przyda ci sie.
  • Pomocny post
    #10 5714783
    hubertfab
    Poziom 21  
    Posty: 555
    Pomógł: 31
    Ocena: 465
    wader_669 napisał:

    
    $regfile= "attiny2313det.def"
    



    Źle to napisałeś! Może ktoś na to złapać.
    Ma być:

    $regfile="attiny2313def.dat"
  • #11 5714946
    eternal656
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    he dzieki za porade

    Dodano po 6 [minuty]:

    a to


    Config Pinb.0 = Input 'fototranzystor lewy
    Config Pinb.1 = Input 'fototranzystor srodkowy
    Config Pinb.2 = Input 'fototranzystor prawy

    set pinb.0
    set pinb.1
    set pinb.2

    to mam dać w zamian tego

    Config Pinb.0 = Input 'fototranzystor lewy
    Config Pinb.1 = Input 'fototranzystor srodkowy
    Config Pinb.2 = Input 'fototranzystor prawy

    Config Pinb.3 = Input

    ????????

    Dodano po 1 [minuty]:

    i mam jeszce pod koniec napisać

    $regfile="attiny2313def.dat"

    ???
  • #12 5715198
    wader_669
    Poziom 28  
    Posty: 1512
    Pomógł: 93
    Ocena: 15
    masz racje, juz poprawilem.

    Do eternal656 masz tu prawie gotowca wiec zadaj sobie troche turudu i sam poszukaj
  • #13 5715271
    eternal656
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    ale co mam poszukać ??

Podsumowanie tematu

✨ Projekt linefollowera o nazwie "Zdzichu" wyróżnia się zastosowaniem opuszczanego ramienia z wkładem od długopisu, który ma za zadanie zaznaczać trasę robota, choć linia jest cienka i słabo widoczna dla czujników. Robot zasilany jest baterią Ni-Cd 5xAA 6.0V 700mAh, a stabilizację napięcia 5V zapewnia układ LM2940-5.0, chroniący procesor i komparator przed uszkodzeniem. Silniki napędzające koła LEGO zostały zamocowane za pomocą adaptera wykonanego z szarych talerzy LEGO z 6 otworami, w których wywiercono gwiazdkę, a następnie zalano żywicą epoksydową, co pozwala na pewne osadzenie na wale silnika, choć jedno z kół ma tendencję do jazdy na ósemkę. Autor planuje rozbudowę robota o dodatkowy, czwarty czujnik, aby poprawić szybkość i precyzję podążania za linią, a także rozważał zastosowanie zielonego markera i czujnika koloru do zatrzymywania robota na zielonej linii. W dyskusji poruszono kwestie programowania, w tym konfigurację portów i pinów mikrokontrolera ATTiny2313, z uwzględnieniem poprawnego dołączenia pliku definicji rejestrów ($regfile="attiny2313def.dat") oraz ustawienia pinów wejściowych i wyjściowych dla fototranzystorów i silników. Zwrócono uwagę na konieczność obsługi rozwidleń linii w oprogramowaniu, aby uniknąć błędów sterowania. Wymieniono także problemy z zasilaniem silników LEGO 9V oraz testy odbicia podczerwieni od zielonego markera, które nie zakłócały działania czujników podczerwieni.
Wygenerowane przez model językowy.
REKLAMA