Spisu treści:

[WIP] Tworzenie Drawbota kontrolowanego przez opaskę Myo: 11 kroków
[WIP] Tworzenie Drawbota kontrolowanego przez opaskę Myo: 11 kroków

Wideo: [WIP] Tworzenie Drawbota kontrolowanego przez opaskę Myo: 11 kroków

Wideo: [WIP] Tworzenie Drawbota kontrolowanego przez opaskę Myo: 11 kroków
Wideo: Кухня | Сезон 5 | Серия 94 2024, Lipiec
Anonim
[WIP] Tworzenie Drawbota kontrolowanego przez opaskę Myo
[WIP] Tworzenie Drawbota kontrolowanego przez opaskę Myo

Witam wszystkich!

Kilka miesięcy temu postanowiliśmy spróbować rozwiązać pomysł zbudowania robota do rysowania z otwartą ramą, który używał jedynie opaski Myo do kontrolowania go. Kiedy po raz pierwszy rozpoczęliśmy projekt, wiedzieliśmy, że trzeba go podzielić na kilka różnych etapów. Naszą pierwszą główną fazą była próba owinięcia głowy wokół otwartego projektu dla naszego bota do rysowania. To niestandardowa konfiguracja i chcieliśmy zobaczyć, jakie są zalety tego projektu.

Po drugie, wiedzieliśmy, że zbudowanie tego prototypu przyda się tylko nam. Nasz projekt i plan zakładały przeniesienie naszej końcowej ramy do metalu i za pomocą arduino, otrzymanie naszej pozycji z akcelerometru i żyroskopu wbudowanego w zespół Myo. Informacje te byłyby następnie przesyłane do silników i replikowałyby ruch użytkownika. Wiedzieliśmy, że dzięki temu nasza druga faza podzieli się na trzy główne aspekty:

  1. programowanie od Myo do silników, poprzez Arduino
  2. projekt elektryczny do przekształcenia naszych danych w ruch
  3. konstrukcja mechaniczna, aby stworzyć ramę o rozsądnej wielkości, która ułatwi nam ruch

Każdy członek naszego zespołu czuł się najbardziej komfortowo w unikalnej części naszego procesu projektowania, dlatego postanowiliśmy podzielić naszą pracę między każdą osobę. Prowadziliśmy również bloga podczas całego procesu projektowania, aby śledzić nasze codzienne myślenie, w przeciwieństwie do bardziej globalnego wyglądu.

Krok 1: Co planowaliśmy zrobić

Image
Image

Naszym celem było połączenie tych dwóch produktów w sposób, którego wcześniej nie widzieliśmy. Postanowiliśmy dokonać transmisji na żywo między naszą opaską Myo a naszą własną wersją projektu inspirowanego AxiDraw autorstwa Evil Mad Scientist.

Krok 2: Lista składników prototypu

2 2 x 4 drewniane deski 1 Wymiary pasa lub łańcucha >= 65” 4 Gwoździe do drewna 3 Koła zębate z zębami pasującymi do pasa lub łańcucha 4 3 x 8 płyt perforowanych Vex 30 ⅜” Gumowe podkładki 8 Podkładki o średnicy 1” 1 Drewniane o średnicy 1” kołek długi 1' 8 wkręty Vex 1”8 ½” wkręty Vex 8 wkręty 2” Vex 8 ź” gumowe podkładki dystansowe 48 nakrętek Vex 1 mała opaska zaciskowa

Krok 3: [Prototyp] Obróbka drewna naszych ramion i wnętrza wózka

[Prototyp] Obróbka drewna naszych ramion i wnętrza wózka
[Prototyp] Obróbka drewna naszych ramion i wnętrza wózka

Chwyciliśmy dwa 2x4 i przycięliśmy je do równych długości (33 ¼”)

Za pomocą piły stołowej wykonaliśmy wycięcie wzdłuż boku wąskiej części desek o głębokości ¼” i szerokości ⅛” pośrodku

