Inhaltsverzeichnis:

Smart Boje [GPS, Radio (NRF24) und ein SD-Kartenmodul] - Gunook
Smart Boje [GPS, Radio (NRF24) und ein SD-Kartenmodul] - Gunook

Video: Smart Boje [GPS, Radio (NRF24) und ein SD-Kartenmodul] - Gunook

Video: Smart Boje [GPS, Radio (NRF24) und ein SD-Kartenmodul] - Gunook
Video: The interior atmosphere light belt #LED 2024, Juli
Anonim
Image
Image

Diese Smart Buoy-Serie zeigt unseren (ehrgeizigen) Versuch, eine wissenschaftliche Boje zu bauen, die mit handelsüblichen Produkten aussagekräftige Messungen über das Meer vornehmen kann. Dies ist Tutorial zwei von vier – stellen Sie sicher, dass Sie auf dem neuesten Stand sind, und wenn Sie eine schnelle Einführung in das Projekt benötigen, sehen Sie sich unsere Zusammenfassung an.

Teil 1: Durchführen von Wellen- und Temperaturmessungen

In diesem Tutorial zeigen wir Ihnen, wie Sie GPS-Daten abrufen, auf einer SD-Karte speichern und per Funk irgendwohin senden.

Wir taten dies, damit wir den Standort unserer Seeboje verfolgen konnten. Das Radio bedeutet, dass wir es aus der Ferne sehen können und die SD-Karte bedeutet, dass wir, wenn etwas kaputt geht und es wandert, die Daten herunterladen können, die es während seiner ungeplanten Exkursion gesammelt hat - falls wir es jemals wiederfinden!

Lieferungen

GPS-Modul - Amazon

SD-Kartenmodul - Amazon

SD-Karte - Amazon

2 X Funkmodule (NRF24L01+) - Amazon

2 X Arduino - Amazon

Schritt 1: GPS-Daten abrufen

Senden von GPS-Daten über Funk
Senden von GPS-Daten über Funk

Die intelligente Boje führt Sensormessungen durch, während sie sich im Meer befindet, einschließlich GPS-Standort und Datumszeit. Schauen Sie sich den Schaltplan an, der zeigt, wie wir die Schaltung einrichten. Das GPS-Modul kommuniziert über eine serielle Verbindung, daher verwenden wir die serielle Bibliothek der Arduino-Software sowie die winzige GPS-Bibliothek, um damit zu kommunizieren. Diese Bibliotheken machen alles super einfach. Lassen Sie uns Sie durch den Code führen…

#enthalten

#include // Das TinyGPS++-Objekt TinyGPSPlus gps; // Die serielle Verbindung zum GPS-Gerät SoftwareSerial ss(4, 3); struct dataStruct{ doppelter Breitengrad; doppelter Längengrad; langes Datum ohne Vorzeichen; lange Zeit ohne Vorzeichen; } gpsDaten; Void setup () {Serial.begin (115200); ss.begin(9600); aufrechtzuerhalten. 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(); aufrechtzuerhalten. Sonst {Serial.println ("Ungültiger Speicherort"); aufrechtzuerhalten. Wenn (gps.date.isValid()) {gpsData.date = gps.date.value(); aufrechtzuerhalten. Sonst {Serial.println ("Ungültiges Datum"); aufrechtzuerhalten. Wenn (gps.time.isValid()) {gpsData.time = gps.time.value(); aufrechtzuerhalten. Sonst {Serial.println ("Ungültige Zeit"); }} void printResults () {Serial.print ("Ort: "); Serial.print (gpsData.latitude, 6); Serial.print (, "); Serial.print (gpsData.longitude, 6); Serial.print("Datum:"); Serial.print (gpsData.date); Serial.print ("Zeit: "); Serial.print (gpsData.time); Serial.println(); }

