Kazalo:

Pametna boja [GPS, radio (NRF24) in modul kartice SD]: 5 korakov (s slikami)
Pametna boja [GPS, radio (NRF24) in modul kartice SD]: 5 korakov (s slikami)

Video: Pametna boja [GPS, radio (NRF24) in modul kartice SD]: 5 korakov (s slikami)

Video: Pametna boja [GPS, radio (NRF24) in modul kartice SD]: 5 korakov (s slikami)
Video: Coros Vertix 2 подробный обзор 2022 2024, Julij
Anonim
Image
Image

Ta serija pametnih bov prikazuje naš (ambiciozen) poskus izdelave znanstvene boje, ki lahko smiselno meri morje z izdelki, ki so na voljo. To je druga od štirih vadnic - poskrbite, da ste na tekočem, in če potrebujete hiter uvod v projekt, si oglejte naš povzetek.

1. del: Izvajanje valov in meritev temperature

V tej vadnici vam pokažemo, kako pridobiti podatke GPS, jih shraniti na kartico SD in jih poslati po radiu.

To smo storili, da smo lahko spremljali lokacijo naše pomorske boje. Radio pomeni, da si ga lahko ogledamo na daljavo, kartica SD pa pomeni, da se slučajno kaj pokvari in gre na potepanje, lahko prenesemo podatke, ki jih je zbral med nenačrtovano ekskurzijo - če jih kdaj lahko pridobimo!

Zaloge

GPS modul - Amazon

Modul kartice SD - Amazon

Kartica SD - Amazon

2 X radijski moduli (NRF24L01+) - Amazon

2 X Arduino - Amazon

1. korak: Pridobite podatke GPS

Pošiljanje podatkov GPS prek radia
Pošiljanje podatkov GPS prek radia

Pametna boja izvaja meritve senzorjev, ko sedi v morju, vključno z GPS lokacijo in datumom. Oglejte si shemo, ki prikazuje, kako smo nastavili vezje. Modul GPS komunicira prek serijske povezave, zato za komunikacijo uporabljamo serijsko knjižnico programske opreme Arduino in majhno knjižnico GPS. Te knjižnice naredijo vse zelo preprosto. Pojdimo skozi kodo …

#vključi

#include // Objekt TinyGPS ++ TinyGPSPlus gps; // serijska povezava z napravo GPS SoftwareSerial ss (4, 3); struct dataStruct {dvojna zemljepisna širina; dvojna dolžina; nepodpisan dolg datum; dolgo podpisan; } gpsData; void setup () {Serial.begin (115200); ss.začetek (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 ("Neveljavna lokacija"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Neveljaven datum"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Neveljaven čas"); }} void printResults () {Serial.print ("Lokacija:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Datum:"); Serial.print (gpsData.date); Serial.print ("Čas:"); Serial.print (gpsData.time); Serial.println (); }

(Oglejte si video za to kodo na

2. korak: Pošiljanje podatkov GPS prek radia

Pošiljanje podatkov GPS prek radia
Pošiljanje podatkov GPS prek radia

Recimo, da boja v morju opravlja meritve, vendar želimo videti podatke, ne da bi si noge zmočile ali boje pripeljale na kopno. Za meritve na daljavo uporabljamo radijski modul, povezan z Arduinom na obeh straneh komunikacije. V prihodnosti bomo Arduino na strani sprejemnika zamenjali z malinovim pi. Radio deluje podobno z obema vmesnikoma, zato je zamenjava precej preprosta.

Radijski modul komunicira prek SPI, ki zahteva nekaj več povezav kot I2C, vendar je zaradi knjižnice NRF24 še vedno zelo enostaven za uporabo. S pomočjo modula GPS za meritve senzorja prenašamo njegove podatke iz enega Arduina v drugega. GPS in radijski modul bomo povezali z Arduinom, na drugi strani pa Arduino z radijskim modulom - poglejte shemo.

Oddajnik

#vključi

#include #include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); Radio RF24 (8, 7); // CE, CSN struct dataStruct {dvojna zemljepisna širina; dvojna dolžina; nepodpisan dolg datum; dolgo podpisan; } gpsData; void setup () {Serial.begin (115200); ss.začetek (9600); Serial.println ("Nastavitev radia"); // Nastavitev oddajnika 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 ("Začetek pošiljanja"); } 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; }}

SPREJEMNIK

#vključi

#include #include radio RF24 (8, 7); // CE, CSN struct dataStruct {dvojna zemljepisna širina; dvojna dolžina; nepodpisan dolg datum; dolgo podpisan; } gpsData; void setup () {Serial.begin (115200); // Nastavitev sprejemnika 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 ("Lokacija:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Datum:"); Serial.print (gpsData.date); Serial.print ("Čas:"); Serial.print (gpsData.time); Serial.println ();}}

(Oglejte si video za to kodo na

3. korak: shranjevanje podatkov z modulom kartice SD

Shranjevanje podatkov z modulom kartice SD
Shranjevanje podatkov z modulom kartice SD

Radijski modul je precej zanesljiv, včasih pa potrebujete načrt ukrepov v primeru izpada električne energije na strani sprejemnika ali če se radio premakne izven dosega. Naš načrt ukrepov ob nepredvidljivih dogodkih je modul kartice SD, ki nam omogoča shranjevanje zbranih podatkov. Količina zbranih podatkov ni tako velika, zato bo tudi majhna kartica SD zlahka shranila podatke za en dan.

#vključi

#include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); struct dataStruct {dvojna zemljepisna širina; dvojna dolžina; nepodpisan dolg datum; dolgo podpisan; } gpsData; void setup () {Serial.begin (115200); ss.začetek (9600); if (! SD.begin (5)) {Serial.println ("Kartica ni uspela ali ni prisotna"); vrnitev; } Serial.println ("kartica inicializirana."); Datoteka dataFile = SD.open ("gps_data.csv", FILE_WRITE); if (dataFile) {dataFile.println ("Latitude, Longitude, Date, Time"); dataFile.close (); } else {Serial.println ("ni mogoče odpreti datoteke"); }} 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 ("Neveljavna lokacija"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Neveljaven datum"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Neveljaven čas"); }} void printResults () {Serial.print ("Lokacija:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Datum:"); Serial.print (gpsData.date); Serial.print ("Čas:"); 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 ("nope no datafile"); }}

(S to kodo se pogovarjamo v videoposnetku

4. korak: Pošiljanje in shranjevanje podatkov GPS

Pošiljanje in shranjevanje podatkov GPS
Pošiljanje in shranjevanje podatkov GPS
Pošiljanje in shranjevanje podatkov GPS
Pošiljanje in shranjevanje podatkov GPS

5. korak: Hvala

Hvala!
Hvala!

Prijavite se na naš poštni seznam!

1. del: Merjenje valov in temperature

2. del: Radio NRF24 GPS in kartica SD

3. del: Načrtovanje napajanja do boje

4. del: Uvajanje boje

Priporočena: