Search Code

Sensor Suhu LM75A dengan LCD1602 I2C

Sensor Suhu LM75A dengan LCD1602 I2C

Dalam tutorial ini, kita akan mempelajari cara menggunakan sensor suhu LM75A untuk menampilkan pembacaan suhu dalam Celsius dan Fahrenheit pada layar LCD1602 menggunakan komunikasi I2C. LM75A dapat mengukur suhu mulai dari -55°C hingga +125°C, sehingga cocok untuk berbagai aplikasi. Setelah pengaturan selesai, Anda akan dapat melihat pembacaan suhu secara real-time pada layar LCD.

LCD1602-I2C display module with 4 wires

Untuk proyek ini, kita akan menggunakan sensor LM75A dan modul LCD1602 yang terhubung melalui I2C, yang memungkinkan pengkabelan lebih sederhana dan penggunaan pin yang lebih sedikit pada Arduino. Tujuannya adalah untuk membuat sistem yang terus membaca suhu dan menampilkannya pada LCD. Jika Anda memerlukan klarifikasi tentang bagian mana pun dari proses ini, pastikan untuk menonton tutorial video (di video pada 00:00).

Penjelasan Perangkat Keras

Komponen utama untuk proyek ini termasuk sensor suhu LM75A dan layar LCD1602. LM75A adalah sensor suhu I2C yang memberikan pembacaan suhu yang akurat. Sensor ini berkomunikasi dengan Arduino hanya melalui dua kabel, SDA (jalur data) dan SCL (jalur clock), sehingga mudah diintegrasikan ke dalam proyek Anda.

LCD1602 adalah layar karakter 16x2 yang dapat menampilkan hingga 32 karakter sekaligus. Dengan menggunakan antarmuka I2C, kita dapat mengontrolnya hanya dengan dua kabel tambahan, yang sangat menyederhanakan proses pengkabelan. Fitur lampu latar pada LCD juga dapat memberikan visibilitas yang lebih baik di lingkungan dengan cahaya rendah.

Detail Datasheet

ProdusenTexas Instruments
Nomor bagianLM75A
Tegangan logika/IO2,7 V hingga 5,5 V
Tegangan suplai2,7 V hingga 5,5 V
Arus keluaran (per saluran)T/A
Arus puncak (per saluran)T/A
Panduan frekuensi PWMT/A
Ambang logika input0,3 * Vcc (rendah), 0,7 * Vcc (tinggi)
Penurunan tegangan / RDS(on) / saturasiT/A
Batas termalOperasi: -55°C hingga +125°C
KemasanSOT-23
Catatan / varianTersedia dalam beberapa alamat I2C

  • Pastikan catu daya yang tepat (2,7 V hingga 5,5 V).
  • Gunakan resistor pull-up pada jalur SDA dan SCL jika diperlukan.
  • Periksa konfigurasi alamat I2C untuk beberapa perangkat.
  • Jaga kabel tetap pendek untuk meminimalkan interferensi.
  • Pantau rentang suhu: -55°C hingga +125°C.
  • Gunakan monitor serial untuk debugging pembacaan suhu.
  • Tangani kondisi kesalahan dalam kode secara efektif.
  • Berhati-hatilah dengan kebutuhan daya layar.

Instruksi Pengkabelan

Arduino_wiring_LM75A_LCD_bb

Untuk menghubungkan sensor suhu LM75A dan LCD1602, mulailah dengan menghubungkan catu daya. Hubungkan pin VCC dari LM75A dan LCD1602 ke pin 5V pada Arduino. Kemudian, hubungkan pin ground (GND) dari kedua modul ke pin GND pada Arduino.

Selanjutnya, hubungkan jalur komunikasi I2C. Pin SDA dari LM75A harus dihubungkan ke pin A4 pada Arduino, sedangkan pin SCL harus dihubungkan ke pin A5. Ini memungkinkan komunikasi I2C antara sensor dan Arduino. Pastikan koneksi aman untuk mencegah kesalahan komunikasi.

Contoh Kode & Penjelasan

Dalam kode, pertama-tama kita menyertakan library yang diperlukan untuk sensor LM75A dan layar LCD1602. Cuplikan berikut menunjukkan cara membuat instance dari sensor LM75A:

LM75A lm75a_sensor(false, false, false);

Baris ini menginisialisasi objek sensor LM75A. Parameter boolean sesuai dengan pin A0, A1, dan A2 dari LM75A, memungkinkan alamat I2C yang berbeda jika diperlukan.

Selanjutnya, kita mengatur monitor serial dan menginisialisasi layar LCD:

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

Di sini, kita memulai komunikasi serial pada 9600 baud dan menginisialisasi layar LCD. Lampu latar dinyalakan, dan pesan awal dicetak ke layar.

Dalam loop utama, kita terus membaca suhu dan menampilkannya:

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

Bagian ini mengambil suhu dari sensor. Jika pembacaan tidak valid, pesan kesalahan dikirim ke monitor serial. Jika tidak, suhu dapat diproses dan ditampilkan pada LCD.

Demonstrasi / Apa yang Diharapkan

Setelah semuanya terhubung dan kode diunggah, Anda akan melihat pembacaan suhu pada layar LCD1602, bergantian antara Celsius dan Fahrenheit. Jika sensor LM75A berfungsi dengan benar, sensor akan terus memperbarui suhu yang ditampilkan setiap detik. Jika ada masalah, seperti polaritas terbalik atau pengkabelan yang salah, periksa koneksi dan pastikan pin yang benar digunakan (di video pada 00:00).

Gambar

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

Hal-hal yang mungkin Anda butuhkan

Sumber daya & referensi

Berkas📁

File Fritzing

File lainnya