(Schauen Sie sich das Video zu diesem Code unter https://www.youtube.com/embed/xz1ix76U28E an)

Schritt 2: Senden von GPS-Daten über Funk

Senden von GPS-Daten über Funk
Senden von GPS-Daten über Funk

Angenommen, die Boje befindet sich auf See und nimmt Messungen vor, aber wir möchten die Daten sehen, ohne nasse Füße zu bekommen oder die Boje an Land zu bringen. Um die Messungen aus der Ferne zu erhalten, verwenden wir ein Funkmodul, das auf beiden Seiten der Kommunikation mit einem Arduino verbunden ist. Zukünftig werden wir das empfängerseitige Arduino durch ein Himbeer-Pi ersetzen. Das Radio funktioniert mit beiden Schnittstellen ähnlich, so dass der Austausch ziemlich einfach ist.

Das Funkmodul kommuniziert über SPI, was etwas mehr Verbindungen als I2C erfordert, aber dank der NRF24-Bibliothek trotzdem sehr einfach zu bedienen ist. Mit dem GPS-Modul für die Sensormessungen übertragen wir seine Daten von einem Arduino zum anderen. Wir werden das GPS- und Funkmodul mit dem Arduino verbinden und auf der anderen Seite ein Arduino mit dem Funkmodul - sehen Sie sich den Schaltplan an.

Sender

#enthalten

#include #include #include #include TinyGPSPlus gps; SoftwareSeriell ss(4, 3); RF24-Funk (8, 7); // CE, CSN struct dataStruct{ double latitude; doppelter Längengrad; langes Datum ohne Vorzeichen; lange Zeit ohne Vorzeichen; } gpsDaten; Void setup () { Serial.begin (115200); ss.begin(9600); Serial.println ("Radio einrichten"); // Senderradio einrichten 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 ("Beginnt zu senden"); aufrechtzuerhalten. Void Schleife () { 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(); aufrechtzuerhalten. Sonst { gpsData.longitude = 0,0; gpsData.latitude = 0,0; aufrechtzuerhalten. Wenn (gps.date.isValid()) {gpsData.date = gps.date.value(); aufrechtzuerhalten. Sonst { gpsData.date = 0; aufrechtzuerhalten. Wenn (gps.time.isValid()) {gpsData.time = gps.time.value(); aufrechtzuerhalten. Sonst { gpsData.time = 0; } }

EMPFÄNGER

#enthalten

#einschließen #einschließen RF24-Funk (8, 7); // CE, CSN struct dataStruct{ double latitude; doppelter Längengrad; langes Datum ohne Vorzeichen; lange Zeit ohne Vorzeichen; } gpsDaten; Void setup () { Serial.begin (115200); // Empfängerradio einrichten radio.begin (); radio.openReadingPipe(1, 0xF0F0F0F0E1LL); radio.setChannel (0x76); radio.setPALevel(RF24_PA_MAX); radio.setDataRate(RF24_250KBPS); radio.startListening(); radio.enableDynamicPayloads(); radio.powerUp(); aufrechtzuerhalten. Void Schleife () { if (radio.available ()) { radio.read (&gpsData, sizeof(gpsData)); Serial.print("Ort:"); Serial.print (gpsData.latitude, 6); Serial.print (, "); Serial.print (gpsData.longitude, 6); Serial.print("Datum:"); Serial.print (gpsData.date); Serial.print ("Zeit: "); Serial.print (gpsData.time); Serial.println();} }

(Schauen Sie sich das Video zu diesem Code unter https://www.youtube.com/embed/xz1ix76U28E an)

Schritt 3: Speichern von Daten mit einem SD-Kartenmodul

Speichern von Daten mit einem SD-Kartenmodul
Speichern von Daten mit einem SD-Kartenmodul

Das Funkmodul ist recht zuverlässig, aber manchmal braucht man einen Notfallplan für den Fall, dass auf der Empfängerseite der Strom ausfällt oder das Funkgerät außer Reichweite gerät. Unser Notfallplan ist ein SD-Kartenmodul, das es uns ermöglicht, die von uns gesammelten Daten zu speichern. Die Menge der gesammelten Daten ist nicht so groß, sodass selbst eine kleine SD-Karte problemlos die Daten eines Tages speichern kann.

#enthalten

#include #include #include TinyGPSPlus GPS; SoftwareSeriell ss(4, 3); struct dataStruct{ doppelter Breitengrad; doppelter Längengrad; langes Datum ohne Vorzeichen; lange Zeit ohne Vorzeichen; } gpsDaten; Void setup () { Serial.begin (115200); ss.begin(9600); if (! SD.begin (5)) { Serial.println ("Karte fehlgeschlagen oder nicht vorhanden"); Rückkehr; } Serial.println ("Karte initialisiert."); Datei dataFile = SD.open("gps_data.csv", FILE_WRITE); if (dataFile) { dataFile.println ("Breitengrad, Längengrad, Datum, Uhrzeit"); dataFile.close(); } Else {Serial.println ("Nein kann die Datei nicht öffnen"); aufrechtzuerhalten. aufrechtzuerhalten. printResults(); saveInfo(); } } } void getInfo () { if (gps.location.isValid ()) { gpsData.latitude = gps.location.lat (); gpsData.longitude = gps.location.lng(); aufrechtzuerhalten. Sonst {Serial.println ("Ungültiger Speicherort"); aufrechtzuerhalten. Wenn (gps.date.isValid()) {gpsData.date = gps.date.value(); aufrechtzuerhalten. Sonst {Serial.println ("Ungültiges Datum"); aufrechtzuerhalten. Wenn (gps.time.isValid()) {gpsData.time = gps.time.value(); aufrechtzuerhalten. Sonst {Serial.println ("Ungültige Zeit"); }} void printResults () {Serial.print ("Ort: "); Serial.print (gpsData.latitude, 6); Serial.print (", "); Serial.print (gpsData.longitude, 6); Serial.print("Datum:"); Serial.print (gpsData.date); Serial.print ("Zeit: "); Serial.print (gpsData.time); Serial.println(); aufrechtzuerhalten. Void saveInfo () { Datei 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(); aufrechtzuerhalten. Sonst {Serial.println ("Nein, keine Datendatei"); } }

(Wir sprechen diesen Code im Video https://www.youtube.com/embed/xz1ix76U28E durch)

Schritt 4: Senden und Speichern von GPS-Daten

Senden und Speichern von GPS-Daten
Senden und Speichern von GPS-Daten
Senden und Speichern von GPS-Daten
Senden und Speichern von GPS-Daten

Schritt 5: Danke

Vielen Dank!
Vielen Dank!

Tragen Sie sich in unsere Mailingliste ein!

Teil 1: Durchführen von Wellen- und Temperaturmessungen

Teil 2: GPS NRF24-Radio und SD-Karte

Teil 3: Energie für die Boje planen

Teil 4: Einsatz der Boje

Empfohlen: