جدول المحتويات:
- اللوازم
- الخطوة 1: الحصول على بيانات GPS
- الخطوة 2: إرسال بيانات GPS عبر الراديو
- الخطوة 3: تخزين البيانات باستخدام وحدة بطاقة SD
- الخطوة 4: إرسال بيانات GPS وتخزينها
- الخطوة 5: شكرا
فيديو: Smart Buoy [GPS ، راديو (NRF24) ووحدة بطاقة SD]: 5 خطوات (مع صور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:36
توضح سلسلة Smart Buoy هذه محاولتنا (الطموحة) لبناء عوامة علمية يمكنها إجراء قياسات ذات مغزى حول البحر باستخدام منتجات جاهزة. هذا هو البرنامج التعليمي الثاني من أربعة - تأكد من أنك محدث ، وإذا كنت بحاجة إلى مقدمة سريعة للمشروع ، فاطلع على ملخصنا.
الجزء الأول: عمل قياسات الموجة ودرجة الحرارة
في هذا البرنامج التعليمي ، نوضح لك كيفية الحصول على بيانات GPS وتخزينها على بطاقة SD وإرسالها إلى مكان ما باستخدام الراديو.
لقد فعلنا ذلك حتى نتمكن من تتبع موقع العوامة المنقولة بحراً. يعني الراديو أنه يمكننا مشاهدته عن بُعد ، وتعني بطاقة SD أنه في حالة عدم وجود شيء ينكسر ويتجول ، يمكننا تنزيل البيانات التي تم جمعها أثناء الرحلة غير المخطط لها - إذا كان بإمكاننا استردادها في أي وقت!
اللوازم
وحدة GPS - أمازون
وحدة بطاقة SD - أمازون
بطاقة SD - أمازون
2 × وحدات راديو (NRF24L01 +) - أمازون
عدد 2 اردوينو - أمازون
الخطوة 1: الحصول على بيانات 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 عبر الراديو
لنفترض أن العوامة في البحر تأخذ القياسات ، لكننا نريد أن نرى البيانات دون أن نبتل أقدامنا أو نجلب العوامة إلى الشاطئ. للحصول على القياسات عن بُعد ، نستخدم وحدة راديو متصلة بـ 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 الصغيرة ستتمكن بسهولة من تخزين بيانات يومية.
#يشمل
# تضمين # تضمين # تضمين 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 وتخزينها
الخطوة 5: شكرا
إشترك بالقائمة البريدية الخاصة بنا!
الجزء الأول: قياس الموجة ودرجة الحرارة
الجزء 2: راديو GPS NRF24 وبطاقة SD
الجزء 3: جدولة القدرة على العوامة
الجزء 4: تركيب العوامة
موصى به:
راديو ثنائي الاتجاه NRF24 للقياس عن بعد: 9 خطوات (بالصور)
NRF24 راديو ذو اتجاهين للقياس عن بُعد: مرحبًا يا رفاق ، اسمي بيدرو كاستيلاني وسأقدم لكم أول تعليمات لي: بناء راديو ثنائي الاتجاه باستخدام اردوينو ، حسنًا ، لأي شيء تحتاجه. دائرتان منفصلتان تعملان كمستقبل وإرسال
موجات راديو كهربائية خالية من DIY لتكوين موجات راديو في كاتماندو: 6 خطوات
موجات الراديو اللاسلكية المجانية من DIY في كاتماندو: ما فعلته ، قمت بتعديله وجعلته أكثر بساطة وله طرفان فقط بدلاً من أربعة. الحجم المناسب للفطيرة مع طرفين متصلين بـ Arial's وتعمل الأرض كمستقبل. الامتداد الطويل لحرفين ، أحدهما متصل بـ g
راديو FM مع RDS (نص راديو) ، تحكم BT وقاعدة شحن: 5 خطوات
راديو FM مع RDS (نص راديو) ، BT Control and Charging Base: Bonjour ، هذا هو ثاني & quot؛ Instructables & quot؛. نظرًا لأنني لا أحب أن أصنع أشياء غير مفيدة جدًا ، فإليك مشروعي الأخير: هذا راديو FM مع نص راديو قاعدة شحن والتي يمكن مراقبتها عبر البلوتوث وتطبيق Android لذلك سأفعل
الحمّام الرخيص - حوّل راديو يدوي إلى راديو متنقل: 6 خطوات
الحمّام الرخيص - قم بتحويل راديو يدوي إلى راديو محمول: راديو محمول هام بميزانية محدودة؟ نعم ، يمكن القيام بذلك ببعض الإبداع. هناك عدد كبير من أجهزة الراديو المحمولة الصينية الرخيصة هناك. أدت أجهزة الراديو الجديدة الرخيصة هذه بدورها إلى خفض أسعار معدات لحم الخنزير المستعملة عالية الجودة. شيء آخر يضيفه
Geek - حامل بطاقة الائتمان / بطاقة العمل من محرك القرص الصلب القديم للكمبيوتر المحمول: 7 خطوات
Geek - حامل بطاقة ائتمان / بطاقة عمل من محرك القرص الصلب القديم للكمبيوتر المحمول: حامل بطاقة ائتمان / عمل مهووس. خطرت لي هذه الفكرة المجنونة عندما مات محرك الأقراص الثابتة للكمبيوتر المحمول وأصبح عديم الفائدة بشكل أساسي. لقد قمت بتضمين الصور المكتملة هنا