Inhoudsopgave:
- Benodigdheden
- Stap 1: GPS-gegevens ophalen
- Stap 2: GPS-gegevens verzenden via radio
- Stap 3: Gegevens opslaan met een SD-kaartmodule
- Stap 4: GPS-gegevens verzenden en opslaan
- Stap 5: Bedankt
Video: Smart Buoy [GPS, radio (NRF24) en een SD-kaartmodule] - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
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
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
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
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
Stap 5: 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:
Een e-mailmelding ontvangen wanneer een kanaal op ThingSpeak een tijdje niet is bijgewerkt: 16 stappen
Ontvang een e-mailmelding als een kanaal op ThingSpeak een tijdje niet is bijgewerkt: Achtergrondverhaal Ik heb zes geautomatiseerde kassen verspreid over Dublin, Ierland. Door een op maat gemaakte app voor mobiele telefoons te gebruiken, kan ik op afstand de geautomatiseerde functies in elke kas volgen en ermee communiceren. Ik kan de win handmatig openen / sluiten
Automatisch een programma starten bij het aansluiten van een laptop op een dockingstation: 5 stappen
Een programma automatisch starten wanneer u een laptop op een dockingstation aansluit: deze instructie gaat over het uitvoeren van een programma of een toepassing wanneer u uw laptop op een dockingstation aansluit. In dit voorbeeld gebruik ik Lenovo T480 Windows 10
Een condensator of een inductor meten met een mp3-speler: 9 stappen
Een condensator of een inductor meten met een mp3-speler: Hier is een eenvoudige techniek die kan worden gebruikt om de capaciteit en inductantie van een condensator en inductor nauwkeurig te meten zonder dure apparatuur. De meettechniek is gebaseerd op een gebalanceerde brug en kan eenvoudig worden geconstrueerd uit onde
Een lijn toevoegen aan een Boombox met een cassettespeler: 5 stappen
Een line-in toevoegen aan een boombox met een tapespeler: ** Zoals bij alle instructables, neem je je item / gezondheid / wat dan ook in eigen handen wanneer je het probeert! Houd rekening met hoge spanningen op het hoofdvoedingsbord, de hete soldeerbout, enz. Voorzichtig en geduldig zijn, zal u succes brengen. **NS
Een Halloween Scare Machine met behulp van een PIR, een 3D-geprinte pompoen en de Troll Arduino Compatible Audio Pranker/praktische Joke Board.: 5 stappen
Een Halloween Scare Machine met behulp van een PIR, een 3D-geprinte pompoen en het Troll Arduino-compatibele audio-pranker/praktische grapbord.: Het Troll-bord gemaakt door Patrick Thomas Mitchell van EngineeringShock Electronics, en niet zo lang geleden volledig gefinancierd op Kickstarter. Ik kreeg mijn beloning een paar weken te vroeg om te helpen bij het schrijven van enkele gebruiksvoorbeelden en het bouwen van een Arduino-bibliotheek in een po