Kod Ara

LM75A Sıcaklık Sensörü LCD1602 I2C ile

LM75A Sıcaklık Sensörü LCD1602 I2C ile

Bu eğitimde, I2C iletişimi kullanarak LM75A sıcaklık sensörünü kullanarak sıcaklık okumalarını hem Celsius hem de Fahrenheit cinsinden bir LCD1602 ekranda nasıl görüntüleyeceğimizi öğreneceğiz. LM75A, -55°C ile +125°C arasındaki sıcaklıkları ölçebilir ve bu da onu çeşitli uygulamalar için uygun hale getirir. Kurulum tamamlandığında, LCD ekranda gerçek zamanlı sıcaklık okumalarını görebileceksiniz.

LCD1602-I2C display module with 4 wires

Bu proje için, I2C üzerinden bağlanan LM75A sensörünü ve LCD1602 modülünü kullanacağız; bu, daha basit kablolama ve Arduino'da daha az pin kullanımı sağlar. Amaç, sıcaklığı sürekli okuyan ve LCD'de görüntüleyen bir sistem oluşturmaktır. Sürecin herhangi bir bölümünde açıklamaya ihtiyacınız olursa, video eğitimini kontrol ettiğinizden emin olun (videoda 00:00'da).

Donanım Açıklaması

Bu projenin ana bileşenleri LM75A sıcaklık sensörü ve LCD1602 ekranıdır. LM75A, doğru sıcaklık okumaları sağlayan bir I2C sıcaklık sensörüdür. Arduino ile yalnızca iki kablo üzerinden iletişim kurar: SDA (veri hattı) ve SCL (saat hattı), bu da projelerinize entegre etmeyi kolaylaştırır.

LCD1602, aynı anda 32 karaktere kadar gösterebilen 16x2 karakterli bir ekrandır. I2C arayüzünü kullanarak, onu yalnızca iki ek kablo ile kontrol edebiliriz, bu da kablolama sürecini büyük ölçüde basitleştirir. LCD'nin arka aydınlatma özelliği, düşük ışıklı ortamlarda daha iyi görünürlük sağlayabilir.

Veri Sayfası Ayrıntıları

ÜreticiTexas Instruments
Parça numarasıLM75A
Mantık/IO voltajı2,7 V ila 5,5 V
Besleme voltajı2,7 V ila 5,5 V
Çıkış akımı (kanal başına)Yok
Tepe akımı (kanal başına)Yok
PWM frekans kılavuzuYok
Giriş mantık eşikleri0,3 * Vcc (düşük), 0,7 * Vcc (yüksek)
Gerilim düşümü / RDS(on) / doyumYok
Termal sınırlarÇalışma: -55°C ila +125°C
PaketSOT-23
Notlar / varyantlarBirden fazla I2C adresinde mevcuttur

  • Doğru güç kaynağını sağlayın (2,7 V ila 5,5 V).
  • Gerekirse SDA ve SCL hatlarında pull-up dirençleri kullanın.
  • Birden fazla cihaz için I2C adres yapılandırmasını kontrol edin.
  • Paraziti en aza indirmek için kabloları kısa tutun.
  • Sıcaklık aralığını izleyin: -55°C ila +125°C.
  • Sıcaklık okumalarında hata ayıklamak için seri monitörü kullanın.
  • Kodda hata durumlarını etkili bir şekilde ele alın.
  • Ekranın güç gereksinimlerine dikkat edin.

Kablolama Talimatları

Arduino_wiring_LM75A_LCD_bb

LM75A sıcaklık sensörünü ve LCD1602'yi bağlamak için güç kaynağını bağlayarak başlayın. Hem LM75A'nın hem de LCD1602'nin VCC pinini Arduino'daki 5V pinine bağlayın. Ardından, her iki modülün toprak (GND) pinini Arduino'daki GND pinine bağlayın.

Sonra, I2C iletişim hatlarını bağlayın. LM75A'nın SDA pini Arduino'daki A4 pinine, SCL pini ise A5 pinine bağlanmalıdır. Bu, sensör ile Arduino arasında I2C iletişimini sağlar. İletişim hatalarını önlemek için bağlantıların güvenli olduğundan emin olun.

Kod Örnekleri ve Açıklama

Kodda, önce LM75A sensörü ve LCD1602 ekranı için gerekli kütüphaneleri dahil ediyoruz. Aşağıdaki alıntı, LM75A sensörünün bir örneğini nasıl oluşturacağınızı gösterir:

LM75A lm75a_sensor(false, false, false);

Bu satır, LM75A sensör nesnesini başlatır. Boolean parametreler, LM75A'nın A0, A1 ve A2 pinlerine karşılık gelir ve gerektiğinde farklı I2C adreslerine izin verir.

Sonra, seri monitörü kurar ve LCD ekranı başlatırız:

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

Burada, seri iletişimi 9600 baud'da başlatıyor ve LCD ekranı başlatıyoruz. Arka aydınlatma açılır ve ekrana bir başlangıç mesajı yazdırılır.

Ana döngüde, sıcaklığı sürekli okur ve görüntüleriz:

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

Bu bölüm, sensörden sıcaklığı alır. Okuma geçersizse, seri monitöre bir hata mesajı gönderilir. Aksi takdirde, sıcaklık işlenebilir ve LCD'de görüntülenebilir.

Gösterim / Beklentiler

Her şey bağlandığında ve kod yüklendiğinde, LCD1602 ekranda Celsius ve Fahrenheit arasında değişen sıcaklık okumalarını görmelisiniz. LM75A sensörü doğru çalışıyorsa, görüntülenen sıcaklığı her saniye sürekli güncelleyecektir. Ters polarite veya yanlış kablolama gibi herhangi bir sorun varsa, bağlantıları kontrol edin ve doğru pinlerin kullanıldığından emin olun (videoda 00:00'da).

Görseller

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
Dil: 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);
 
}

İhtiyacın olabileceğini düşünüyor

Kaynaklar ve referanslar

Dosyalar📁

Fritzing Dosyası

Diğer dosyalar