Chcesz zbudować najprawdziwszego robota? Nie wiesz od czego zacząć? Oto przepis, opisujący krok po kroku budowę programowalnego robota podążającego za czarną linią na białym tle. Zdziwisz się, jakie to proste!
Sercem każdego zaawansowanego robota jest układ zawierający przynajmniej jeden mikrokontroler. Programowanie pozwala na elastyczne dostosowywanie robota do konkretnych warunków, daje nam pełną kontrolę nad tym, co ma się dziać w jego „umyśle”, pozwala wprowadzać dowolne poprawki i rozwijać możliwości. Mikrokontrolery AVR są obecnie najpopularniejszą i najtańszą opcją na Polskim rynku.
Krótki film przedstawiający gotowego robota zaprogramowanego wsadem do procesora z załącznika (uproszczony kod, bez sterowania PWM):
Przepis na robota
Przybliżony kosztorys:
- Płytka uniwersalna PDU27 – 8zł – sklep AVT
- Mikroprocesor Atmega8 (7zł) wraz z podstawką (polecam precyzyjną – 1,70zł) – sklep AVT (podstawka)
- Mostek H L293D lub L293DNE (10zł) również z podstawką (polecam precyzyjną) – 1,40zł – sklep AVTpodstawka) (
- 3 transoptory odbiciowe CNY70 (czujniki linii) – 3×4,50zł – sklep AVT
- 1 rezystor 470 Ohm (później nazywany 470R) – 0,25zł za 10 sztuk – sklep AVT
- 3 rezystory 240 Ohm (240R) – 0,25zł za 10 sztuk – sklep AVT
- 3 rezystory 10k Ohm (10K) – 0,60zł za 10 sztuk – sklep AVT
- 1 dioda LED np. zielona – 0,20zł – sklep AVT
- 1 korpus złącza żeńskiego goldpin 5×1 (1,20zł) wraz z blaszkami (0,60zł za 10 sztuk) – sklep AVT (blaszki)
- 1 dwurzędowa listwa goldpinów (0,80zł) – sklep AVT
- 1 jednorzędowa, kątowa listwa goldpin (0,81zł) – sklep AVT
- 2 metry 5-żyłowego przewodu wstążkowego, wielokolorowego (2×3,20zł za metr bieżący), można też przejść się do sklepu komputerowego i kupić dwa metry tzw. skrętki – sklep AVT
- koszyk na 4 baterie AA z pokrywą i włącznikiem (2,81zł) – sklep AVT
Podsumowanie:55,52zł + koszty przesyłki (sklep AVT)
- Koło podporowe – market budowlany (np. Leroy Merlin, dział meblowy);
- Dwie śruby o średnicy 3 i 4mm (im dłuższe tym lepsze, polecam tak min. 3cm dla średnicy 3mm i 5,5cm dla średnicy 4mm) i do każdej po 3 nakrętki (w sumie ok. 2zł) – market budowlany;
- 2 standardowej wielkości serwonapędy modelarskie (do 25zł/sztuka) – Allegro; czasami można dostać tanio używane. Zwrócie uwagę, by nie były to mikroserwa (możecie mieć problem z modyfikacjami – różnią się nieco mechanicznymi rozwiązaniami)! Zdjęcia przykładowych serw znajdują się w dalszej części artykułu;
- 2 jednakowe nakrętki od słoików – kuchnia/piwnica;
- Samoprzylepna guma do uszczelniania okien; powinna pasować szerokością do szerokości brzegów nakrętek – market budowlany, sklep wielobranżowy (np. Carrefour); ew. gumki-recepturki.
Narzędzia:
- Piłka do metalu;
- Wiertarka i wiertła o średnicy 3 i 4 mm;
- Pistolet do klejenia na gorąco wraz z wkładami kleju uniwersalnego;
- Zamiast piłki do metalu i wiertarki polecam zestaw miniwiertarki wraz z akcesoriami do wiercenia, cięcia i szlifowania (dostępne np. w Leroy Merlin i AVT, koszt: ok. 90zł);
- Lutownica / stacja lutownicza (polecam stację Xytronic 369 – koszt ok. 130 zł, naprawdę warto) i spoiwo lutownicze z topnikiem (polecam cienkie, średnica w okolicach 0,38mm – dostępne w ofercie AVT);
- Przydatna jest „ściągaczka” do izolacji (dostępna np. w Leroy Merlin i AVT, koszt ok. 15zł);
- Cążki boczne (można dostać w AVT, koszt ok. 9 zł), ostatecznie mogą być mocne nożyczki;
- Kombinerki i śrubokręt;
- Programator ISP AVR, najlepiej na USB (wystarczy wpisać to na Allegro „Programator AVR ISP USB).
Powyższa lista może wydać się strasznie długa, ale podejrzewam, że część narzędzi znajdziecie w domu. Sporo elementów to groszowa sprawa, a elektronicy na pewno będą mieli coś z wymienionych elementów.
0. Schemat elektroniki robota:
1. Zaczniemy od przerobienia naszych serw modelarskich. Sterowanie nieprzerobionego serwa wymaga wysyłania określonych impulsów, a ich zakres obrotów ograniczony jest zwykle do ok. 120 stopni – celem modyfikacji jest pominięcie elektroniki, wyjęcie potencjometru i usunięcie mechanicznej blokady tak, by serwo zaczęło pracować jako zwykły silnik z przekładnią. Poniżej zamieszczam krótki wideo-tutorial mojego autorstwa, opisujący jak to zrobić.
2. Przecinamy płytkę wzdłuż linii zaznaczonej na rysunku, a następnie zaczynamy lutować elementy na większej części. Pod nazwami L293D i Atmega8 na rysunku należy rozumieć same podstawki. Lutowanie diody zostawimy na koniec – chcemy, żeby wystawała ponad plątaniną kabli.
Czerwone kropki na rysunkach będą oznaczały miejsca połączenia elementów z płytką przy pomocy cyny (czyli luty). Zwróćcie uwagę na to, żeby luty były błyszczące, spoiwo dokładnie rozlało się po padzie, ale nie było go zbyt dużo. Prawidłowe połączenia widać na zdjęciu powyżej – pierwsze z prawej. Tzw. zimne luty są bardzo częstym powodem niedziałania układu – stąd moja uwaga. Zaczynamy od łączenia elementów i ścieżek przy pomocy tzw. zworek. Tam, gdzie pola lutownicze są w bezpośrednim sąsiedztwie, warto użyć kawałków drutu, np. z uciętych nóżek rezystorów (zaoszczędzimy na przewodach i zmniejszymy plątaninę kabli na płytce).
3. Zasilanie:
4. Złącze programatora
5. Połączenie Atmegi z L293D (mostkiem H):

Rozmieszczenie połączeń linii sygnałowych pomiędzy mikrokontrolerem i mostkiem H na płytce uniwersalnej

Rozmieszczenie połączeń linii sygnałowych pomiędzy mikrokontrolerem i mostkiem H na płytce uniwersalnej
6. Połączenie mostka H i silników (przerobionych serw):
7. Połączenie ATmegi8 i złącza czujników linii:

Rozmieszczenie połączeń linii sygnałowych pomiędzy mikrokontrolerem i czujnikami linii na płytce uniwersalnej

Rozmieszczenie połączeń linii sygnałowych pomiędzy mikrokontrolerem i czujnikami linii na płytce uniwersalnej
8. Mniejszy kawałek płytki wykorzystamy do budowy modułu z czujnikami:
9. Na końcu taśmy 5-żyłowej zakładamy złącze goldpin żeńskie. Wiercimy w płytce dwa otwory o średnicy 4mm, wkładamy w nie dwie śruby i dokręcamy z drugiej strony nakrętką.
10. Następnym krokiem jest wywiercenie otworów o tej samej średnicy i na tej samej szerokości w płycie głównej robota. Następnie przykładamy podstawę koła podporowego, oznaczamy położenie otworów i wiercimy – tym razem wiertłem o średnicy 3mm. Efekt końcowy powinien wyglądać tak:
11. Przystępujemy do połączenia naszych przerobionych serw z „kołami”. Rozgrzewamy pistolet klejowy, kapiemy odrobiną kleju na środek nakrętek, przykładamy serwo orczykiem, centrujemy bardzo dokładnie (można wcześniej zaznaczyć obrysem miejsce gdzie przyłożyć orczyk) i mocno dociskamy czekając aż klej zacznie stygnąć i wiązać.
12. Następnie nakładamy trochę kleju z tyłu, na spodzie naszego modułu z mikroprocesorem i dociskamy serwa – dbając, by były równo rozmieszczone.
13. Gdy klej stygnie, wkładamy dwie śruby (średnica 3mm) w koło podporowe, dokręcamy mocno, nakładamy na to jeszcze luźno po jednej nakrętce, wtykamy w wywiercone wcześniej otwory w module głównym i dokręcamy z góry, żeby koło nie wypadło. Gdy klej zastygnie, kapiemy nową porcją na górę płytki, kładziemy koszyk na baterie (tak, żeby klapka wysuwała się do tyłu, a włącznik był na spodniej jego części) i dociskamy mocno.
14. W podobny sposób jak przednie koło, zakładamy moduł z czujnikami pod modułem z mikroprocesorem, a następnie podłączamy czujniki do wyprowadzonego na płycie głównej złącza. Zastosowanie śrub pozwala na bardzo dokładną regulację położenia poszczególnych części względem siebie. Kładziemy robota na płaskiej powierzchni i odkręcając oraz dokręcając odpowiednio nakrętki dążymy do tego, żeby płyta z mikroprocesorem była idealnie do niej równoległa; czujniki natomiast powinny znajdować się około 3 mm nad podłożem. Wymaga to trochę cierpliwości i dokładności, ale na pewno się opłaci. Gdy uda nam się ta sztuka, pozostaje dokręcić wszystko do oporu i cieszyć skończonym „ciałem” robota 🙂
15. To jeszcze nie koniec! Teraz rzecz najważniejsza – programowanie. Póki tego nie zrobimy, nasz robot jest głuchy, niemy i sparaliżowany. W programie „za rączkę” przeprowadzimy go przez wszystkie możliwe zadania i problemy, jakie w przyszłości napotka.
Nauka programowania jest tematem na oddzielny wątek i nie będę tu się na ten temat rozwodził. Polecam artykuł Kurs BASCOM-AVR, który pomoże opanować podstawy w dość krótkim czasie. Gwarantuję, że nie jest to nic trudnego i że można się z tym uporać w parę godzin (jeśli wcześniej mieliśmy chociaż przelotny kontakt z programowaniem w jakimkolwiek języku). Dodałem przykładowy program w postaci pliku źródłowego (język BASCOM) oraz dwa skompilowane pliki (BIN oraz HEX – do wyboru) – wystarczy więc wgrać to do robota za pomocą programatora i cieszyć sztuczną „inteligencją” w naszym własnym domu. Polecam rozłożyć na stole/podłodze duże, białe arkusze papieru i czarną taśmą izolacyjną wyznaczyć robotowi trasę do pokonania. Im lepszy program, tym trudniejszą i bardziej skomplikowaną trasę będzie w stanie pokonać. Po dopracowaniu robota (napisanie zaawansowanego programu, wymiana serw na bardzo szybkie silniki z przekładniami, stabilizowane napięcie, dławik między AREF/AVCC a VCC, kondensatory filtrujące) nic nie stoi na przeszkodzie, by wyruszyć z nim na zawody z całkiem realną szansą na podium.
Życzę wszystkim powodzenia i dobrej zabawy 🙂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
$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 = 255 'Silnik prawy - maksymalna prędkość Pwm1b = 255 Elseif Czujnik_lewy > Granica Then Pwm1a = 0 Pwm1b = 255 Elseif Czujnik_prawy > Granica Then Pwm1a = 255 Pwm1b = 0 Else Pwm1a = 255 Pwm1b = 255 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 |
Plik źródłowy (*.bas) i dwa pliki skompilowane, gotowe do wgrania do pamięci mikrokontrolera (do wyboru *.bin i *.hex):
Ten plik (i wiele innych ciekawych rzeczy) jest też dostępny na moim koncie Chomikuj.pl:

Czy po wykonaniu ciała robota (pkt 14 włącznie) i włączeniu zasilania dioda powinna świecić?
Nie powinna, chociaż czasami może się tak zdarzyć (ale nie przy fabrycznie nowej Atmedze).
Mógłbyś w kilku krokach opisać jak poprawnie wgrać plik z programem do mikrokonrolera?
dzięki, pozdr
http://hobbyrobotyka.pl/2010/08/programowanie-avr-przy-pomocy-sinaprog/
Witam, na schemacie jest zasilanie 5V a 4 bateria AA to 6 V.
Czy a8 wytrzyma 0,5 V więcej?
Trochę to nieeleganckie, ale wytrzyma. Ideałem byłby stabilizator LDO na 5V, ale starałem się uprościć maksymalnie schemat. Nie do końca zgodnie ze sztuką… ale robot jest do zabawy, a nie pracy w warunkach przemysłowych 😉
A jak napięcie odniesienia się przelicza np.2 v?
Z proporcji.
2,5V – 1024
2V – X
X = (2V * 1024) / 2,5V = około 819
I na odwrót, jak mamy np. wartość zmierzoną 500
2,5V – 1024
X – 500
X = (500 * 2,5V) / 1024 = około 1,22V
Do autora,
chciałbym zapytać, czy serwomechanizmy mozna zastapic dwoma silnikami prądu stałego o tych samych parametrach? jeśli tak , to dlaczego zastosowałes serwomechanizmy? ze wzgledu na przekładnie?
Oczywiście, że można je zastąpić. Użyłem serw ze względu na przekładnię właśnie i jeszcze orczyki, dzięki którym łatwiej jest przymocować koła. Sama obudowa też jest wygodniejsza w montażu, niż „goły” silnik.
Wielkie dzięki za odpowiedź , części mam zamówione, w najbliższym czasie zabieram się za tworzenie Line followera na podstawie Twojego artykułu 🙂
Witam Autora,
Zrobiłem robota według Twojego „przepisu” wszystko działało bardzo dobrze, posunąłem się o krok dalej i zrobiłem płytki drukowane , aczkolwiek po podaniu napięcia zasilaczem stabilizowanym pokazuje mi bardzo niskie napięcie a prąd w granicach jedngo ampera mógłbys zerknąc na schemat i zobaczyc czy czegoś nie pomieszałem? oglądałem go 3 razy i wydaje mi sie wszystko okej. Do schematu dodałem stabilizator L7805 i przełacznik , ktory umozliwi bezposrednie ładowanie akmulatorów, bez koniczności wyciagania z podwozia.
Link do pobrania schematu, i płytki
http://www.voila.pl/095/vagjs/
Witam
Jest kilka błędów, najważniejszy odnosi się do stabilizatora. Wg noty katalogowej, 7805 wymaga co najmniej ok. 7V napięcia wejściowego (min. 2V różnicy). Jeśli zasilasz robota tak jak ja, to nic dziwnego, że napięcie za stabilizatorem jest bardzo niskie – nie działa on prawidłowo. Rozwiązanie to albo zmiana źródła zasilania na np. pakiet Li-Pol 7,4V, albo stabilizator LDO. Druga sprawa – maksymalna wydajność prądowa 7805(L) to zdaje się 1A, czy stabilizator nie był gorący podczas testów? Nie wiem jak się zachowa przy wspomnianej nieprawidłowej pracy, ale nie wróżę mu długiego i szczęśliwego życia 😉 Zasilanie elektroniki i zasilanie silników (pin 8 mostka) staraj się rozdzielać. W tym przypadku zasilania silników nawet nie musisz stabilizować, ja bym podłączył je bezpośrednio pod akumulator. Albo – jeśli się upierasz – zmień stabilizator na taki, który wytrzyma maksymalne obciążenie prądowe z pracujących/przełączanych silników, ale zapewnij też BARDZO dobrą filtrację za stabilizatorem.
Ostatnia rzecz – warto pomyśleć o filtracji właśnie, chodzi mi głównie o elektrolity przy stabilizatorze.
Witam, Dziękuję za odpowiedź
Okazało się wszystko w porządku, popełniłem mały błąd przy podłączaniu, Zasilam robota pakietem ogniw z laptopa , są tam 3 ogniwa (na jednym 3,2 V ), Co do stabilizatora masz racje, szybko się grzeje, wymienię go na wydajniejszy. A co do filtracji.. wymienić kondensatory z poliestrowych na elektrolity? jakiej mają być pojemności?
Gdzie Ty tam używasz kondensatorów poliestrowych? Daj jak największego elektrolita na wyjściu, nie bój się nawet pojemności rzędu 2mF, do tego warto dodać garść ceramicznych 100nF blisko pinów zasilania uC. Nie zaszkodzi też elektrolit np. 470uF na wejściu stabilizatora. Ideałem byłoby jednak oddzielenie VCC silników od VCC uC (wspomniany pin 8 mostka) – np. dodatkowy stabilizator lub przetwornica.
Pozdrawiam
Witam,
zrobiłem samodzielnie schemat i płytkę na podstawie Pana schematu. Wszystko złożyłem, ale robot „działa” tylko w 25%. Tzn. Działa tylko czujnik środkowy oraz tylko jeden silnik. Gdzie może znajdować się problem, proszę o pomoc, bo jestem początkującym robotykiem. Choć podstawy już znam tu nic nie mogę poradzić.
Załączam schemat.
http://www.speedyshare.com/file/TKYJC/robot.rar
Proszę o jakąkolwiek pomoc, bo nie chcę, aby moja przygoda z robotami skończyła się na takim etapie.
Z góry dziękuję.
Na 99% problem jest w połączeniu. Nie ma innej rady, musisz z multimetrem ustawionym na testowanie ciągłości obwodu (tzw. „piszczek”) sprawdzić KAŻDE połączenie. Zacznij od połączeń od elementów, które sprawiają kłopoty. Próbowałeś spojrzeć na czujniki przez aparat np. w komórce? Po włączeniu robota powinny świecić na taki dziwny fioletowy kolor. Jeśli świecą, to spójrz na ścieżki i przewody (zwłaszcza na złącza jakie zastosowałeś – już raz naprawiałem jednej osobie robota, który nie działał, bo zacisnęła nieprawidłowo złącza). Druga sprawa – napisz program, który włączy oba silniki niezależnie od informacji z czujników.
PS pamiętaj, że ten schemat nie jest „jedyny słuszny”, będzie działać w większości konstrukcji zasilanych akumulatorowo i korzystających z takich małych silników, ale został uproszczony do granic możliwości i brakuje w nim odpowiedniego filtrowania napięcia.
Tutaj jest link do pełnego schematu i z tego warto korzystać w nowych, innych konstrukcjach:
http://www.forbot.pl/forum/upload_img/obrazki/IMG_4e88ed98a84607715.png
Witam,
„przepiszczałem” cały układ i wydaje się dobry, ale jednak zrobię go od nowa na podstawie nowego schematu. Natomiast sprawdziłem Atmegę w innym układzie i okazuję się, że jest ona popsuta. Teraz nie wiem czy zepsuła się z powodu jakiejś wady mojego układu. Czy może z powodu za dużego napięcia. Albo coś przypadkiem dowarło się do układu. Chyba będę musiał też wymienić mostek, bo w nim też mogło coś strzelić. I jeszcze jednak kwestia, stosuję silniki z zabawki, a nie te przerobione serwa. Czy to może mieć jakiś wpływ na pracę układu? Jak skończę to pochwalę się całym robotem, bo wyszedł bardzo zgrabnie, tylko ta nieszczęsna elektronika nie chce działać.
Pozdrawiam i dziękuję za pomoc.
Na tym schemacie co podesłałeś L1 co oznacza?
L1 jest to cewka o indukcyjności 10uH(Henrów). Twój link do schematu nie działa.
Witam, wrzuciłem schemat i płytę na imageshack.us w rozdzielczości,którą mi Pan zasugerował.
link do schematu: http://img822.imageshack.us/img822/8388/plytkasch.png
link do płyty: http://img32.imageshack.us/img32/6707/plytkabrd.png
W schemacie nie zastosowałem tylko stabilizatora. Wydaje mi się ,że reszta pozostała taka sama jak w Pana schemacie. Jeśli coś tam źle przerysowałem lub błędnie naniosłem (np.:na płytę) to skoryguję.
Pierwsze co mi się rzuca w oczy, to grubość ścieżek. Popraw zwłaszcza te, przez które będą płynąć największe prądy – zasilanie. Jeśli zostanie Ci trochę miejsca, to możesz też poprawić pozostałe – dużo łatwiej taką płytkę wykonać.
Druga sprawa – masz odwrotnie podłączone złącze programatora. Od „wcięcia” powinny być sygnały MOSI, MISO, RST itd, a masz zasilanie.
Unikaj kątów prostych pomiędzy ścieżkami.
Upewnij się też, że CNY70 nie są w odbiciu lustrzanym (czujniki muszą być skierowane na dół).
Schemat wygląda ok, chociaż prowadzenie linii przez elementy znacznie pogarsza przejrzystość, trudno mi się tutaj dopatrzeć jakiegoś błędu – zwłaszcza w okolicy mostka.
Na koniec zawsze warto sprawdzić PCB i schemat narzędziem ERC.
Witam,
nareszcie uruchomiłem robota 🙂 Schematy i płytki były poprawnie wykonane, więc zaglądnąłem jeszcze raz do programu. Zmieniłem w nim tylko 4 wartości i działa. Nie wiem czemu działa na odwrót niż Pana, ale w takiej konfiguracji też poprawnie wykonuje swoje trudne zadanie jeżdżenia po ciemnej linii.
Chciałbym Panu serdecznie podziękować za odpowiedzi na moje ,czasem głupie, pytania i ogólnie za pomoc.
Pozdrawiam.
Zamieszczam fragment zmieniony:
Do
Gosub Wczytaj_stany_przetwornikow
If Czujnik_srodkowy > Granica Then
'Silnik lewy – maksymalna prędkość
Pwm1a = 0
'Silnik prawy – maksymalna prędkość
Pwm1b = 0
Elseif Czujnik_lewy > Granica Then
Pwm1a = 0
Pwm1b = 255
Elseif Czujnik_prawy > Granica Then
Pwm1a = 255
Pwm1b = 0
Else
Pwm1a = 0
Pwm1b = 0
End If
Loop
End
Witam, mam pare wątpliwości pierwsze to jakie dać zasilanie bez stabilizatora, 3×1,5v= 4,5v czy 4×1,5v=6V ? 🙂 jaki kupic programator trochę tańszy niż ten podany wyżej najlepiej do 30zl max 40zl, a ostatnie pytanie to czy CNY70 nie powinny być przekręcone o 90* gdzieś widziałem ze powinno sie je tak montować zeby ta „dioda :)” była sprzodu a to drugie stylu, z góry dzieki
Siema. Pamiętaj, że naładowane baterie mają dużo większe napięcie niż to zadeklarowane na obudowie. 1,5V najczęściej mają coś w okolicach 1,8-1,9V, spotkałem się nawet z takimi z ponad 2V. Dobierz takie zasilanie, żeby nie przekroczyć 6V (lepiej mniej, niż więcej – ryzyko uszkodzenia atmegi).
Programatorów jest teraz od groma, jeśli posiadasz w kompie port LPT, to złóż sobie za grosze STK200. Jeśli chcesz USB, to wpisz na allegro „programator avr” i zwyczajnie się rozejrzyj. Polecam programatory nazywane „STK500” albo „STK500v2” (ta pierwsza nazwa jest błędna, ale się przyjęła). Poszukaj żeby w cenie miał taśmę 10żyłową i dobrze jakby programator miał bezpiecznik polimerowy (tzw. zabezpieczenie nadprądowe), bo przy błędach w podłączeniu istnieje ryzyko spalenia portu USB.
W kwestii CNY70 to nie ma co gdybać i „gdzieś widzieć”, tylko sięgnąć do noty katalogowej (google.pl-> cny70 datasheet), znaleźć obrazek z opisem nóżek i masz tam wyraźnie napisane co i jak. Dodam, że „marked area” oznacza po prostu ściankę z napisami. Widok masz tam bodajże z góry, czyli patrząc od strony diody i tego drugiego 😉 Pozdrawiam i życzę powodzenia
Witam mam proble mz robotem po złożeniu zaprogramowaniu i uruchomieniu dioda świeci kręcą sie oba silniki jednak napięcie na granicy chyba mam za małe aby zzmieniuc stan na białym mam 0.5v a na czarnym ok 1.6 v.
W takim razie trzeba zmienić granicę w programie, celowo ją okomentowałem:) Sporo zależy od odległości czujników od podłoża i nawet konkretniej fabrycznej serii tych czujników (różne serie mogą nieco różnić się parametrami). Istotne jest także napięcie zasilania robota.
Witam!Mam taki problem- robocik wykonany dokładnie według opisu powyżej nie chce skręcać…wszystkie połączenia sprawdzone,czujniki nie śmigane…Czy mogę prosić o jakieś sugestie co może być przyczyną takiego stanu rzeczy?
Na początek spróbuj spojrzeć przez aparat cyfrowy na czujniki, chodzi o podgląd na ekranie, jak przy robieniu zdjęć. Możesz śmiało wykorzystać aparat w telefonie. Jeśli są prawidłowo podłączone, to zauważysz, że świecą na fioletowo. Jeśli nie, to coś jest jednak z nimi nie tak. Druga sprawa – można w programie edytować zmienną „Granica” i sprawdzić, jak to wpływa na zachowanie robota.
Pytanko – w jakim programie tworzyłeś schemat rozmieszczenia elementów?
pozdrawiam
Witam, schemat tworzyłem w programie Eagle firmy CadSoft – w „Artykułach” znajdziesz kurs obsługi i krótki opis skąd go wziąć (za darmo).
Pozdrawiam
Cześć Nawyk, ja mam problem z tego typu, że wyskakuje komunikat w bascomie: Chip differs at bytes adress:0000. Ogólnie to czujniki działają, dodałem kilka kondensatorów filtrujących sprawdzałem napięcie idące od czujników na nogi procesora. Teoretycznie wszystko działa, jednak Atmega nie reaguje na polecenie: czujnik_srodkowy > granica – nie załącza napięcia na obydwa silniki naraz. Gdzie może leżeć przyczyna problemu?
Czy plik_testowy.hex i plik_testowy.bas zawierają ten sam program? Wydaje mi się że są różne. Jak kompiluje plik_testowy.bas to robot reaguje tylko na skrajne czujniki. Kiedy flashuje uC gotowym plik_testowy.hex to wszystko działa jak trzeba.
Możliwe, że są jakieś zmiany w kompilatorze i dlatego hex generowany w nowej wersji ma inny rozmiar i trochę inaczej działa… Szczerze mówiąc nie wiem, co może być nie tak. *.bas i *.hex były na pewno zapisywane w tym samym momencie, podczas kompilacji i bez zmian spakowałem je razem. Może spróbuj szczęścia ze starszą wersją Bascoma? Chociaż bardzo dziwne jest, że Ci nie działa. Spróbuj jeszcze powalczyć z ustawieniami stałej „Granica” w kodzie programu.
Musiałem odwrócić wartości PWM, żeby wszystko zaczęło działać. Na forbocie przeczytałem, że najwidoczniej uC wszedł w tryb inversed PWM.
Zmieniłem część listingu na:
Gosub Wczytaj_stany_przetwornikow
If Czujnik_srodkowy > Granica Then
‘Silnik lewy – maksymalna prędkość
Pwm1a = 0
‘Silnik prawy – maksymalna prędkość
Pwm1b = 0
Elseif Czujnik_lewy > Granica Then
Pwm1a = 0
Pwm1b = 255
Elseif Czujnik_prawy > Granica Then
Pwm1a = 255
Pwm1b = 0
Else
Pwm1a = 0
Pwm1b = 0
End If
Loop
End
i wszystko działa jak należy.
Muszę gdzieś poszukać o tym inversed PWM mode jak się go włącza/wyłącza.
Zamienia się w dość prosty sposób. Jak masz kod:
'Konfiguracja sterowania sprzętowym PWM
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
to zamieniasz go na:
'Konfiguracja sterowania sprzętowym PWM
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up
Jakoś nie przyszło mi do głowy, ze problem może być aż tak prozaiczny 🙂
Witam, mam pytanie co do silników, gdyż udało mi się zdobyć bardzo mocne: http://botland.com.pl/silniki/49-silnik-z-przekladnia-19-1.html jednak nie jestem pewien czy się nadają do tak małego robota oraz jakie baterie najlepiej do nich kupić? Może kilka akumulatorów LiPol?
Będę bardzo wdzięczny o odpowiedź oraz bardzo dziękuje za tą strone, gdyż bardzo pomaga w budowie własnego robota.
Silniki jak najbardziej się nadają. Napięcie zasilania musi być takie samo, ale przy dużym poborze prądu będą duże spadki… Więc może faktycznie warto zainwestować w bardziej wydajny akumulator – 2 cell LiPol powinien się nadać, trzeba tylko dodać stabilizator dla części cyfrowej robota (np. 7805L)
Czy do portów pd5 i pd7 mogę dołączyć dodatkowe diody?
Oczywiście! Wszystkie wolne porty można prawie dowolnie wykorzystać
Witam mam pytanie do autora :
zrobiłem wszystko ok diody świecą ale nie chce jechać o czarnej linii jedzie prosto – a jeśli przyłożę papier do samej diody to dopiero zaczyna reagować – co to może znaczyć ?
Pozdrawiam
W programie masz taką linijkę:
'Granica reagowania na linię - należy dobrać doświadczalnie
Const Granica = 500
Spróbuj pobawić się tą wartością, na początek obniżaj/podnoś ją np. o 100 i sprawdzaj, jak robot reaguje.
Witam ponownie
Wszystko działa.
Tylko jest mały problem jak chcę wgrać własny program nic nie działa ale jeśli ładuję plik twój nic nie modyfikowany wszystko działa ponieważ chciałbym zmodyfikować całego robota aby skręcał po linii 90 stopni jakieś sugestie ?
Pozdr.
Nie potrafię wróżyć z fusów, jeśli mam pomóc, to potrzebuję więcej informacji. Co znaczy „nie działa”? Czego próbowałeś? Jakie były objawy? Jaki był wpływ niewielkich modyfikacji mojego kodu, np. mrugania diodą? Też nic nie działało? Przerobiłeś jakiś kurs programowania od podstaw, czy skaczesz od razu na głęboką wodę?
Hej! Mam identyczny problem… możesz napisać jak go rozwiązałeś? Wiem że minęło sporo czasu jednak będę baaaaardzo wdzięczna
Sprawa wygląda tak jak ładuję twój plik wszystko działa ale jeśli skopuje kod do nowego pliku nic go nie zmieniając skompiluję to nic nie działa świeci się dioda ale nic nie idzie.
Może coś jest z kompilatorem ?
„jak ładuję twój plik”
Masz na myśli plik BAS, który osobiście skompilowałeś, czy wrzucasz od razu plik BIN albo HEX z paczki? Co się dzieje, jeśli skompilujesz mój plik BAS i wgrasz nowoutworzonego BINa/HEXa do procka?
Chodzi mi o twój HEX z paczki – wszystko działa.
Ale jak ja bym skopiował kod i wkleił do do nowego pliku i skompilował ( nie ma żadnego błędu) to tylko się świeci doda nic nie działa.
Mam taki problem:
jak podłączę do robota zasilanie z USB (przez programator) to działa jak należy
ale jak jest włączony z baterii to chwilę działa, za chwilę już nie działa, albo tylko jedno koło się kręci, czasami dioda w ogóle nie świeci
pomaga ponowne podłączenie do usb i wtedy na chwilkę na baterii działa ale i tak nie zawsze
czasami tylko drgnie milimetr koło i stanie
jak nawet dioda przestaje świecić to po zwarciu 1. i 2. pinu procesora załapuje i jedzie
a jak dioda się nie świeci i zewrę te same piny to zaczyna tylko jedno koło się kręcić…
wiecie może w czym może być problem?
Stawiałbym na zbyt niskie napięcie zasilania. Spróbuj dołączyć jeszcze jednego „paluszka” szeregowo – powinno pomóc. Ew. możesz spróbować z 4 w pełni naładowanymi paluszkami (sprawdź napięcie miernikiem, powinno być ok. 1.8V dla baterii, 1.5V dla akumulatorów).
Duży pobór prądu przez silniki może powodować spadek napięcia na ogniwach, przez co napięcie zasilania spada poniżej „progu” działania mikrokontrolera, w momencie wyłączenia mikrokontrolera przestają działać silniki, przez co napięcie znów wraca do normy, mikrokontroler się uruchamia, załącza silniki itd. – cały cykl się powtarza. Albo same oscylacje napięcia mogą „oszukiwać” czujniki, przez co robot zachowuje się tak, jakby wykrył linię tylko jednym czujnikiem. Trudno powiedzieć, najlepiej zmierz, co się dzieje z napięciem podczas pracy robota na bateriach i na zasilaniu z zasilacza.
Pomierzyłem napięcia podczas pracy z bateriami i z USB.
Na bateriach:
Jedna bateria: 1,49V (trochę mało, a są nowe, panasonici alkaliczne, używane tylko z tym robotem czyli niewiele)
Cztery baterie mają 5,96V (po rozpakowaniu miały jakieś 6,20V)
Po włączeniu układu napięcie na bateriach spada do 5,6V.
Napięcie wyjściowe z procesora gdy silniki stoją wynosi ok 4,4V. Podczas gdy jedno koło kręci spada aż do 4V.
Na zasilaniu z USB wygląda to lepiej.
Napięcie wyjściowe 5V gdy silniki stoją i 4,8V gdy oba się kręcą.
Dziwi mnie to trochę, bo teoretycznie z USB mamy napięcie 5V, a 4 baterie powinny dać te minimum 6V. Dlaczego są takie duże spadki na bateriach?
Mam też mały problem z programem.
Jak wgram Twój plik HEX to jeździ ok, ale jak otworzę ten program w BASCOM-AVR i nic nie zmieniając zapiszę go na dysku jako nowy plik to robot nie jeździ płynnie tylko przycina, jakby wykonywał minimalny obrót w ułamku sekundy i po każdym była przerwa również długości ułamka sekundy…
To samo dzieje się z programami które modyfikowałem. Po zakomentowaniu pętli Do jedzie normalnie w przód.
O co chodzi?
Trudno powiedzieć, ten artykuł to bardzo dawna sprawa… Możliwe, że będziesz musiał sam przysiąść i napisać kod po swojemu. Jedyne co mi teraz przychodzi do głowy, to ustawienia taktowania procesora – te w ustawieniach Bascoma.
Cześć, nabyłem troszkę wiedzy z twojego tuta z programowania i zrobiłem sobie timer do dzielenia częstotliwości. Teraz mam pytanko- jak daje je na wyjście danego pinu i podłączę cewkę, to będzie mi ją emitować w eter? Nie znam się na fizyce i tylko tak się pytam.
Witam, w czym zrobiłeś takie ładne rysunki płytki uniwersalnej? Szukam czegoś sensownego ale znaleźć nie mogę.
Dzięki! Niestety, ale odpowiedź Cię rozczaruje – w GIMPie. Sporo pracy…
Witam … ja mam pytanie jak się programuje takim programatorem tego robota . Jestem zielony i przez rozpoczęciem analizuje sobie wszystko po kolei i nie wiem jak podłączyć ten programator do robota . brzmi pewnie głupio ale na prawdę nie wiem . 🙂
Cześć,
programator jest czymś w rodzaju interfejsu pomiędzy komputerem i programowanym układem. Na komputerze piszesz program, kompilujesz go do postaci „zrozumiałego” dla mikrokontrolera pliku (np. o rozszerzeniu hex lub bin), następnie uruchamiasz odpowiednie oprogramowanie, które wykrywa podłączony do PC programator, sprawdza czy programator z drugiej storny jest poprawnie podłączony do mikrokontrolera, czyści pamięć mikrokontrolera, „kopiuje” do niej zawartość pliku wynikowego kompilatora i na końcu testuje, czy wszystko wgrało się poprawnie.
Co do podłączenia – programator z jednej strony ma gniazdko ISP (In-system-programming) – może być np. w standardzie KANDA (10 pinowe), może być 6-pinowe. Raczej nie stosuje się innych w przypadku AVR. Takie gniazdko ma na poszczególne piny wyprowadzone określone sygnały – MISO, MOSI, SCK, VCC, GND. Wszystkie (za wyjątkiem VCC – zależnie czy mikrokontroler jest zasilany z układu, czy chcesz go tymczasowo zasilić z USB przez programator) muszą być podłączone do odpowiednich nóżek w mikrokontrolerze.
Bardziej szczegółowo masz to opisane tutaj:
http://hobbyrobotyka.pl/jak-wgrac-program-do-mikrokontrolera-avr/
Pozdrawiam
https://sklep.avt.pl/programator-avr-kompatybilny-avr-isp-mkii.html …
Czy ten programator bedzie odpowiedni ? Pytam sie bo niby wszystko moim zdaniem jest ok … ale nie chce kupować na darmo .
Witam. Jestem nowy a zarazem zielony w programowaniu oprogramowań dla urządzeń robotycznych, i chciałbym się dowiedziec czy treść pliku którą udostępnił pan do pobraniu w zamieszczonym linku, jest od razu po pobraniu gotowa do wgrania do urządzenia i bezpośrednio zaaktywuje ruch w moim urządzeniu? (Chodzi mi o to czy robot od razu po wgraniu będzie działał i wykonywał swoje określone zadanie czy nie).
Dziękuje za odpowiedz. Pozdrawiam
Witam, tak – w paczce jest również skompilowany program na mikrokontroler Atmega8. Po zaprogramowaniu układu tym plikiem robot powinien działać, choć może wymagać modyfikowania granicy wykrywania linii – wszystko zależy od serii czujników, ich odległości od podłoża oraz od samego rodzaju podłoża.
Hej! czy po włączeniu zasilania silniki od razu powinny zacząć pracować czy dopiero po wykryciu czarnej linii?
Wgrywam twój program i koła kręcą się cały czas…zero reakcji na linie. Czujniki sprawdzone- świecą się, jak przykładam białą kartkę to napięcie zmienia się od ok 0,6 do 4,5V więc chyba układ jest zmontowany dobrze? Proszę o odpowiedź co może powodować brak reakcji czujników… dodam że granica została zmieniana ale mam ten sam problem o którym pisał kolega wyżej czyli nie mogę wgrać nowego skompilowanego pliku hex nawet jeśli jest to ten Twój niezmieniony tylko zapisany na dysku pod inna nazwą( silniki nie działają a dioda się świeci) …. Proszę o pomoc