Pokrój kołek na 4 kawałki 2” i wywierć otwór w środku kołka o średnicy około ¼” za pomocą wiertarki

Krok 4: [Prototyp] Tworzenie naszego powozu

[Prototyp] Wykonanie naszego przewozu
[Prototyp] Wykonanie naszego przewozu
[Prototyp] Robimy nasz powóz
[Prototyp] Robimy nasz powóz
[Prototyp] Wykonanie naszego przewozu
[Prototyp] Wykonanie naszego przewozu

Idealnie użylibyśmy dwóch kawałków 7x7 perforowanej stali Vex, ale wszystko, co mieliśmy do dyspozycji, to paski 2x7, więc skręciliśmy je razem w konfiguracji „X”

Ułóż 5 gumowych podkładek dystansowych ⅜”i przymocuj rogi płytek Vex do siebie

Luźno zamocuj drewniane kołki, jak pokazano na rysunku 1, tak aby obracały się swobodnie z około 2 calami odstępu między nimi użyj zdjęcia, aby zobaczyć, gdzie powinny być ustawione koła zębate w tym momencie użyliśmy podkładek, ale później okazało się, że małe plastikowe koła zębate działają lepiej.

Używając śrub Vex ½”, podkładek gumowych ¼” i podkładek o średnicy 1” zabezpiecz podkładki w pozycji podwyższonej, jak pokazano na rysunku 1 (użyliśmy zielonych plastikowych kół zębatych, ponieważ nie mogliśmy znaleźć odpowiednich podkładek) upewnij się, że podkładki są w stanie łatwo się kręci i pasuje do nacięć deski.

Krok 5: [Prototyp] Składanie wszystkiego razem

[Prototyp] Składanie wszystkiego razem
[Prototyp] Składanie wszystkiego razem
[Prototyp] Składanie wszystkiego razem
[Prototyp] Składanie wszystkiego razem
[Prototyp] Składanie wszystkiego razem
[Prototyp] Składanie wszystkiego razem
[Prototyp] Składanie wszystkiego razem
[Prototyp] Składanie wszystkiego razem

Umieść deskę na powierzchni i wsuń karetkę na środek, tak aby podkładki przytrzymywały karetkę nad deską, a po obu stronach deski przybij koła zębate tak, aby swobodnie się obracały. Przybij zębatkę do jednego końca drugiej deski, upewniając się, że jest wyśrodkowana i wsuń ją na wózek prostopadle do pierwszej deski.

Teraz pas musi być zapętlony przez system, jak pokazano, zwróć szczególną uwagę na to, jak kołki znajdują się na zewnątrz pasa i czy nie ma nic w środku podwozia, co mogłoby przeszkadzać pasowi podczas jego ruchu.

Teraz pasek należy zapiąć po tej stronie deski, która nie ma przerzutki. Użyliśmy dodatkowego gwoździa i opaski na suwak, aby zapiąć nasze. Ale zastosowana metoda nie ma znaczenia, o ile pas jest zakotwiczony w tym miejscu

Krok 6: [Prototyp] Gotowy i w ruchu

Image
Image

To powinno być to, pociągnij pasek w różnych kombinacjach i zobacz, jak różne efekty ma na ramieniu!

Krok 7: Przetłumaczenie naszego modelu na gotowy projekt

Przełożenie naszego modelu na gotowy projekt
Przełożenie naszego modelu na gotowy projekt
Przełożenie naszego modelu na gotowy projekt
Przełożenie naszego modelu na gotowy projekt

