JOBSHEET PRAKTIK IoT
Menampilkan dan Menggeser Teks pada LCD I2C 16×2
A. Identitas Praktik
| Komponen | Keterangan |
|---|---|
| Mata Pelajaran | Informatika / IoT |
| Kompetensi | Mikrokontroler Arduino |
| Materi | LCD I2C 16×2 |
| Kelas | XII TKJ |
| Alokasi Waktu | 4 JP |
| Metode | Praktik dan eksperimen |
| Software | Arduino IDE |
| Simulator | Tinkercad / Arduino nyata |
B. Tujuan Pembelajaran
Setelah melakukan praktik, siswa diharapkan mampu:
Menjelaskan fungsi LCD I2C 16×2.
Menjelaskan fungsi komunikasi I2C.
Menghubungkan LCD I2C dengan Arduino Uno.
Menggunakan library
LiquidCrystal_I2C.Menampilkan teks pada LCD.
Mengatur posisi teks menggunakan
setCursor().Membuat teks bergerak ke kanan dan kiri.
Memahami penggunaan
fordandelay()pada program Arduino.Melakukan modifikasi program dan menguji hasilnya.
C. Alat dan Bahan
Arduino Uno
LCD 16×2 I2C
Kabel jumper
Breadboard
Kabel USB
Komputer/laptop
Arduino IDE
Jika menggunakan simulator, komponen dapat disesuaikan dengan komponen yang tersedia.
D. Dasar Teori
LCD 16×2 adalah perangkat output yang dapat menampilkan karakter. Angka 16×2 berarti LCD mempunyai 16 kolom dan 2 baris.
Modul I2C memungkinkan Arduino berkomunikasi dengan LCD menggunakan lebih sedikit kabel.
Pada Arduino Uno umumnya:
| LCD I2C | Arduino Uno |
|---|---|
| VCC | 5V |
| GND | GND |
| SDA | A4 |
| SCL | A5 |
Catatan: alamat I2C yang sering digunakan adalah
0x27, tetapi pada beberapa modul dapat berbeda.
E. Rangkaian Praktik
Hubungkan:
LCD I2C → Arduino Uno
LCD I2C Arduino Uno
----------------------------
VCC → 5V
GND → GND
SDA → A4
SCL → A5F. Langkah Kerja
Praktik 1 — Menampilkan Teks
Hubungkan LCD I2C dengan Arduino.
Buka Arduino IDE.
Pastikan library
LiquidCrystal_I2Ctersedia.Masukkan program berikut.
Pilih board Arduino Uno.
Pilih port Arduino.
Upload program.
Amati tampilan LCD.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
lcd.init();
lcd.backlight();
}
void loop()
{
lcd.setCursor(0, 0);
lcd.print("Selamat Belajar");
lcd.setCursor(0, 1);
lcd.print("IoT Bersama Juni");
}Pertanyaan:
Apa fungsi
lcd.init()?Apa fungsi
lcd.backlight()?Apa arti angka
16,2pada program?Apa fungsi
lcd.setCursor(0,0)?Mengapa teks pada baris kedua tidak boleh terlalu panjang?
Praktik 2 — Membuat Teks Berjalan
Ubah program menjadi:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
lcd.init();
lcd.backlight();
}
void loop()
{
lcd.setCursor(0, 0);
lcd.print("Selamat Belajar");
lcd.setCursor(0, 1);
lcd.print("IoT Bersama Juni");
for (int i = 0; i < 20; i++)
{
lcd.scrollDisplayRight();
delay(200);
}
for (int i = 0; i < 20; i++)
{
lcd.scrollDisplayLeft();
delay(200);
}
}G. Eksperimen
Lakukan perubahan berikut dan amati hasilnya.
| Percobaan | Perubahan | Hasil Pengamatan |
|---|---|---|
| 1 | delay(200) → delay(500) | |
| 2 | delay(200) → delay(100) | |
| 3 | i < 20 → i < 10 | |
| 4 | i < 20 → i < 40 | |
| 5 | Ganti tulisan baris 1 | |
| 6 | Ganti tulisan baris 2 |
H. Tantangan Praktik
Buat program LCD dengan ketentuan:
Baris 1:
SELAMAT DATANG
Baris 2:
SISWA TKJ
Kemudian buat tulisan bergerak:
kanan → kiri → kanan
Tambahkan jeda sehingga pergerakan tulisan terlihat nyaman.
I. Tugas Analisis
Jawablah pertanyaan berikut:
Apa fungsi library
Wire.h?Apa fungsi library
LiquidCrystal_I2C.h?Apa fungsi alamat
0x27?Apa fungsi
lcd.print()?Apa fungsi
lcd.setCursor()?Apa perbedaan
scrollDisplayRight()danscrollDisplayLeft()?Apa fungsi
forpada program?Apa pengaruh perubahan nilai
delay(200)?Apa yang terjadi jika nilai perulangan
42diperbesar?Mengapa program diletakkan di dalam
loop()?
J. Kesimpulan
Tuliskan kesimpulan berdasarkan praktik yang telah dilakukan.
Kesimpulan siswa:
....................................................................................
....................................................................................
....................................................................................
K. Penilaian
| Aspek Penilaian | Bobot |
|---|---|
| Persiapan alat dan rangkaian | 15% |
| Ketepatan koneksi LCD | 20% |
| Ketepatan program | 25% |
| Keberhasilan praktik | 20% |
| Eksperimen/modifikasi | 10% |
| Laporan dan kesimpulan | 10% |
| Total | 100% |
L. Produk Akhir
Setiap siswa harus menghasilkan:
1. Rangkaian Arduino Uno + LCD I2C 16×2
2. Program LCD menampilkan teks
3. Efek teks berjalan kanan dan kiri
4. Minimal 3 modifikasi program
5. Laporan hasil praktik
Level pengembangan: siswa yang selesai lebih cepat dapat ditantang membuat LCD menampilkan nama siswa, kelas, dan pesan berjalan secara bergantian.
TAMBAHAN
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variabel waktu
unsigned long waktuSebelumnya = 0;
int jam = 7;
int menit = 0;
int detik = 0;
// Variabel scrolling
int posisi = 0;
int arah = 1;
void setup()
{
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop()
{
// =========================
// MENGHITUNG WAKTU
// =========================
unsigned long waktuSekarang = millis();
if (waktuSekarang - waktuSebelumnya >= 1000)
{
waktuSebelumnya = waktuSekarang;
detik++;
if (detik >= 60)
{
detik = 0;
menit++;
}
if (menit >= 60)
{
menit = 0;
jam++;
}
if (jam >= 24)
{
jam = 0;
}
}
// =========================
// MENAMPILKAN JAM
// =========================
lcd.setCursor(0, 0);
if (jam < 10)
lcd.print("0");
lcd.print(jam);
lcd.print(":");
if (menit < 10)
lcd.print("0");
lcd.print(menit);
lcd.print(":");
if (detik < 10)
lcd.print("0");
lcd.print(detik);
lcd.print(" ");
// =========================
// MENAMPILKAN TEKS
// =========================
lcd.setCursor(0, 1);
lcd.print("Selamat Belajar ");
// =========================
// SCROLL TEKS
// =========================
if (waktuSekarang % 200 < 20)
{
if (arah == 1)
{
lcd.scrollDisplayRight();
posisi++;
if (posisi >= 42)
{
arah = -1;
}
}
else
{
lcd.scrollDisplayLeft();
posisi--;
if (posisi <= 0)
{
arah = 1;
}
}
}
}
PENDETEKSI SUHU
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int pinTMP36 = A0;
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Sensor Suhu");
lcd.setCursor(0, 1);
lcd.print("TMP36");
delay(2000);
lcd.clear();
Serial.begin(9600);
}
void loop()
{
// Membaca sensor TMP36
int nilaiADC = analogRead(pinTMP36);
// Mengubah ADC menjadi tegangan
float tegangan = nilaiADC * (5.0 / 1023.0);
// Mengubah tegangan menjadi suhu Celsius
float suhu = (tegangan - 0.5) * 100.0;
// Menampilkan pada LCD
lcd.setCursor(0, 0);
lcd.print("Suhu:");
lcd.setCursor(5, 0);
lcd.print(suhu, 1);
lcd.print((char)223);
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("ADC:");
lcd.print(nilaiADC);
lcd.print(" ");
// Serial Monitor
Serial.print("ADC = ");
Serial.print(nilaiADC);
Serial.print(" | Tegangan = ");
Serial.print(tegangan, 2);
Serial.print(" V");
Serial.print(" | Suhu = ");
Serial.print(suhu, 1);
Serial.println(" C");
delay(1000);
}
Tidak ada komentar:
Posting Komentar