Collegare ad un unico Arduino Nano tutti gli attuatori e i sensori e scrivere il relativo codice in C++ per misurare pressione e temperatura, scrivere dati su scheda SD, inviare i dati a terra via onde radio, ricevere il segnale GPS, abilitare i servomotori che controllino i timoni in modo automatico.
Si tratta quindi di svolgere prima un lungo lavoro di programmazione e successivamente di miniaturizzare tutto per farlo stare all'interno della lattina con saldature a stagno su basette millefori.
Inoltre bisogna testare la trasmissione e ricezione per grandi distanze (oltre 1000 m).
Elettronica di bordo
Arduino Nano
LoRa per trasmissione onde radio
Modulo scrittura su SD
Modulo GPS
Sensore pressione e temperatura
Servomotore per pilotaggio
Batteria 9V
Elettronica stazione di ricezione
2 Arduino Uno
2 LoRa per ricezione onde radio con 1 antenna Yagi
2 Laptop
Ripasso concetti base Arduino. Sensore BME 280 per la pressione... non funziona!
Attenzione: servono 3V... forse lo abbiamo già bruciato. Buon inizio!
Per fortuna quello dell'anno scorso funziona ancora!
abbiamo provato a programmare un sensore di temperatura per prendere confidenza, che però non verrà utilizzato...
colleghiamo il sensore all'arduino
dati di temperatura dell'aula
Due ore e mezza di lavoro concentrate solo sulle prove di configurazione di LoRa: anche se sono risultate vane, abbiamo preso confidenza con il programma
Prime esperienze di saldatura, scrittura dei dati di temperatura e pressione su scheda SD, prima prova con il GPS (anche questo già bruciato).
Pinout migliorato, nuove prove più efficienti per LoRa, unione dei codici e dei circuiti di BME, scheda SD e servomotore (sketch funzionante) e hardware su Arduino Nano ancora da provare; iniziati il modello FreeCAD della lattina e il rapporto tecnico.
Problemi con il GPS; funzionamento dello sketch su Arduino Nano, prove per la raccolta ciclica di dati; primo successo nella trasmissione con LoRa!
LoRa finalmente funziona con una configurazione definitiva! Riusciamo a trasmettere da Nano a Uno con il sistema della struct: i dati della temperatura arrivano ma con diversi disturbi ed errori. Anche il GPS dà i primi segnali positivi, in quanto ha rilevato data e ora esatte. Stilata una versione aggiornata del rapporto tecnico.
Ottimizzazione del codice C++ e nuova alimentazione a 9V.
Grande successo nella trasmissione dei dati GPS: dopo numerosi cambiamenti al codice e interferenze tra i baud rate, finalmente i due moduli LoRa possono comunicarsi tutti i dati di temperatura, posizione, ecc. (in foto il monitor del computer ricevente).
Tutti i componenti uniti nel circuito di Arduino Nano.
Sviluppato il codice per la missione secondaria: valutando la distanza dalla base e l'angolo del motore, l'Arduino fa muovere quest'ultimo per ruotare l'alettone.
Salvo ulteriori problemi o necessità, il codice di Arduino può considerarsi generalmente completo. Prossimamente saranno effettuate prove con l'hardware saldato!
Missione primaria dopo le saldature... FUNZIONA! LoRa trasmette dati di pressione e temperatura e scrive tutto su scheda SD.
Riusciamo anche ad aggiungere il servomotore che scopriamo dare altri misteriosi problemi... va in conflitto con SoftwareSerial! Allora abbiamo dovuto cambiare il nostro codice della missione secondaria: non usiamo più la libreria Servo.h, ma controlliamo semplicemente la tensione del pin per un intervallo di tempo variabile. Il timone si muove, ora dobbiamo collegarlo al GPS per completare la missione!
Misura di pressione, temperatura e altitudine.
Trasmissione e ricezione a 433 MHz a lunga distanza.
Memoria di riserva per i dati rilevati dal sensore, qualora non venissero ricevuti dall'antenna di terra.
Rilevazione di posizione necessaria al ritrovamento e alla missione secondaria; riferimenti di latitudine, longitudine, altitudine, data, ora e indicazioni tecniche (ad esempio numero di satelliti agganciati).
Strumento fondamentale per muovere l'alettone, che dovrà orientare il CanSat nella sua discesa.
Esploriamo il mondo delle classi!
In particolare, vediamo che la classe TinyGPSPlus ha due interessanti metodi:
TinyGPSPlus::cardinal(direction);
TinyGPSPlus::distanceBetween( gps.location.lat(), gps.location.lng(),LAT,LON);
che useremo per il sistema di pilotaggio automatico!