Projekty

The Grasshopper Table

Czyli pięcio-osiowa maszyna CNC sterowana zdalnie pod postacią stołu


1 stycznia 2021, Maciej

Ustaliliśmy, że najlepszym rozwiązaniem będzie zastosowanie serwomechanizmów. Prościej się je kontroluje - przez PWM, prawdopodobnie nie wymagają sterownika. W przypadku siłowników elektrycznych liniowych nie mieliśmy sensownego pomysłu, aby kontrolować pozycję wysuwu ramienia. Enkodery nie wchodzą w grę, bo są za drogie i uwzględnienie ich w kodzie przekraczałoby chyba nasze możliwości czasowe. Poza tym, skomplikowałoby to znacznie część mechaniczną. Sterowanie zaś na podstawie czasów, mogłoby doprowadzić do sytuacji, gdy wszystkie siłowniki doszłyby do swoich krańcówek i instalacja przestałaby działać.

Dodatkowo zdaliśmy sobie sprawę, że kontrolowanie blatu w dwóch płaszczyznach wymagać będzie dodatkowego złącza, kompensującego zmianę odległości między siłownikami. Początkowo myślałem, że siłowniki zamocowane na sztywno, pionowo w każdej z nóg plus złącza kulowe między blatem a siłownikiem -załatwią sprawę, jednak - byłem w błędzie. Taki układ działałby tyko wówczas, gdyby wszystkie siłowniki działały równocześnie - podnosząc/opuszczając poziomy blat.

Szkic 1 - rozkmina

Dlatego też serwomechanizmy wydają się być najlepszym rozwiązaniem. O ile oczywiście uda się znaleźć wystarczająco silne serwo w przyzwoitej cenie.

Sterować będziemy z takiej samej walizeczki co ostatnio, przy użyciu NodeMCU (ESP8266), z tą tylko różnicą, że zamiast wyspy zaworowej i 8 przekaźników będzie ESP, jeden przekażnik i sterownik serw. 

4 stycznia, Paweł

‍Poniżej prosty model koncepcyjny, który powstał w Fusion 360. Złożenienie mechaniczne wszystkich komponentów: osiem złączy obrotowych i cztery kulowe.

Koncept ze złączami w Fusion

Cieszę się, że zdecydowaliśmy się poświęcić chwilę czasu na ten model, bo pokazał nam, że przy zastosowaniu tego mechanizmu blat może pracować tylko w jednej osi. Aby pracował w obu płaszczyznach, musielibyśmy dodać kolejną wahliwą oś przy każdym serwomechaniźmie, co dramatycznie skomplikowałoby całą konstruckję. Dlatego powrót to deski kreślarskiej i burza mózgów.

5 stycznia 2022, Maciej

Serwa byłyby fajne, bo znalibyśmy ich dokładną pozycje, ale może nie o to chodzi w tym obiekcie. Niech siiłowniki liniowe będą zamocowane na sztywno w każdej z nóg, tak jak planowaliśmy pierwotnie. Tylko, że tym razem blat z siłownikiem nie będzie już miał trwałego połączenia. Siłownik „wypycha” blat do góry. Bez żadnych dźwigni, złączy kulowych itp. Po prostu końcówka siłownika „szoruje” po spodzie blatu. Natomiast blat dostaje jeden punkt podparcia na środku, rodzaj „gałki i panewki”. Cztery siłowniki w nogach „przepychają” blat, odpowiednio wysuwając się i chowając. Aby szybko zrozumieć, czy i jak będzie to działać, z pomocą znowu przybywa Lego.

Szybki model z Lego
Serious play with Lego
Będzie dzialać.

Siłowniki pozostają „głupie”, czyli nie znamy ich dokładnej pozycji i sterujemy jedynie czasem, czyli gdy podajemy napięcie - siłownik się rozsuwa i z jego prędkości (która powinna być stała przy danym napięciu) wnioskujemy (mniej więcej) jaką przebył drogę. Siłowniki nie są trwale związane z blatem więc spoko - niedokładności same się rozwiążą i mechanizm będzie działał.

I teraz najlepsza cześć.

Pozycję blatu będziemy sprawdzać cyfrowym żyroskopem. Czyli pozycje końcówek siłowników bedą trochę tajemnicą, za to będziemy sprawdzać efekt jaki wywołają w świecie, czyli wychylenie blatu w dówch płaszczyznach. Da nam to dwie bardzo kreatywne możliwości/zjawiska:

  1. Błąd pozycji siłownika będzie powodował lukę między blatem a końcówką siłownika, więc blat będzie chciał od czasu do czasu (nieprzewidywalnie) opaść w jakąś stronę;
  2. Różnica w czasie odświeżania pozycji przez żyroskop (szybka) a czasem reakcji siłowników (bardzo wolny) będzie powodować ciekawe wibracje, tzn siłowniki będą starały się nadążyć za komendami z żyroskopu i zanim osiągną pozycję zadaną przez żyroskop, ta będzie już nieaktualna, bo w tym czasie żyroskop zmierzy już nową pozycję i tak w kółko. Blat będzie zawsze próbował znaleźć zwoją równowage, ale nigdy mu sie to nie uda. Tym fektem prawdopodobnie będziemy mogli sterować regulując częstotliwośc odświeżania żyroskopu. To tylko koncept, ale na pewno bardzo ciekawy.

Dzięki temu nie będziemy programować sekwencji ruchu, tylko damy mechanizmowi żyć swoim życiem i być cudownie nieprzewidywalnym. Oczywiście będą parametry pod naszą kontrolą, takie jak prędkość siłowników, ich maksymalny wysów itp. A w tych granicach niech się dzieje co chce.

Dodatkowo, aspekt mechaniczny jest radykalnie uproszczony. Nie mamy żadnych prętów, złączy kulowych, łożysk, osi, wałków, itp.

6 stycznia 2022, Maciej

Zapomniałem napisać o jeszcze jednej rzeczy. Inne tryby sterowania. To, że blat nie jest trwale związany z silownikami daje nam jeszcze inne możliwości ruchu. Na przykład:

  1. Chowamy całkowicie trzy siłowniki i trącamy blat czwartym, albo;
  2. Równocześnie chowamy wszystkie cztery siłowniki i dajemy blatowi możliość swobodnego kołysania się na centralnym przegubie;
  3. Program losuje pozycję każdego z siłowników.

Podoba mi się to, że ta konstrukcja daje nam sporo możliwości zabawy i alternatywnych scenariuszy, na okoliczność gdyby któryś z ruchów/zachowań nie spełniał naszych oczekiwań.

Generalnie plan jest taki, żeby zaprojektować mechanizm, który będzie cudownie nieprzewidywalny.
11 stycznia 2021, Maciej

Cały ten projekt eskalował bardzo szybko. Do wręcz szalonego poziomu. Przeszliśmy w ciągu jednego dnia przez tyle iteracji i pomysłów, że mam nadzieję, że jeszcze pamiętam proces na tyle, zęby goopisać.  

Robi się z tego bardzo kompetentne wyzwanie projektowe.

Pierwszą i najważniejszą innowacją jest, to że odchodzimy od siłowników liniowych. Wiem, wiem, znowu - ale tym razem z dobrych powodów. Mam pomysł na relatywnie szybką i tanią hybrydę między serwomechanizmem a siłownikiem liniowym - robimy bardzo prosty, wręcz brutalistyczny siłownik DIY w oparciu o silnik krokowy i śrubę trapezową.

Zrobiliśmy kolejną Lego-burzę-mózgów i przećwiczyliśmy kilka prostych mechanizmów. Listwę zębatą oraz silnik z ramieniem i „popychaczem” wyeliminowaliśmy, bo prawdopodobnie byłyby za słabe, przy zastosowaniu sterowników, które znajdują się w zasięgu naszego budżetu.

Spojrzeliśmy więc na stojącą obok drukarkę 3D Prusa. Śruba trapezowa! Tylko że zamiast ruchomej nakrętki, chcemy, żeby to śruba była ruchoma. Dlatego zaprojektujemy prostą przekładnię zębatą, która będzie obracać nakrętką, co w rezultacie przełoży się na ruch liniowy śruby trapezowej. (Właśnie zdałem sobie sprawę, że obrót śruby trzeba zablokować, żeby „wymusić” ruch liniowy. Nie ważne. Do ogarnięcia.)

Grasshopper

Dobra, kwestię mechaniczną mamy dograną. Co dalej? Jak tym wszystkim sterować i nie zagłębiać się w pisanie silnika kinematycznego od podstaw?

Tu pojawia się druga, bardziej ekscytująca innowacja: Grasshopper! (Plugin do Rhino 3D służący „wizualnego programowania”).

W pierwszej wersji pomysłu mielibyśmy użyć Grasshoppera w połączeniu z wtyczką Firefly, żeby sterować instalacją na „żywo” z poziomu Grasshopper’a. To bardzo eleganckie rozwiązanie. Idealnie nadawałoby się do zrobienia jednorazowego performance’u, ale żeby instalacja pracowała samodzielnie przez długi czas, rozwiązanie odpada, bo wymagałoby stałej obecności laptopa z uruchomionym Rhino. Do zrobienia, ale niezawodność instalacji drastycznie spada. Wciąż bierzemy to rozwiązanie pod uwagę, ale w pierwszej kolejności wolałbym przećwiczyć system oparty o mikrokontroler, ewentualnie Raspberry Pi.

Teraz ta odjechana część.

Nie wiem dokładnie jak to się stało, ale od tego momentu budujemy drukarkę 3D albo 5-osiową maszynę CNC. Nie żartuję.

Wbrew pozorom to najprostsze rozwiązanie. Zamiast pisać kontroler ruchu od podstaw, wykorzystamy znane i sprawdzone w boju firmware do obsługi drukarki 3D z interfejsem Octoprint. Każda drukarka domyślnie i tak steruje co najmniej czterema silnikami, a my ekstruder podmienilibyśmy na jedną z osi. Ruchem stołu albo cała jego „choreografią” sterowalibyśmy pisząc po prostu odpowiedni gcode. Natomiast kafar sterowany byłby po prostu komendą M (np. M5 - „uruchom wrzeciono”).

To bardzo zwinne rozwiązanie i prawdopodobnie jeśli się uda, będzie zasługiwało na artykuł na Hack a Day 😁

Trzecią, ciekawą innowacją będzie generowanie gcode w oparciu o stworzony od podstaw w Grasshoperze post procesor (rodzaj algorytmu „tłumaczącego” ruch na sekwencję komend gcode, czyli języka który rozumieją maszyny CNC). Zamiast pisać gcode ręcznie, wygodnie byłoby stworzyć wirtualny model stołu w Rhino i na podstawie jego „animacji” w Grass’ie generować gcode. Ambitne, ale całkowicie do zrobienia. Bierzemy to pod uwagę jako wisienkę na torcie, albo jako „streach goal” jeśli starczy czasu.

1 lutego 2020, Maciej

Po miesiącu pracy mogę szczerze powiedzieć, że jestem zakochany w naszym procesie. To, że byliśmy w tanie tak dynamicznie ideować i wywracać wielokrotnie pomysły do góry nogami świadczy dobitnie, że kochamy co robimy I przy okazji świetnie się przy tym bawimy.

Wygrała opcja z pozoru najbardziej szalona, czyli wykorzystanie technologii do budowy drukarek 3D w połaczeniu z serwerem Octoprint i generatorem gcode napisanym w Grasshoperze. Do mieszanki dodaliśmy GRBL (firmware sterujący silnikami krokowymi, rodzaj systemu nerwowego maszyny CNC) w odnodze do sterowania pięcioma osami, bardzo eksperymentalny sender kodu o nazwie cn5x, wyłowiony z odmętów GitHub’a, parę pluginów do serwera Octoprint (Better GRBL Support, The Spagetti Detective i Print Scheduler), całe morze konfiguracji i frustracji i otrzymaliśmy…

…STÓŁ


April 1, 2021
by 
Paweł Wołowczyk