Kiedy ukończyliśmy nasz prototyp, byliśmy zachwyceni. Nikt z nas nie był pewien, jak działa system przed montażem. Ale kiedy nasze części się połączyły, szybko odkryliśmy, co nam się podoba i jak możemy to ulepszyć podczas tworzenia ostatecznego projektu. Nasze główne skargi dotyczące systemu do rozwiązania to:

  1. Skala
    1. Nasz prototyp był masywny i nieporęczny, przez co miał skłonność do przewracania się na krawędzi naszych ramion
    2. Wagon był znacznie większy niż to konieczne i miał dużo zmarnowanej przestrzeni
    3. Nasz pas (bieżnik vex tank) był znacznie większy niż to konieczne, co wprowadzało nadmiar przestrzeni między ramionami
  2. Tarcie

    1. Nasze bieżniki Vex nie przeszły łatwo przez drewniane rolki kołków we wszystkich punktach
    2. Plastik na drewnie sprawiał, że w wielu przypadkach powóz nie chciał się ruszać
  3. Motoryzacja

    Musieliśmy sprawić, by system był zasilany

Mając to na uwadze, narysowaliśmy nasze plany dotyczące ostatecznego projektu. Chcieliśmy, aby drawbot był kontrolowany za pomocą Myo za pośrednictwem arduino i chcieliśmy, aby rama była aluminiowa i mniejsza.

Aby to zrobić, wzięliśmy procent naszego oryginalnego prototypu i rozpoczęliśmy pracę od tego rozmiaru. Używając blachy, która byłaby obrabiana tak, aby miała kanały wystarczająco szerokie, aby mogło przez nie przejść łożysko z osłoną, otrzymalibyśmy lekką, ale solidną konstrukcję, która miałaby wyższą tolerancję użytkowania.

Nasz prototyp pozwolił nam również, w zaledwie kilka minut, określić, w jaki sposób obroty silnika wpłynęły na głowicę naszego robota ciągnącego. To doprowadziło nas do zrozumienia, że nasz projekt sterowania będzie prostszy, niż się spodziewaliśmy. Po bliższym przyjrzeniu się stwierdziliśmy, że ruch silnika jest addytywny! Oznacza to, że każdy silnik ma niezależny pożądany wpływ na nasz ruch, ale kiedy połączymy je razem, zaczynają się one znosić.

Na przykład, jeśli jest traktowany jako płaszczyzna współrzędnych, silnik leżący na ujemnym końcu x zawsze będzie miał tendencję do wciągania naszej szuflady do drugiej i czwartej ćwiartki. Odwrotnie, silnik leżący na dodatnim końcu x zawsze będzie przesuwał szufladę do pierwszej i trzeciej ćwiartki. Jeśli połączymy ruchy naszych silników, anuluje to części kierowania tym konfliktem i wzmocni części, które się zgadzają.

Krok 8: Kodowanie

Podczas gdy kilka lat temu pracowałem dość intensywnie w C, nie miałem żadnego doświadczenia z lua ani C++, a to oznaczało, że musiałem poświęcić sporo czasu na przeglądanie dokumentacji. Wiedziałem, że głównym zadaniem, które będę starał się wykonać, jest uzyskanie pozycji użytkownika w odstępach czasu, a następnie przekazanie jej do silników. Postanowiłem rozdzielić to zadanie dla siebie, aby lepiej przetrawić potrzebne mi części.

1. Pobierz dane z Myo (lua)

Wiedziałem, że muszę znaleźć sposób na zbieranie informacji z Myo. To była pierwsza część wyzwania, do którego chciałem się podejść. Aby to zrobić, chciałem, aby użytkownik skalibrował rozmiar płótna przed rozpoczęciem rysowania. To pozwoliłoby mi mieć granicę, z której mógłbym pracować. Mogłem wtedy znormalizować program między różnymi użytkownikami, po prostu biorąc procent maksymalnego płótna, gdy moje punkty danych mijają. Zdecydowałem się na oskryptowane zdarzenie, które co pół sekundy wykonywałoby sprawdzenie getOrientation, ponieważ dzięki temu kontrole nigdy nie wykonują dzikiego skoku, którego należałoby zgadywać (na przykład, jeśli użytkownik szaleńczo się cofał i naprzód).

