Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Hent GPS -data
- Trin 2: Afsendelse af GPS -data via radio
- Trin 3: Lagring af data ved hjælp af et SD -kortmodul
- Trin 4: Afsendelse og lagring af GPS -data
- Trin 5: Tak
Video: Smart bøje [GPS, radio (NRF24) og et SD -kortmodul]: 5 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:25
Denne Smart Buoy-serie viser vores (ambitiøse) forsøg på at bygge en videnskabelig bøje, der kan foretage meningsfulde målinger af havet ved hjælp af produkter på hylden. Dette er vejledning to af fire - sørg for at være opdateret, og hvis du har brug for en hurtig introduktion til projektet, kan du se vores resumé.
Del 1: Udførelse af bølge- og temperaturmålinger
I denne vejledning viser vi dig, hvordan du får GPS -data, gemmer dem på et SD -kort og sender dem et sted ved hjælp af radio.
Vi gjorde dette, så vi kunne holde styr på placeringen af vores havbøje. Radioen betyder, at vi kan se det eksternt, og SD -kortet betyder, at når noget går i stykker, og det går en vandring, kan vi downloade de data, det indsamlede under sin uplanlagte udflugt - hvis vi nogensinde er i stand til at hente det!
Forbrugsvarer
GPS -modul - Amazon
SD -kortmodul - Amazon
SD -kort - Amazon
2 X radiomoduler (NRF24L01+) - Amazon
2 X Arduino - Amazon
Trin 1: Hent GPS -data
Den smarte bøje foretager sensormålinger, når den sidder i havet, herunder GPS -placering og datotid. Tag et kig på skematikken, der viser, hvordan vi opretter kredsløbet. GPS -modulet kommunikerer via seriel forbindelse, så vi bruger Arduino -softwarens serielle bibliotek samt det lille GPS -bibliotek til at kommunikere med det. Disse biblioteker gør alting superenkelt. Lad os tage dig igennem koden …
#omfatte
#include // TinyGPS ++ - objektet TinyGPSPlus gps; // Den serielle forbindelse til GPS -enheden SoftwareSerial ss (4, 3); struct dataStruct {dobbelt breddegrad; dobbelt længdegrad; usigneret lang dato; usigneret lang tid; } gpsData; ugyldig opsætning () {Serial.begin (115200); ss.begyndt (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 ("Ugyldig placering"); } hvis (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Ugyldig dato"); } hvis (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Ugyldig tid"); }} void printResults () {Serial.print ("Location:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Dato:"); Serial.print (gpsData.date); Serial.print ("Tid:"); Serial.print (gpsData.time); Serial.println (); }
(Tjek videoen til denne kode på
Trin 2: Afsendelse af GPS -data via radio
Antag, at bøje er i havet og tager målinger, men vi vil se dataene uden at blive fugtige i fødderne eller bringe bøje i land. For at få målingerne eksternt bruger vi et radiomodul forbundet til en Arduino på begge sider af kommunikationen. Fremover vil vi udskifte modtager-siden Arduino med en hindbær pi. Radioen fungerer på samme måde med begge disse grænseflader, så det er ret ligetil at bytte dem.
Radiomodulet kommunikerer ved hjælp af SPI, som kræver et par flere forbindelser end I2C, men stadig er virkelig let at bruge på grund af NRF24 -biblioteket. Ved hjælp af GPS -modulet til sensormålingerne overfører vi dets data fra den ene Arduino til den anden. Vi skal forbinde GPS- og radiomodulet til Arduino og på den anden side en Arduino med radiomodulet - se på skematikken.
Senderen
#omfatte
#include #include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); RF24 radio (8, 7); // CE, CSN struct dataStruct {dobbelt breddegrad; dobbelt længdegrad; usigneret lang dato; usigneret lang tid; } gpsData; ugyldig opsætning () {Serial.begin (115200); ss.begyndt (9600); Serial.println ("Opsætning af radio"); // Opsætning af senderradioradio.begin (); radio.openWritingPipe (0xF0F0F0F0E1LL); radio.setChannel (0x76); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.stopListening (); radio.enableDynamicPayloads (); radio.powerUp (); Serial.println ("begynder at sende"); } 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 (); } ellers {gpsData.longitude = 0,0; gpsData.latitude = 0,0; } hvis (gps.date.isValid ()) {gpsData.date = gps.date.value (); } ellers {gpsData.date = 0; } hvis (gps.time.isValid ()) {gpsData.time = gps.time.value (); } ellers {gpsData.time = 0; }}
MODTAGER
#omfatte
#include #include RF24 radio (8, 7); // CE, CSN struct dataStruct {dobbelt breddegrad; dobbelt længdegrad; usigneret lang dato; usigneret lang tid; } gpsData; ugyldig opsætning () {Serial.begin (115200); // Opsætning af modtager radioradio.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 ("Location:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Dato:"); Serial.print (gpsData.date); Serial.print ("Tid:"); Serial.print (gpsData.time); Serial.println ();}}
(Tjek videoen til denne kode på
Trin 3: Lagring af data ved hjælp af et SD -kortmodul
Radiomodulet er ganske pålideligt, men nogle gange har du brug for en beredskabsplan, hvis der er et strømafbrydelse på modtagersiden, eller hvis radioen bevæger sig uden for rækkevidde. Vores beredskabsplan er et SD -kortmodul, som giver os mulighed for at gemme de data, vi indsamler. Mængden af data, der indsamles, er ikke så stor, så selv et lille SD -kort vil let kunne gemme en dags værdi af data.
#omfatte
#include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); struct dataStruct {dobbelt breddegrad; dobbelt længdegrad; usigneret lang dato; usigneret lang tid; } gpsData; ugyldig opsætning () {Serial.begin (115200); ss.begyndt (9600); hvis (! SD.begin (5)) {Serial.println ("Kort mislykkedes eller ikke til stede"); Vend tilbage; } Serial.println ("kort initialiseret."); Fil dataFile = SD.open ("gps_data.csv", FILE_WRITE); hvis (dataFile) {dataFile.println ("Latitude, Longitude, Date, Time"); dataFile.close (); } else {Serial.println ("nej, filen kan ikke åbnes"); }} 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 ("Ugyldig placering"); } hvis (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Ugyldig dato"); } hvis (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Ugyldig tid"); }} void printResults () {Serial.print ("Location:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Dato:"); Serial.print (gpsData.date); Serial.print ("Tid:"); Serial.print (gpsData.time); Serial.println (); } void saveInfo () {File dataFile = SD.open ("gps_data.csv", FILE_WRITE); hvis (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 ("nej ingen datafil"); }}
(Vi taler igennem denne kode i videoen
Trin 4: Afsendelse og lagring af GPS -data
Trin 5: Tak
Tilmeld dig vores mailingliste!
Del 1: Måling af bølge og temperatur
Del 2: GPS NRF24 Radio og SD -kort
Del 3: Planlægning af magt til bøje
Del 4: Implementering af bøje
Anbefalede:
Engelsk publys ved at bøje fiberoptik, tændt med en LED: 4 trin
Engelsk publys ved at bøje fiberoptik, tændt med en LED: Så lad os sige, at du vil få en fiber til at passe til husets form for at sætte julelys på den. Eller måske vil du komme op af en ydervæg og have en retvinklet bøjning til fiberen. Nå kan du gøre dette meget let
Smart bøje [Oversigt]: 8 trin (med billeder)
Smart bøje [Resumé]: Vi elsker alle havet. Som kollektiv strømmer vi til det for at holde ferie, for at nyde vandsport eller for at leve af vores levebrød. Men kysten er et dynamisk område på bølgernes nåde. Stigende havniveau nipper på strande og kraftfulde ekstreme begivenheder som hurri
Smart vækkeur: et smart vækkeur lavet med hindbær Pi: 10 trin (med billeder)
Smart vækkeur: et smart vækkeur lavet med Raspberry Pi: Har du nogensinde ønsket et smart ur? I så fald er dette løsningen for dig! Jeg lavede Smart Alarm Clock, dette er et ur, hvor du kan ændre alarmtiden i henhold til webstedet. Når alarmen går, kommer der en lyd (summer) og 2 lyser
NRF24 tovejsradio til telemetri: 9 trin (med billeder)
NRF24 To-vejs radio til telemetri: Hej fyre, jeg hedder Pedro Castelani, og jeg bringer jer min første instruerbare: at bygge en tovejsradio med arduino til, ja, uanset hvad I har brug for den til. I dette projekt vil vi lave to separate kredsløb, der vil fungere som både modtager og transmitter
Enkle måder at kredsløb bøje et legetøj: 7 trin (med billeder)
Enkle måder at kredsløb Bøj et legetøj: Jeg vil vise nogle af de ændringer, du kan gøre på ethvert legetøj for at vende det fra det, der simpelthen kan være en irritation, til et værktøj til glitchy, støjende awesomeness. Teknikkerne her er ret lette-selvom du ikke har meget erfaring med elektronik