สารบัญ:

ทุ่นอัจฉริยะ [GPS, Radio (NRF24) และโมดูลการ์ด SD]: 5 ขั้นตอน (พร้อมรูปภาพ)
ทุ่นอัจฉริยะ [GPS, Radio (NRF24) และโมดูลการ์ด SD]: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ทุ่นอัจฉริยะ [GPS, Radio (NRF24) และโมดูลการ์ด SD]: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ทุ่นอัจฉริยะ [GPS, Radio (NRF24) และโมดูลการ์ด SD]: 5 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: ทำไมเเม่ไม่บอกกันเลย😂 #แป้งวิงค์ไวท์ 2024, พฤศจิกายน
Anonim
Image
Image

ชุดทุ่นอัจฉริยะนี้แสดงแผนภูมิความพยายาม (ทะเยอทะยาน) ของเราในการสร้างทุ่นทางวิทยาศาสตร์ที่สามารถทำการวัดที่มีความหมายเกี่ยวกับทะเลโดยใช้ผลิตภัณฑ์ที่วางจำหน่าย นี่คือบทช่วยสอนสองในสี่ - ตรวจสอบให้แน่ใจว่าคุณได้รับข้อมูลล่าสุด และหากคุณต้องการคำแนะนำเบื้องต้นเกี่ยวกับโครงการอย่างรวดเร็ว โปรดดูสรุปของเรา

ส่วนที่ 1: การวัดคลื่นและอุณหภูมิ

ในบทช่วยสอนนี้ เราจะแสดงวิธีรับข้อมูล GPS จัดเก็บในการ์ด SD และส่งไปที่ใดที่หนึ่งโดยใช้วิทยุ

เราทำสิ่งนี้เพื่อติดตามตำแหน่งของทุ่นลอยน้ำของเรา วิทยุหมายความว่าเราสามารถรับชมจากระยะไกลได้ และการ์ด SD หมายความว่าหากมีบางสิ่งแตกหักและมันออกไปเดินเล่น เราสามารถดาวน์โหลดข้อมูลที่รวบรวมไว้ระหว่างการเดินทางโดยไม่ได้วางแผนไว้ - หากเราสามารถดึงข้อมูลได้!

เสบียง

โมดูล GPS - Amazon

โมดูลการ์ด SD - Amazon

การ์ด SD - Amazon

2 X โมดูลวิทยุ (NRF24L01+) - Amazon

2 X Arduino - อเมซอน

ขั้นตอนที่ 1: รับข้อมูล GPS

การส่งข้อมูล GPS ทางวิทยุ
การส่งข้อมูล GPS ทางวิทยุ

ทุ่นอัจฉริยะทำการวัดเซ็นเซอร์ขณะอยู่ในทะเล รวมถึงตำแหน่ง GPS และวันที่และเวลา ดูแผนผังซึ่งแสดงให้เห็นว่าเราตั้งค่าวงจรอย่างไร โมดูล GPS สื่อสารผ่านการเชื่อมต่อแบบอนุกรม ดังนั้นเราจึงใช้ไลบรารีอนุกรมของซอฟต์แวร์ Arduino เช่นเดียวกับไลบรารี GPS ขนาดเล็กเพื่อสื่อสารกับโมดูลดังกล่าว ไลบรารีเหล่านี้ทำให้ทุกอย่างง่ายสุดๆ มาทำความรู้จักกับโค้ดกัน…

#รวม

#include // วัตถุ TinyGPS++ จีพีเอส TinyGPSPlus; // การเชื่อมต่อแบบอนุกรมกับอุปกรณ์ GPS SoftwareSerial ss (4, 3); โครงสร้าง dataStruct { ละติจูดสองเท่า; ลองจิจูดสองเท่า วันที่ยาวไม่ได้ลงนาม; ไม่ได้ลงนามเป็นเวลานาน } ข้อมูล gps; การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); ss.begin(9600); } void loop(){ ในขณะที่ (ss.available() > 0){ if (gps.encode(ss.read())){ getInfo(); พิมพ์ผลลัพธ์ (); } } } เป็นโมฆะ getInfo(){ if (gps.location.isValid()){ gpsData.latitude = gps.location.lat(); gpsData.longitude = gps.location.lng(); } อื่น { Serial.println ("ตำแหน่งไม่ถูกต้อง"); } if (gps.date.isValid()) { gpsData.date = gps.date.value(); } อื่น { Serial.println ("วันที่ไม่ถูกต้อง"); } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } อื่น { Serial.println ("เวลาไม่ถูกต้อง"); } } ถือเป็นโมฆะ printResults(){ Serial.print("Location:"); 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 ทางวิทยุ

สมมุติว่าทุ่นอยู่ในทะเลเพื่อวัด แต่เราต้องการดูข้อมูลโดยไม่ทำให้เท้าเปียกหรือยกทุ่นขึ้นฝั่ง ในการรับการวัดจากระยะไกล เราใช้โมดูลวิทยุที่เชื่อมต่อกับ Arduino ทั้งสองด้านของการสื่อสาร ในอนาคต เราจะแทนที่ Arduino ฝั่งผู้รับด้วย raspberry pi วิทยุทำงานเหมือนกันกับอินเทอร์เฟซทั้งสองนี้ ดังนั้นการสลับไปมาจึงค่อนข้างตรงไปตรงมา

โมดูลวิทยุสื่อสารโดยใช้ SPI ซึ่งต้องการการเชื่อมต่อมากกว่า I2C เล็กน้อย แต่ยังใช้งานได้ง่ายมากเนื่องจากไลบรารี NRF24 การใช้โมดูล GPS สำหรับการวัดเซ็นเซอร์ เราจะส่งข้อมูลจาก Arduino ตัวหนึ่งไปยังอีกตัวหนึ่ง เราจะเชื่อมต่อ GPS และโมดูลวิทยุเข้ากับ Arduino และอีกด้านหนึ่งคือ Arduino กับโมดูลวิทยุ - ดูแผนผัง

เครื่องส่ง

#รวม

#include #include #include #include TinyGPSPlus gps; ซอฟต์แวร์Serial ss(4, 3); วิทยุ RF24(8, 7); // CE, CSN จัดโครงสร้าง dataStruct {ละติจูดสองเท่า; ลองจิจูดสองเท่า วันที่ยาวไม่ได้ลงนาม; ไม่ได้ลงนามเป็นเวลานาน } ข้อมูล gps; การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); ss.begin(9600); Serial.println("กำลังตั้งค่าวิทยุ"); // ตั้งค่าตัวส่งสัญญาณวิทยุ radio.begin(); วิทยุ openWritingPipe(0xF0F0F0F0E1LL); radio.setChannel(0x76); radio.setPALevel(RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.stopListening(); radio.enableDynamicPayloads(); วิทยุ.powerUp(); Serial.println("กำลังเริ่มส่ง"); } วงเป็นโมฆะ () { ในขณะที่ (ss.available () > 0){ if (gps.encode(ss.read())){ getInfo(); radio.write(&gpsData, sizeof(gpsData)); } } } เป็นโมฆะ 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 จัดโครงสร้าง dataStruct {ละติจูดสองเท่า; ลองจิจูดสองเท่า วันที่ยาวไม่ได้ลงนาม; ไม่ได้ลงนามเป็นเวลานาน } ข้อมูล gps; การตั้งค่าเป็นโมฆะ () { 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(); วิทยุ.powerUp(); } วงเป็นโมฆะ () { 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); โครงสร้าง dataStruct { ละติจูดสองเท่า; ลองจิจูดสองเท่า วันที่ยาวไม่ได้ลงนาม; ไม่ได้ลงนามเป็นเวลานาน } ข้อมูล gps; การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); ss.begin(9600); ถ้า (!SD.begin(5)) { Serial.println ("การ์ดล้มเหลวหรือไม่มีอยู่"); กลับ; } Serial.println("การ์ดเริ่มต้น"); ไฟล์ dataFile = SD.open("gps_data.csv", FILE_WRITE); ถ้า (dataFile) { dataFile.println ("ละติจูด, ลองจิจูด, วันที่, เวลา"); dataFile.close(); } อื่น { Serial.println ("ไม่สามารถเปิดไฟล์ได้"); } } วงเป็นโมฆะ () { ในขณะที่ (ss.available () > 0){ if (gps.encode(ss.read())){ getInfo(); พิมพ์ผลลัพธ์ (); saveInfo(); } } } เป็นโมฆะ getInfo(){ if (gps.location.isValid()){ gpsData.latitude = gps.location.lat(); gpsData.longitude = gps.location.lng(); } อื่น { Serial.println ("ตำแหน่งไม่ถูกต้อง"); } if (gps.date.isValid()) { gpsData.date = gps.date.value(); } อื่น { Serial.println ("วันที่ไม่ถูกต้อง"); } if (gps.time.isValid()){ gpsData.time = gps.time.value(); } อื่น { Serial.println ("เวลาไม่ถูกต้อง"); } } ถือเป็นโมฆะ printResults(){ Serial.print("Location:"); 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(); } เป็นโมฆะ saveInfo(){ ไฟล์ dataFile = SD.open("gps_data.csv", FILE_WRITE); ถ้า (dataFile) { dataFile.print (gpsData.latitude); dataFile.print(", "); dataFile.print(gpsData.ลองจิจูด); dataFile.print(", "); dataFile.print(gpsData.date); dataFile.print(", "); dataFile.println (gpsData.time); dataFile.close(); } อื่น ๆ { Serial.println ("ไม่มี datafile"); } }

(เราคุยผ่านโค้ดนี้ในวิดีโอ

ขั้นตอนที่ 4: การส่งและจัดเก็บข้อมูล GPS

การส่งและจัดเก็บข้อมูล GPS
การส่งและจัดเก็บข้อมูล GPS
การส่งและจัดเก็บข้อมูล GPS
การส่งและจัดเก็บข้อมูล GPS

ขั้นตอนที่ 5: ขอบคุณ

ขอบคุณ!
ขอบคุณ!

ลงชื่อสมัครใช้รายชื่อผู้รับจดหมายของเรา!

ส่วนที่ 1: การวัดคลื่นและอุณหภูมิ

ส่วนที่ 2: GPS NRF24 วิทยุและการ์ด SD

ส่วนที่ 3: การจัดตารางอำนาจไปยังทุ่น

ส่วนที่ 4: การปรับใช้ทุ่น

แนะนำ: