תוכן עניינים:

מצוף חכם [GPS, רדיו (NRF24) ומודול כרטיס SD]: 5 שלבים (עם תמונות)
מצוף חכם [GPS, רדיו (NRF24) ומודול כרטיס SD]: 5 שלבים (עם תמונות)

וִידֵאוֹ: מצוף חכם [GPS, רדיו (NRF24) ומודול כרטיס SD]: 5 שלבים (עם תמונות)

וִידֵאוֹ: מצוף חכם [GPS, רדיו (NRF24) ומודול כרטיס SD]: 5 שלבים (עם תמונות)
וִידֵאוֹ: 1.91 Inch Square Screen Heart Rate Full Touch Fitness Tracker F57L Smart Watch 2024, נוֹבֶמבֶּר
Anonim
Image
Image

סדרת Smart Booy זו משרטטת את הניסיון (השאפתני) שלנו לבנות מצוף מדעי שיכול לבצע מדידות משמעותיות לגבי הים באמצעות מוצרי מדף. זהו מדריך שניים מתוך ארבעה - וודא שאתה מעודכן, ואם אתה צריך היכרות מהירה עם הפרויקט, עיין בסיכום שלנו.

חלק 1: ביצוע מדידות גל וטמפרטורה

במדריך זה אנו מראים כיצד ניתן להשיג נתוני GPS, לאחסן אותם בכרטיס SD ולשלוח אותם למקום כלשהו באמצעות רדיו.

עשינו זאת כדי שנוכל לעקוב אחר המיקום של המצוף הימי שלנו. הרדיו אומר שנוכל לצפות בו מרחוק וכרטיס ה- SD אומר שבמקרה הפסק משהו נשבר וזה יוצא לשיטוט, נוכל להוריד את הנתונים שאסף במהלך הטיול הבלתי מתוכנן שלו - אם נצליח אי פעם לאחזר אותו!

אספקה

מודול GPS - אמזון

מודול כרטיס SD - אמזון

כרטיס SD - אמזון

2 X מודולי רדיו (NRF24L01+) - אמזון

2 X Arduino - אמזון

שלב 1: קבלת נתוני GPS

שליחת נתוני GPS באמצעות רדיו
שליחת נתוני GPS באמצעות רדיו

המצוף החכם מבצע מדידות חיישנים כשהוא יושב בים, כולל מיקום GPS ותאריך זמן. תסתכל על סכמטי שמראה כיצד הגדרנו את המעגל. מודול ה- GPS מתקשר באמצעות חיבור טורי, כך שאנו משתמשים בספריית הטורד של תוכנת Arduino כמו גם בספריית ה- GPS הזעירה כדי לתקשר איתו. הספריות האלה הופכות את הכל לסופר פשוט. בואו ניקח אתכם דרך הקוד…

#לִכלוֹל

#include // אובייקט TinyGPS ++ TinyGPSPlus gps; // החיבור הטורי למכשיר ה- GPS SoftwareSerial ss (4, 3); struct dataStruct {קו רוחב כפול; אורך כפול; תאריך ארוך לא חתום; זמן לא חתום; } gpsData; הגדרת חלל () {Serial.begin (115200); ss.begin (9600); } לולאת void () {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 ("זמן:"); Serial.print (gpsData.time); Serial.println (); }

(בדוק את הסרטון לקוד זה בכתובת

שלב 2: שליחת נתוני GPS באמצעות רדיו

שליחת נתוני GPS באמצעות רדיו
שליחת נתוני GPS באמצעות רדיו

נניח שהמצוף בים לוקח מדידות, אבל אנחנו רוצים לראות את הנתונים מבלי להרטיב את הרגליים או להביא את המצוף לחוף. כדי לקבל את המדידות מרחוק, אנו משתמשים במודול רדיו המחובר לארדואינו משני צידי התקשורת. בעתיד נחליף את הארדואינו בצד המקלט בפאי פטל. הרדיו פועל באופן דומה עם שני הממשקים הללו, כך שההחלפה עליהם היא פשוטה למדי.

מודול הרדיו מתקשר באמצעות SPI, הדורש כמה חיבורים יותר מאשר I2C אך עדיין קל מאוד לשימוש בגלל ספריית NRF24. באמצעות מודול ה- GPS למדידות החיישן, אנו מעבירים את נתוניו מארדואינו אחד לשני. אנו הולכים לחבר את מודול ה- GPS והרדיו לארדואינו ובצד השני ארדואינו עם מודול הרדיו - תסתכל על התרשים.

מַשׁדֵר

#לִכלוֹל

#include #include #include #include TinyGPSPlus gps; תוכנת Serial ss (4, 3); רדיו RF24 (8, 7); // CE, CSN struct dataStruct {קו רוחב כפול; אורך כפול; תאריך ארוך לא חתום; זמן לא חתום; } gpsData; הגדרת חלל () {Serial.begin (115200); ss.begin (9600); Serial.println ("הגדרת רדיו"); // הגדרת רדיו רדיו משדר. התחל (); radio.openWritingPipe (0xF0F0F0F0E1LL); radio.setChannel (0x76); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.stopListening (); radio.enableDynamicPayloads (); radio.powerUp (); Serial.println ("מתחיל לשלוח"); } לולאת void () {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 (); } אחר {gpsData.longitude = 0.0; gpsData.latitude = 0.0; } if (gps.date.isValid ()) {gpsData.date = gps.date.value (); } אחר {gpsData.date = 0; } if (gps.time.isValid ()) {gpsData.time = gps.time.value (); } אחר {gpsData.time = 0; }}

מַקְלֵט

#לִכלוֹל

#include #include רדיו RF24 (8, 7); // CE, CSN struct dataStruct {קו רוחב כפול; אורך כפול; תאריך ארוך ללא חתום; זמן לא חתום; } gpsData; הגדרת חלל () {Serial.begin (115200); // הגדרת רדיו רדיו מקלט.התחל (); radio.openReadingPipe (1, 0xF0F0F0F0E1LL); radio.setChannel (0x76); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.startListening (); radio.enableDynamicPayloads (); radio.powerUp (); } לולאת void () {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 ("זמן:"); Serial.print (gpsData.time); Serial.println ();}}

(בדוק את הסרטון לקוד זה בכתובת

שלב 3: אחסון נתונים באמצעות מודול כרטיס SD

אחסון נתונים באמצעות מודול כרטיס SD
אחסון נתונים באמצעות מודול כרטיס SD

מודול הרדיו די אמין, אך לפעמים אתה צריך תוכנית מגירה במקרה שיש הפסקת חשמל בצד המקלט או אם הרדיו זז מחוץ לטווח. תוכנית המגירה שלנו היא מודול כרטיס SD המאפשר לנו לאחסן את הנתונים שאנו אוספים. כמות הנתונים שנאספים אינה כה גדולה, כך שגם כרטיס SD קטן יוכל לאחסן נתונים בערך של יום אחד.

#לִכלוֹל

#include #include #include TinyGPSPlus gps; תוכנת Serial ss (4, 3); struct dataStruct {קו רוחב כפול; אורך כפול; תאריך ארוך לא חתום; זמן לא חתום; } gpsData; הגדרת חלל () {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 () {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 ("זמן:"); Serial.print (gpsData.time); Serial.println (); } void saveInfo () {קובץ 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 ("אין קובץ נתונים"); }}

(אנו מדברים על קוד זה בסרטון

שלב 4: שליחה ושמירה של נתוני GPS

שליחה ושמירה של נתוני GPS
שליחה ושמירה של נתוני GPS
שליחה ושמירה של נתוני GPS
שליחה ושמירה של נתוני GPS

שלב 5: תודה

תודה!
תודה!

הירשם לרשימת התפוצה שלנו!

חלק 1: ביצוע מדידת גל וטמפרטורה

חלק 2: רדיו GPS NRF24 וכרטיס SD

חלק 3: תזמון כוח למצוף

חלק 4: פריסת המצוף

מוּמלָץ: