Obsah:
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
Táto séria Smart Buoy mapuje náš (ambiciózny) pokus o vybudovanie vedeckej bóje, ktorá dokáže pomocou zmysluplných výrobkov vykonávať zmysluplné merania o mori. Toto sú dva zo štyroch tutoriálov - uistite sa, že ste aktuálni, a ak potrebujete rýchly úvod do projektu, pozrite sa na naše zhrnutie.
Časť 1: Meranie vĺn a teploty
V tomto návode vám ukážeme, ako získať údaje GPS, uložiť ich na kartu SD a odoslať ich niekam pomocou rádia.
Urobili sme to, aby sme mohli sledovať polohu našej námornej bóje. Rádio znamená, že ho môžeme sledovať na diaľku a karta SD znamená, že keď sa niečo stane, že sa niečo pokazí a ide sa na potulky, môžeme si stiahnuť údaje, ktoré zozbieral počas neplánovanej exkurzie - ak sa nám ich niekedy podarí získať!
Zásoby
GPS modul - Amazon
Modul karty SD - Amazon
SD karta - Amazon
2 X Rádiové moduly (NRF24L01+) - Amazon
2 X Arduino - Amazon
Krok 1: Získanie údajov GPS
Inteligentná bója meria senzory, keď sedí v mori, vrátane polohy GPS a dátumu a času. Pozrite sa na schému, ktorá ukazuje, ako sme obvod nastavili. Modul GPS komunikuje prostredníctvom sériového pripojenia, takže na komunikáciu s ním používame sériovú knižnicu softvéru Arduino a malú knižnicu GPS. Tieto knižnice robia všetko super jednoduchým. Prevezmeme vás kódom …
#zahrnúť
#include // Objekt TinyGPS ++ TinyGPSPlus gps; // Sériové pripojenie k zariadeniu GPS SoftwareSerial ss (4, 3); struct dataStruct {dvojitá zemepisná šírka; dvojitá dĺžka; dlhý dátum bez znamienka; nepodpísaný dlhý čas; } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); } void loop () {while (ss.available ()> 0) {if (gps.encode (ss.read ())) {getInfo (); printVýsledky (); }}} neplatné getInfo () {if (gps.location.isValid ()) {gpsData.latitude = gps.location.lat (); gpsData.longitude = gps.location.lng (); } else {Serial.println ("Neplatné umiestnenie"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Neplatný dátum"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Neplatný čas"); }} void printResults () {Serial.print ("Location:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print („Dátum:“); Serial.print (gpsData.date); Serial.print ("Čas:"); Serial.print (gpsData.time); Serial.println (); }
(Pozrite si video s týmto kódom na
Krok 2: Odosielanie údajov GPS prostredníctvom rádia
Predpokladajme, že bója je na mori a robí merania, ale chceme vidieť údaje bez toho, aby sme si namočili nohy alebo vyniesli bóju na breh. Na diaľkové meranie používame rádiový modul pripojený k Arduinu na oboch stranách komunikácie. V budúcnosti nahradíme Arduino na strane prijímača malinovým pi. Rádio funguje podobne s oboma týmito rozhraniami, takže ich výmena je veľmi jednoduchá.
Rádiový modul komunikuje pomocou SPI, ktorý vyžaduje niekoľko ďalších pripojení ako I2C, ale napriek tomu je používanie knižnice NRF24 skutočne jednoduché. Pomocou modulu GPS na meranie senzorov prenášame jeho údaje z jedného Arduina do druhého. Pripojíme modul GPS a rádio k Arduinu a na druhej strane Arduino k modulu rádia - pozrite sa na schému.
Vysielač
#zahrnúť
#include #include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); Rádio RF24 (8, 7); // CE, CSN struct dataStruct {double latitude; dvojitá dĺžka; nepodpísaný dlhý dátum; nepodpísaný dlhý čas; } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); Serial.println ("Nastavenie rádia"); // Nastavenie vysielača rádio 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 ("Začína sa odosielanie"); } void loop () {while (ss.available ()> 0) {if (gps.encode (ss.read ())) {getInfo (); radio.write (& gpsData, sizeof (gpsData)); }}} neplatné 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; }}
PRIJÍMAČ
#zahrnúť
#include #include RF24 rádio (8, 7); // CE, CSN struct dataStruct {double latitude; dvojitá dĺžka; nepodpísaný dlhý dátum; nepodpísaný dlhý čas; } gpsData; void setup () {Serial.begin (115200); // Nastavenie prijímača rádia 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 („Miesto:“); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print („Dátum:“); Serial.print (gpsData.date); Serial.print ("Čas:"); Serial.print (gpsData.time); Serial.println ();}}
(Pozrite si video s týmto kódom na
Krok 3: Ukladanie údajov pomocou modulu SD karty
Rádiový modul je celkom spoľahlivý, ale niekedy potrebujete pohotovostný plán pre prípad, že dôjde k výpadku prúdu na strane prijímača alebo ak sa rádio pohybuje mimo dosahu. Náš pohotovostný plán je modul karty SD, ktorý nám umožňuje ukladať údaje, ktoré zhromažďujeme. Množstvo zhromažďovaných údajov nie je také veľké, takže aj malá karta SD bude schopná ľahko uložiť údaje za jeden deň.
#zahrnúť
#include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); struct dataStruct {dvojitá zemepisná šírka; dvojitá dĺžka; dlhý dátum bez znamienka; nepodpísaný dlhý čas; } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); if (! SD.begin (5)) {Serial.println ("Karta zlyhala alebo nie je prítomná"); návrat; } Serial.println ("karta inicializovaná."); Súbor dataFile = SD.open ("gps_data.csv", FILE_WRITE); if (dataFile) {dataFile.println ("Latitude, Longitude, Date, Time"); dataFile.close (); } else {Serial.println ("nie, nie je možné otvoriť súbor"); }} void loop () {while (ss.available ()> 0) {if (gps.encode (ss.read ())) {getInfo (); printVýsledky (); saveInfo (); }}} neplatné getInfo () {if (gps.location.isValid ()) {gpsData.latitude = gps.location.lat (); gpsData.longitude = gps.location.lng (); } else {Serial.println ("Neplatné umiestnenie"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Neplatný dátum"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Neplatný čas"); }} void printResults () {Serial.print ("Location:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print („Dátum:“); Serial.print (gpsData.date); Serial.print ("Čas:"); Serial.print (gpsData.time); Serial.println (); } neplatné saveInfo () {Súbor 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 ("nope no datafile"); }}
(Tento kód hovoríme vo videu
Krok 4: Odosielanie a ukladanie údajov GPS
Krok 5: Ďakujem
Zaregistrujte sa do nášho zoznamu adries!
Časť 1: Meranie vĺn a teploty
Časť 2: Rádio GPS NRF24 a karta SD
Časť 3: Plánovanie výkonu bóje
Časť 4: Nasadenie bóje