EggBot – Wielkanoc w nowoczesnym wydaniu

EggBot – Wielkanoc w nowoczesnym wydaniu

Od kilku lat przymierzałem się do tego projektu i nareszcie w tym roku w Święta Wielkanocne, koszyk będzie wypełniony „cyfrowo” malowanymi jajkami.

EggBot to pewnego rodzaju ploter, który może rysować na powierzchniach kulistych. Rama urządzenia jest drukowana, a napęd składa się z dwóch popularnych silników krokowych Nema 17 i serwa podnoszącego pisak sterowanych mikrokontrolerem ESP32 w wersji DevKit. 

Projekt ramy z pewnymi modyfikacjami można znaleźć na stronie Thingiverse i w oryginale współpracuje z elektroniką od jjrobots z pomocą płytki DEVIA Robotics Control Board, ale na tą chwilę płytka jest niedostępna, więc skorzystałem z płytki PCB od Bluino Electronics dostępnej w Chińskim sklepie PCBWay pod nazwą Drawing Robot Plotter Pen. Cena 5 płytek (minimalna ilość) z najtańszą przesyłką 30 dni roboczych to ok 35 zł. Najszybsza 5 dniowa wysyłka to kwota ok 150zł.

Serce maszyny – elektronika

Równie dobrze, można by było zrobić całą elektronikę na płytce uniwersalnej, ale jest to mało eleganckie rozwiązanie, ponieważ projekt zawiera dość dużo elementów i na płytce robi się bałagan przez co łatwo pomylić się w połączeniach poszczególnych elementów. W płytce dedykowanej specjalnie pod ten projekt wszystko jest ładnie poukładane i zwarte.

EggBot to dość zaawansowana maszynka, w której mieści się całkiem sporo elektroniki. Poniżej lista rzeczy, których będziemy potrzebować do zrobienia całego sterownika:

  • 1 x Płytka PCB Drawing Robot Plotter Pen lub płytka uniwersalna
  • 1x Mikrokontroler ESP32 DEVKIT V1 board
  • 2x Stepstick A4988
  • 1x adapter kart micro SD
  • 1x LED 3mm
  • 1x Regulator napięcia 5V AMS1117 (taki jest w projekcie ale zalecam inny np.7805CV , o tym będzie poniżej)
  • 1x rezystor 10K Ohm
  • 1x kondensator 0.1uF
  • 2x kondensator 100uF lub 220uF/16V
  • 1x kondensator 1000uF/16V
  • 1x przełącznik DPDT 8.5×8.5mm
  • 1x złącze DC
  • 2x Gniazdo Żeńskie 15 pin
  • 4x Gniazdo Żeńskie 8 pin
  • 2x Gniazdo Męskie 4 pin
  • 1x Gniazdo Męskie 3 pin
  • 2x Gniazdo Męskie 2 pin
  • 2 x kabel silnika krokowego

Wydaje się, że jest to dużo elementów, prawda? W praktyce wszystko zamyka się w jednej zgrabnej płytce.

Trochę słów o mikrokontrolerze ESP32 DevKit

Do tej pory miałem styczność z różnymi płytkami Arduino, ale nie miały takich możliwości jak ten konkretny układ, a najważniejsze z nich to:

  • procesor Dual Core Tensilica LX6 240 MHz
  • pamięć SRAM 520 KB
  • pamięć Flash: 4 MB
  • wbudowany układ WiFi 802.11BGN HT40
  • wbudowany moduł Bluetooth
  • zintegrowany czujnik Halla oraz interfejs dotykowy
  • 30 wyprowadzeń GPIO
  • w wersji DevKit stabilizator 3,3 V został umieszczony już na płytce mikrokontrolera, dlatego można go zasilać bezpośrednio 5V.
  • wymiary: 50 x 26 x 8 mm (bez złącz)

Ten układ również jak Arduino współpracuje z edytorem programistycznym Arduino IDE.

Wyprowadzenia (pinout) mikrokontrolera ESP-WROOM32 w wersji DevKit

Po zamówieniu płytek z PCBWay, co trwało najdłużej ze względu na wysyłkę Chin zabrałem się za kompletowanie części. Praktycznie wszystko znalazłem w sieci z wysyłką z polski.

Rama wydrukowana na drukarce 3D

Materiał z jakiego wykonałem ramę to PETG w kolorze Silver. Filament przeleżał parę lat w garażu, gdzie wilgotność w miesiącach zimowych sięga niemal 90% . Na wydrukach z tego filamentu, było widać wady w postaci nierównej struktury powierzchni (efekt wyparowywania wody przy ekstruzji) i mocniej sączył się z dyszy. Po 3 h w piekarniku w temperaturze 75 stopni prawie wszystkie defekty zniknęły, ale … materiał posklejał się w miejscu w którym rolka stykała się z blachą piekarnika. Następnym razem lepszym rozwiązaniem przy suszeniu, będzie umieszczenie rolki filamentu w piekarniku na kratce.

Finalnie ramę udało się wydrukować dopiero za trzecim razem, niestety sklejony filament nie pozwalał odwinąć się z rolki i blokował ruch głowicy.

Nieudana próba wydruku rama, ze względu na sklejony przy suszeniu filament

Lista pozostałych elementów do złożenia ramy:

  • 2x silnik Nema17 (ilość kroków na obrót w gotowym programie ustawiony jest pod silnik o skoku 1.8 stopnia, ale można to oczywiście zmienić )
  • 2x łożysko 623
  • 1x pręt gwintowany 3mm,80mm długości
  • 1x sprężynka 4,5mm, 10 mm długości (u mnie sprężynka z długopisu, nadaje się idealnie)
  • 1x serwo SG90 lub podobne rozmiarowo
  • 1x zasilacz 12V
  • śruby M3 6mm
  • śruby M3 12mm
  • nakrętki M3

Kolejne drobne elementy ramy wydrukowałem również z PETG, ale w kolorze zielonym, świeżo odpakowanego z opakowania próżniowego. Wydruki wyszły bez problemu. W oryginalnym projekcie do samego trzymania jajka użyto przyssawek 20mm. Z tego względu, że nie miałem takich pod ręką, postanowiłem wydrukować je wg. tego projektu z próbki materiału Ninjaflex TPU. Jak widać, przy kolejnym wydruku muszę popracować nad kalibracją tego materiału, wydaje mi się, że temperatura była za wysoka i za mało chłodziłem wydruk.

Niezbyt ładne, ale funkcjonalne uchwyty jajek z materiału NinjaFlex TPU

Po złożeniu części mechanicznej wygląda to tak:

Dwie wydrukowane 3D ramy do ploterów EggBot

CZĘŚĆ ELEKTRONICZNA

Schemat elektroniczny sterownika plotera do jajek

Wydawało się, że płytka z gotowego projektu, po wlutowaniu wszystkich elementów z listy będzie działać od razu, tak się jednak nie stało… Problemem okazało się zasilanie płytki, a dokładniej stabilizator SMD 5VAMS1117.  Ten stabilizator ma zasilać mikrokontroler ESP32 napięciem 5V, niestety nie wytrzymywał poboru prądu i bardzo się grzał (doklejony radiator nic nie pomógł). Po przegrzaniu układu, na nóżce wyjściowej ze stabilizatora pojawia się albo 0V albo to co na wejściu czyli w moim przypadku 12V. Niestety 12V podane bezpośrednio do mikrokontrolera ESP32 uszkodziło go, a dodatkowo uszkodziły się też sterowniki silników krokowych – stepsticki A4988.

Do rozwiązania tego problemu, zastosowałem stabilizator LM7805 o większym prądzie wyjściowym – 1,5 A. (AMS1117 to prąd wyjściowy 1A). Dodatkowo w linii zasilania serwa dodałem gotowy moduł zasilania z napięciem wyjściowym również 5V. Wtedy działające serwo nie będzie obciążać stabilizatora zasilającego mikrokontroler.

