Proyek 18 – LCD Temperature Display

Menggunakan LCD untuk menampilkan informasi, pada proyek ini akan display temperature yang dibaca dari analog temperature sensor. Kita akan menambahkan tombol untuk menampilkan dalam centigrade atau farenheit. Dan menambahkan informasi suhu maksimum dan minimum pada baris kedua.

Komponen

  • 16×2 Backlit LCD
  • Current-Limiting Resistor (Backlight)
  • Contrast-Setting Resistor
  • Pull-Down Resistor
  • Pushbutton
  • Analog Temp Sensor

Skema

Proyek Arduino LCD Temperature Display

Sketch

#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // create an lcd object and assign the pins
int maxC=0, minC=100, maxF=0, minF=212;
int scale = 1;
int buttonPin=8;

void setup() {
  lcd.begin(16, 2); // Set the display to 16 columns and 2 rows
  analogReference(INTERNAL);
  // analogReference(INTERNAL1V1); If you have an Arduino Mega
  pinMode(buttonPin, INPUT);
  lcd.clear();

}

void loop() {
  lcd.setCursor(0,0); // set cursor to home position

  int sensor = analogRead(0); // read the temp from sensor

  int buttonState = digitalRead(buttonPin); // check for button press

  switch (buttonState) { // change scale state if pressed
    case HIGH:
      scale=-scale; // invert scale
      lcd.clear();

  }

  switch (scale) { // decide if C or F scale
    case 1:
      celsius(sensor);
      break;
    case -1:
      fahrenheit(sensor);
  }

  delay(250);

}

void celsius(int sensor) {
  lcd.setCursor(0,0);

  int temp = sensor * 0.1074188; // convert to C

  lcd.print(temp);
  lcd.write(B11011111); // degree symbol
  lcd.print("C ");

  if (temp>maxC) {maxC=temp;}

  if (temp<minC) {minC=temp;}

  lcd.setCursor(0,1);
  lcd.print("H=");
  lcd.print(maxC);
  lcd.write(B11011111);
  lcd.print("C L=");
  lcd.print(minC);
  lcd.write(B11011111);
  lcd.print("C ");

}

void fahrenheit(int sensor) {
  lcd.setCursor(0,0);

  float temp = ((sensor * 0.1074188) * 1.8)+32; // convert to F

  lcd.print(int(temp));
  lcd.write(B11011111); // print degree symbol
  lcd.print("F ");

  if (temp>maxF) {maxF=temp;}

  if (temp<minF) {minF=temp;}

  lcd.setCursor(0,1);
  lcd.print("H=");
  lcd.print(maxF);
  lcd.write(B11011111);
  lcd.print("F L=");
  lcd.print(minF);
  lcd.write(B11011111);
  lcd.print("F ");

}

Pembahasan Sketch

Load library LiquidCrystal kedalam sketch. Kemudian inisialisasi object lcd dengan mengatur pin yang digunakan.

include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // create an lcd object and assign the pins

Inisialisasi beberapa variable integer untuk menyimpan data suhu maximum and minimum pada deraja celcius dan farenheit. Nilai ini akan langsung diupdate saat program berjalan pertama kali.

int maxC=0, minC=100, maxF=0, minF=212;

Inisialisasi variable scale dengan tipe int dengan nilai 1. variable akan digunakan untuk menentukan skala apa yang akan digunakan. Default diset 1, yaitu Celsius. Dapat diganti menjadi -1 jika ingin defaultnya Fahrenheit.

int scale = 1;

Inisialisai variable integer untuk menyimpan pin yang digunakan untuk tombol .

int buttonPin=8;

Pada fungsi setup() , atur display dalam format 16 kolom and 2 baris.

lcd.begin(16, 2); // Set the display to 16 columns and 2 rows

Atur referensi analog pin ke INTERNAL.

analogReference(INTERNAL);

Pin analog akan memberikan jangkauan yang lebih baik pada Arduino ADC (analog to digital convertor) hingga meningkatkan akurasi dan sensitifitas rangkaian.

Set button pin sebagai input dan bersihkan layar

pinMode(buttonPin, INPUT);
lcd.clear();

Pada main loop, atur cursor pada posisi home

lcd.setCursor(0,0); // set cursor to home position

Baca nilai dari sensor suhu pada analog pin 0.

int sensor = analogRead(0); // read the temp from sensor

Baca status dari tombol dan simpan pada variable buttonState.

int buttonState = digitalRead(buttonPin); // check for button press

Kemudian hitung berdasarkan skala celcius atau farenheit. Bila celcius, panggil fungsi perhitungan celcius, begitu juga dengan farenheit. Kemudian beri perintah delay.

switch (buttonState) { // change scale state if pressed
    case HIGH:
      scale=-scale; // invert scale
      lcd.clear();
  }

  switch (scale) { // decide if C or F scale
    case 1:
      celsius(sensor);
      break;
    case -1:
      fahrenheit(sensor);
  }
  delay(250);

void celsius(int sensor) {
  lcd.setCursor(0,0);
  int temp = sensor * 0.1074188; // convert to C
  lcd.print(temp);
  lcd.write(B11011111); // degree symbol

  lcd.print("C ");
  if (temp>maxC) {maxC=temp;}
  if (temp<minC) {minC=temp;}
  lcd.setCursor(0,1);
  lcd.print("H=");
  lcd.print(maxC);
  lcd.write(B11011111);
  lcd.print("C L=");
  lcd.print(minC);
  lcd.write(B11011111);
  lcd.print("C ");
}

void fahrenheit(int sensor) {
  lcd.setCursor(0,0);
  float temp = ((sensor * 0.1074188) * 1.8)+32; // convert to F
  lcd.print(int(temp));
  lcd.write(B11011111); // print degree symbol
  lcd.print("F ");
  if (temp>maxF) {maxF=temp;}
  if (temp<minF) {minF=temp;}
  lcd.setCursor(0,1);
  lcd.print("H=");
  lcd.print(maxF);
  lcd.write(B11011111);
  lcd.print("F L=");
  lcd.print(minF);
  lcd.write(B11011111);
  lcd.print("F ");
}
Sharing is caring: