Mahir Arduino Sketch dan Elektro secara praktek

23 - LCD Temperature Display

Proyek ini akan mendemonstrasikan penggunaan LCD untuk menampilkan informasi yang berguna, pada kasus ini akan menampilkan suhu 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
  • 16x2 Backlit LCD
  • Current-Limiting Resistor (Backlight)
  • Contrast-Setting Resistor
  • Pull-Down Resistor
  • Pushbutton
  • Analog Temp Sensor

Skema



Code


#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 code
Seperti pada proyek sebelumnya, library LiquidCrystal  kita load 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 ini 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()  kita 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);

Jika menggunakan Arduino Mega gunakan perintah berikut analogReference(INTERNAL1v1);

Dengan menggunakan pin analog seperti ini memberikan kita 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 kita hitung berdasarkan status button apakah perhitungan menggunakan skala celcius atau farenheit. Bila celcius maka kita akan menmanggil fungsi perhitungan celcius, atau bila farenheit program akan memanggil fungsi perhitungan farenheit. Kemudian beri perintah delay sebentar.

  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 ");
}


Nah, semoga artikel ini bermanfaat dalam menambah pengetahuan menggunakan LCD dan komponen sensor suhu.

Artikel Sebelumnya LCD Basic
Artikel Selanjutnya Servo Control

No comments:

Post a Comment