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. Codice minimalista che legge l'altitudine tramite BMP085 e apre il paracadute quando il razzo inizia a scendere.
mediaAltezza - mediaPrecedente + 1 < 0 — il +1 è arbitrarioMiglioramento della precisione altimetrica con una funzione separata per il calcolo della media e pressione di riferimento ricalibrata.
compute_mean() separata e riutilizzabilealtezze[] per raccolta campionifloat internamente per evitare troncamentoPrima 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 conditionPrima 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 presenteIntroduzione 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 appendPrimo tentativo di integrare tutti i sistemi in un unico codice. Versione transitoria con componenti parzialmente commentati.
myServo.attach(8) e servopin2 = 8 sullo stesso pinPietra 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 inizializzataRiscrittura 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 debug