Evoluzione del progetto
Come Space AL è cambiato dal primo prototipo del 2023 a oggi: foto, video, test e miglioramenti di ogni versione, più la cronologia completa del firmware del razzo e del software di terra.
Dal primo prototipo a oggi
Dall'aprile 2023 al settembre 2024 — costruzione, test e lanci reali del razzo.
Primi scatti del razzo in costruzione e primo video di test statico.
Secondo video di sviluppo e sessione fotografica intensiva: 4 scatti di assemblaggio.




Due foto ravvicinate dei moduli e dei connettori.


Tre fotografie scattate durante una sessione di test in esterno.



Quattro scatti della fase di revisione meccanica e raffinamento del design.




Tre fotografie che documentano il completamento del firmware v1.0 e della prima PCB.



Documentazione della seconda generazione PCB KiCad.

Tre foto del prototipo nella versione più avanzata con gambe e nuova elettronica.



Firmware Arduino
Cronologia completa delle versioni del firmware — dalla v0.0 (primo altimetro) alla v1.3 (altitudine reale in telemetria). Ogni release documenta novità, bug noti e scelte architetturali.
Punto di partenza del progetto: primo altimetro, con una funzione separata per il calcolo della media e pressione di riferimento calibrata.
compute_mean() separata e riutilizzabilealtezze[] per raccolta campionifloat internamente per evitare troncamentoVersione semplificata dell'altimetro: codice minimalista che legge l'altitudine tramite BMP085 e apre il paracadute quando il razzo inizia a scendere.
mediaAltezza - mediaPrecedente + 1 < 0 — il +1 è arbitrarioIntroduzione della scheda SD per il logging dei dati di volo. Permette l'analisi post-lancio di altitudine ed eventi.
servo.txt con log continuo di altitudine e eventiO_WRITE: sovrascrive i dati esistenti senza appendPrima implementazione del sistema di stabilizzazione attiva. Abbandono temporaneo dell'altimetro per sviluppare il controllo d'assetto.
calcGyroOffsets())getAccelleration() per rilevare se il razzo è in voloif (mpu6050.getAngleX() == -1 < 0 < 1) — confronto a catena non valido in C++, sempre veroledping = 7 e servopin4 = 7 sullo stesso pinApproccio alternativo all'apertura paracadute: uso dell'interrupt hardware di caduta libera dell'MPU6050 anziché il barometro.
attachInterrupt(0, doInt, RISING))freefallDetected non protetto da race conditionPietra miliare del progetto: tutti i sistemi attivi in un unico firmware. Richiede tutte le librerie e 5 servomotori.
file.close() chiamato ad ogni ciclo — il file si chiude e non si può più scrivereSD.begin() — mai inizializzataPrima versione che unisce i due sistemi principali: stabilizzatori attivi durante il volo e apertura automatica paracadute in caduta.
paracadute per bloccare stabilizzatori durante l'apertura== -1 < 0 < 1 ancora presenteNuovo tentativo di integrare tutti i sistemi in un unico codice. Versione transitoria con componenti parzialmente commentati.
myServo.attach(8) e servopin2 = 8 sullo stesso pinRiscrittura completa dell'architettura. Abbandono delle librerie MPU per lettura I2C raw, introduzione della radio nRF24L01 per telemetria bidirezionale in tempo reale.
atan2() — preciso su tutti i quadrantiAmp)Ottimizzazione della trasmissione radio e introduzione del flag trustVector per abilitare gli stabilizzatori solo durante il volo effettivo.
SensorData per impacchettare Pitch, Roll, altitudine, paracadute, AmpRF24_250KBPS, RF24_PA_MINtrustVector: stabilizzatori attivi solo quando Amp > 10 (in volo)Fix della serializzazione della struttura dati per garantire compatibilità tra firmware Arduino e software Python di telemetria a terra.
__attribute__((packed)) sulla struct per allineamento byte garantitoint32_t (4 byte ciascuno) — struct da 20 byte esattisetup(): deve stampare esattamente 20Versione più avanzata del firmware. L'altitudine reale è finalmente integrata nel pacchetto radio. Il razzo trasmette a terra in tempo reale: pitch, roll, accelerazione, stato paracadute e quota relativa in centimetri.
setup() con verifica errorealtitudineDiRiferimento)(assoluta - riferimento) × 100data.altitudine (int32_t)ALT=XXXcm aggiunto alla riga di debugSoftware di Terra
Cronologia completa del software di terra — dalla py-v0.0 (prima dashboard con modello 3D) alla py-v1.0 (pacchetto modulare completo). Ogni release documenta novità, bug e scelte architetturali.
Aggiunto visualizzatore 3D interattivo del modello STL del razzo che ruota in tempo reale con i dati di assetto. Dati ricevuti via seriale USB.
Alt = X ; X = Y ; Y = ZCOM6 — non portabile su altri PCser creato a livello di modulo — errore immediato se COM6 non esisteScript minimalista per verificare che la radio NRF24L01 riceva correttamente i dati trasmessi dall'Arduino del razzo. Nessuna interfaccia grafica.
struct.unpack('<i', ...))while not radio.available()) — blocca il processoInterfaccia grafica completa: dashboard web Dash con grafico altitudine in tempo reale, cronometro di volo e controllo tramite pulsanti fisici GPIO su Raspberry Pi.
Abbandono di Dash a favore di un'interfaccia nativa Tkinter. Quattro grafici matplotlib separati per altitudine, X, Y, Z. Input via seriale.
Alt =, X =, Y =, Z =Ritorno alla radio con una nuova libreria (pigpio/nrf24). Interfaccia Tkinter fullscreen con grandi display numerici, affiancata da grafici Plotly aperti nel browser.
nrf24 + pigpio — libreria alternativa a pyrf24nrf.data_ready() con sleep 50 ms<ii f ? (13 byte) non compatibile con struct Arduino packed a 20 bytepigpiod avviato manualmente prima dell'esecuzioneRiscrittura completa dell'intera applicazione in un pacchetto Python strutturato. Architettura modulare con separazione netta tra UI, stato, configurazione e sorgente dati. Supporto nativo sia radio che seriale.
FlightState thread-safe con lock per cronometro e dati vololeggi_coordinate()MODALITA_INPUT: "radio" o "serial"