W miejsce stabilizatora AMS1117 został wlutowany stabilizator LM7805
Moduł zasilający serwo napięciem 5V
Pierwsze próby wydruku na jajku i test mechaniki

Niestety gotowy program zakłada obrót serwa w inną stronę niż potrzeba przy tej mechanice, dlatego nie grzebiąc w programie zdecydowałem się, żeby odbić model dźwigni z mocowaniem serwa, tak, żeby było zamocowane po jej drugiej stronie.

PROGRAMOWANIE

Do wgrania oprogramowanie do mikrokontrolera ESP32, użyłem edytora programistycznego Arduino IDE. Po zainstalowaniu edytora, ściągamy pliki projektu Grbl_Esp32 przez najechanie kursorem myszy na zielony napis Code i wybranie z okna rozwijanego Download ZIP. Powinien ściągnąć się plik ZIP, którego rozpakowujemy do folderu o nazwie takiej samej jak nasz plik ZIP. Nie należy zmieniać struktury katalogów, bo kompilator może nie znaleźć potrzebnych plików do stworzenia programu.

Pobieranie programu GRBL_Esp32 dostępnego na GitHub

Po instalacji programu Arduino IDE i ściągnięciu programu GRBL_Esp32 z GitHub, musimy jeszcze ściągnąć plik z konkretną konfiguracją naszej maszyny, w tym wypadku ploterem do jajek. Plik eggbot.h ściągamy ze strony GitHub projekt EggBot i kopiujemy go do katalogu naszego programu Grbl_Esp32 -> src ->Machines.

Następnie otwieramy program Grbl_Esp32 przez plik o rozszerzeniu .INO widoczny na poniższym zdjęciu.

Po otworzeniu Arduino IDE powinno pojawić się okno z widokiem programu:

Podłączamy kablem USB naszą płytkę mikrokontrolera ESP32 i po chwili wybieramy schemat partycji Minimal SPIFFS (1,9 MB APP with OTA/190KB SPIFFS)

Kolejnym krokiem jest mała zmiana w pliku Machines.h , tak żeby wybrać konfigurację naszej maszyny. Znajduje się on w katalogu Grbl_Esp32-main -> Grbl_Esp32 -> src.

Możemy taki plik otworzyć zwykłym notatnikiem i podmienić linijkę 11:

Zmiana z # include „Machines/test_drive.h”   na   # include „Machines/eggbot.h”

Wracamy do programu Arduino IDE, zostało nam wybrać odpowiedni port komunikacji z ESP32, w moim przypadku COM11

Po wykonaniu tych czynności, wgrywamy program do płytki naciskając strzałkę opisaną słowem „wgraj” w interfejsie programu:

Jeśli wszystko dobrze się skompilowało, w dolnej części programu powinniśmy zobaczyć napis Done Uploading. Niestety, jeśli ktoś uruchamia środowisko Arduino po raz pierwszy to może się okazać niezbędne uzupełnienie bibliotek programu, które można łatwo pobrać. W oknie dialogowym program zgłosi jakich bibliotek brakuje.

Po wgraniu programu, odłączamy go od kabla USB, podłączamy zasilanie 12V i łączymy się z siecią WIFI o nazwie GRBL_ESP. Hasło do sieci to: 12345678, po połączeniu powinna otworzyć się przeglądarka, jeśli to nie nastąpi to wpisujemy adres 192.168.1.0:

Wgrywamy jeszcze interfejs GUI przez naciśnięcie przycisku Upload i wyszukania pliku index.html.gz w katalogu projektu grbl_esp32, plik znajduje się w katalogu Grbl_Esp32-main -> Grbl_Esp32 -> data

Po wgraniu interfejsu okno do obsługi naszej maszyny powinno wyglądać tak:

