Inhoudsopgave:

Smart Buoy [GPS, radio (NRF24) en een SD-kaartmodule] - Ajarnpa
Smart Buoy [GPS, radio (NRF24) en een SD-kaartmodule] - Ajarnpa

Video: Smart Buoy [GPS, radio (NRF24) en een SD-kaartmodule] - Ajarnpa

Video: Smart Buoy [GPS, radio (NRF24) en een SD-kaartmodule] - Ajarnpa
Video: Smart Buoy Final Project 2024, November
Anonim
Image
Image

Deze Smart Buoy-serie brengt onze (ambitieuze) poging in kaart om een wetenschappelijke boei te bouwen die zinvolle metingen over de zee kan doen met behulp van kant-en-klare producten. Dit is tutorial twee van vier - zorg ervoor dat je up-to-date bent, en als je een snelle introductie van het project nodig hebt, bekijk dan onze samenvatting.

Deel 1: Golf- en temperatuurmetingen doen

In deze zelfstudie laten we u zien hoe u GPS-gegevens kunt krijgen, deze op een SD-kaart kunt opslaan en deze met behulp van radio ergens naartoe kunt sturen.

We deden dit zodat we de locatie van onze zeeboei konden volgen. De radio betekent dat we het op afstand kunnen bekijken en de SD-kaart betekent dat als er iets kapot gaat en het gaat ronddwalen, we de gegevens kunnen downloaden die het heeft verzameld tijdens zijn ongeplande excursie - als we het ooit kunnen terugvinden!

Benodigdheden

GPS-module - Amazon

SD-kaartmodule - Amazon

SD-kaart - Amazon

2 X Radiomodules (NRF24L01+) - Amazon

2 X Arduino - Amazon

Stap 1: GPS-gegevens ophalen

GPS-gegevens verzenden via radio
GPS-gegevens verzenden via radio

De slimme boei doet sensormetingen terwijl hij in zee ligt, inclusief GPS-locatie en datumtijd. Bekijk het schema dat laat zien hoe we het circuit hebben opgezet. De GPS-module communiceert via een seriële verbinding, dus we gebruiken de seriële bibliotheek van de Arduino-software en de kleine GPS-bibliotheek om ermee te communiceren. Deze bibliotheken maken alles supereenvoudig. Laten we je door de code leiden…

#erbij betrekken

#include // Het TinyGPS++ object TinyGPSPlus gps; // De seriële verbinding met het GPS-apparaat SoftwareSerial ss (4, 3); struct dataStruct{ dubbele breedtegraad; dubbele lengtegraad; ongetekende lange datum; niet-ondertekende lange tijd; }gps-gegevens; void setup(){ Serial.begin(115200); ss.begin(9600); } void loop(){ while (ss.available() > 0){ if (gps.encode(ss.read())){ getInfo(); printResultaten(); } } } void getInfo(){ if (gps.location.isValid()){ gpsData.latitude = gps.location.lat(); gpsData.lengtegraad = gps.locatie.lng(); } else{ Serial.println("Ongeldige locatie"); } if (gps.date.isValid()){ gpsData.date = gps.date.value(); } else{ Serial.println("Ongeldige datum"); } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } else{ Serial.println("Ongeldige tijd"); } } void printResults(){ Serial.print("Locatie: "); Serial.print(gpsData.latitude, 6); Serieel.print(", "); Serial.print(gpsData.longitude, 6); Serial.print(" Datum: "); Serial.print(gpsData.date); Serial.print(" Tijd: "); Serial.print(gpsData.time); Serieel.println(); }

(Bekijk de video voor deze code op

Stap 2: GPS-gegevens verzenden via radio

GPS-gegevens verzenden via radio
GPS-gegevens verzenden via radio

Stel dat de boei in zee ligt om metingen te verrichten, maar we willen de gegevens zien zonder natte voeten te krijgen of de boei aan land te brengen. Om de metingen op afstand te krijgen, gebruiken we een radiomodule die aan beide zijden van de communicatie is aangesloten op een Arduino. In de toekomst zullen we de Arduino aan de ontvangerzijde vervangen door een Raspberry Pi. De radio werkt op dezelfde manier met beide interfaces, dus het verwisselen ervan is vrij eenvoudig.

De radiomodule communiceert via SPI, wat wat meer verbindingen vereist dan I2C, maar toch heel gemakkelijk te gebruiken is vanwege de NRF24-bibliotheek. Met behulp van de GPS-module voor de sensormetingen verzenden we de gegevens van de ene Arduino naar de andere. We gaan de GPS- en radiomodule aansluiten op de Arduino en aan de andere kant een Arduino met de radiomodule - bekijk het schema.

Zender

#erbij betrekken

#include #include #include #include TinyGPSPlus gps; SoftwareSeriële ss(4, 3); RF24-radio (8, 7); // CE, CSN struct dataStruct dubbele breedtegraad; dubbele lengtegraad; ongetekende lange datum; niet-ondertekende lange tijd; }gps-gegevens; void setup() { Serial.begin(115200); ss.begin(9600); Serial.println ("Radio instellen"); // Setup zender radio 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("Begint met verzenden"); } 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.locatie.lat(); } else{ gpsData.lengtegraad = 0.0; gpsData.latitude = 0.0; } if (gps.date.isValid()){ gpsData.date = gps.date.value(); } anders{ gpsData.datum = 0; } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } else{ gpsData.time = 0; } }

ONTVANGER

#erbij betrekken

#include #include RF24-radio (8, 7); // CE, CSN struct dataStruct dubbele breedtegraad; dubbele lengtegraad; ongetekende lange datum; niet-ondertekende lange tijd; }gps-gegevens; void setup() { Serial.begin(115200); // Setup ontvanger 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("Locatie: "); Serial.print(gpsData.latitude, 6); Serieel.print(", "); Serial.print(gpsData.longitude, 6); Serial.print(" Datum: "); Serial.print(gpsData.date); Serial.print(" Tijd: "); Serial.print(gpsData.time); Serieel.println();} }

(Bekijk de video voor deze code op

Stap 3: Gegevens opslaan met een SD-kaartmodule

Gegevens opslaan met een SD-kaartmodule
Gegevens opslaan met een SD-kaartmodule

De radiomodule is redelijk betrouwbaar, maar soms heb je een noodplan nodig voor het geval er een stroomstoring is aan de ontvangerzijde of als de radio buiten bereik raakt. Ons noodplan is een SD-kaartmodule waarmee we de gegevens die we verzamelen kunnen opslaan. De hoeveelheid gegevens die wordt verzameld, is niet zo groot, dus zelfs een kleine SD-kaart kan gemakkelijk een dag aan gegevens opslaan.

#erbij betrekken

#include #include #include TinyGPSPlus gps; SoftwareSeriële ss(4, 3); struct dataStruct{ dubbele breedtegraad; dubbele lengtegraad; ongetekende lange datum; niet-ondertekende lange tijd; }gps-gegevens; void setup() { Serial.begin(115200); ss.begin(9600); if (!SD.begin(5)) { Serial.println("Kaart mislukt, of niet aanwezig"); opbrengst; } Serial.println("kaart geïnitialiseerd."); Bestand dataFile = SD.open("gps_data.csv", FILE_WRITE); if (dataFile) { dataFile.println ("Breedtegraad, Lengtegraad, Datum, Tijd"); dataFile.close(); } else{ Serial.println("nee kan het bestand niet openen"); } } void loop() { while (ss.available() > 0){ if (gps.encode(ss.read())){ getInfo(); printResultaten(); saveInfo(); } } } void getInfo(){ if (gps.location.isValid()){ gpsData.latitude = gps.location.lat(); gpsData.lengtegraad = gps.locatie.lng(); } else{ Serial.println("Ongeldige locatie"); } if (gps.date.isValid()){ gpsData.date = gps.date.value(); } else{ Serial.println("Ongeldige datum"); } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } else{ Serial.println("Ongeldige tijd"); } } void printResults(){ Serial.print("Locatie: "); Serial.print(gpsData.latitude, 6); Serieel.print(", "); Serial.print(gpsData.longitude, 6); Serial.print(" Datum: "); Serial.print(gpsData.date); Serial.print(" Tijd: "); Serial.print(gpsData.time); Serieel.println(); } void saveInfo(){ Bestand dataFile = SD.open("gps_data.csv", FILE_WRITE); if (dataFile) { dataFile.print(gpsData.latitude); dataFile.print(", "); dataFile.print(gpsData.lengtegraad); dataFile.print(", "); dataFile.print(gpsData.date); dataFile.print(", "); dataFile.println(gpsData.time); dataFile.close(); } else{ Serial.println("nee geen gegevensbestand"); } }

(We bespreken deze code in de video

Stap 4: GPS-gegevens verzenden en opslaan

GPS-gegevens verzenden en opslaan
GPS-gegevens verzenden en opslaan
GPS-gegevens verzenden en opslaan
GPS-gegevens verzenden en opslaan

Stap 5: Bedankt

Bedankt!
Bedankt!

Schrijf je in op onze mailinglijst!

Deel 1: Golf- en temperatuurmeting maken

Deel 2: GPS NRF24-radio en SD-kaart

Deel 3: Stroom naar de boei plannen

Deel 4: De boei inzetten

Aanbevolen: