Search Code

LM75A درجہ حرارت سینسر LCD1602 I2C کے ساتھ

LM75A درجہ حرارت سینسر LCD1602 I2C کے ساتھ

اس ٹیوٹوریل میں، ہم سیکھیں گے کہ LM75A درجہ حرارت سینسر کو کیسے استعمال کریں تاکہ درجہ حرارت کی ریڈنگز سیلسیس اور فارن ہائیٹ دونوں میں LCD1602 اسکرین پر I2C کمیونیکیشن کے ذریعے ظاہر کی جا سکیں۔ LM75A -55°C سے +125°C تک درجہ حرارت کی پیمائش کر سکتا ہے، جو اسے مختلف ایپلیکیشنز کے لیے موزوں بناتا ہے۔ سیٹ اپ مکمل ہونے کے بعد، آپ LCD ڈسپلے پر ریئل ٹائم درجہ حرارت کی ریڈنگز دیکھ سکیں گے۔

LCD1602-I2C display module with 4 wires

اس پروجیکٹ کے لیے، ہم LM75A سینسر اور LCD1602 ماجیول استعمال کریں گے جو I2C کے ذریعے منسلک ہوں گے، جس سے وائرنگ آسان ہو جائے گی اور Arduino پر کم پن استعمال ہوں گے۔ مقصد ایک ایسا سسٹم بنانا ہے جو مسلسل درجہ حرارت پڑھے اور اسے LCD پر ظاہر کرے۔ اگر عمل کے کسی حصے پر وضاحت درکار ہو تو ویڈیو ٹیوٹوریل (ویڈیو میں 00:00 پر) ضرور دیکھیں۔

ہارڈویئر کی وضاحت

اس پروجیکٹ کے اہم اجزاء میں LM75A درجہ حرارت سینسر اور LCD1602 ڈسپلے شامل ہیں۔ LM75A ایک I2C درجہ حرارت سینسر ہے جو درست درجہ حرارت کی ریڈنگز فراہم کرتا ہے۔ یہ Arduino کے ساتھ صرف دو تاروں، SDA (ڈیٹا لائن) اور SCL (کلاک لائن) کے ذریعے کمیونیکیشن کرتا ہے، جس سے اسے آپ کے پروجیکٹس میں ضم کرنا آسان ہو جاتا ہے۔

LCD1602 ایک 16x2 کریکٹر ڈسپلے ہے جو ایک وقت میں 32 کریکٹرز تک دکھا سکتا ہے۔ I2C انٹرفیس استعمال کرنے سے، ہم اسے صرف دو اضافی تاروں کے ساتھ کنٹرول کر سکتے ہیں، جو وائرنگ کے عمل کو بہت آسان بناتا ہے۔ LCD کی بیک لائٹ خصوصیت کم روشنی والے ماحول میں بہتر مرئیت بھی فراہم کر سکتی ہے۔

ڈیٹا شیٹ کی تفصیلات

مینوفیکچررTexas Instruments
پارٹ نمبرLM75A
لاجک/آئی او وولٹیج2.7 V سے 5.5 V
سپلائی وولٹیج2.7 V سے 5.5 V
آؤٹ پٹ کرنٹ (فی چینل)N/A
پیک کرنٹ (فی چینل)N/A
PWM فریکوئنسی گائیڈنسN/A
ان پٹ لاجک تھریشولڈز0.3 * Vcc (کم)، 0.7 * Vcc (زیادہ)
وولٹیج ڈراپ / RDS(on) / سیچوریشنN/A
تھرمل حدودآپریٹنگ: -55°C سے +125°C
پیکیجSOT-23
نوٹس / ویریئنٹسمتعدد I2C ایڈریسز میں دستیاب

  • مناسب پاور سپلائی کو یقینی بنائیں (2.7 V سے 5.5 V)۔
  • ضرورت پڑنے پر SDA اور SCL لائنوں پر پل اپ ریزسٹرز استعمال کریں۔
  • متعدد ڈیوائسز کے لیے I2C ایڈریس کنفیگریشن چیک کریں۔
  • مداخلت کو کم کرنے کے لیے وائرنگ مختصر رکھیں۔
  • درجہ حرارت کی حد مانیٹر کریں: -55°C سے +125°C۔
  • درجہ حرارت کی ریڈنگز کو ڈیبگ کرنے کے لیے سیریل مانیٹر استعمال کریں۔
  • کوڈ میں ایرر اسٹیٹس کو مؤثر طریقے سے ہینڈل کریں۔
  • ڈسپلے کی پاور ضروریات سے محتاط رہیں۔

وائرنگ ہدایات

Arduino_wiring_LM75A_LCD_bb

LM75A درجہ حرارت سینسر اور LCD1602 کو وائر کرنے کے لیے، پاور سپلائی کو جوڑ کر شروع کریں۔ LM75A اور LCD1602 دونوں کے VCC پن کو Arduino کے 5V پن سے جوڑیں۔ پھر، دونوں ماڈیولز کے گراؤنڈ (GND) پن کو Arduino کے GND پن سے جوڑیں۔

اگلا، I2C کمیونیکیشن لائنز کو جوڑیں۔ LM75A کا SDA پن Arduino کے A4 پن سے منسلک ہونا چاہیے، جبکہ SCL پن A5 پن سے منسلک ہونا چاہیے۔ یہ سینسر اور Arduino کے درمیان I2C کمیونیکیشن کی اجازت دیتا ہے۔ یقینی بنائیں کہ کنکشنز مضبوط ہیں تاکہ کمیونیکیشن کی خرابیوں سے بچا جا سکے۔

کوڈ مثالیں اور واک تھرو

کوڈ میں، ہم سب سے پہلے LM75A سینسر اور LCD1602 ڈسپلے کے لیے ضروری لائبریریز شامل کرتے ہیں۔ درج ذیل اقتباس دکھاتا ہے کہ LM75A سینسر کا ایک انسٹنس کیسے بنایا جائے:

LM75A lm75a_sensor(false, false, false);

یہ لائن LM75A سینسر آبجیکٹ کو انیشیالائز کرتی ہے۔ بولین پیرامیٹرز LM75A کے A0، A1، اور A2 پنوں کے مطابق ہیں، جو ضرورت پڑنے پر مختلف I2C ایڈریسز کی اجازت دیتے ہیں۔

اگلا، ہم سیریل مانیٹر سیٹ اپ کرتے ہیں اور LCD ڈسپلے کو انیشیالائز کرتے ہیں:

void setup(void) {
  Serial.begin(9600);
  lcd.begin();  
  lcd.backlight();
  lcd.print("Robojax LM75A");
}

یہاں، ہم 9600 باؤڈ پر سیریل کمیونیکیشن شروع کرتے ہیں اور LCD ڈسپلے کو انیشیالائز کرتے ہیں۔ بیک لائٹ آن کی جاتی ہے، اور اسکرین پر ایک ابتدائی پیغام پرنٹ کیا جاتا ہے۔

مین لوپ میں، ہم مسلسل درجہ حرارت پڑھتے ہیں اور اسے ظاہر کرتے ہیں:

float temperature_in_degrees = lm75a_sensor.getTemperatureInDegrees();
if (temperature_in_degrees == INVALID_LM75A_TEMPERATURE) {
  Serial.println("Error while getting temperature");
}

یہ سیکشن سینسر سے درجہ حرارت حاصل کرتا ہے۔ اگر ریڈنگ غلط ہو تو، سیریل مانیٹر پر ایک ایرر پیغام بھیجا جاتا ہے۔ بصورت دیگر، درجہ حرارت پراسیس کیا جا سکتا ہے اور LCD پر ظاہر کیا جا سکتا ہے۔

ڈیمونسٹریشن / کیا توقع کریں

ایک بار جب سب کچھ وائر ہو جائے اور کوڈ اپ لوڈ ہو جائے، تو آپ کو LCD1602 ڈسپلے پر درجہ حرارت کی ریڈنگز نظر آئیں گی، جو سیلسیس اور فارن ہائیٹ کے درمیان تبدیل ہوتی رہیں گی۔ اگر LM75A سینسر صحیح طریقے سے کام کر رہا ہے، تو یہ ہر سیکنڈ میں ظاہر شدہ درجہ حرارت کو مسلسل اپ ڈیٹ کرے گا۔ اگر کوئی مسئلہ ہو، جیسے الٹی پولارٹی یا غلط وائرنگ، تو کنکشنز چیک کریں اور یقینی بنائیں کہ صحیح پن استعمال ہو رہے ہیں (ویڈیو میں 00:00 پر)۔

تصاویر

LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LM75a-1
LM75a-1
LM75a-3
LM75a-3
LM75a-12
LM75a-12
Arduino_wiring_LM75A_LCD_bb
Arduino_wiring_LM75A_LCD_bb
129-LM75A temperature sensor with LCD1602 I2C
زبان: C++
/*
 * \brief Show temperature in degrees Celsius and Fahrenheit every second
 *
 * \author Quentin Comte-Gaz <quentin@comte-gaz.com>
 * \date 8 July 2016
 * \license MIT License (contact me if too restrictive)
 * \copyright Copyright (c) 2016 Quentin Comte-Gaz
 * \version 1.0
 * 
 * Modified by Ahmad Shamshiri on July 12, 2018 at 22:40 for Robojax.com
 * in Ajax, Ontario, Canada
 * Watch video instructions for this code: https://youtu.be/hVo_msVMlaI
For this sketch, you need to connect:
VCC to 3.3V or 5V and GND to GND of the Arduino
SDA to A4 and SCL to A5

 */

#include <LM75A.h>

// Create I2C LM75A instance
LM75A lm75a_sensor(false,  //A0 LM75A pin state
                   false,  //A1 LM75A pin state
                   false); //A2 LM75A pin state
// Equivalent to "LM75A lm75a_sensor;"


// start of settings for LCD1602 with I2C
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
// end of settings for LCD1602 with I2C

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Robojax LM75A Test");
  // initialize the LCD
  lcd.begin();  
  lcd.backlight();
  lcd.print("Robojax LM75A");
  lcd.setCursor(0,1);
  lcd.print("Demo"); 
  delay(2000); 
}

void loop()
{
   lcd.clear();// clear previous values from screen
  // Robojax.com LM75A Test
  float temperature_in_degrees = lm75a_sensor.getTemperatureInDegrees();

  if (temperature_in_degrees == INVALID_LM75A_TEMPERATURE) {
    Serial.println("Error while getting temperature");
  } else {
    Serial.print("Temp: ");
    Serial.print(temperature_in_degrees);
    Serial.print(" C (");
    float tmpF = LM75A::degreesToFahrenheit(temperature_in_degrees);
    Serial.print(tmpF);
    Serial.println(" F)");
  lcdDisplay(
             // to print Celsius:
             0, // character 0 
             0, // line 0
             "Celsius: ", 

             // to print Celsius
             11, // character 10
             0, // line 0
             temperature_in_degrees 
             );  

  lcdDisplay(
             // to print Fahrenheit:
             0, // character 0 
             1, // line 1
             "Fahrenheit: ", 

             // to print Fahrenheit
             11, // character 9
             1, // line 0
             tmpF   
             );                 
  }

  delay(1000);
}


/*
 * lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
 * displays value and title on LCD1602
 * How to use:
 * If you want to display: "Voltage: 13.56mV" starting from the first character
 * on the second row.
 * use:
 * lcdDisplay(0, 1, "Voltage: ", 13.56)
 *   
 * tc  is the character number  (0)
 * tr is the row number in the LCD (1)
 * title is the text ("Voltage:")
 * vc is the character number for the value
 * vr is the row number for the value
 * value is the value (13.56)
 */
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
{
   // Robojax.com LCD1602 for LM75A Demo
   lcd.setCursor (tc,tr); //
   lcd.print(title);
   
   lcd.setCursor (vc,vr); //
   lcd.print(value);
 
}

آپ کو جن چیزوں کی ضرورت ہو سکتی ہے

وسائل اور حوالہ جات

فائلیں📁

فریٹزنگ فائل

دیگر فائلیں