TWORZENIE GRAFIKI 

Do tworzenia grafiki użyłem darmowego programu Carbide 3D Create, do którego link znajdziecie tutaj.

Po uruchomieniu programu trzeba tylko odpowiednio go ustawić, więc w pierwszym kroku klikamy na przycisk zębatki w polu Setup.

Ustawiamy wszystko tak jak na poniższym zdjęciu:

  • Width (X) – 160 mm
  • Height (Y) – 55 mm
  • Thickness (Z) – 1 mm
  • Toolpath Zero – Lower-Left
  • Material – Softwood
  • Machine – Shapeoko 3
  • Retract Height – 1mm
  • Units – MM

Oczywiście parametry pola roboczego Width i Height będą zmienne w zależności jak duże jajka chcemy pomalować, jest to kwestia doświadczalna.

Po zatwierdzeniu ustawień okno programu powinno wyglądać tak:

Zrobimy napis ŚWIAT DRUKU 3D i dodamy jakąś ramkę w innym kolorze. Po pierwsze W polu Create Vector klikamy na literę T.

Otwiera nam się menu Create Text, wybieramy wielkość i czcionkę z menu a później ustawiamy napis w polu roboczym i klikamy Done.

Wygenerujemy gcode (kod czytany przez maszynę) z samego napisu. W tym celu wchodzimy w zakładkę Toolpaths, klikamy napis tak, żeby był podświetlony na czerwono i z lewego menu w polu 2D Toolpaths naciskamy przycisk Contour a następnie w polu Toolpath Settings wybieramy Offset Direction: No Offset i klikamy ok.

Został wygenerowany kontur po którym będzie poruszał się pisak, zapisujemy to teraz na dysku jako plik Gcode z rozszerzeniem .nc.

Napis mamy już zapisany, teraz pora na ramkę.

W polu Group 1, co widać na powyższym zdjęciu klikamy wygenerowaną ścieżkę o nazwie Contour Toolpath 11 – 2 minutes, następnie najeżdżamy kursorem i prawym przyciskiem myszki usuwamy ścieżkę, tak w tym polu nic nie zostało. Z napisu zniknie fioletowy kolor. Wchodzimy w zakładkę Design i w polu importu klikamy na środkowy obrazek, następnie wybieramy nasz plik graficzny, najlepiej jak będzie miał dużo kontrastowych krawędzi, wtedy program bez problemu utworzy z tych krawędzi ścieżkę.

Poprzez opcję Threshold możemy ustawić próg wykrycia krawędzi. Jeśli efekt wykrycia krawędzi nie jest zadawalający, może poruszać suwakiem i sprawdzić w którym położeniu jest najlepiej.

Po zatwierdzeniu przyciskiem ok, pokazuje się obszar roboczy na którym mamy, jak się okazuje za dużą grafikę ornamentu.

Zaznaczamy ornament i w polu Transform klikamy drugą ikonkę po lewej, aby dowolnie go przeskalować.

Kolejny krok już znamy, generujemy ścieżkę z zaznaczonym ornamentem i zapisujemy do osobnego gcodu.

Takim sposobem mamy 2 pliki, dla dwóch kolorów pisaków, które po wydrukowaniu jednego pliku zmienimy i wydrukujemy inny.

Po połączeniu z maszyną i otwarciu przeglądarki ładujemy pliki na kartę i klikamy strzałkę przy pliku. W polu GRBL znów klikamy strzałkę, wtedy zaczyna się cały proces. Zero pisaka, czyli jego początkowy punkt startu ustawiamy fizycznie ramieniem z pisakiem, po lewej stronie jajka, blisko lewego uchwytu.

Rozpisałem się szczegółowo, dlatego mam nadzieję, że dla kogoś taki materiał będzie użyteczny. Jeśli tak szczegółowe materiały Was interesują i chcielibyście czytać więcej opisanych krok po kroku projektów – dajcie znać!

 

Powrót na górę