To stworzyło pierwszą przeszkodę, na którą trafiłem. Odkryłem bardzo duże ograniczenie lua i to nie pozwalało mi czekać z kontynuowaniem skryptu. Jedynym sposobem na wykonanie tej akcji było wstrzymanie procesora (co zatrzymałoby go globalnie, nawet przytrzymując zegar systemowy) lub użycie poleceń specyficznych dla systemu operacyjnego. W moim przykładowym kodzie pozostawiłem w oryginalnym systemie operacyjnym sprawdzenie, które wykonałem (skomentowane). Stało się to po przeprowadzeniu dużej ilości badań w dokumentacji lua i zrobiono to poprzez sprawdzenie formatowania ścieżki systemowej. Wtedy zdecydowałem, że muszę zajrzeć do dokumentacji projektów, które zostały wcześniej opublikowane. Natychmiast zdałem sobie sprawę, ile czasu zmarnowałem, i natychmiast zostałem poprowadzony do zmiennej platformy. Dzięki niemu byłem w stanie zaimplementować specyficzne polecenia oczekujące na system operacyjny niemal natychmiast, w przeciwieństwie do dni, które zajęło mi sklecenie mojego poprzedniego rozwiązania.

Mniej więcej w tym czasie projektowania rozpoczęły się prace nad aspektem elektrycznym i zawiesiłem prace nad tym aspektem kodu. Celem było nauczenie się, jak nasze silniki współpracują z arduino.

2. Praca z Arduino (C++)

W miarę jak praca z naszą płytką prototypową stawała się coraz bardziej złożona, dowiedziałem się, że arduino nie jest zdolne do wielowątkowości. To był duży klucz w moim oryginalnym projekcie kodu, a po przeczytaniu więcej o ograniczeniach przedstawionych w naszym kontrolerze dowiedziałem się, że będę musiał zaprogramować, w jaki sposób arduino będzie przełączać się między nimi. To stało się przedmiotem moich wysiłków, gdy zbliżał się nasz termin. Musiałem wyrzucić duże fragmenty mojego oryginalnego skryptu, ponieważ zostały one zaprojektowane do zapisywania danych do pliku synchronicznie z odczytywaniem pliku przez sterownik silnika. Miało to pozwolić na funkcję kolejkowania, aby mieć pewność, że nawet jeśli użytkownik wyprzedzi naszą szufladę, nie zrujnuje projektu.

Zdecydowałem, że funkcja kolejkowania powinna zostać zapisana, jeśli nie zostanie zaimplementowana w taki sam sposób jak poprzednio. W tym celu stworzyłem wektor tablic. Pozwoliło mi to nie tylko zachować stosunkowo nienaruszoną ducha mojego poprzedniego projektu, ale także oznaczało, że nie musiałem śledzić swojego miejsca w pliku podczas czytania lub pisania. Zamiast tego, teraz wszystko, co musiałem zrobić, to po prostu dodać nową wartość do mojego wektora, jeśli użytkownik się poruszał (wstępne testy wykazały mniej niż 1% różnicy rozmiaru płótna zarówno w x, jak i y od ostatniej zarejestrowanej pozycji, nie rejestrując danych). Mógłbym wtedy pobrać najstarszą wartość w moim wektorze i za jednym zamachem wysłać ją do sterownika silnika, zapisać w naszym pliku, a następnie usunąć z mojego wektora. To rozwiało wiele moich obaw związanych z ciągłym strumieniem IO.

Krok 9: Elektryczne

Image
Image
Elektryczny
Elektryczny

Podczas gdy ja brałem udział w zajęciach z elektroniki w przeszłości i pracowałem sporo z arduino. Nigdy nie zagłębiłem się w to, aby arduino otrzymywało informacje z zewnętrznego źródła (myo), mam tylko doświadczenie w wysyłaniu informacji przez arduino. Jednak zająłem się okablowaniem silników w naszym drawbocie i pracowałem nad kodem, aby mogły pracować z kodem myo.

Materiały, których użyłem:

2 x silniki krokowe

1 x deska do krojenia chleba

1 x Arduino (Uno)

2 x układ scalony sterownika L293DE

40 x przewody połączeniowe

2 wentylatory

1. Podłączanie silników krokowych i wentylatora do deski do krojenia chleba

Zgodnie ze schematem obwodu możemy podłączyć jeden silnik krokowy do sterownika na płytce stykowej. Następnie zgodnie z tym samym schematem stosuje się to do drugiego sterownika i silnika, jednak przewody zworki będą musiały być podłączone do innego zestawu pinów w arduino (ponieważ pierwszy silnik zajmuje miejsce 4 innych).

Ostrzeżenie/wskazówka:

Przetworniki są bardzo małe, a styki są bardzo blisko siebie. Rozsądnie byłoby rozdzielić dwa sterowniki, aby przewody się nie pomyliły.

Następnie należy podłączyć wentylatory. To jest dość proste, wentylatory, które miałem do dyspozycji to podstawowe wentylatory procesorów komputerowych, które mają plus i masę. Podłącz te dwa do odpowiednich pinów +/- na płytce stykowej i ustaw je pod kątem w kierunku każdego sterownika. (Odkryliśmy, że ponieważ silniki krokowe przez długi czas otrzymują impulsy informacji i poleceń, sterowniki mają tendencję do przegrzewania się i śmierdzącego zapachu. Dodanie wentylatora do chłodzenia rozwiązało ten problem).

2. Kod Arduino

To jest łatwa część!

Otwórz Arduino IDE przejdź do zakładki "Plik", a następnie przejdź do zakładki "przykład", która rozwinie się jeszcze dalej i pokaże zakładkę "krok" Następnie chcesz otworzyć "Stepper_OneStepAtATime"

Spowoduje to wstępne załadowanie przykładowego kodu, który jest prawie plug-and-play do okablowania arduino/silnika. Będziemy musieli wprowadzić drobne poprawki, ponieważ będziemy obsługiwać dwa silniki, które pokażę poniżej. Być może będziesz musiał dokonać drobnych korekt w zależności od tego, które piny zdecydowałeś się użyć, ponieważ Arduino IDE domyślnie ma piny 8-11.

Kod, którego użyłem, aby oba silniki poruszały się w trybie „synchronizacji”, znajduje się poniżej:

//#włączać

const int stepsPerRevolution = 200;

Stepper myStepper1(krokiPerRevolution, 9, 10, 11, 12);

Stepper myStepper2(krokiPerRevolution, 4, 5, 6, 7);

int licznik_kroków = 0;

void setup() { // zainicjuj port szeregowy: Serial.begin(9600); }

pusta pętla () {

mójKrok1.krok(1);

Serial.print("kroki:");

Serial.println(liczba kroków);

liczba kroków++;

opóźnienie(0,5);

mójKrok2.krok(1); opóźnienie(0,5); }

3. Możliwe problemy

Problemy, na które natknąłem się podczas tego procesu, nie polegały na używaniu właściwego przykładu kodu, używaniu złego przewodu połączeniowego, używaniu niewłaściwego układu scalonego sterownika.

Upewnij się, że Twój sterownik, którego używasz, jest w stanie sterować silnikiem

Sprawdź numer seryjny i sprawdź jego specyfikację

Natknąłem się na problem z martwym przewodem połączeniowym, który powodował, że moje silniki dziwnie się obracały

Do sprawdzenia każdego przewodu musiałem użyć multimetru

I zawsze dokładnie sprawdzaj swój kod pod kątem drobnych błędów, takich jak brak końca „;” Komenda

Krok 10: Mechaniczny

Mechaniczny
Mechaniczny
Mechaniczny
Mechaniczny
Mechaniczny
Mechaniczny
Mechaniczny
Mechaniczny

1. Materiał

W przypadku pełnego modelu produkcyjnego ramion zaleca się, aby były wykonane z mocnego, ale lekkiego materiału, uznaliśmy, że aluminium idealnie pasuje.

Użyliśmy arkuszy aluminiowych o grubości 032 przyciętych do rozmiaru 9,125 "x 17,5" i prześledziliśmy wzór z rysunku pokazanego w poprzednim kroku.

2. Produkcja

Używając zwijarki (niebieskiej maszyny) dodaliśmy obszycia skierowane w przeciwnych kierunkach, aby po złamaniu i złożeniu elementu oba obszycia zazębiły się tworząc jeden kompletny element.

Do dużych zakrętów używaliśmy tenisisty, ze względu na jego wysoką precyzję.

Teraz do mniejszych zagięć będziesz chciał użyć maszyny z mniejszą stopką, tutaj wkracza maszyna taka jak roto-die. Ze względu na mniejszą stopę pozwala ona na robienie mniejszych przerw, niestety, wykrojnik, którym dysponowaliśmy, był jeszcze za duży dla naszej szyny i był zdeformowany.

**Alternatywnie, jeśli nie masz dostępu do odpowiedniego sprzętu lub narzędzi, możesz dokonać zamiennika.**

W naszym przypadku wycinamy nasze ramiona z aluminiowych szyn paneli słonecznych za pomocą przecinarki plazmowej i szlifujemy końce na gładko, a następnie przykręcamy je z powrotem do siebie, tworząc dwustronny system szyn. W idealnym przypadku chcielibyśmy zespawać szyny ze sobą, jednak bez dostępu do stanowiska spawalniczego zamiast tego zacisnęliśmy szyny i przewierciliśmy je, a następnie skręciliśmy śrubami. Ale jeśli wybierze się tę trasę, należy zachować szczególną ostrożność, aby użyć nakrętki zabezpieczającej i podkładki, aby zapewnić, że element ma jak najmniej ugięcia.

3. Pas

Do pasków użyliśmy starych pasków do drukarek 3D, które udało nam się uratować.

Początkowo pasy nie były wystarczająco długie, więc za pomocą rurek termokurczliwych połączyliśmy dwa kawałki, aby uzyskać odpowiednią długość.

Zielone koła zębate i drewniane kołki zostały zastąpione łożyskami tarczowymi z bardzo szerokimi podkładkami, które zapobiegały wyślizgiwaniu się paska.

4. Przewóz

I wreszcie wózek został wykonany z blachy o wymiarach 5" x 5" z aluminium 032, z wywierconymi otworami w miejscach, w których mają się znaleźć odpowiednie śruby i podkładki. Odległość będzie się różnić w zależności od szerokości szyny i prześwitu na podkładkach.

Krok 11: Refleksje

Niestety, każda strona naszego projektu trafiła na główną barykadę czasu i nie byliśmy w stanie ukończyć naszego projektu w wyznaczonym terminie. Każdy członek naszego zespołu współpracował przynajmniej do pewnego stopnia w każdym innym aspekcie naszego projektu, co doprowadziło do skrócenia czasu nauki. To, w połączeniu z chęcią zaprojektowania produktu z jak najmniejszymi zasobami zewnętrznymi (ponieważ wszyscy chcieliśmy stworzyć nasze poszczególne części od zera), doprowadziło do ogromnej ilości wymyślonych na nowo kół.

Wszyscy, którzy pracowali nad projektem, dowiedzieli się więcej o innych aspektach projektu. Co innego sprawić, by oprogramowanie wykonało określone działanie, a co innego sprawić, by oprogramowanie współpracowało ze sprzętem. Powiedziałbym, że ważne jest, aby każdy, kto pracuje nad aspektem kodowania tego projektu, był tak samo zaznajomiony jak nasz koder projektu.

Ogólnie rzecz biorąc, nie byliśmy w stanie osiągnąć dokładnie tego, co chcieliśmy. Czuję jednak, że byliśmy na dobrej drodze i wszyscy odkryliśmy i nauczyliśmy się nowych koncepcji, które będziemy mogli zastosować w przyszłych projektach.

Zalecana: