init
This commit is contained in:
@@ -1,3 +1,138 @@
|
||||
# cnc_draw_machine
|
||||
# CNC Drawing Machine Firmware
|
||||
|
||||
Maszyna do rysowania CNC
|
||||
Projekt jest maszyną CNC do rysowania z dwoma silnikami NEMA17 sterowanymi przez DRV8825 na płytce CNC shield, ESP32 WROOM, serwomechanizm do pisaka, wyświetlacz LCD I2C 2x16, karta SD, 3 przyciski (Up/Down/OK). Celem jest kompletny firmware: przeglądanie plików GCode na karcie SD, drukowanie z podglądem postępu, regulacja prędkości podczas druku, tryb komend przez UART.
|
||||
|
||||
# Działanie
|
||||
|
||||
* Start normalny: lista plików .gcode/.nc z karty SD, Up/Down przewija, OK rozpoczyna druk
|
||||
* Podczas druku: Up/Down zmienia prędkość (0.5x–2.0x), OK → dialog przerwania
|
||||
* Boot z wciśniętym OK (2s): tryb UART — wysyłaj GCode przez monitor (G1 X50 Y30 F1000, G28, M3/M5)
|
||||
|
||||
# Elementy
|
||||
|
||||
* Moduł deweloperski ESP32
|
||||
* Dwa silniki krokowyme NEMA17
|
||||
* Sterownik A4988 DRV8825,
|
||||
* Sterownik silnika krokowego DRV8825
|
||||
* Serwo do opuszczania pisaka.
|
||||
* Moduł karty SD
|
||||
* LCD I2C 2x16
|
||||
* 3x przycisk Up/Down/OK
|
||||
|
||||
## include/config.h parametry dostosowalne przez użytkownika
|
||||
|
||||
* WORKSPACE_WIDTH_MM, WORKSPACE_HEIGHT_MM — pole robocze
|
||||
* STEPS_PER_MM_X, STEPS_PER_MM_Y — zależne od mikrostepowania DRV8825
|
||||
* SPEED_DEFAULT_MM_S, SPEED_MIN_MM_S, SPEED_MAX_MM_S — prędkości
|
||||
* SPEED_MULT_MIN/MAX/STEP — zakres regulatora prędkości (0.5x–2.0x)
|
||||
* ACCEL_MM_S2 — przyspieszenie AccelStepper
|
||||
* SERVO_ANGLE_UP, SERVO_ANGLE_DOWN — kąty pisaka (nacisk)
|
||||
* SERVO_SETTLE_MS — czas oczekiwania po ruchu serwa
|
||||
|
||||
### Wszystkie numery pinów GPIO
|
||||
|
||||
* LCD_I2C_ADDR, LCD_COLS, LCD_ROWS
|
||||
* SD_MAX_FILES, FILENAME_MAX_LEN
|
||||
* DISPLAY_UPDATE_MS, BUTTON_DEBOUNCE_MS, BOOT_HOLD_MS
|
||||
* Enum AppState i struct GCodeLine, PrintStatus
|
||||
|
||||
### Przypisanie pinów (domyślne, zmieniane w config.h)
|
||||
|
||||
Sygnał GPIO
|
||||
|
||||
* X STEP 26
|
||||
* X DIR 27
|
||||
* Y STEP 14
|
||||
* Y DIR 12
|
||||
* STEPPER ENABLE 13
|
||||
* SERVO 25
|
||||
* SD CS 5
|
||||
* LCD SDA 21
|
||||
* LCD SCL 22
|
||||
* BTN UP 32
|
||||
* BTN DOWN 33
|
||||
* BTN OK 4
|
||||
|
||||
Uwaga: GPIO12 to strapping pin — DRV8825 DIR ma wysoką impedancję przy braku sygnału, więc nie powinien przeciągać pinu podczas bootu. Jeśli problemy — zmienić na inny pin.
|
||||
|
||||
## Do skonfigurowania przed użyciem w config.h:
|
||||
|
||||
* STEPS_PER_MM_X/Y — zależy od mikrostepowania DRV8825 (jumperów na shield)
|
||||
* SERVO_ANGLE_DOWN — kąt nacisku pisaka (kalibracja mechaniczna)
|
||||
* PIN_* — jeśli CNC shield używa innych pinów niż domyślne
|
||||
* LCD_I2C_ADDR — sprawdzić 0x27 lub 0x3F (zależy od modułu LCD)
|
||||
|
||||
|
||||
|
||||
|
||||
include/config.h
|
||||
|
||||
PIN_LIMIT_X = 34, PIN_LIMIT_Y = 35 (GPIO input-only, idealne dla krańcówek)
|
||||
HOMING_DIR_X = -1, HOMING_DIR_Y = -1 — silniki jadą w kierunku ujemnym do lewego górnego rogu
|
||||
HOMING_SPEED_MM_S = 20, HOMING_BACKOFF_MM = 2 — cofnięcie po wyzwoleniu
|
||||
Pole robocze: 297 × 210 mm (A4 poziomo)
|
||||
|
||||
|
||||
otowe. Podsumowanie geometrii w kodzie:
|
||||
|
||||
|
||||
Fizyczna maszyna Pole robocze (GCode)
|
||||
───────────────── ───────────────────────────────
|
||||
Prawy górny (HOME) ────→ (0,0) = lewy górny = START
|
||||
Lewy górny ────→ (297, 0) = prawy górny
|
||||
Prawy dolny ────→ (0, 210) = lewy dolny
|
||||
Lewy dolny ────→ (297, 210) = prawy dolny = koniec
|
||||
Sekwencja homingu: silniki jadą w kierunku HOMING_DIR = +1 (dodatni krok AccelSteppera) → po wyzwoleniu obu krańcówek = pozycja (0,0) → maszyna gotowa do drukowania od lewego górnego rogu.
|
||||
|
||||
Jeśli przy homingu silnik jedzie w złą stronę (od krańcówki zamiast do niej): zmień HOMING_DIR_X lub HOMING_DIR_Y na -1 w include/config.h.
|
||||
|
||||
Kompilacja OK. Co zostało dodane:
|
||||
|
||||
Nowy stan AppState::ERROR — wyświetla błąd na LCD, OK wraca do listy plików.
|
||||
|
||||
Wykrywane błędy:
|
||||
|
||||
Sytuacja Komunikat
|
||||
Nie można otworzyć pliku Blad odczytu SD / Nie otwarto pliku
|
||||
Plik istnieje ale jest pusty Blad pliku / Plik jest pusty
|
||||
Karta SD odłączona w trakcie druku Blad karty SD / Utracono plik
|
||||
Współrzędne GCode poza polem roboczym Blad GCode / Poza polem rob.
|
||||
Zachowanie: po każdym błędzie silniki są zatrzymywane i pisak unoszony (abortPrint()), a wciśnięcie OK przywraca listę plików (z ponownym odczytem z karty SD, gdyby karta była wymieniona).
|
||||
|
||||
|
||||
ESP32 ma wbudowane WiFi — dodajemy asynchroniczny serwer HTTP, który serwuje stronę WWW do zarządzania maszyną bez fizycznego dostępu: upload plików .gcode, przeglądanie listy, start/stop druku, podgląd postępu. Eliminuje konieczność wyjmowania karty SD.
|
||||
|
||||
Najważniejszy wybór: ESPAsyncWebServer (nie wbudowany WebServer.h), bo callbacks HTTP działają w osobnym tasku FreeRTOS (Core 0), dzięki czemu motion_run() w loop() nie jest nigdy blokowany przez request HTTP ani upload.
|
||||
|
||||
Co zostało zaimplementowane
|
||||
Serwer HTTP na porcie 80 (ESPAsyncWebServer — nie blokuje loop() ani silników):
|
||||
|
||||
URL Metoda Funkcja
|
||||
/ GET Strona WWW (PROGMEM)
|
||||
/api/status GET JSON: stan, plik, postęp, prędkość
|
||||
/api/files GET JSON: lista plików .gcode z SD
|
||||
/api/print POST Start druku — file=nazwa.gcode
|
||||
/api/stop POST Zatrzymanie druku
|
||||
/api/upload POST Upload pliku .gcode na kartę SD
|
||||
Strona WWW (działa z telefonu/laptopa, offline, bez CDN):
|
||||
|
||||
Status druku z paskiem postępu, aktualną prędkością
|
||||
Lista plików z przyciskami "Drukuj"
|
||||
Upload z paskiem postępu
|
||||
Przycisk "Zatrzymaj druk"
|
||||
Polling co 1 sekundę
|
||||
Sekwencja startu:
|
||||
|
||||
Próba połączenia z WIFI_SSID (10s timeout)
|
||||
Sukces → LCD "WiFi STA: 192.168.x.x"
|
||||
Brak sieci → fallback AP mode → LCD "WiFi AP: 192.168.4.1"
|
||||
Konfiguracja — zmień w include/config.h:
|
||||
|
||||
|
||||
#define WIFI_SSID "NazwaSieci"
|
||||
#define WIFI_PASSWORD "Haslo"
|
||||
|
||||
|
||||
1. [Moduł sterownika silników](docs/MotoExpander.md)
|
||||
|
||||
[Wersje systemu, poprawki, etc.](docs/versions.md)
|
||||
Reference in New Issue
Block a user