Skocz do zawartości

[Kroczący] Hexapod Serwus - mój pierwszy robot (etapy pracy & zapytania techniczne)


Pomocna odpowiedź

Dzień Dobry,
Przedstawiam prosty projekt mojego pierwszego robota. Konstrukcja ma 6 nóg i 3 serwa, każde z 3 serw rusza 2 nogami. Inspiracją do budowy jest Robot Gramek oraz Hexapod Pololu. Robot jest w budowie.

Opis działania gotowego robota:

Robot chodzi do przodu. Gdy napotka przeszkodę, wydaje dźwięk, następnie losowo skręca lub zawraca, po czym kontynuuje chodzenie do przodu.

Edukacyjne cele budowy: poznanie AVR, nauka podstaw C, obsługa serw, obsługa czujnika HC-SR04, podstawy programu KiCad

Co już jest:

-Konstrukcja mechaniczna

-Robot chodzi do przodu, elektronika na płytce stykowej

Co do zrobienia:

1. Obsługa czujnika HC-SR04

2. Zaprogramowanie sekwencji ruchów (skręcanie, zawracanie)

3. Wybór Atmegi i komponentów, zaprojektowanie płytki PCB

4. Dobór źródła zasilania

Pomysły realizacji i pytania do sekcji „Co do zrobienia”:

1. Czujnik będzie włączany zawsze gdy robot idąc do przodu będzie w ustawieniu dogodnym do pomiaru, kiedy to żadna z nóg nie będzie zakrywać pola widzenia czujnika. Cykl ruchu do przodu robota rozpisałem na 6 sekwencji. Pomiar byłby dokonywany zawsze gdy orczyki serw: prawego i lewego są ułożone prostopadle do środkowych nóg robota (dla widoku z góry) Będzie to 2 razy na Cykl ruchu do przodu.

Jak najlepiej zliczyć długość sygnału zwrotnego (Echo), proporcjonalnego do odległości czujnika od obiektu?

Chciałbym zrobić tak:

Gdy pojawia się stan wysoki na pinie podłączonym do „Echo” uruchamia się timer (jeden z 8-bitowych), bez preskalera, taktowanie 1Mhz, czyli 1 takt=1us który liczy do 58 po czym się zeruje. (bo 58us długości sygnału odpowiada odległość 1cm). Po uzyskaniu wartości 58 następuje przerwanie, w którym distance++, (distance to wartość w centymetrach). W tym przerwaniu sprawdzany jest także stan na pinie ECHO i dotychczasowa odległość, którą udało się zmierzyć,
a)Jeśli stan jest wysoki i distance =<15 to timer pozostaje włączony i liczy dalej;

b)Jeśli stan jest wysoki i distance >15 to distance=0 a timer jest wyłączany, robot dalej idzie do przodu; (Dalszy pomiar sygnału nie jest konieczny, bo odległość robota od przeszkody jest większa od krytycznej)

c)Jeśli stan jest niski to wartość distance jest porównywana z liczbą 15

c.1)Jeśli distance>15 to distance=0 i timer jest wyłączany, robot kontynuuje ruch do przodu;

c.2)Jeśli distance=<15 to distance =0 i timer jest wyłączany, następują 2 piknięcia buzzera, robot skręca (lub zawraca) bo przeszkoda jest w promieniu 15 cm od czujnika, (czyli kilka cm od przednich nóg);

3. Zastanawiam się, czy Atmega8 będzie dobra do projektu. (Aktualnie robot przyłączony jest do Atmegi32 na płytce stykowej). Serwa: prawe i lewe mają być obsługiwane przez 2 sprzętowe kanały PWM 16bitowego timera, pracujące w trybie non-inverted Fast PWM, gdzie licznik liczy do 19999 po czym się zeruje a wypełnienie na pinach OC1A/OC1B zależy od wartości OCR1A i OCR1B (są one w przedziale 1000-2000). Jest teoretycznie 1000 unikalnych pozycji serwa.

Do sterowania nogami środkowymi użyty będzie Timer2 o rozdzielczości 8 bitów i wyprowadzenie OC2, przy preskalerze 128 i liczeniu do 156 w trybie Fast PWM uzyskam jakieś 11 unikalnych pozycji serwa środkowego, starczy to do odpowiedniego podnoszenia tych środkowych nóg.

Do obsługi czujnika odległości użyłbym Timera0.

4. Serwa chciałbym zasilać z koszyka 4 ogniw AAA Sanyo Eneloop. (Pakiet ma 4.8V 800mAh)

Jaki jest orientacyjny pobór prądu z jednego takiego serwa TowerPro sg90 (1,8kg/cm) Czy ten pakiet 4,8V 800mAh poradzi sobie z obsługą 3 takich serw naraz?

5. Czy bezpośrednio podłączony pakiet do Atmegi jest dobrym pomysłem?

Czy Atmega8 poradzi sobie z obsługą tego wszystkiego (serwa sterowane przez sprzętowe PWM oraz obsługa HC-SR04)? Czy przedstawione rozumowanie mierzenia odległości od czujnika jest dobre, czy są jakieś inne, prostsze rozwiązania? (Większość przykładów, jakie widziałem tyczą się arduino)

Proszę o Wasze opinie i sugestie, każda wypowiedź będzie pomocna.

Pozdrawiam, Kuba

EDIT:

Wszedłem do tego działu ze strony głównej (zakładka ROBOTY -> WORKLOGI) nie widząc działu "konstrukcje początkujących", jeśli temat nadaje się do tamtego działu, uprzejmie proszę o jego przeniesienie.

Link do komentarza
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!

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

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.