Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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.

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