كود البحث

الدرس 42: استخدام حساس درجة الحرارة LM35 | دورة اردوينو خطوة بخطوة

الدرس 42: استخدام حساس درجة الحرارة LM35 | دورة اردوينو خطوة بخطوة

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

يتميز حساس درجة الحرارة LM35 بثلاث دبابيس: الدبوس الأيسر هو لمصدر الطاقة، والدبوس الأوسط يخرج جهدًا يتوافق مع درجة الحرارة، والدبوس الأيمن هو للأرضي. يعمل الحساس ضمن نطاق جهد من 4 إلى 30 فولت ويوفر مخرجات قدرها 10 ملي فولت لكل درجة مئوية. تتيح هذه الدقة قراءة دقيقة لدرجات الحرارة في تطبيقات متنوعة.

شرح الأجهزة

المكون الرئيسي في هذا المشروع هو حساس درجة الحرارة LM35. تم تصميمه لتوفير خرج جهد تناظري يتناسب خطياً مع درجة الحرارة بالدرجات المئوية. الحساس مناسب لنطاق واسع من درجات الحرارة، من -55 درجة مئوية إلى +150 درجة مئوية، مما يجعله متعدد الاستخدامات لمجالات مختلفة.

لسان LM35

يتطلب LM35 طاقة mínima (60 ميكروأمبير) ويعمل ضمن نطاق جهد واسع. مقاومته الناتجة منخفضة، مما يسمح له بالتفاعل مباشرة مع دبابيس الإدخال التماثلي في الأردوينو بدون دوائر إضافية. تجعل هذه البساطة في التصميم LM35 خيارًا ممتازًا لمهام قياس درجة الحرارة.

تفاصيل ورقة البيانات

المصنع شركة تكساس إنسترومنتس
رقم الجزء LM35
جهد منطق/إدخال/إخراج ٤-٣٠ فولت
تيار الخرج (لكل قناة) 1 مللي أمبير كحد أقصى
نطاق درجة الحرارة -55 إلى +150 °س
جهد الخرج 10 مللي فولت/درجة مئوية
الدقة ±0.5 °م عند 25 °م
حزمة TO-92

  • تأكد من توفير مصدر طاقة مناسب بين 4 فولت و 30 فولت للحصول على قراءات دقيقة.
  • الجهد الناتج يتناسب طردياً مع درجة الحرارة (10 مللي فولت/°م).
  • استخدم مكثفات الفصل بالقرب من دبوس الطاقة لتحقيق الاستقرار.
  • حافظ على القطبية الصحيحة عند الاتصال لتجنب التلف.
  • تأكد من وجود اتصالات جيدة لتجنب المدخلات العائمة، التي يمكن أن تسبب قراءات خاطئة.

تعليمات التوصيل

LM35_basic_wiring_bb

لتركيب مستشعر الحرارة LM35، قم بتوصيل الطرف الأيسر (VCC) بمخرج 5 فولت على لوحة أردوينو. يجب توصيل الطرف الأوسط (Output) برقم المدخل التناظري.A0، والتي سنستخدمها لقياس درجة الحرارة. أخيرًا، قم بتوصيل الدبوس المناسب (الأرضي) بأحد دبابيس الأرضي على الأردوينو. تأكد من أن جميع الاتصالات آمنة لتجنب أي مشكلات أثناء التشغيل.

عند التوصيل، تذكر أن LM35 يمكن أن يعمل بجهد من 4V إلى 30V، ولكن استخدام 5V كافٍ لتطبيقات Arduino. إذا رأيت قراءات درجة حرارة غير متوقعة، تحقق مرة أخرى من التوصيلات وتأكد من أن المستشعر مزود بالطاقة بشكل صحيح.

أمثلة الشيفرة ودليل الاستخدام

في كود Arduino، نحدد دبابيس الإدخال التناظرية لقراءة جهد الخرج من LM35 باستخدام المعرفinPin، الذي من المقرر أنA0. بالإضافة إلى ذلك، نحدد ثابتًاLM35_FACTORحدد على 0.01 لتمثيل خرج المستشعر لكل درجة مئوية.

const int inPin = A0; // can change
const float LM35_FACTOR = 0.01; // do not change

تتيح لنا هذه الإعدادات قراءة درجة الحرارة بطريقة مباشرة. بعد ذلك، نقوم بتهيئة الاتصال التسلسلي فيsetup()وظيفة لبدء إخراج بيانات درجة الحرارة إلى المراقب التسلسلي.

void setup() {
  Serial.begin(9600);
  Serial.println("Robojax LM35 for Arduino");
}

داخل الـloop()نستمر في قراءة درجة الحرارة وطباعتها بوحدات مختلفة.printTemperature()تأخذ الدالة معامل حرفي لتحديد تنسيق درجة الحرارة المرغوب، مما يتيح لنا عرض درجة الحرارة بالدرجة المئوية أو الفهرنهايت أو الكلفن.

void loop() {
  printTemperature('C');
  printTemperature('F');
  printTemperature('K');
  delay(1000); // Wait for 1000ms
}

لإجراء عملية بناءً على درجة الحرارة، يمكننا التحقق مما إذا كانت درجة الحرارة تتجاوز حدًا معينًا باستخدام الـgetTemperature()هذه الدالة تحسب متوسط درجة الحرارة على عدد محدد من العينات.

لمزيد من التفاصيل، شاهد الفيديو المرتبط للحصول على جولة كاملة في الرمز (في الفيديو عند 10:15).

عرض / ماذا تتوقع

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

كن على علم بأن التوصيلات غير الصحيحة قد تؤدي إلى قراءات درجة حرارة غير منتظمة، مثل القيم المرتفعة أو المنخفضة للغاية. تأكد دائمًا من أن المستشعر متصل بشكل صحيح لتجنب مثل هذه المشاكل (في الفيديو في 12:30).

طوابق الفيديو

  • 00:00- مقدمة عن LM35
  • 02:30- تعليمات الأسلاك
  • 05:00- شرح الشيفرة
  • 10:15- عرض قراءات درجة الحرارة
  • ١٢:٣٠- المشاكل الشائعة واستكشاف الأخطاء وإصلاحها

الصور

LM35_basic_project
LM35_basic_project
LM35_basic_wiring_bb
LM35_basic_wiring_bb
LM35_pinout
LM35_pinout
503-Lesson 42: Using an LM35 Temperature Sensor with Arduino
اللغة: C++
++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 42: Introduction to LM35
 * This Arduino sketch is to use LM35 to measure temperature
 * This code has two ways to get temperature
 * 1-To print the temperature either in C, F or K on the serial monitor
 * 2-To return the value in C, F and K
 *


  Please watch video instruction here https://youtu.be/DRIC4wDu878
 This code is available at http://robojax.com/course1/?vid=lecture37
 
with over 100 lectures free on YouTube. Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339

 * Written by Ahmad Shamshiri on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
 * in Ajax, Ontario, Canada. www.robojax.com
 *


 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.


*/

const int inPin =A0;//can change
const int iteration = 1000; //can change (see video)
const float LM35_FACTOR =0.01;// do not change

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
  Serial.begin(9600);
  Serial.println("Robojax LM35 for Arduino");
  delay(500);
}

// the loop routine runs over and over again forever:
void loop() {
 //robojax.com LM35 Code for Arduino
  printTemperature('C');
  Serial.println();
  printTemperature('F');
  Serial.println();
  printTemperature('K');
  Serial.println();
  Serial.println();
//  Serial.print(" Temperature: ");
//  printDegree();
//  Serial.print(getTemperature('C'));
if(getTemperature('C') >87)
{
 // do something here (watch video)
}
//  Serial.println();
  delay(1000);//Wait for 1000ms (change it if you want)
}

/*
 * getTemperature()
 * @brief gets the average temperature
 * @param average temperature
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 * @return returns one of the values above
 * Written by Ahmad Shamshiri for robojax.com
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
float getTemperature(char type)
{
	// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
    float value,voltage,temperature;//define variables
    int sensorValue;
    float averageTemperature =0;

    for(int i=0; i< iteration; i++)
    {
      sensorValue = analogRead(inPin);//read analog value
      voltage = sensorValue * (5.0 / 1023.0); //convert it to voltage
      temperature = voltage / LM35_FACTOR; //convert voltage to temperature
      averageTemperature += temperature;//add
    }

    averageTemperature /=iteration;
  if(type =='F')
   {
    value = averageTemperature *9/5 + 32;//convert to Fahrenheit
   }else if(type =='K')
   {
    value = averageTemperature + 273.15;//convert to Kelvin
   }else{
    value = averageTemperature;// return Celsius
   }
    return value ;
}//getTemperature()

/*
 * printTemperature()
 * @brief prints  temperature on serial monitor
 * @param charact type
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 * @return none
 * Written by Ahmad Shamshiri for robojax.com
 * on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
 */
void printTemperature(char type)
{
	// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
    float value;
    float temp = getTemperature(type);
   Serial.print(temp);
    printDegree();
  if(type =='F')
   {
     Serial.print("F");
    }else if(type =='K')
   {
     Serial.print("K");
   }else{
     Serial.print("C");
   }

}//printTemperature()

/*
 * @brief prints degree symbol on serial monitor
 * @param none
 * @return returns nothing
 * Written by Ahmad Shamshiri on July 13, 2019
 * for Robojax Tutorial Robojax.com
 */
void printDegree()
{
    Serial.print("\\xC2");
    Serial.print("\\xB0");
}

الأشياء التي قد تحتاجها

الموارد والمراجع

ملفات📁

لا توجد ملفات متاحة.