Google Workspace × Bambu Lab w szkole. A czemu nie?
W pracowni robotyki stoją dwie drukarki Bambu Lab A1. Na Google Workspace działa u nas praktycznie wszystko — Classroom, Drive, Forms, Sheets, Apps Script. Przez długi czas te dwa światy prowadziły zupełnie osobne życie.
Aż padło proste pytanie: a gdyby tak kolejka druku była po prostu arkuszem Google?
Bez zewnętrznej platformy. Bez kolejnego logowania dla nauczycieli. Bez nowego narzędzia do nauczenia się. Tylko infrastruktura, którą już mamy — rozszerzona o jakieś 250 linijek kodu.
Efekt: uczeń zgłasza projekt, Gemini sprawdza jego opis, zlecenie trafia do kolejki, a demon w Pythonie na Macu Mini zajmuje się resztą — automatycznie, bez dotykania klawiatury przez kogokolwiek.
Dlaczego zbudować to na Google Workspace?
Odpowiedź nie jest oczywista, dopóki nie zastanowimy się, jak naprawdę wygląda szkolne środowisko IT. Każdy nauczyciel ma już Forms, Sheets, Drive, Gmaila i Apps Script. Każdy uczeń ma już szkolne konto Google. Infrastruktura jest na miejscu — tylko nikt jej dotąd nie podpiął do drukarek.
Najlepsza szkolna infrastruktura to taka, której uczniowie nie zauważają — bo wydaje się naturalnym przedłużeniem samej pracy.
Zero nowych narzędzi. Każdy element jest już wdrożony i używany na co dzień. Nauczyciele nie potrzebują nowego loginu. Uczniowie nie potrzebują nowej aplikacji.
Wbudowana ścieżka audytu. Sheets zapisuje każde zgłoszenie, każdą podmianę koloru, ocenę Gemini, przydział drukarki i zmianę statusu. Idealne, by pokazać rodzicom i wizytatorom, że AI wykorzystujemy odpowiedzialnie.
AI, które uczy, a nie wyręcza. Gemini nie ocenia projektu — pyta, czy opis jest na tyle kompletny, by w ogóle zacząć drukować. Uczniowie uczą się nazywać swoją pracę, zanim maszyna ruszy.
250 linijek kodu. Cały system — wyzwalacz Apps Script, integracja z Gemini, kolejka w Sheets, pomost MQTT w Pythonie, szablony e-maili — mieści się w niecałych 250 linijkach. Do utrzymania przez dowolnego ogarniętego technicznie nauczyciela.
Rurociąg: co dzieje się po kliknięciu „Wyślij”
Uczeń widzi formularz, a potem widzi swój model na stole roboczym drukarki. Między tymi dwoma momentami współpracują trzy oddzielne systemy — niewidoczne, automatyczne i odporne na awarie.
Google Form
↓ trigger: onFormSubmit
Apps Script
↓
┌─────────────────────────────────┐
│ applyPaintingLogic() │
│ reviewWithGemini() │
│ addToQueue() │
│ sendConfirmationEmail() │
└─────────────────────────────────┘
↓ Google Sheets (queue)
Mac Mini daemon — polls every 60s
↓ MQTT over TLS
Bambu Cloud → A1 / A1 + AMS Lite
Uczeń robi jedną rzecz. System robi sześć.
Formularz: co uczniowie właściwie wypełniają
Formularz ma przemyślaną strukturę. Każde pole czemuś służy — albo jako treść do kolejki, albo jako dane wejściowe dla logiki routingu.
| Pole | Typ | Cel |
|---|---|---|
| Imię i nazwisko + e-mail | Krótka odpowiedź | Tożsamość + powiadomienie |
| Klasa + przedmiot | Lista rozwijana | Filtrowanie + kontekst dla Gemini |
| Nazwa projektu | Krótka odpowiedź | Nazwa wyświetlana w kolejce |
| Opis i cel edukacyjny | Akapit | Materiał do oceny przez Gemini |
| Link do pliku STL/3MF na Drive | Krótka odpowiedź | Plik dla drukarki |
| Kolor filamentu | Lista rozwijana | Routing na drukarkę |
| Czy model będzie malowany akrylami? | Tak/Nie | Logika podmiany koloru |
| Zgoda na awaryjny biały, gdy AMS zajęty? | Tak/Nie | Sterowanie awaryjnym trybem kolejki |
| Szacowany czas druku (godziny) | Liczba | Walidacja przez Gemini |
Dwa ostatnie pytania to miejsce, gdzie mieszka najciekawsza logika. Jeśli uczeń zaznaczy, że model będzie malowany akrylami, system automatycznie nadpisuje jego wybór koloru na szary — najlepszą bazę pod farby akrylowe, niewymagającą gruntowania. Uczeń dostaje powiadomienie z wyjaśnieniem dlaczego.
Logika koloru: jeden wgląd, który zmienia wszystko
W naszej szkole często malujemy wydruki akrylami. Ten jeden szczegół operacyjny — o którym większość poradników do druku 3D nawet nie wspomina — całkowicie zmienia optymalny wybór koloru.
Szary filament to najlepsza baza pod malowanie akrylami. Nie przebija przez farbę, nie wymaga gruntowania i sprawia, że błędy w warstwie farby są mniej widoczne. Kiedy uczeń zaznacza, że pomaluje model, system po cichu nadpisuje jego wybór koloru i tłumaczy powód w e-mailu potwierdzającym.
// Apps Script — the painting override
function applyPaintingLogic(job) {
if (job.willBePainted === 'Tak') {
if (job.color !== 'szary') {
job.originalColor = job.color; // remember original choice
job.color = 'szary'; // override to grey
job.colorOverridden = true;
}
// Never fall back to white on a painted model
job.allowWhiteFallback = false;
} else {
job.allowWhiteFallback = (job.acceptsWhiteFallback === 'Tak');
}
job.targetPrinter = AMS_COLORS.includes(job.color)
? 'A1 + AMS Lite'
: 'A1 (white)';
}
Warstwa oceny przez AI
Gemini 2.0 Flash Lite ocenia każde zgłoszenie w skali 1–5 według czterech kryteriów, zanim ruszy choćby milimetr filamentu:
- Czy opis jasno wyjaśnia, co będzie drukowane?
- Czy tłumaczy, dlaczego (cel edukacyjny)?
- Czy projekt jest realistyczny dla szkolnej drukarki 3D?
- Czy szacowany czas druku mieści się w szkolnym limicie 8 godzin?
Model odpowiada w formacie JSON i generuje polskojęzyczną informację zwrotną skierowaną wprost do ucznia. Zgłoszenia z oceną poniżej 3 wracają do poprawki. Ton informacji zwrotnej jest celowo zachęcający — uczniowie mają od 11 do 15 lat.
// The prompt structure (simplified)
const prompt = `
You are an educational assistant reviewing a student 3D print request.
Student: ${job.studentName}, class ${job.className}
Project: "${job.projectName}"
Description: "${job.description}"
Score 1-5 and respond ONLY with JSON:
{"score": <1-5>, "feedback": "<one sentence in Polish>", "approved": <true|false>}
`;
Jeśli Gemini jest niedostępne, rurociąg się nie zatrzymuje — mechanizm awaryjny ustawia ocenę na 3 i oznacza zlecenie jako zaakceptowane. Kolejka druku nigdy nie stoi z powodu timeoutu po stronie AI.
Pomost na Macu Mini
Połączenie między Google Sheets a fizyczną drukarką biegnie przez 250-linijkowego demona w Pythonie, uruchomionego na Macu Mini w serwerowni. Działa jako usługa launchd, startuje przy logowaniu i odpytuje Sheets co 60 sekund.
Kiedy znajdzie wiersz ze statusem Zaakceptowane, wykonuje kolejno:
- Sprawdza dostępność drukarki przez Bambu MQTT (
gcode_state == IDLE) - Weryfikuje dzienny limit druku (6 zleceń na drukarkę dziennie)
- Sprawdza 5-minutowy odstęp między zleceniami
- Kieruje zlecenie na właściwą drukarkę na podstawie koloru
- Przełącza na białą A1 tylko wtedy, gdy: uczeń wyraził zgodę i model nie będzie malowany
- Wysyła URL pliku
.3MFi uruchamia druk - Aktualizuje Sheets o identyfikator zadania i nowy status
Połączenie MQTT używa TLS z europejskim brokerem chmurowym Bambu pod adresem eu.mqtt.bambulab.com:8883. Uwierzytelnianie odbywa się za pomocą tokena użytkownika uzyskanego przez API logowania Bambu Cloud. Uwaga: Bambu nie publikuje oficjalnego, publicznego API — korzystamy tu z endpointów udokumentowanych przez społeczność, które mogą się zmienić.
Ochrona drukarek: trzy zabezpieczenia
Prowadzenie dwóch drukarek w szkolnym środowisku bez zabezpieczeń to prosta droga do uszkodzenia sprzętu. Sprzęt chronią trzy mechanizmy:
Dzienny limit. Każda drukarka przyjmuje maksymalnie 6 zleceń dziennie. Przy przeciętnej długości zlecenia przekłada się to na jakieś 48 godzin ciągłego druku dziennie — dość na intensywny tydzień lekcji, a niemożliwe do przypadkowego przekroczenia.
Okres wychłodzenia. Po zakończeniu każdego druku pomost odczekuje 5 minut przed uruchomieniem kolejnego zlecenia. Daje to czas, by stół ostygł, uczeń odebrał wydruk, a w razie potrzeby doszło do ręcznej interwencji.
Sprawdzanie bezczynności. Każde zlecenie jest warunkowane stanem gcode_state == IDLE. Pomost nigdy nie wysyła polecenia druku do zajętej drukarki. Jeśli obie drukarki są zajęte, zlecenie czeka w kolejce w Sheets i ponawia próbę w kolejnym 60-sekundowym cyklu.
Pętla dydaktyczna
Fizyczny wydruk nie jest metą — to środek udokumentowanej sekwencji uczenia się:
- Projektuj w TinkerCAD na iPadzie lub Chromebooku
- Zgłoś przez Google Form — opisz, co robisz i po co
- Odbierz od Gemini informację zwrotną o jakości opisu
- Poczekaj na automatyczny druk
- Odbierz fizyczny model z TechLab
- Udokumentuj w Google Classroom: zdjęcie + refleksja + samoocena
To, co kiedyś wymagało, by nauczyciel ręcznie kolejkował zlecenia, pilnował filamentu i ganiał uczniów o dokumentację, dziś dzieje się jako uporządkowany przepływ pracy. Nauczyciel raz konfiguruje system. Dalej działa on sam.
Interaktywny przewodnik
Poniższy komponent przeprowadza przez cały rurociąg, pozwala zasymulować zgłoszenie druku i pokazuje w działaniu logikę decyzji kolor→drukarka.
Interactive explainer
Animated pipeline — click any step
TinkerCAD — Student design
Students design their 3D model in TinkerCAD on school iPads or Chromebooks, then export as a .3MF file and upload to the class Google Drive folder. No special software — just a browser tab.
Ten sam wzorzec, inne problemy
Ta architektura — formularz → Apps Script → ustrukturyzowany wynik → fizyczny wyzwalacz — nadaje się do wielokrotnego użycia w szkolnych przepływach pracy, które angażują realny sprzęt.
Rezerwacja sprzętu laboratoryjnego. Uczniowie wypełniają formularz rezerwacji mikroskopów, oscyloskopów lub stanowisk chemicznych. Apps Script sprawdza kalendarz dostępności w Sheets, potwierdza rezerwację lub wpisuje na listę oczekujących, wysyła potwierdzenie i tworzy wydarzenie w kalendarzu.
Kolejka do wycinarki laserowej. Ten sam rurociąg co przy drukarce 3D, inny endpoint MQTT. Dodaj kontrolę bezpieczeństwa materiału: Gemini weryfikuje, czy opisany materiał można bezpiecznie ciąć, zanim zlecenie trafi do kolejki.
Planowanie szkolnego radia. Cotygodniowy formularz zbiera propozycje odcinków od zespołów uczniowskich. Apps Script planuje zaakceptowane propozycje, przydziela sloty nagraniowe w Google Calendar i wysyła przypomnienia.
Dziennik konserwacji sprzętu. Po każdym zleceniu druku system zapisuje zużyty filament, czas druku i ewentualne błędy w arkuszu konserwacji. Gdy skumulowana liczba godzin druku zbliża się do progu wymiany dyszy, administrator dostaje automatyczny e-mail.
Wzorzec jest zawsze ten sam: ustrukturyzowane dane wejściowe → automatyczny routing → wynik fizyczny lub cyfrowy → udokumentowany zapis. Nauczyciel albo uczeń robi jedną rzecz. Instytucja pamięta wszystko.
Słowo o API Bambu
Endpointy MQTT wykorzystane w tym projekcie są udokumentowane przez społeczność, a nie oficjalnie opublikowane przez Bambu Lab. Działają niezawodnie na wersjach firmware 01.08.x i 01.09.x, ale Bambu może je zmienić bez uprzedzenia. Pomost jest zaprojektowany tak, by cały kod specyficzny dla Bambu mieszkał w jednym module Pythona — jeśli API się zmieni, aktualizacji wymaga tylko ten moduł. Warstwa Google Workspace jest całkowicie stabilna i nie zależy od żadnych zmian po stronie Bambu.
Słowo o AI i danych
Prompt wysyłany do Gemini zawiera nazwę projektu, opis i nazwę klasy — nigdy numerów identyfikacyjnych uczniów, zdjęć ani danych osobowych. Klucz API Gemini jest przechowywany w Script Properties w Apps Script, nigdy w kodzie. Utrzymuj pole opisu skupione na projekcie, a nie na uczniu, a system pozostaje zgodny z RODO już z założenia.