Sommario:
- Forniture
- Passaggio 1: ottenere dati GPS
- Passaggio 2: invio di dati GPS tramite radio
- Passaggio 3: memorizzazione dei dati utilizzando un modulo della scheda SD
- Passaggio 4: invio e memorizzazione dei dati GPS
- Passaggio 5: grazie
Video: Smart Buoy [GPS, radio (NRF24) e un modulo scheda SD]: 5 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 09:59
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
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
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
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
Passaggio 5: 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:
Scheda di programmazione del modulo ESP-01: 12 passaggi (con immagini)
Scheda di programmazione del modulo ESP-01: ulteriori informazioni e aggiornamento del documento qui sul mio sitohttps://www.mischianti.org/2019/01/14/esp-01-modules-programming-board/ESP-01 è un modulo esp8266 a basso costo, con WIFI integrato. È stato creato come modulo WIFI Arduino, ma è più potente di un
E32-433T Esercitazione sul modulo LoRa - Scheda breakout fai-da-te per modulo E32: 6 passaggi
E32-433T Esercitazione sul modulo LoRa | Scheda breakout fai-da-te per il modulo E32: Ehi, come va, ragazzi! Akarsh qui da CETech. Questo mio progetto è più una curva di apprendimento per comprendere il funzionamento del modulo E32 LoRa di eByte, che è un modulo ricetrasmettitore da 1 watt ad alta potenza. Una volta capito il funzionamento, ho il design
Radio bidirezionale NRF24 per telemetria: 9 passaggi (con immagini)
NRF24 Radio Bidirezionale per Telemetria: Ciao ragazzi, mi chiamo Pedro Castelani e vi porto il mio primo istruttore: costruire una radio bidirezionale con arduino per, beh, qualunque cosa vi serva. In questo progetto, faremo due circuiti separati che fungeranno sia da ricevitore che da trasmettitore
Come programmare una scheda AVR utilizzando una scheda Arduino: 6 passaggi
Come programmare una scheda AVR utilizzando una scheda Arduino: hai una scheda microcontrollore AVR in giro? È complicato programmarlo? Bene, sei nel posto giusto. Qui, ti mostrerò come programmare una scheda microcontrollore Atmega8a utilizzando una scheda Arduino Uno come programmatore. Quindi senza ulteriori
Come utilizzare la scheda radio FM Si4703 con RDS - Tutorial Arduino: 5 passaggi (con immagini)
Come utilizzare la scheda radio FM Si4703 con RDS - Tutorial Arduino: questa è una scheda di valutazione per il chip sintonizzatore FM Si4703 di Silicon Laboratories. Oltre ad essere una semplice radio FM, Si4703 è anche in grado di rilevare ed elaborare informazioni sia Radio Data Service (RDS) che Radio Broadcast Data Service (RBDS)