Sommario:

Smart Buoy [GPS, radio (NRF24) e un modulo scheda SD]: 5 passaggi (con immagini)
Smart Buoy [GPS, radio (NRF24) e un modulo scheda SD]: 5 passaggi (con immagini)

Video: Smart Buoy [GPS, radio (NRF24) e un modulo scheda SD]: 5 passaggi (con immagini)

Video: Smart Buoy [GPS, radio (NRF24) e un modulo scheda SD]: 5 passaggi (con immagini)
Video: Ep 65: Internet of Underwater Things 2024, Dicembre
Anonim
Image
Image

Questa serie Smart Buoy rappresenta il nostro (ambizioso) tentativo di costruire una boa scientifica in grado di effettuare misurazioni significative sul mare utilizzando prodotti standard. Questo è un tutorial due su quattro: assicurati di essere aggiornato e, se hai bisogno di una rapida introduzione al progetto, dai un'occhiata al nostro riepilogo.

Parte 1: Effettuare misurazioni di onde e temperature

In questo tutorial, ti mostriamo come ottenere i dati GPS, memorizzarli su una scheda SD e inviarli da qualche parte tramite la radio.

Lo abbiamo fatto in modo da poter tenere traccia della posizione della nostra boa marittima. La radio significa che possiamo guardarlo da remoto e la scheda SD significa che se qualcosa si rompe e va a fare un giro, possiamo scaricare i dati raccolti durante la sua escursione non pianificata - se mai riusciamo a recuperarli!

Forniture

Modulo GPS - Amazon

Modulo scheda SD - Amazon

Scheda SD - Amazon

2 X moduli radio (NRF24L01+) - Amazon

2 x Arduino - Amazon

Passaggio 1: ottenere dati GPS

Invio di dati GPS tramite radio
Invio di dati GPS tramite radio

La boa intelligente effettua misurazioni del sensore mentre si trova in mare, inclusa la posizione GPS e la data e l'ora. Dai un'occhiata allo schema che mostra come abbiamo impostato il circuito. Il modulo GPS comunica tramite connessione seriale, quindi stiamo utilizzando la libreria seriale del software Arduino e la piccola libreria GPS per comunicare con esso. Queste librerie rendono tutto super semplice. Ti spieghiamo il codice…

#includere

#include // L'oggetto TinyGPS++ TinyGPSPlus gps; // La connessione seriale al dispositivo GPS SoftwareSerial ss(4, 3); struct dataStruct{ doppia latitudine; doppia longitudine; data lunga non firmata; lungo tempo non firmato; }gpsData; void setup(){ Serial.begin(115200); ss.begin(9600); } void loop(){ while (ss.available() > 0){ if (gps.encode(ss.read())){ getInfo(); printResults(); } } } void getInfo(){ if (gps.location.isValid()){ gpsData.latitude = gps.location.lat(); gpsData.longitude = gps.location.lng(); } else{ Serial.println("Posizione non valida"); } if (gps.date.isValid()){ gpsData.date = gps.date.value(); } else{ Serial.println("Data non valida"); } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } else{ Serial.println("Ora non valida"); } } void printResults(){ Serial.print("Posizione: "); Serial.print(gpsData.latitude, 6); Serial.print(", "); Serial.print(gpsData.longitude, 6); Serial.print(" Data: "); Serial.print(gpsData.date); Serial.print(" Ora: "); Serial.print(gpsData.time); Serial.println(); }

(Guarda il video per questo codice su

Passaggio 2: invio di dati GPS tramite radio

Invio di dati GPS tramite radio
Invio di dati GPS tramite radio

Supponiamo che la boa sia in mare a prendere le misure, ma vogliamo vedere i dati senza bagnarci i piedi o portare la boa a terra. Per ottenere le misurazioni da remoto, stiamo utilizzando un modulo radio collegato a un Arduino su entrambi i lati della comunicazione. In futuro, sostituiremo l'Arduino lato ricevitore con un Raspberry Pi. La radio funziona in modo simile con entrambe queste interfacce, quindi scambiarle è piuttosto semplice.

Il modulo radio comunica tramite SPI, che richiede alcune connessioni in più rispetto a I2C ma è comunque davvero facile da usare grazie alla libreria NRF24. Utilizzando il modulo GPS per le misurazioni del sensore, trasmettiamo i suoi dati da un Arduino all'altro. Collegheremo il GPS e il modulo radio ad Arduino e dall'altra parte un Arduino con il modulo radio - dai un'occhiata allo schema.

Trasmettitore

#includere

#include #include #include #include TinyGPSPlus gps; SoftwareSeriale ss(4, 3); radio RF24 (8, 7); // CE, CSN struct dataStruct{ doppia latitudine; doppia longitudine; data lunga non firmata; lungo tempo non firmato; }gpsData; void setup() { Serial.begin(115200); ss.begin(9600); Serial.println("Impostazione radio"); // Imposta radio trasmettitore radio.begin(); radio.openWritingPipe(0xF0F0F0F0E1LL); radio.setChannel(0x76); radio.setPALevel(RF24_PA_MAX); radio.setDataRate(RF24_250KBPS); radio.stopListening(); radio.enableDynamicPayloads(); radio.powerUp(); Serial.println("Inizio invio"); } void loop() { while (ss.available() > 0){ if (gps.encode(ss.read())){ getInfo(); radio.write(&gpsData, sizeof(gpsData)); } } } void getInfo(){ if (gps.location.isValid()){ gpsData.longitude = gps.location.lng(); gpsData.latitude = gps.location.lat(); } else{ gpsData.longitude = 0.0; gpsData.latitude = 0.0; } if (gps.date.isValid()){ gpsData.date = gps.date.value(); } else{ gpsData.date = 0; } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } else{ gpsData.time = 0; } }

RICEVITORE

#includere

#include #include radio RF24(8, 7); // CE, CSN struct dataStruct{ doppia latitudine; doppia longitudine; data lunga non firmata; lungo tempo non firmato; }gpsData; void setup() { Serial.begin(115200); // Imposta il ricevitore radio radio.begin(); radio.openReadingPipe(1, 0xF0F0F0F0E1LL); radio.setChannel(0x76); radio.setPALevel(RF24_PA_MAX); radio.setDataRate(RF24_250KBPS); radio.startListening(); radio.enableDynamicPayloads(); radio.powerUp(); } void loop() { if (radio.available()) { radio.read(&gpsData, sizeof(gpsData)); Serial.print("Posizione: "); Serial.print(gpsData.latitude, 6); Serial.print(", "); Serial.print(gpsData.longitude, 6); Serial.print(" Data: "); Serial.print(gpsData.date); Serial.print(" Ora: "); Serial.print(gpsData.time); Serial.println();} }

(Guarda il video per questo codice su

Passaggio 3: memorizzazione dei dati utilizzando un modulo della scheda SD

Memorizzazione dei dati utilizzando un modulo scheda SD
Memorizzazione dei dati utilizzando un modulo scheda SD

Il modulo radio è abbastanza affidabile, ma a volte è necessario un piano di emergenza nel caso in cui si verifichi un'interruzione di corrente dal lato del ricevitore o se la radio si sposta fuori portata. Il nostro piano di emergenza è un modulo della scheda SD che ci consente di archiviare i dati che raccogliamo. La quantità di dati raccolti non è così grande, quindi anche una piccola scheda SD sarà in grado di memorizzare facilmente i dati di un giorno.

#includere

#include #include #include TinyGPSPlus gps; SoftwareSeriale ss(4, 3); struct dataStruct{ doppia latitudine; doppia longitudine; data lunga non firmata; lungo tempo non firmato; }gpsData; void setup() { Serial.begin(115200); ss.begin(9600); if (!SD.begin(5)) { Serial.println("Scheda non riuscita o non presente"); Restituzione; } Serial.println("scheda inizializzata."); File dataFile = SD.open("gps_data.csv", FILE_WRITE); if (dataFile) { dataFile.println("Latitudine, Longitudine, Data, Ora"); dataFile.close(); } else{ Serial.println("nessuno non può aprire il file"); } } void loop() { while (ss.available() > 0){ if (gps.encode(ss.read())){ getInfo(); printResults(); saveInfo(); } } } void getInfo(){ if (gps.location.isValid()){ gpsData.latitude = gps.location.lat(); gpsData.longitude = gps.location.lng(); } else{ Serial.println("Posizione non valida"); } if (gps.date.isValid()){ gpsData.date = gps.date.value(); } else{ Serial.println("Data non valida"); } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } else{ Serial.println("Ora non valida"); } } void printResults(){ Serial.print("Posizione: "); Serial.print(gpsData.latitude, 6); Serial.print(", "); Serial.print(gpsData.longitude, 6); Serial.print(" Data: "); Serial.print(gpsData.date); Serial.print(" Ora: "); Serial.print(gpsData.time); Serial.println(); } void saveInfo(){ File dataFile = SD.open("gps_data.csv", FILE_WRITE); if (dataFile) { dataFile.print(gpsData.latitude); dataFile.print(", "); dataFile.print(gpsData.longitude); dataFile.print(", "); dataFile.print(gpsData.date); dataFile.print(", "); dataFile.println(gpsData.time); dataFile.close(); } else{ Serial.println("no nessun file di dati"); } }

(Parliamo di questo codice nel video

Passaggio 4: invio e memorizzazione dei dati GPS

Invio e memorizzazione dei dati GPS
Invio e memorizzazione dei dati GPS
Invio e memorizzazione dei dati GPS
Invio e memorizzazione dei dati GPS

Passaggio 5: grazie

Grazie!
Grazie!

Iscriviti alla nostra mailing list!

Parte 1: Misurazione delle onde e della temperatura

Parte 2: Radio GPS NRF24 e scheda SD

Parte 3: Programmazione dell'alimentazione alla boa

Parte 4: dispiegamento della boa

Consigliato: