Un firmware moderno e modulare per stampanti 3D basato su Arduino UNO, progettato con un'architettura client-server per gestire in modo efficiente la comunicazione, il movimento e il controllo della temperatura.
Questo progetto implementa un firmware completo per stampanti 3D con un'architettura divisa in due parti principali:
- Host (PC / Raspberry Pi / VPS): gestisce l'interpretazione del G-code, la pianificazione delle traiettorie e l'invio dei comandi
- Arduino UNO: esegue il firmware che controlla direttamente l'hardware della stampante 3D
L'architettura permette di spostare la complessità computazionale sull'host, lasciando ad Arduino solo l'esecuzione dei comandi ottimizzati, risultando in movimenti più fluidi e precisi rispetto ai firmware tradizionali.
📦 Host (PC / Raspberry / VPS)
│
├── 🧩 GCodeParser
│ └── Riconosce comandi G0, G1, G2, G3, Mxxx
│
├── 🌀 ArcInterpolator
│ └── G2/G3 → G1 multipli (X,Y segmentati)
│
├── 🧠 TrajectoryPlanner
│ └── Pre-calcolo velocità, accelerazioni, buffer
│
├── 📡 SerialCommandSender
│ ├── N#, Checksum, *CS, Ack/Nack
│ └── Flow control, resend, timeouts
│
└── 🗃️ CommandQueue (opzionale)
└── FIFO comandi da inviare
│
▼
═════════════════════════════════════════════
🔌 SERIAL (TTL/USB 115200 Baud)
═════════════════════════════════════════════
│
▼
📟 Arduino UNO – 3DP Firmware
│
├── 🔄 SerialCommandReceiver
│ ├── LineReader (char buffer, \n)
│ ├── Parser: N, Categoria+Codice, Parametri, *CS
│ └── Validator: checksum, duplicati, sintassi
│
├── 🎯 CommandDispatcher
│ └── Smista a:
│ ├── MotionController (M)
│ ├── TempController (T)
│ ├── FanController (F)
│ ├── SystemController (S)
│ └── EndstopController(E)
│
├── 🧾 CommandQueue (opzionale)
│ └── Buffer FIFO (4 comandi) con priorità emergenza. Il numero di comandi è configurabile.
│
├── 📊 StateMachine
│ ├── Idle / Printing / Error / Homing / Paused
│ └── Reagisce a eventi da parser o moduli
│
├── 🧯 SafetyManager
│ ├── Timeout comandi
│ ├── Temperatura fuori range
│ ├── Finecorsa attivi fuori tempo
│ └── Comando STOP immediato (!!!)
│
├── 🔌 WatchdogHandler
│ └── Reset se firmware bloccato > 2s
│
├── 🧩 MotionController
│ ├── moveTo(x,y,z,f)
│ └── usa StepperDriver, limit check
│
├── 🌡 TempController
│ ├── PID base
│ ├── HeaterDriver
│ └── ThermistorReader
│
├── 💨 FanController
│ └── PWM su pin ventole
│
├── 🧱 SystemController
│ ├── GET STATUS
│ └── M500/M501 per EEPROM config (futuro)
│
├── 📏 EndstopController
│ └── Z_Homing, probing, finecorsa XYZ
│
└── 🧱 Hardware Abstraction Layer (HAL)
├── McuHAL.hpp
├── ArduinoHAL.cpp
└── Interfaccia unificata:
digitalRead(), writePin(), delayUs(), readAnalog()
- Architettura Client-Server: Divide il carico computazionale tra host e Arduino
- Interpolazione Archi: Converte archi complessi (G2/G3) in movimenti lineari ottimizzati
- Pianificazione Traiettoria: Calcola in anticipo velocità e accelerazioni per movimenti fluidi
- Gestione della Sicurezza: Sistema di watchdog e controlli di sicurezza integrati
- Comunicazione Robusta: Protocollo seriale con checksum e ritrasmissione automatica
- Design Modulare: Componenti separati e facilmente estendibili
- Hardware Abstraction Layer: Semplifica la portabilità su altre piattaforme hardware
- Arduino UNO o compatibile
- Computer host (PC, Raspberry Pi o altro)
- Hardware stampante 3D (motori stepper, driver, endstop, etc.)
- Librerie necessarie
origin/master
-
Clona il repository:
git clone https://github.com/yourusername/3D-Printer-Firmware.git
-
Apri il file
Firmware/3DPrinterFirmware.inocon Arduino IDE -
Configura i parametri della tua stampante nel file
Configuration.h
-
Naviga nella cartella
HostSoftware:cd HostSoftware -
Installa le dipendenze:
pip install -r requirements.txt
-
Configura la porta seriale nel file
config.ini -
Esegui il software host:
python host_controller.py
origin/master
## 📚 Documentazione
La documentazione dettagliata è disponibile
nella [wiki del progetto](https://github.com/yourusername/3D-Printer-Firmware/wiki).
<<<<<<< HEAD
=======
### Librerie Richieste
- AccelStepper (per il controllo dei motori)
- PID Library (per il controllo della temperatura)
- [Altre librerie specifiche]
>>>>>>> origin/master
## 📝 Protocollo di Comunicazione
Il firmware utilizza un protocollo seriale personalizzato con le seguenti caratteristiche:
- Comunicazione a 115200 baud
- Numerazione dei comandi (N#)
- Checksum (*CS) per verificare l'integrità
- Sistema di acknowledgment (Ack/Nack)
- Ritrasmissione automatica in caso di errori
Esempio di comando:
N123 M10 X100.5 Y200.3 F3000 *35
## 🔧 Personalizzazione
Il firmware può essere facilmente personalizzato per adattarsi a diverse configurazioni hardware:
1. Modifica i file nella cartella `Configuration/` per impostare:
- Dimensioni del piano di stampa
- Tipi di motori e driver
- Configurazione degli endstop
- Parametri di temperatura
- Velocità e accelerazioni
2. Il sistema HAL (Hardware Abstraction Layer) consente di portare il firmware su diverse piattaforme Arduino o
microcontrollori compatibili.
## 🤝 Contribuire
I contributi sono benvenuti! Per contribuire:
1. Fai un fork del repository
2. Crea un branch per la tua funzionalità (`git checkout -b feature/AmazingFeature`)
3. Commit delle tue modifiche (`git commit -m 'Add some AmazingFeature'`)
4. Push al branch (`git push origin feature/AmazingFeature`)
5. Apri una Pull Request
Per favore, consulta il file [CONTRIBUTING.md](CONTRIBUTING.md) per maggiori dettagli.
## 📅 Roadmap
- [ ] Supporto per display LCD
- [ ] Controllo remoto tramite WiFi/Bluetooth
- [ ] Interfaccia web per il monitoraggio
- [ ] Supporto multi-estrusore
- [ ] Autocalibrazione del piano
## 👥 Team
- Andrea Redegalli - *Sviluppatore principale* - [GitHub](https://github.com/AEndrix03)
---
Fatto con ❤️ per la comunità della stampa 3D