Sisukord:

Nutikas poi [GPS, raadio (NRF24) ja SD -kaardi moodul]: 5 sammu (koos piltidega)
Nutikas poi [GPS, raadio (NRF24) ja SD -kaardi moodul]: 5 sammu (koos piltidega)
Anonim
Image
Image

See nutikate poide sari kirjeldab meie (ambitsioonikat) katset ehitada teaduslikku poi, mis saab riiulil olevate toodete abil merel sisukaid mõõtmisi teha. See on õpetus kaks neljast - veenduge, et olete ajakohane, ja kui vajate projekti kiiret tutvustust, vaadake meie kokkuvõtet.

Osa 1: Laine- ja temperatuurimõõtmiste tegemine

Selles õpetuses näitame teile, kuidas GPS -andmeid hankida, SD -kaardile salvestada ja raadio abil kuhugi saata.

Tegime seda, et saaksime jälgida oma merepoi poi asukohta. Raadio tähendab, et me saame seda eemalt vaadata ja SD -kaart tähendab, et juhuslikult, kui midagi katki läheb ja see läheb ekslema, saame alla laadida andmed, mille see oli planeerimata ekskursiooni ajal kogunud - kui suudame need kunagi kätte saada!

Tarvikud

GPS -moodul - Amazon

SD -kaardi moodul - Amazon

SD -kaart - Amazon

2 X raadiomoodulit (NRF24L01+) - Amazon

2 X Arduino - Amazon

Samm: GPS -andmete hankimine

GPS -andmete saatmine raadio kaudu
GPS -andmete saatmine raadio kaudu

Nutikas poi teeb merel istudes sensori mõõtmisi, sealhulgas GPS -i asukohta ja kuupäeva. Vaadake skeemi, mis näitab, kuidas me vooluringi seadistame. GPS -moodul suhtleb jadaühenduse kaudu, nii et me kasutame sellega suhtlemiseks nii Arduino tarkvara jadakogu kui ka pisikest GPS -raamatukogu. Need raamatukogud muudavad kõik ülilihtsaks. Tutvustame teile koodi …

#kaasake

#include // TinyGPS ++ objekt TinyGPSPlus gps; // Jadaühendus GPS -seadmega SoftwareSerial ss (4, 3); structure dataStruct {kahekordne laiuskraad; kahekordne pikkuskraad; allkirjastamata pikk kuupäev; allkirjastamata pikka aega; } gpsData; void setup () {Serial.begin (115200); ss.algus (9600); } void loop () {while (ss.available ()> 0) {if (gps.encode (ss.read ())) {getInfo (); printResults (); }}} tühine getInfo () {if (gps.location.isValid ()) {gpsData.latitude = gps.location.lat (); gpsData.longitude = gps.location.lng (); } else {Serial.println ("Vale asukoht"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Kehtetu kuupäev"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Kehtetu aeg"); }} void printResults () {Serial.print ("Location:"); Seeriatrükk (gpsData.latitude, 6); Serial.print (","); Seeriaprint (gpsData.longitude, 6); Serial.print ("Kuupäev:"); Serial.print (gpsData.date); Serial.print ("Aeg:"); Serial.print (gpsData.time); Serial.println (); }

(Vaadake selle koodi videot aadressil

2. samm: GPS -andmete saatmine raadio kaudu

GPS -andmete saatmine raadio kaudu
GPS -andmete saatmine raadio kaudu

Oletame, et poi teeb mõõtmisi meres, kuid me tahame andmeid näha ilma jalgu märjaks tegemata või poi kaldale toomata. Mõõtmiste kaugjuurdepääsuks kasutame mõlemal pool sidepidamist Arduinoga ühendatud raadiomoodulit. Tulevikus asendame vastuvõtjapoolse Arduino vaarika pi-ga. Raadio töötab sarnaselt mõlema liidesega, nii et nende vahetamine on üsna lihtne.

Raadiomoodul suhtleb kasutades SPI -d, mis nõuab I2C -st mõnevõrra rohkem ühendusi, kuid on NRF24 raamatukogu tõttu siiski väga lihtne kasutada. Kasutades andurite mõõtmiseks GPS -moodulit, edastame selle andmed ühelt Arduino -lt teisele. Me ühendame GPS -i ja raadiomooduli Arduinoga ja teisel pool Arduino koos raadiomooduliga - vaadake skeemi.

Saatja

#kaasake

#kaasama #kaasama #sisalda #sisalda TinyGPSPlus gps; SoftwareSerial ss (4, 3); Raadio RF24 (8, 7); // CE, CSN struktuuri andmedStruct {topeltlaius; kahekordne pikkuskraad; allkirjastamata pikk kuupäev; allkirjastamata pikka aega; } gpsData; void setup () {Serial.begin (115200); ss.algus (9600); Serial.println ("Raadio seadistamine"); // Seadista saatja raadio raadio.begin (); radio.openWritingPipe (0xF0F0F0F0E1LL); radio.setChannel (0x76); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.stopListening (); radio.enableDynamicPayloads (); radio.powerUp (); Serial.println ("Hakkab saatma"); } void loop () {while (ss.available ()> 0) {if (gps.encode (ss.read ())) {getInfo (); radio.write (& gpsData, sizeof (gpsData)); }}} tühine 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; }}

VASTUVÕTJA

#kaasake

#kaasa arvatud #kaasama RF24 raadio (8, 7); // CE, CSN struktuuri andmedStruct {topeltlaius; kahekordne pikkuskraad; allkirjastamata pikk kuupäev; allkirjastamata pikka aega; } gpsData; void setup () {Serial.begin (115200); // Seadista vastuvõtja raadio raadio.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 ("Asukoht:"); Seeriatrükk (gpsData.latitude, 6); Serial.print (","); Seeriaprint (gpsData.longitude, 6); Serial.print ("Kuupäev:"); Serial.print (gpsData.date); Serial.print ("Aeg:"); Serial.print (gpsData.time); Serial.println ();}}

(Vaadake selle koodi videot aadressil

3. samm: andmete salvestamine SD -kaardi mooduli abil

Andmete salvestamine SD -kaardimooduli abil
Andmete salvestamine SD -kaardimooduli abil

Raadiomoodul on üsna usaldusväärne, kuid mõnikord vajate varuplaani juhuks, kui vastuvõtja poolel on voolukatkestus või kui raadio liigub levialast välja. Meie varuplaan on SD -kaardi moodul, mis võimaldab meil kogutud andmeid salvestada. Kogutavate andmete hulk ei ole nii suur, nii et isegi väike SD -kaart suudab hõlpsalt päeva andmeid salvestada.

#kaasake

#kaasama #sisalda #sisalda TinyGPSPlus gps; SoftwareSerial ss (4, 3); structure dataStruct {kahekordne laiuskraad; kahekordne pikkuskraad; allkirjastamata pikk kuupäev; allkirjastamata pikka aega; } gpsData; void setup () {Serial.begin (115200); ss.algus (9600); if (! SD.begin (5)) {Serial.println ("Kaart ebaõnnestus või puudub"); tagasipöördumine; } Serial.println ("kaart lähtestatud"); Faili andmedFail = SD.open ("gps_data.csv", FILE_WRITE); if (dataFile) {dataFile.println ("Laius, Pikkuskraad, Kuupäev, Kellaaeg"); dataFile.close (); } else {Serial.println ("ei saa faili avada"); }} void loop () {while (ss.available ()> 0) {if (gps.encode (ss.read ())) {getInfo (); printResults (); saveInfo (); }}} tühine getInfo () {if (gps.location.isValid ()) {gpsData.latitude = gps.location.lat (); gpsData.longitude = gps.location.lng (); } else {Serial.println ("Vale asukoht"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Kehtetu kuupäev"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Kehtetu aeg"); }} void printResults () {Serial.print ("Location:"); Seeriatrükk (gpsData.latitude, 6); Serial.print (","); Seeriaprint (gpsData.longitude, 6); Serial.print ("Kuupäev:"); Serial.print (gpsData.date); Serial.print ("Aeg:"); 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 ("no no datafile"); }}

(Me räägime sellest koodist videos

Samm: GPS -andmete saatmine ja salvestamine

GPS -andmete saatmine ja salvestamine
GPS -andmete saatmine ja salvestamine
GPS -andmete saatmine ja salvestamine
GPS -andmete saatmine ja salvestamine

Samm: aitäh

Tänan!
Tänan!

Registreeruge meie postitusloendisse!

Osa 1: Laine- ja temperatuuri mõõtmine

Osa 2: GPS NRF24 raadio ja SD -kaart

Osa 3: Poi võimsuse planeerimine

Osa 4: Poi kasutuselevõtt

Soovitan: