Termometer Digital dengan Arduino, LM35, dan LCD 16x2 I2C

 Mari kita buat program baru untuk termometer digital menggunakan Arduino dan LCD 16x2 I2C. Kita akan menggunakan sensor suhu populer, yaitu LM35, yang sangat mudah digunakan karena memberikan output tegangan yang linier terhadap suhu dalam derajat Celcius.


Termometer Digital dengan Arduino, LM35, dan LCD 16x2 I2C

Program ini akan membaca suhu dari sensor LM35 dan menampilkannya dalam derajat Celcius dan Fahrenheit pada LCD 16x2 I2C.

Komponen yang Dibutuhkan:

  • Arduino Board (misalnya Arduino Uno)

  • Sensor Suhu LM35

  • LCD 16x2 dengan Modul I2C

  • Kabel Jumper

Skema Pengkabelan:

1. Sensor Suhu LM35 ke Arduino:

LM35 memiliki 3 pin:

  • Pin 1 (kiri, Vcc): Hubungkan ke pin 5V Arduino.

  • Pin 2 (tengah, Vout): Hubungkan ke pin Analog Input A0 Arduino.

  • Pin 3 (kanan, GND): Hubungkan ke pin GND Arduino.

2. LCD 16x2 I2C ke Arduino:

  • SDA LCD ke pin A4 Arduino.

  • SCL LCD ke pin A5 Arduino.

  • VCC LCD ke pin 5V Arduino.

  • GND LCD ke pin GND Arduino.


Instalasi Library:

Pastikan Anda sudah menginstal library LiquidCrystal_I2C. Jika belum:

  1. Buka Arduino IDE.

  2. Pilih Sketch > Include Library > Manage Libraries...

  3. Cari "LiquidCrystal I2C" (biasanya oleh Frank de Brabander).

  4. Klik "Install".


Kode Program:

Arduino
// --- Library yang Dibutuhkan ---
#include <Wire.h>          // Diperlukan untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C

// --- Konfigurasi Pin Sensor ---
const int LM35_PIN = A0; // Pin analog tempat sensor LM35 terhubung

// --- Konfigurasi LCD ---
// Inisialisasi objek LCD dengan alamat I2C, jumlah kolom, dan jumlah baris
// Alamat I2C umum: 0x27 atau 0x3F. Jika tidak yakin, gunakan I2C Scanner.
LiquidCrystal_I2C lcd(0x27, 16, 2);

// --- Variabel untuk Pembacaan Suhu ---
float temperatureC = 0; // Suhu dalam Celcius
float temperatureF = 0; // Suhu dalam Fahrenheit

// --- Variabel untuk Update Tampilan ---
unsigned long lastUpdateTime = 0;
const long UPDATE_INTERVAL = 1000; // Update setiap 1 detik (1000 ms)

void setup() {
  // --- Inisialisasi Serial (Debugging, opsional) ---
  Serial.begin(9600);
  Serial.println("Digital Thermometer Started");

  // --- Inisialisasi LCD ---
  lcd.init();      // Inisialisasi LCD
  lcd.backlight(); // Hidupkan backlight LCD
  lcd.clear();     // Bersihkan tampilan awal
  lcd.setCursor(0, 0);
  lcd.print("Digital Thermo");
  lcd.setCursor(0, 1);
  lcd.print("Loading...");
  delay(2000); // Jeda singkat untuk tampilan awal
}

void loop() {
  // Hanya update setiap UPDATE_INTERVAL untuk stabilitas dan menghindari flicker LCD
  if (millis() - lastUpdateTime >= UPDATE_INTERVAL) {
    lastUpdateTime = millis();

    // --- Membaca Nilai dari Sensor LM35 ---
    // LM35 memberikan 10mV per derajat Celcius.
    // Arduino ADC 10-bit (0-1023) untuk 0-5V.
    // Resolusi = (5000 mV / 1024) = ~4.88 mV per unit ADC.
    int analogValue = analogRead(LM35_PIN);

    // --- Mengkonversi Nilai Analog ke Tegangan ---
    // Tegangan = (nilai analog * (Tegangan Referensi ADC / Resolusi ADC))
    // Untuk Arduino Uno, Tegangan Referensi default adalah 5000mV (5V)
    // Resolusi ADC adalah 1024 (karena 2^10 = 1024 nilai dari 0-1023)
    float voltage_mV = (analogValue / 1024.0) * 5000.0; // Tegangan dalam milivolt

    // --- Mengkonversi Tegangan ke Suhu Celcius ---
    // LM35 memiliki output 10 mV per derajat Celcius
    temperatureC = voltage_mV / 10.0;

    // --- Mengkonversi Suhu Celcius ke Fahrenheit ---
    temperatureF = (temperatureC * 9 / 5) + 32;

    // --- Menampilkan Suhu di Serial Monitor (Debugging) ---
    Serial.print("Analog Value: "); Serial.print(analogValue);
    Serial.print("\tVoltage: "); Serial.print(voltage_mV); Serial.print("mV");
    Serial.print("\tTemp C: "); Serial.print(temperatureC); Serial.print(" C");
    Serial.print("\tTemp F: "); Serial.print(temperatureF); Serial.println(" F");

    // --- Menampilkan Suhu di LCD ---
    lcd.clear(); // Bersihkan LCD setiap kali update untuk tampilan yang rapi

    // Baris 0: Suhu dalam Celcius
    lcd.setCursor(0, 0);
    lcd.print("Temp: ");
    lcd.print(temperatureC, 1); // Tampilkan 1 angka di belakang koma
    lcd.print((char)223); // Karakter derajat (simbol khusus ASCII)
    lcd.print("C");

    // Baris 1: Suhu dalam Fahrenheit
    lcd.setCursor(0, 1);
    lcd.print("Temp: ");
    lcd.print(temperatureF, 1); // Tampilkan 1 angka di belakang koma
    lcd.print((char)223); // Karakter derajat
    lcd.print("F");
  }
}

Penjelasan Kode:

  1. #include <Wire.h> dan #include <LiquidCrystal_I2C.h>: Diperlukan untuk komunikasi LCD I2C.

  2. const int LM35_PIN = A0;: Mendefinisikan pin analog A0 sebagai input untuk sensor LM35.

  3. LiquidCrystal_I2C lcd(0x27, 16, 2);: Menginisialisasi objek LCD. Pastikan alamat I2C (0x27) sesuai dengan modul Anda.

  4. float temperatureC = 0; float temperatureF = 0;: Variabel untuk menyimpan nilai suhu dalam Celcius dan Fahrenheit. Kita gunakan float karena suhu bisa memiliki nilai desimal.

  5. unsigned long lastUpdateTime = 0; const long UPDATE_INTERVAL = 1000;:

    • Menggunakan pendekatan non-blocking delay (millis()) untuk memperbarui tampilan LCD setiap UPDATE_INTERVAL (1 detik). Ini membuat program lebih responsif dibandingkan menggunakan delay() yang akan menghentikan seluruh eksekusi program.

  6. int analogValue = analogRead(LM35_PIN);:

    • Membaca nilai tegangan dari pin LM35_PIN. Arduino mengubah tegangan analog (0-5V) menjadi nilai digital antara 0 hingga 1023.

  7. Konversi Nilai Analog ke Suhu:

    • float voltage_mV = (analogValue / 1024.0) * 5000.0;

      • Mengkonversi nilai analogValue (0-1023) kembali ke tegangan dalam milivolt (0-5000 mV).

      • 1024.0 digunakan untuk memastikan pembagian adalah floating-point. 5000.0 adalah tegangan referensi ADC Arduino dalam mV.

    • temperatureC = voltage_mV / 10.0;

      • Sensor LM35 menghasilkan 10 milivolt (mV) untuk setiap derajat Celcius. Jadi, untuk mendapatkan suhu dalam Celcius, kita cukup membagi tegangan dalam mV dengan 10.

    • temperatureF = (temperatureC * 9 / 5) + 32;

      • Rumus standar untuk mengkonversi Celcius ke Fahrenheit.

  8. Menampilkan di LCD:

    • lcd.clear();: Membersihkan layar LCD sebelum menampilkan nilai baru. Ini penting agar tampilan tetap rapi, terutama jika jumlah digit suhu berubah.

    • lcd.print(temperatureC, 1);: Menampilkan nilai temperatureC dengan satu angka di belakang koma. Anda bisa mengubah 1 menjadi 0 untuk bilangan bulat, atau 2 untuk dua desimal, dll.

    • lcd.print((char)223);: Ini adalah cara untuk menampilkan **simbol derajat (°) ** di LCD. Karakter ASCII 223 adalah simbol derajat pada banyak LCD karakter.

Sebelum Mengunggah Program:

  1. Pastikan Semua Pengkabelan Benar: Periksa kembali koneksi LM35 dan LCD I2C ke Arduino.

  2. Instal Library: Pastikan library LiquidCrystal_I2C sudah terinstal di Arduino IDE Anda.

  3. Periksa Alamat I2C LCD: Jika LCD tidak berfungsi setelah diunggah, kemungkinan besar alamat I2C (defaultnya 0x27) tidak sesuai dengan modul LCD Anda. Anda bisa menjalankan program "I2C Scanner" (cari di contoh library Wire atau online) untuk menemukan alamat yang benar, lalu ubah di baris LiquidCrystal_I2C lcd(0x27, 16, 2);.

  4. Pilih Board dan Port: Di Arduino IDE, pastikan Anda telah memilih board Arduino yang benar (misalnya "Arduino Uno") di Tools > Board dan port serial yang benar di Tools > Port.

  5. Unggah Kode: Klik tombol "Upload".

Setelah diunggah, LCD akan mulai menampilkan suhu dalam derajat Celcius dan Fahrenheit, yang akan diperbarui setiap detik. Anda juga bisa membuka Serial Monitor untuk melihat data mentah dan hasil konversi.

Komentar