Cuprins:

Smart Buoy [GPS, radio (NRF24) și un modul card SD]: 5 pași (cu imagini)
Smart Buoy [GPS, radio (NRF24) și un modul card SD]: 5 pași (cu imagini)

Video: Smart Buoy [GPS, radio (NRF24) și un modul card SD]: 5 pași (cu imagini)

Video: Smart Buoy [GPS, radio (NRF24) și un modul card SD]: 5 pași (cu imagini)
Video: Smart Buoy Final Project 2024, Noiembrie
Anonim
Image
Image

Această serie Smart Buoy prezintă încercarea noastră (ambițioasă) de a construi o geamandură științifică care poate lua măsurători semnificative despre mare folosind produse de pe raft. Acesta este tutorialul doi din patru - asigurați-vă că sunteți la curent și, dacă aveți nevoie de o introducere rapidă a proiectului, consultați rezumatul nostru.

Partea 1: Efectuarea măsurătorilor de undă și temperatură

În acest tutorial, vă arătăm cum să obțineți date GPS, cum să le stocați pe un card SD și să le trimiteți undeva cu ajutorul radio.

Am făcut acest lucru pentru a putea urmări locația geamandurii noastre maritime. Radioul înseamnă că îl putem viziona de la distanță, iar cardul SD înseamnă că, din întâmplare, ceva se strică și merge la o rătăcire, putem descărca datele pe care le-a colectat în timpul excursiei sale neplanificate - dacă vom reuși vreodată să le recuperăm!

Provizii

Modul GPS - Amazon

Modul card SD - Amazon

Card SD - Amazon

2 module radio X (NRF24L01 +) - Amazon

2 X Arduino - Amazon

Pasul 1: Obținerea datelor GPS

Trimiterea datelor GPS prin radio
Trimiterea datelor GPS prin radio

Geamandura inteligentă face măsurători ale senzorului așezat în mare, inclusiv locația GPS și data și ora. Aruncați o privire la schema care arată modul în care am configurat circuitul. Modulul GPS comunică prin conexiune serială, așa că folosim biblioteca serială a software-ului Arduino, precum și mica bibliotecă GPS pentru a comunica cu acesta. Aceste biblioteci fac totul foarte simplu. Să vă prezentăm codul …

#include

#include // Obiectul TinyGPS ++ TinyGPSPlus gps; // Conexiunea serială la dispozitivul GPS SoftwareSerial ss (4, 3); struct dataStruct {latitudine dublă; longitudine dublă; termen lung nesemnat; mult timp nesemnat; } gpsData; void setup () {Serial.begin (115200); ss.begin (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 ("Locație nevalidă"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Data nevalidă"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Timp nevalid"); }} void printResults () {Serial.print ("Locație:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Data:"); Serial.print (gpsData.date); Serial.print ("Ora:"); Serial.print (gpsData.time); Serial.println (); }

(Vedeți videoclipul pentru acest cod la

Pasul 2: Trimiterea datelor GPS prin radio

Trimiterea datelor GPS prin radio
Trimiterea datelor GPS prin radio

Să presupunem că geamandura se află în mare, luând măsurători, dar vrem să vedem datele fără să ne udăm picioarele sau să aducem geamandura la țărm. Pentru a obține măsurătorile de la distanță, folosim un modul radio conectat la un Arduino pe ambele părți ale comunicației. În viitor, vom înlocui receptorul Arduino cu un pi zmeură. Radioul funcționează similar cu ambele interfețe, astfel încât schimbarea acestora este destul de simplă.

Modulul radio comunică utilizând SPI, care necesită câteva conexiuni mai mult decât I2C, dar este încă foarte ușor de utilizat datorită bibliotecii NRF24. Folosind modulul GPS pentru măsurarea senzorului, îi transmitem datele de la un Arduino la altul. Vom conecta modulul GPS și radio la Arduino și, pe de altă parte, un Arduino cu modulul radio - aruncați o privire asupra schemei.

Transmiţător

#include

#include #include #include #include gps TinyGPSPlus; SoftwareSerial ss (4, 3); Radio RF24 (8, 7); // CE, CSN struct dataStruct {latitudine dublă; longitudine dublă; termen lung nesemnat; mult timp nesemnat; } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); Serial.println („Configurarea radioului”); // Configurare emițător 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 („Începând să trimiteți”); } 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 (); } 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; }}

RECEPTOR

#include

#include #include radio RF24 (8, 7); // CE, CSN struct dataStruct {latitudine dublă; longitudine dublă; termen lung nesemnat; mult timp nesemnat; } gpsData; void setup () {Serial.begin (115200); // Configurare receptor 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 („Locație:”); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Data:"); Serial.print (gpsData.date); Serial.print ("Ora:"); Serial.print (gpsData.time); Serial.println ();}}

(Vedeți videoclipul pentru acest cod la

Pasul 3: Stocarea datelor folosind un modul de card SD

Stocarea datelor folosind un modul de card SD
Stocarea datelor folosind un modul de card SD

Modulul radio este destul de fiabil, dar uneori aveți nevoie de un plan de urgență în cazul în care există o întrerupere a curentului pe partea receptorului sau dacă radioul se deplasează în afara razei de acoperire. Planul nostru de urgență este un modul de card SD care ne permite să stocăm datele pe care le colectăm. Cantitatea de date colectate nu este atât de mare, astfel încât chiar și un mic card SD va putea să stocheze cu ușurință datele de o zi.

#include

#include #include #include gps TinyGPSPlus; SoftwareSerial ss (4, 3); struct dataStruct {latitudine dublă; longitudine dublă; termen lung nesemnat; mult timp nesemnat; } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); if (! SD.begin (5)) {Serial.println ("Cardul a eșuat sau nu este prezent"); întoarcere; } Serial.println ("card inițializat".); Fișier dataFile = SD.open ("gps_data.csv", FILE_WRITE); if (dataFile) {dataFile.println ("Latitudine, longitudine, dată, oră"); dataFile.close (); } else {Serial.println ("nope nu poate deschide fișierul"); }} 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 ("Locație nevalidă"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Data nevalidă"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Timp nevalid"); }} void printResults () {Serial.print ("Locație:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Data:"); Serial.print (gpsData.date); Serial.print ("Ora:"); Serial.print (gpsData.time); Serial.println (); } void saveInfo () {File 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 („nu există fișier de date”); }}

(Vorbim prin acest cod în videoclipul

Pasul 4: Trimiterea și stocarea datelor GPS

Trimiterea și stocarea datelor GPS
Trimiterea și stocarea datelor GPS
Trimiterea și stocarea datelor GPS
Trimiterea și stocarea datelor GPS

Pasul 5: Mulțumesc

Mulțumiri!
Mulțumiri!

Înscrieți-vă la lista noastră de distribuție!

Partea 1: Măsurarea valurilor și a temperaturii

Partea 2: Radio GPS NRF24 și card SD

Partea 3: Programarea puterii la geamandură

Partea 4: Implementarea geamandurii

Recomandat: