قرائة مستشعر درجة الحرارة على الهاتف الذكي
objectif
يتحدث المقال عن مشروع مقياس الحرارة ، والفرق الرئيسي عن المشاريع المماثلة هو أن قيمة مستشعر درجة الحرارة ستنتقل إلى الهاتف الذكي عبر البلوتوث وستظهر على شاشته. يمكن وضع مستشعر درجة الحرارة هذا في مكان يصعب الوصول إليه ، مثل خلف النافذة أو في الثلاجة. ولا يزال بإمكانك التحقق من درجة الحرارة دون ملامسة المستشعر بالعين. تقوم بتشغيل تطبيق جوال ، والاتصال عبر البلوتوث ، وترى شاشة الهاتف الذكي أو الجهاز اللوحي للتحقق من درجة الحرارة. يتم تنفيذ المستشعر نفسه باستخدام Arduino. لتطبيق قيم نقل درجة الحرارة على الهاتف الذكي ، نستخدم مكتبة RemoteXY
لتصنيع الجزء الكهربائي من الجهاز ، فأنت بحاجة إلى أي لوحة Arduino ، ومقاوم حرارة 1K ، ومقاوم 1K ، وهي أيضًا حجرة بطارية مرغوبة لإمداد طاقة Arduino المستقل. سوف يناسب الثرمستور أي مقاوم من 1-100 كلفن ، ولكن في هذه الحالة يجب أن يكون المقاوم هو نفسه. يوجد أدناه رسم تخطيطي لوصلات جميع العناصر الهيكلية. فعلنا كل شيء معًا على لوح التجارب.
يتم تضمين دائرة الثرمستور في مقسم الجهد ، وهو كتف ثانٍ وهو مقاومة ثابتة. لذلك عندما تتغير درجات الحرارة سوف تغير مقاومة الثرمستور ، وبالتالي ذراع واحد من مقسم الجهد. سوف يتغير مقسم الجهد مع درجة الحرارة. نقطة المنتصف لمقسم الجهد الذي قمنا بتوصيله بمدخل تناظري
اردوينو بالرقم A5.
تطوير البرنامج سنبدأ بمعايرة المستشعر. المعايرة ، نقوم بتنفيذ نقطتين ، وللقيام بذلك نحتاج إلى درجة الحرارة المرجعية. لدي مقياس حرارة للغرفة يقرأ 25 درجة مئوية ، ستكون هذه أول درجة حرارة مرجعية. أعلم أن درجة حرارة جسدي 36.6 درجة مئوية ، وستكون هذه هي درجة الحرارة المرجعية الثانية. لذلك لنفترض أن مقاومة الثرمستور الخاصة بنا في حدود معينة تختلف خطيًا باختلاف درجة الحرارة. هذا ، بعد ذلك ، لحساب درجة الحرارة الحالية سيستخدم الاستيفاء الخطي
للمعايرة ، نحتاج إلى تحديد قيمة إدخال Arduino ADC باستخدام مستشعر درجة الحرارة الذي اخترناه كمرجع. استخدم Serial and port Monitor ، لنقل قيمة ADC إلى الكمبيوتر بحيث يمكننا أن نرى ما هي عليه عندما تكون درجات الحرارة المرجعية لدينا. للقيام بذلك ، نحتاج إلى رسم Arduino البسيط التالي.
هذا الرسم التخطيطي في كل دورة من البرنامج يقيس جهد الدبوس التناظري A5 ، ويرقمه ويرسله إلى المسلسل. يمكنك توصيل مراقب المنفذ (مراقب الخدمة / المنفذ) ومعرفة القيم التي يتم تمريرها. نحتاج الآن إلى تذكر قيم ADC هذه عند درجة الحرارة المرجعية المختارة. أول درجة حرارة مرجعية تحصل عليها ، إذا كان الثرمستور في الغرفة لفترة كافية. للحصول على درجة الحرارة المرجعية الثانية ، قم بتوصيل الثرمستور بجسمك واحتفظ به لبضع دقائق. أعد كتابة قيم ADC ، التي يتم تمريرها إلى شاشة المنفذ عند درجات الحرارة هذه. لدينا القيم التالية:
T=25.0°C ADC=580
T=36.6°C ADC=514
قم بالوصول إلى محرر RemoteXY عبر الإنترنت وأنشئ واجهة الإدارة. يتكون من حقل نص ، يتم من خلاله نقل درجة الحرارة المقاسة ، وتسمية نصية. يتم تحديد طول حقل النص المحدد في المعلمات من خلال الحد الأقصى لطول السلسلة التي تم تمريرها. في حالتنا ، يمكن أن يكون "-40.0" أو "100.0". أي أن طول السلسلة لا يمكن أن يتجاوز 5 أحرف. يمكنك ترك النظام الافتراضي بطول 10 أحرف.تم تحديده في إعدادات المشروع لمنصة Arduino المستهدفة (SoftwareSerial) ، وإصدار المكتبة وكود المصدر الذي تم إنشاؤه لواجهتنا. لا تنس تنزيل مكتبة RemoteXY واستيرادها إلى Arduino IDE (مكتبة رسم / استيراد / إضافة مكتبة ...).
لنقل قيمة درجة الحرارة إلى شاشة الهاتف الذكي ، نحتاج إلى الحصول على القيمة الحالية من ADC ، والحصول على قيمة درجة الحرارة الحالية باستخدام الاستيفاء الخطي على النقطتين المعروفتين ، وتحويل القيمة المستلمة إلى سلسلة وكتابتها في حقل text_1 لأنماط RemoteXY. لتحويل نوع مزدوج إلى سلسلة باستخدام الوظيفة: dtostrf (floatVar،
minStringWidthIncDecimalPoint، numVarsAfterDecimal، charBuf) مشكلة الاستيفاء الخطي التي سنحلها باستخدام صيغة بسيطة:
بتجميع كل شيء معًا نحصل على الكود المصدري التالي هو رسم تخطيطي لـ Arduino
/////////////////////////////////////////////
// RemoteXY include library //
/////////////////////////////////////////////
/* RemoteXY select connection mode and include library */
#define REMOTEXY_MODE__SOFTWARESERIAL
#include <SoftwareSerial.h>
#include <RemoteXY.h>
/* RemoteXY connection settings */
#define REMOTEXY_SERIAL_RX 2
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL_SPEED 9600
/* RemoteXY configurate */
unsigned char RemoteXY_CONF[] =
{ 0,11,27,0,1,5,67,0,24,23
,54,16,2,11,129,0,23,12,39,9
,0,84,101,109,112,44,32,194,176,67
,0 };
/* this structure defines all the variables of your control interface */
struct {
/* output variable */
char text_1[11]; /* string end zero UNICODE */
/* other variable */
unsigned char connect_flag; /* =1 if wire connected, else =0 */
} RemoteXY;
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
/* the first measured value of the first point */
#define SENS_1_VAL 514
#define SENS_1_TMP 36.6
/* the second measured value of the second point */
#define SENS_2_VAL 580
#define SENS_2_TMP 25.0
void setup()
{
RemoteXY_Init ();
Serial.begin(9600);
}
void loop()
{
RemoteXY_Handler ();
/* get the ADC value */
int sensorValue = analogRead(A5);
/*
calculated current temperature using
a linear interpolation on the two known points
*/
double temp = SENS_1_TMP + (SENS_2_TMP - SENS_1_TMP) /
(SENS_2_VAL - SENS_1_VAL) * (sensorValue - SENS_1_VAL);
/*
convert the temperature value into a string
and place it immediately in the field text_1 patterns RemoteXY
*/
dtostrf(temp, 0, 1, RemoteXY.text_1);
/*
send the value of the ADC to Serial
in order that we could check the values
*/
Serial.println(sensorValue);
delay(1);
}
// RemoteXY include library //
/////////////////////////////////////////////
/* RemoteXY select connection mode and include library */
#define REMOTEXY_MODE__SOFTWARESERIAL
#include <SoftwareSerial.h>
#include <RemoteXY.h>
/* RemoteXY connection settings */
#define REMOTEXY_SERIAL_RX 2
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL_SPEED 9600
/* RemoteXY configurate */
unsigned char RemoteXY_CONF[] =
{ 0,11,27,0,1,5,67,0,24,23
,54,16,2,11,129,0,23,12,39,9
,0,84,101,109,112,44,32,194,176,67
,0 };
/* this structure defines all the variables of your control interface */
struct {
/* output variable */
char text_1[11]; /* string end zero UNICODE */
/* other variable */
unsigned char connect_flag; /* =1 if wire connected, else =0 */
} RemoteXY;
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
/* the first measured value of the first point */
#define SENS_1_VAL 514
#define SENS_1_TMP 36.6
/* the second measured value of the second point */
#define SENS_2_VAL 580
#define SENS_2_TMP 25.0
void setup()
{
RemoteXY_Init ();
Serial.begin(9600);
}
void loop()
{
RemoteXY_Handler ();
/* get the ADC value */
int sensorValue = analogRead(A5);
/*
calculated current temperature using
a linear interpolation on the two known points
*/
double temp = SENS_1_TMP + (SENS_2_TMP - SENS_1_TMP) /
(SENS_2_VAL - SENS_1_VAL) * (sensorValue - SENS_1_VAL);
/*
convert the temperature value into a string
and place it immediately in the field text_1 patterns RemoteXY
*/
dtostrf(temp, 0, 1, RemoteXY.text_1);
/*
send the value of the ADC to Serial
in order that we could check the values
*/
Serial.println(sensorValue);
delay(1);
}
REALISATION
تعليقات
إرسال تعليق