Spisu treści:
- Krok 1: Co planowaliśmy zrobić
- Krok 2: Lista składników prototypu
- Krok 3: [Prototyp] Obróbka drewna naszych ramion i wnętrza wózka
- Krok 4: [Prototyp] Tworzenie naszego powozu
- Krok 5: [Prototyp] Składanie wszystkiego razem
- Krok 6: [Prototyp] Gotowy i w ruchu
- Krok 7: Przetłumaczenie naszego modelu na gotowy projekt
- Krok 8: Kodowanie
- Krok 9: Elektryczne
- Krok 10: Mechaniczny
- Krok 11: Refleksje
Wideo: [WIP] Tworzenie Drawbota kontrolowanego przez opaskę Myo: 11 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
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:
- programowanie od Myo do silników, poprzez Arduino
- projekt elektryczny do przekształcenia naszych danych w ruch
- 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ć
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
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
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
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
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
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:
- Skala
- Nasz prototyp był masywny i nieporęczny, przez co miał skłonność do przewracania się na krawędzi naszych ramion
- Wagon był znacznie większy niż to konieczne i miał dużo zmarnowanej przestrzeni
- Nasz pas (bieżnik vex tank) był znacznie większy niż to konieczne, co wprowadzało nadmiar przestrzeni między ramionami
-
Tarcie
- Nasze bieżniki Vex nie przeszły łatwo przez drewniane rolki kołków we wszystkich punktach
- Plastik na drewnie sprawiał, że w wielu przypadkach powóz nie chciał się ruszać
- 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
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
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:
Tworzenie przez błąd: 11 kroków
Creation by Error: Creation By Error kwestionuje i zmusza nas do zakwestionowania naszych założeń dotyczących precyzji i dokładności urządzeń cyfrowych oraz sposobu, w jaki są one wykorzystywane do interpretacji i zrozumienia środowiska fizycznego. Z robotem wykonanym na zamówienie, który emituje aurę
Zbuduj robota Telepresence kontrolowanego przez Wi-Fi: 11 kroków (ze zdjęciami)
Zbuduj robota Telepresence kontrolowanego przez Wi-Fi: Ten projekt dotyczy budowy robota, który może wchodzić w interakcje ze zdalnym środowiskiem i być kontrolowanym z dowolnej części świata za pomocą Wi-Fi. To mój ostatni projekt inżynierski i nauczyłem się dużo o elektronice, IoT i programowaniu, chociaż ja
Tworzenie danych drukarki 3D obudowy dla modułu elektronicznego przez Blender.: 6 kroków
Tworzenie danych drukarki 3D obudowy dla modułu elektronicznego przez Blender.: Potrzebujesz ich (przykład, którego użyłem). Drukarka 3D (TEVO Tarantula)Skaner 2D (CanoScan LiDE 200) Edytor danych 3D (Blender) Edytor danych 2D (Paint Shop Pro) https://neo-sahara.com/wp/case_make_blender
Tworzenie adaptera Bluetooth Pt.2 (tworzenie kompatybilnego głośnika): 16 kroków
Tworzenie adaptera Bluetooth Pt.2 (Tworzenie kompatybilnego głośnika): W tej instrukcji pokażę ci, jak wykorzystać mój adapter Bluetooth, aby stary głośnik był kompatybilny z Bluetooth. * Jeśli nie przeczytałeś mojej pierwszej instrukcji na temat tworzenia adapter Bluetooth” Proponuję to zrobić przed kontynuowaniem.C
Jak zrobić opaskę uziemiającą na nadgarstek.: 7 kroków
Jak zrobić opaskę uziemiającą na nadgarstek.: W moim życiu codziennie mam do czynienia z dużą ilością wrażliwej elektroniki i smażenie tej elektroniki jest dużym problemem przy ich dotykaniu. Większość ludzi uważa, że trudno jest smażyć elektronikę z elektrycznością statyczną. To nie jest, jeden dotyk może wysłać grafikę o wartości 100 USD