سوف تتعلم الآن كيفية تحويل الفولتميتر العادي (التناظري) إلى مقياس حرارة رقمي باستخدام منصة Arduino ومستشعر درجة الحرارة ds18b20. من حيث المبدأ، هذه التقنية مناسبة ليس فقط لعرض درجة الحرارة - بل يمكن عرض أي كميات أخرى (فيزيائية وكهربائية) من أجهزة استشعار مختلفة رقميًا على مقياس قرصي باستخدام هذه الطريقة.
الوحدة الجاهزة المعروفة ds18b20 عبارة عن مقياس حرارة رقمي يوفر قياس درجة حرارة 9 بت وله وظيفة نقاط الزناد العلوية والسفلية غير المتطايرة القابلة للبرمجة. بالإضافة إلى ذلك، يتصل ds18b20 عبر ناقل ذو سلك واحد ويتطلب خط بيانات واحدًا فقط للتواصل مع المعالج الدقيق. بالإضافة إلى ذلك، يمكن تشغيل ds18b20 مباشرة من خط البيانات، مما يلغي الحاجة إلى مصدر طاقة خارجي.
دبوس ds18b20في الواقع، يحتوي كل ds18b20 على رمز تسلسلي فريد 64 بت يسمح لعدة DS18B20 بالعمل على نفس الناقل ذو السلك الواحد. وبالتالي، باستخدام معالج دقيق واحد فقط، من الممكن التحكم في العديد من أجهزة استشعار درجة الحرارة الموزعة على مساحة كبيرة.
الدائرة نفسها بسيطة جدًا بحيث لا فائدة من رسمها - جميع التوصيلات مرئية في الصورة. أولاً، قم بتوصيل ds18b20 بالطرف (-) لتأريض Arduino، والطرف (+) لـ 5V وخرج الإشارة إلى الطرف الرقمي 2. من أجل التحكم في الفولتميتر، نقوم بتوصيل سلكه الموجب بالطرف 9 (أحد الأطراف). PWM) وقم بتوصيل الطرح بـ GND. بعد ذلك، لتغيير مقياس الفولتميتر إلى مقياس حرارة، ما عليك سوى طباعة الصورة المرفقة بالمقال. الفولتميتر هنا هو 5 فولت، ولكن يمكنك أن تأخذ أي مؤشر آخر، بما في ذلك مقياس ميكرومتر عادي، مضيفا المقاوم المطلوب على التوالي (حوالي 10-100 كيلو أوم).
يعد تعديل عرض النبض، أو PWM، تقنية لإنتاج نتائج تناظرية باستخدام الوسائل الرقمية.
عند وميض وحدة التحكم الدقيقة، يجب عليك إضافة "مكتبة DallasTemperature" إلى بيئة تطوير Arduino الخاصة بك، حيث أن هذه هي المكتبة التي تدعم مستشعر درجة الحرارة على شريحة ds18b20.
يتكون الكود من ثلاثة أجزاء رئيسية:
في الإعدادات سوف نقرأ درجة الحرارة من المستشعر. ثم نقوم بتحويل هذه القيمة إلى دالة PWM تتراوح من 0 إلى 255. ويمكن القيام بذلك داخل دالة البرنامج. بعد ذلك، سوف نرسل إشارة إلى الطرف 9، المتصل بمؤشر الفولتميتر.
عند ضبط نطاق درجة الحرارة، ضع في اعتبارك أنه كلما كانت الفجوة بين القيم القصوى أصغر، زادت دقة مقياس الحرارة. يمكنك تنزيل ورقة البيانات الخاصة بالمستشعر ورمز البرنامج الثابت.
تعرف على كيفية استخدام وحدة التردد اللاسلكي بتردد 433 ميجاهرتز مع ATMega328P-PU. في هذه المقالة سنقوم بتجميع دائرة من مستشعر DHT11 وجهاز إرسال التردد اللاسلكي. سنقوم أيضًا بتجميع جهاز استقبال مزود بجهاز استقبال لاسلكي بتردد 433 ميجاهرتز وشاشة LCD.
سأوضح لك في هذه المقالة كيفية بناء جهاز يقيس درجة الحرارة والرطوبة النسبية ويرسل القيم المقاسة باستخدام وحدة RF القياسية بتردد 433 ميجاهرتز. مستشعر درجة الحرارة والرطوبة المستخدم في الجهاز هو DHT11.
هناك العديد من الطرق لنقل كميات صغيرة من البيانات باستخدام وحدات تحكم Arduino أو ATMega. يستخدم أحدهم مكتبة جاهزة مثل RCSwitch أو Radiohead أو VirtualWire. من الممكن أيضًا إرسال البيانات الأولية باستخدام وحدة UART المدمجة في وحدة التحكم الدقيقة. لكن لا يُنصح باستخدام وحدة UART المدمجة، نظرًا لأن جهاز الاستقبال سيجمع كل الضوضاء ولن يعمل المتحكم الدقيق على النحو المنشود. في هذه المقالة، أستخدم مكتبة VirtualWire لإرسال البيانات واستقبالها. تعمل هذه المكتبة مع Arduino IDE 1.6.2 و 1.6.5.
وحدة الإرسال 433 ميجاهرتز، عند عدم إرسال البيانات، لا تزال تصدر الترددات اللاسلكية وتنقل الضوضاء. وقد يتداخل أيضًا مع أجهزة الترددات الراديوية الأخرى. ولمنع حدوث ذلك، أقوم بتشغيله عند الحاجة إلى نقل البيانات وإيقاف تشغيله عند اكتمال النقل.
نحن بحاجة إلى اثنين من المخططات الهيكلية. واحد لجهاز الإرسال والثاني لجهاز الاستقبال.
نحن نحتاج:
نحن نحتاج:
في هذا المثال، لن أقوم بإخراج أطراف المتحكم الدقيق غير المستخدمة إلى نقاط التلامس الخارجية لمقياس الحرارة، وبعد ذلك يمكن استخدامها لتحسين الجهاز بشكل أكبر. نحن هنا نفكر فقط في فكرة الجهاز وسنقوم بتجميعه على اللوح فقط.
يرجى ملاحظة أن جهاز الاستقبال يعتمد على لوحة Arduino Mega، والتي لا تظهر في الرسم التخطيطي. لتوصيل لوحة Arduino Mega، قم بتوصيل وحدة RF وشاشة LCD بها وفقًا للعلامة الموجودة في الرسم التخطيطي.
أولاً، دعونا نلقي نظرة على برنامج جزء الإرسال:
ولإيصال الرطوبة ودرجة الحرارة في رسالة واحدة، أجمعهما معًا. أولاً، تتم قراءة البيانات إلى متغير كأعداد صحيحة، ثم يتم تحويل الأعداد الصحيحة إلى مصفوفة أحرف، ثم يتم ربطها مع بعضها البعض. في الطرف المتلقي، سيتم تقسيم البيانات إلى أحرف فردية. ومن خلال القيام بذلك، أقتصر على درجتين من رقمين. إذا كان المستشعر في بيئة بدرجة حرارة أقل من 10 درجات مئوية، فسوف أتلقى رموزًا غير مرغوب فيها على الشاشة. على سبيل المثال، إذا كانت درجة الحرارة 20 درجة مئوية والرطوبة 45%، فسيتم إرسال الرسالة 2045 وكل شيء على ما يرام. إذا كانت درجة الحرارة 9 درجات مئوية والرطوبة 78%، فسيتم إرسال الرسالة 978x، حيث "x" هو حرف عشوائي. لذلك، إذا قمت ببناء مقياس الحرارة اللاسلكي هذا، أنصحك بتغيير البرنامج لنقل البيانات الصحيحة عندما تكون درجة الحرارة أقل من 10 درجات مئوية.
إحدى الطرق المثيرة للاهتمام لاستخدام مكتبة LiquidCrystal هي إنشاء رموز مخصصة. باستخدام createChar قمت بإنشاء رمز الدرجة. يمكنك إنشاء الرموز الخاصة بك بنفس الطريقة. لإنشاء رمز أو رمز مخصص، يتعين عليك الإعلان عنه كمصفوفة مكونة من ثمانية بايت و"رسم" وحدات البكسل التي سيتم تشغيلها (1 قيد التشغيل، و0 معطل).
يعد مستشعر درجة الحرارة في الاردوينو أحد أكثر أنواع المستشعرات شيوعًا. لدى مطور مشاريع موازين الحرارة على Arduino العديد من الخيارات المختلفة المتاحة، والتي تختلف في مبدأ التشغيل والدقة والتصميم. يعد المستشعر الرقمي DS18B20 واحدًا من أكثر أجهزة استشعار درجة الحرارة شيوعًا، وغالبًا ما يستخدم في غلاف مقاوم للماء لقياس درجة حرارة الماء أو السوائل الأخرى. ستجد في هذه المقالة وصفًا لمستشعر ds18b20 باللغة الروسية؛ وسننظر معًا في ميزات الاتصال بـ Arduino، ومبدأ تشغيل المستشعر، ووصف للمكتبات والرسومات.
DS18B20 عبارة عن مستشعر درجة حرارة رقمي به العديد من الميزات المفيدة. في الواقع، DS18B20 عبارة عن وحدة تحكم دقيقة كاملة يمكنها تخزين قيم القياس، والإشارة عندما تتجاوز درجة الحرارة الحدود المحددة (يمكننا ضبط الحدود وتغييرها بأنفسنا)، وتغيير دقة القياسات، وطريقة التفاعل مع وحدة التحكم، وغير ذلك الكثير. أكثر. كل هذا في عبوة صغيرة جدًا، وهي متوفرة أيضًا بنسخة مقاومة للماء.
يحتوي مستشعر درجة الحرارة DS18B20 على مجموعة متنوعة من أنواع المساكن. يمكنك الاختيار من بين ثلاثة - 8-Pin SO (150 مل)، و8-Pin μSOP، و3-Pin TO-92. هذا الأخير هو الأكثر شيوعًا ويتم تصنيعه في علبة خاصة مقاومة للماء بحيث يمكن استخدامه بأمان تحت الماء. يحتوي كل مستشعر على 3 جهات اتصال. بالنسبة لحالة TO-92، عليك أن تنظر إلى لون الأسلاك: أسود - أرضي، أحمر - طاقة وأبيض/أصفر/أزرق - إشارة. يمكنك شراء وحدة DS18B20 الجاهزة من المتاجر عبر الإنترنت.
بطبيعة الحال، DS18B20 هو أرخص للشراء على Aliexpress، على الرغم من أنه يباع أيضًا في أي متاجر روسية متخصصة عبر الإنترنت مع Arduino. فيما يلي بعض الروابط كمثال:
تتكون ذاكرة المستشعر من نوعين: تشغيلية وغير متطايرة - SRAM وEEPROM. يحتوي الأخير على سجلات التكوين وسجلات TH، TL، والتي يمكن استخدامها كسجلات للأغراض العامة إذا لم يتم استخدامها للإشارة إلى نطاق قيم درجة الحرارة المسموح بها.
تتمثل المهمة الرئيسية لجهاز DS18B20 في تحديد درجة الحرارة وتحويل النتيجة الناتجة إلى شكل رقمي. يمكننا ضبط الدقة المطلوبة بشكل مستقل عن طريق تحديد عدد البتات الدقيقة - 9 و10 و11 و12. وفي هذه الحالات، ستكون الدقة 0.5C و0.25C و0.125C و0.0625C، على التوالي.
يتم تخزين قياسات درجة الحرارة الناتجة في ذاكرة SRAM الخاصة بالمستشعر. البايتات 1 و 2 تخزن قيمة درجة الحرارة المستلمة، 3 و 4 تخزن حدود القياس، 5 و 6 محجوزة، 7 و 8 تستخدم لتحديد درجة الحرارة عالية الدقة، آخر 9 بايت تخزن رمز CRC المقاوم للتداخل.
DS18B20 هو جهاز استشعار رقمي. تقوم المستشعرات الرقمية بنقل قيمة درجة الحرارة المقاسة في شكل رمز ثنائي محدد، والذي يتم إرساله إلى الأطراف الرقمية أو التناظرية للاردوينو ثم يتم فك تشفيره. يمكن أن تكون الرموز مختلفة تمامًا، ويعمل ds18b20 باستخدام بروتوكول البيانات 1-Wire. لن نخوض في تفاصيل هذا البروتوكول الرقمي، بل سنشير فقط إلى الحد الأدنى اللازم لفهم مبادئ التفاعل.
يتم تبادل المعلومات في 1-Wire من خلال العمليات التالية:
للعمل مع المستشعر نحتاج إلى برنامج:
المعدات التي سوف تحتاجها:
يتم توصيل المستشعر بلوحة Arduino UNO ببساطة: يتم توصيل GND من مستشعر درجة الحرارة بـ GND الخاص بـ Arduino، ويتم توصيل Vdd بـ 5V، ويتم توصيل البيانات بأي دبوس رقمي.
يظهر في الشكل أبسط مخطط اتصال للمستشعر الرقمي DS18B20.
تتكون خوارزمية الحصول على معلومات درجة الحرارة في الرسم من الخطوات التالية:
يبدو أبسط رسم للعمل مع جهاز استشعار رقمي مثل هذا. (في الرسم نستخدم مكتبة OneWire، والتي سنتحدث عنها بمزيد من التفصيل بعد قليل).
#يشمل
يمكنك تعقيد البرنامج الخاص بـ ds18b20 قليلاً للتخلص منه، مما يؤدي إلى إبطاء تنفيذ الرسم.
#يشمل
في رسوماتنا، يمكننا استخدام مكتبة DallasTemperature، التي تعمل على تبسيط بعض جوانب العمل باستخدام مستشعر ds18b20 عبر سلك واحد. مثال للرسم:
#يشمل
يستخدم DS18B20 بروتوكول 1-Wire لتبادل المعلومات مع Arduino، والذي تم بالفعل إنشاء مكتبة ممتازة له. يمكنك ويجب عليك استخدامه حتى لا يتم تنفيذ جميع الوظائف يدويًا. . لتثبيت المكتبة، قم بتنزيل الأرشيف وفك ضغطه في مجلد المكتبة في دليل Arduino الخاص بك. يتم تضمين المكتبة باستخدام الأمر #include
يتم توصيل جميع أجهزة الاستشعار DS18B20 على التوازي، ويكفي مقاوم واحد لها جميعًا. باستخدام مكتبة OneWire، يمكنك قراءة جميع البيانات من جميع أجهزة الاستشعار في وقت واحد. إذا كان عدد أجهزة الاستشعار المتصلة أكثر من 10، فأنت بحاجة إلى تحديد المقاوم بمقاومة لا تزيد عن 1.6 كيلو أوم. أيضًا، لقياس درجة الحرارة بشكل أكثر دقة، تحتاج إلى تثبيت مقاومة إضافية تبلغ 100...120 أوم بين مخرجات البيانات على لوحة Arduino ومخرجات البيانات على كل مستشعر. يمكنك معرفة المستشعر الذي تم استلام قيمة معينة منه باستخدام رمز تسلسلي فريد 64 بت سيتم إصداره نتيجة لتنفيذ البرنامج.
لتوصيل أجهزة استشعار درجة الحرارة في الوضع العادي، تحتاج إلى استخدام الدائرة الموضحة في الشكل.
تعد شريحة Dallas DS18B20 جهازًا مثيرًا للاهتمام للغاية. تتمتع أجهزة استشعار درجة الحرارة ومقاييس الحرارة التي تم إنشاؤها على أساسها بخصائص مقبولة لمعظم المهام، ووظائف متطورة، وغير مكلفة نسبيًا. اكتسب مستشعر DS18B20 شعبية خاصة كجهاز مقاوم للماء لقياس درجة حرارة السوائل.
تأتي القدرات الإضافية على حساب التعقيد النسبي في العمل مع المستشعر. لتوصيل DS18B20 سنحتاج بالتأكيد إلى مقاوم بقيمة حوالي 5K. للعمل مع المستشعر في رسومات Arduino، تحتاج إلى تثبيت مكتبة إضافية واكتساب مهارات معينة للعمل معها - كل شيء ليس تافهًا تمامًا. ومع ذلك، يمكنك شراء وحدة جاهزة، وفي معظم الحالات، تكفي الأمثلة البسيطة الواردة في هذه المقالة لرسم تخطيطي.
لقد قيل الكثير عن موازين الحرارة الرقمية المعتمدة على الأردوينو. جميعها إما متصلة بجهاز كمبيوتر أو تعرض درجات الحرارة مباشرة على الشاشة.
لكنني كنت بحاجة إلى مقياس حرارة خارجي مستقل ويرسل البيانات إلى الموقع. اذا هيا بنا نبدأ.
يشمل
// المكتبة أدناه غير مضمنة في بيئة تطوير Arduino القياسية.
// سيكون عليك نسخه.
يشمل// عنوان MAC لجهازنا
بايت ماك = ( 0x00, 0x3A, 0xF1, 0x19, 0x69, 0xFC );
// عنوان IP للجهاز
بايت IP = (192, 168, 1, 156);
// عنوان IP للخادم البعيد
خادم البايت = (79, 140, 28, 20); // التغيير لك
درجة الحرارة شار؛
بايت isdata=0;عميل العميل (الخادم، 80)؛ // 80 منفذ.
دالاس درجة الحرارة درجة الحرارة الاستشعار؛الإعداد باطل()
{
Ethernet.begin(mac, ip); // تهيئة درع إيثرنت
tempSensor.begin(7); // مستشعر درجة الحرارة على الدبوس السابع
Serial.begin(9600); // سرعة منفذ وحدة التحكم 9600 (مفيدة لتصحيح الأخطاء)
}حلقة فارغة()
{
تأخير (3000)؛ // تأخير 3 ثواني.
// يتصل
إذا (client.connect()) (
Serial.println("الاتصال..."); // Serial.println لتصحيح الأخطاء. من الأفضل تركها، فقط في حالة، سيكون من الأسهل فهم ما هي المشكلة.
// معالج خطأ الاستشعار
التبديل (tempSensor.isValid())
{
حالة 1:
Serial.println("اتفاقية حقوق الطفل غير صالحة"); // خطأ أختباري
tempSensor.reset(); // إعادة ضبط الجهاز
يعود ؛
الحالة 2:
Serial.println("جهاز غير صالح"); // نوع من أجهزة الاستشعار "الأيسر" :)
tempSensor.reset(); // إعادة ضبط الجهاز
يعود ؛
}Serial.println("متصلة");
شار بوف؛
float f=tempSensor.getTemperature(); // الحصول على درجة الحرارةSerial.println(tempSensor.getTemperature());
// أسفل الانحراف مع فصل الجزء الكسري والعدد الصحيح. لسبب ما، لا يريد Arduino العمل مع العوامة.
// إدراج سؤال بدلاً من رقم. ربما يكون هذا بسبب نقص دعم الأجهزة للعمل معه
// أرقام الفاصلة العائمة في اردوينو سأكون سعيدًا برؤية حل أكثر جمالًا في التعليقات.
int temp1 = (f - (int )f) * 100; // حدد الجزء الكسري
// إنشاء طلب الحصول على. هناك حاجة إلى متغير الكود لمنع مقياس حرارة العدو من إرسال قيم عشوائية.
// تم التحقق منه من جانب خادم الويب.
سبرينتف (بوف، "الحصول على /class/backend/meteo.php?temp=%0d.%d&code=123456 HTTP/1.0", (int )f, abs(temp1));Serial.println(buf);
println(buf); // أرسل طلب الحصول على
client.println("المضيف: opck.info" ); // نشير إلى المضيف المحدد الذي نهتم به على عنوان IP هذا.
println();) آخر (
Serial.println("فشل الاتصال");
}بينما (client.available()) (
isdata=1;
شار ج = العميل. قراءة ()؛ // اقرأ ما أجابنا عليه خادم الويب
Serial.print (ج)؛إذا (!client.connected()) (
isdata=0;
println();
Serial.println("قطع الاتصال.");
client.stop(); // إنهاء الاتصال
}
}
من الناحية النظرية، هذا كل شيء. يجب أن تعمل.
إنه يعمل، لكن ظروف القتال أظهرت أنه عندما يسقط ضوء الشمس على المستشعر، فإنه يمكن أن يسخن ويظهر درجة حرارة أعلى بكثير من درجة الحرارة الحقيقية. هذا صحيح - سوف تظهر درجة الحرارة في الشمس. ونحن بحاجة إلى درجة حرارة الهواء.
ولأول مرة، تم تجميع علبة القهوة المغلفة بورق الألمنيوم لهذا الغرض. لكن هذا لم يساعد.
ساعدت دراسة صور محطات الطقس الحقيقية في إيجاد حل. يجب أن يكون غلاف المستشعر أكبر وأن يكون به أيضًا تهوية نشطة لمثل هذه الحالات.
كما تتذكر، لقد استبدلت المقاوم بمصباح LED، لذلك قمنا أيضًا بعمل ثقب له حتى يمكن دائمًا رؤية تشغيل الجهاز.
لا نحتاج إلى غطاء من الجرة، بل نحتاج إلى مظلة، بحيث يمكن للهواء أن يمر عبرها ولا يدخل هطول الأمطار إلى الداخل (سيكون المستشعر موجودًا في الشارع).
لقد صنعت علبة Arduino من صندوق بلاستيكي من مشغل mp3 Explay C360.
أثناء تشغيل المستشعر لفترة طويلة، يتم اكتشاف مشكلة؛ وفي بعض الأحيان ينتج عنه تلقائيًا (كل 3-4 ساعات) قيمة عشوائية. لذلك، أضفت فحصًا لتغيرات درجة الحرارة لأكثر من درجة واحدة خلال 15 ثانية. يتم تجاهل هذه القيم.
في هذا البرنامج التعليمي سوف نستخدم مستشعر درجة الحرارة DS18B20 مع Arduino UNO لإنشاء مقياس حرارة. يعد مستشعر DS18B20 خيارًا جيدًا عندما يتطلب المشروع عالي الدقة استجابة جيدة. سنوضح لك كيفية توصيل DS18B20 بجهازك وعرض بيانات درجة الحرارة على شاشة LCD مقاس 16 × 2.
يتواصل مستشعر DS18B20 مع Arduino عبر ناقل ذو سلك واحد. بحكم التعريف، يلزم وجود خط بيانات (وأرضي) واحد فقط للتواصل مع Arduino.
يحتوي كل DS18B20 على رمز تسلسلي فريد 64 بت أو عنوان يسمح لعدة DS18B20 بالعمل على نفس الناقل أحادي السلك. ولذلك، فإن استخدام المعالج الدقيق يبسط إدارة أجهزة DS18B20 المتعددة الموزعة على مساحة كبيرة. تشمل تطبيقات هذه الوظيفة المراقبة البيئية وأنظمة التحكم في درجة الحرارة في المباني والمعدات الميكانيكية.
يستخدم هذا المشروع جهاز DS18B20، الذي يأتي على شكل مسبار درجة حرارة مقاوم للماء. يؤدي استخدام مستشعر مقاوم للماء إلى توسيع الإمكانيات - حيث سيكون مستشعر درجة الحرارة قادرًا على قياس درجة حرارة السوائل مثل الماء والمواد الكيميائية والشاي والقهوة.
تعد متطلبات المعدات الخاصة بمقياس الحرارة الخاص بك قياسية تمامًا، وسنحتاج إلى:
قم بإجراء الاتصالات وفقًا للرسم البياني أدناه.
توصيل الحساس والاردوينو
اتصالات لشاشات الكريستال السائل واردوينو UNO
قم بتوصيل مقياس الجهد كما هو موضح أعلاه بالدبوس 3 على شاشة LCD للتحكم في التباين.
يعمل هذا المشروع في درجات حرارة تصل إلى 125 درجة مئوية. إذا كان هناك أي اختلاف في قراءة درجة الحرارة، تحقق مرة أخرى من التوصيلات بالمقاوم المتصل بـ DS18B20. بعد ربط كل ما هو موضح أعلاه، يمكننا الانتقال إلى البرمجة.
قبل تنزيل الكود المصدري، تحتاج إلى تكوين المكتبتين المطلوبتين لتشغيل هذا الكود في بيئة Arduino.
بعد تنزيل كلا المكتبتين، انقل الملفات إلى مجلد مكتبات Arduino الافتراضي. ثم انسخ الرمز إلى وقم بتحميله بعد التحقق مرة أخرى من توصيل المستشعر الخاص بك بشكل صحيح.
// يبدأ الكود #includeيبدو شيء من هذا القبيل:
تمكنا من قياس درجات حرارة تصل إلى 100 درجة مئوية باستخدام هذا المستشعر! إنه مستجيب للغاية.
بمجرد إنشاء مشروعك، اختبر الجهاز عن طريق غمر المستشعر في الماء الساخن والبارد.