جدول المحتويات:

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 هذه محاولتنا (الطموحة) لبناء عوامة علمية يمكنها إجراء قياسات ذات مغزى حول البحر باستخدام منتجات جاهزة. هذا هو البرنامج التعليمي الثاني من أربعة - تأكد من أنك محدث ، وإذا كنت بحاجة إلى مقدمة سريعة للمشروع ، فاطلع على ملخصنا.

الجزء الأول: عمل قياسات الموجة ودرجة الحرارة

في هذا البرنامج التعليمي ، نوضح لك كيفية الحصول على بيانات GPS وتخزينها على بطاقة SD وإرسالها إلى مكان ما باستخدام الراديو.

لقد فعلنا ذلك حتى نتمكن من تتبع موقع العوامة المنقولة بحراً. يعني الراديو أنه يمكننا مشاهدته عن بُعد ، وتعني بطاقة SD أنه في حالة عدم وجود شيء ينكسر ويتجول ، يمكننا تنزيل البيانات التي تم جمعها أثناء الرحلة غير المخطط لها - إذا كان بإمكاننا استردادها في أي وقت!

اللوازم

وحدة GPS - أمازون

وحدة بطاقة SD - أمازون

بطاقة SD - أمازون

2 × وحدات راديو (NRF24L01 +) - أمازون

عدد 2 اردوينو - أمازون

الخطوة 1: الحصول على بيانات GPS

إرسال بيانات GPS عبر الراديو
إرسال بيانات GPS عبر الراديو

تقوم العوامة الذكية بإجراء قياسات المستشعر أثناء وجودها في البحر ، بما في ذلك موقع GPS والتاريخ والوقت. ألق نظرة على المخطط الذي يوضح كيف قمنا بإعداد الدائرة. تتواصل وحدة GPS عبر اتصال تسلسلي ، لذلك نستخدم المكتبة التسلسلية لبرامج Arduino بالإضافة إلى مكتبة GPS الصغيرة للتواصل معها. هذه المكتبات تجعل كل شيء بسيطًا للغاية. دعنا نأخذك عبر الكود …

#يشمل

# تضمين // كائن TinyGPS ++ TinyGPSPlus gps ؛ // الاتصال التسلسلي لجهاز GPS SoftwareSerial ss (4 ، 3) ؛ هيكل البيانات الهيكلية {double latitude؛ خط الطول المزدوج تاريخ طويل غير موقع وقت طويل بدون توقيع } gpsData ؛ إعداد باطل () {Serial.begin (115200) ؛ ss.begin (9600) ؛ } حلقة فارغة () {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 ("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 مع وحدة الراديو - ألق نظرة على المخطط.

المرسل

#يشمل

# تضمين # تضمين # تضمين # تضمين TinyGPSPlus gps ؛ SoftwareSerial ss (4 ، 3) ؛ راديو RF24 (8 ، 7) ؛ // CE، CSN Struct dataStruct {double latitude؛ خط الطول المزدوج تاريخ طويل بدون توقيع وقت طويل بدون توقيع } gpsData ؛ إعداد باطل () {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 ("بدء الإرسال") ؛ } حلقة فارغة () {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 ؛ }}

المتلقي

#يشمل

# تضمين # تضمين راديو RF24 (8 ، 7) ؛ // CE، CSN Struct dataStruct {double latitude؛ خط الطول المزدوج تاريخ طويل بدون توقيع وقت طويل بدون توقيع } gpsData ؛ إعداد باطل () {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 () ، } حلقة باطلة () {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 الصغيرة ستتمكن بسهولة من تخزين بيانات يومية.

#يشمل

# تضمين # تضمين # تضمين TinyGPSPlus gps ؛ SoftwareSerial ss (4 ، 3) ؛ هيكل البيانات الهيكلية {double latitude؛ خط الطول المزدوج تاريخ طويل بدون توقيع وقت طويل بدون توقيع } gpsData ؛ إعداد باطل () {Serial.begin (115200) ؛ ss.begin (9600) ؛ if (! SD.begin (5)) {Serial.println ("البطاقة فشلت ، أو غير موجودة") ؛ إرجاع؛ } Serial.println ("تم تهيئة البطاقة.")؛ ملف dataFile = SD.open ("gps_data.csv" ، FILE_WRITE) ؛ إذا (ملف البيانات) {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 ("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 () {File dataFile = SD.open ("gps_data.csv"، FILE_WRITE) ؛ إذا (ملف البيانات) {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")؛ }}

(نتحدث من خلال هذا الكود في الفيديو

الخطوة 4: إرسال بيانات GPS وتخزينها

إرسال وتخزين بيانات GPS
إرسال وتخزين بيانات GPS
إرسال وتخزين بيانات GPS
إرسال وتخزين بيانات GPS

الخطوة 5: شكرا

شكرا!
شكرا!

إشترك بالقائمة البريدية الخاصة بنا!

الجزء الأول: قياس الموجة ودرجة الحرارة

الجزء 2: راديو GPS NRF24 وبطاقة SD

الجزء 3: جدولة القدرة على العوامة

الجزء 4: تركيب العوامة

موصى به: