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:
Buka Arduino IDE.
Pilih Sketch > Include Library > Manage Libraries...
Cari "LiquidCrystal I2C" (biasanya oleh Frank de Brabander).
Klik "Install".
Kode Program:
// --- 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:
#include <Wire.h>
dan#include <LiquidCrystal_I2C.h>
: Diperlukan untuk komunikasi LCD I2C.const int LM35_PIN = A0;
: Mendefinisikan pin analogA0
sebagai input untuk sensor LM35.LiquidCrystal_I2C lcd(0x27, 16, 2);
: Menginisialisasi objek LCD. Pastikan alamat I2C (0x27
) sesuai dengan modul Anda.float temperatureC = 0; float temperatureF = 0;
: Variabel untuk menyimpan nilai suhu dalam Celcius dan Fahrenheit. Kita gunakanfloat
karena suhu bisa memiliki nilai desimal.unsigned long lastUpdateTime = 0; const long UPDATE_INTERVAL = 1000;
:Menggunakan pendekatan non-blocking delay (
millis()
) untuk memperbarui tampilan LCD setiapUPDATE_INTERVAL
(1 detik). Ini membuat program lebih responsif dibandingkan menggunakandelay()
yang akan menghentikan seluruh eksekusi program.
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.
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.
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 nilaitemperatureC
dengan satu angka di belakang koma. Anda bisa mengubah1
menjadi0
untuk bilangan bulat, atau2
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:
Pastikan Semua Pengkabelan Benar: Periksa kembali koneksi LM35 dan LCD I2C ke Arduino.
Instal Library: Pastikan library
LiquidCrystal_I2C
sudah terinstal di Arduino IDE Anda.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 barisLiquidCrystal_I2C lcd(0x27, 16, 2);
.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.
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
Posting Komentar