Πίνακας περιεχομένων:

Smart Buoy [GPS, Ραδιόφωνο (NRF24) και μονάδα κάρτας SD]: 5 βήματα (με εικόνες)
Smart Buoy [GPS, Ραδιόφωνο (NRF24) και μονάδα κάρτας SD]: 5 βήματα (με εικόνες)

Βίντεο: Smart Buoy [GPS, Ραδιόφωνο (NRF24) και μονάδα κάρτας SD]: 5 βήματα (με εικόνες)

Βίντεο: Smart Buoy [GPS, Ραδιόφωνο (NRF24) και μονάδα κάρτας SD]: 5 βήματα (με εικόνες)
Βίντεο: Smart buoy MPU9250 Wemos D1 mini ESP8266 Wifi Arduino Wireless Processing 2024, Νοέμβριος
Anonim
Image
Image

Αυτή η σειρά Smart Buoy παρουσιάζει την (φιλόδοξη) προσπάθειά μας να δημιουργήσουμε μια επιστημονική σημαδούρα που μπορεί να λάβει σημαντικές μετρήσεις για τη θάλασσα χρησιμοποιώντας προϊόντα εκτός ράφι. Αυτό είναι το σεμινάριο δύο από τα τέσσερα - βεβαιωθείτε ότι είστε ενημερωμένοι και αν χρειάζεστε μια γρήγορη εισαγωγή στο έργο, ελέγξτε τη σύνοψή μας.

Μέρος 1: Πραγματοποίηση μετρήσεων κύματος και θερμοκρασίας

Σε αυτό το σεμινάριο, σας δείχνουμε πώς μπορείτε να λάβετε δεδομένα GPS, να τα αποθηκεύσετε σε μια κάρτα SD και να τα στείλετε κάπου χρησιμοποιώντας ραδιόφωνο.

Το κάναμε αυτό για να μπορούμε να παρακολουθούμε την τοποθεσία του θαλάσσιου σημαδούρα μας. Το ραδιόφωνο σημαίνει ότι μπορούμε να το παρακολουθήσουμε από απόσταση και η κάρτα SD σημαίνει ότι στην περίπτωση που κάτι σπάσει και ξεφύγει, μπορούμε να κατεβάσουμε τα δεδομένα που συνέλεξε κατά την απρογραμμάτιστη εκδρομή του - αν μπορέσουμε ποτέ να τα ανακτήσουμε!

Προμήθειες

Ενότητα GPS - Amazon

Ενότητα κάρτας SD - Amazon

Κάρτα SD - Amazon

2 μονάδες ραδιοφώνου (NRF24L01+) - Amazon

2 X Arduino - Amazon

Βήμα 1: Λήψη δεδομένων GPS

Αποστολή δεδομένων GPS μέσω ραδιοφώνου
Αποστολή δεδομένων GPS μέσω ραδιοφώνου

Ο έξυπνος σημαδούρας κάνει μετρήσεις αισθητήρων καθώς κάθεται στη θάλασσα, συμπεριλαμβανομένης της θέσης GPS και του χρόνου δεδομένων. Ρίξτε μια ματιά στο σχηματικό που δείχνει πώς ρυθμίζουμε το κύκλωμα. Η μονάδα GPS επικοινωνεί μέσω σειριακής σύνδεσης, οπότε χρησιμοποιούμε τη σειριακή βιβλιοθήκη λογισμικού Arduino καθώς και τη μικρή βιβλιοθήκη GPS για να επικοινωνήσουμε μαζί της. Αυτές οι βιβλιοθήκες κάνουν τα πάντα εξαιρετικά απλά. Ας σας μεταφέρουμε τον κωδικό…

#περιλαμβάνω

#include // Το αντικείμενο TinyGPS ++ TinyGPSPlus gps; // Η σειριακή σύνδεση με τη συσκευή GPS SoftwareSerial ss (4, 3). struct dataStruct {διπλό γεωγραφικό πλάτος; διπλό γεωγραφικό μήκος ανυπόγραφο μακρύ ραντεβού? ανυπόγραφο για μεγάλο χρονικό διάστημα } 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 ("Μη έγκυρη τοποθεσία"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Μη έγκυρη ημερομηνία"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Μη έγκυρος χρόνος"); }} void printResults () {Serial.print ("Τοποθεσία:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Ημερομηνία:"); Serial.print (gpsData.date); Serial.print ("Timeρα:"); Serial.print (gpsData.time); Serial.println (); }

(Δείτε το βίντεο για αυτόν τον κωδικό στη διεύθυνση

Βήμα 2: Αποστολή δεδομένων GPS μέσω ραδιοφώνου

Αποστολή δεδομένων GPS μέσω ραδιοφώνου
Αποστολή δεδομένων GPS μέσω ραδιοφώνου

Ας υποθέσουμε ότι ο σημαδούρας βρίσκεται στη θάλασσα και λαμβάνει μετρήσεις, αλλά θέλουμε να βλέπουμε τα δεδομένα χωρίς να βρέχουμε τα πόδια μας ή να φέρνουμε τη σημαδούρα στην ξηρά. Για να λάβουμε τις μετρήσεις από απόσταση, χρησιμοποιούμε μια μονάδα ραδιοφώνου συνδεδεμένη με ένα Arduino και στις δύο πλευρές της επικοινωνίας. Στο μέλλον, θα αντικαταστήσουμε το Arduino από την πλευρά του δέκτη με ένα βατόμουρο pi. Το ραδιόφωνο λειτουργεί παρόμοια και με τις δύο αυτές διεπαφές, οπότε η εναλλαγή τους είναι αρκετά απλή.

Η μονάδα ραδιοφώνου επικοινωνεί χρησιμοποιώντας το SPI, το οποίο απαιτεί μερικές περισσότερες συνδέσεις από το I2C, αλλά εξακολουθεί να είναι πραγματικά εύκολο στη χρήση λόγω της βιβλιοθήκης NRF24. Χρησιμοποιώντας τη μονάδα GPS για τις μετρήσεις του αισθητήρα, μεταδίδουμε τα δεδομένα της από το ένα Arduino στο άλλο. Θα συνδέσουμε τη μονάδα GPS και ραδιοφώνου στο Arduino και από την άλλη πλευρά ένα Arduino με τη μονάδα ραδιοφώνου - ρίξτε μια ματιά στο σχηματικό σχήμα.

Πομπός

#περιλαμβάνω

#include #include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); Ραδιόφωνο RF24 (8, 7). // CE, CSN struct dataStruct {διπλό γεωγραφικό πλάτος; διπλό γεωγραφικό μήκος ανυπόγραφο μακρύ ραντεβού? ανυπόγραφο για μεγάλο χρονικό διάστημα } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); Serial.println ("Ρύθμιση ραδιοφώνου"); // Ρύθμιση πομπού 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 ("Έναρξη αποστολής"); } 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; }}

ΔΕΚΤΗΣ

#περιλαμβάνω

#include #include RF24 radio (8, 7)? // CE, CSN struct dataStruct {διπλό γεωγραφικό πλάτος; διπλό γεωγραφικό μήκος ανυπόγραφο μακρύ ραντεβού? ανυπόγραφο καιρό } gpsData; void setup () {Serial.begin (115200); // Ρύθμιση δέκτη 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 ("Τοποθεσία:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Ημερομηνία:"); Serial.print (gpsData.date); Serial.print ("Timeρα:"); Serial.print (gpsData.time); Serial.println ();}}

(Δείτε το βίντεο για αυτόν τον κωδικό στη διεύθυνση

Βήμα 3: Αποθήκευση δεδομένων χρησιμοποιώντας μονάδα κάρτας SD

Αποθήκευση δεδομένων χρησιμοποιώντας μονάδα κάρτας SD
Αποθήκευση δεδομένων χρησιμοποιώντας μονάδα κάρτας SD

Η μονάδα ραδιοφώνου είναι αρκετά αξιόπιστη, αλλά μερικές φορές χρειάζεστε ένα σχέδιο έκτακτης ανάγκης σε περίπτωση που υπάρχει διακοπή ρεύματος στην πλευρά του δέκτη ή εάν το ραδιόφωνο κινείται εκτός εμβέλειας. Το σχέδιο έκτακτης ανάγκης είναι μια μονάδα κάρτας SD που μας επιτρέπει να αποθηκεύσουμε τα δεδομένα που συλλέγουμε. Η ποσότητα των δεδομένων που συλλέγονται δεν είναι τόσο μεγάλη, επομένως ακόμη και μια μικρή κάρτα SD θα μπορεί εύκολα να αποθηκεύσει δεδομένα μιας ημέρας.

#περιλαμβάνω

#include #include #include TinyGPSPlus gps; SoftwareSerial ss (4, 3); struct dataStruct {διπλό γεωγραφικό πλάτος; διπλό γεωγραφικό μήκος ανυπόγραφο μακρύ ραντεβού? ανυπόγραφο καιρό } gpsData; void setup () {Serial.begin (115200); ss.begin (9600); εάν (! SD.begin (5)) {Serial.println ("Η κάρτα απέτυχε, ή δεν υπάρχει"); ΕΠΙΣΤΡΟΦΗ; } Serial.println ("η κάρτα έχει αρχικοποιηθεί."); Αρχείο dataFile = SD.open ("gps_data.csv", FILE_WRITE); if (dataFile) {dataFile.println ("Γεωγραφικό πλάτος, γεωγραφικό μήκος, ημερομηνία, ώρα"); dataFile.close (); } else {Serial.println ("δεν μπορεί να ανοίξει το αρχείο"); }} 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 ("Μη έγκυρη τοποθεσία"); } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } else {Serial.println ("Μη έγκυρη ημερομηνία"); } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } else {Serial.println ("Μη έγκυρος χρόνος"); }} void printResults () {Serial.print ("Τοποθεσία:"); Serial.print (gpsData.latitude, 6); Serial.print (","); Serial.print (gpsData.longitude, 6); Serial.print ("Ημερομηνία:"); Serial.print (gpsData.date); Serial.print ("Timeρα:"); 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 ("όχι όχι datafile"); }}

(Μιλάμε μέσω αυτού του κώδικα στο βίντεο

Βήμα 4: Αποστολή και αποθήκευση δεδομένων GPS

Αποστολή και αποθήκευση δεδομένων GPS
Αποστολή και αποθήκευση δεδομένων GPS
Αποστολή και αποθήκευση δεδομένων GPS
Αποστολή και αποθήκευση δεδομένων GPS

Βήμα 5: Ευχαριστώ

Ευχαριστώ!
Ευχαριστώ!

Εγγραφείτε στη λίστα αλληλογραφίας μας!

Μέρος 1: Πραγματοποίηση μέτρησης κύματος και θερμοκρασίας

Μέρος 2: Ραδιόφωνο GPS NRF24 και κάρτα SD

Μέρος 3: Προγραμματισμός ισχύος στον σημαδούρα

Μέρος 4: Ανάπτυξη του σημαδούρα

Συνιστάται: