Pemanfaatan EEPROM untuk Sistem Kontrol Level Tangki dengan LCD 16×2

1️⃣ Tujuan Praktikum
Setelah mengikuti praktikum ini, mahasiswa mampu:
- Menggunakan sensor analog pada Arduino
- Mengendalikan aktuator (pompa & alarm)
- Menyimpan parameter kontrol ke EEPROM
- Menampilkan data proses pada LCD 16×2
- Membuat sistem kontrol yang tetap bekerja setelah power OFF
- Memahami konsep retentive memory seperti pada PLC
2️⃣ Dasar Teori Singkat
🔹 EEPROM Arduino
EEPROM (Electrically Erasable Programmable Read-Only Memory) adalah memori non-volatile yang digunakan untuk menyimpan data penting seperti:
- setpoint
- parameter alarm
- nilai kalibrasi
Data EEPROM tidak hilang saat catu daya mati.
🔹 Sistem Kontrol Level Tangki
Sistem kontrol industri umumnya terdiri dari:
- Sensor → membaca kondisi proses
- Controller → memproses logika
- Actuator → melakukan aksi
📌 Pada praktikum ini:
- Arduino berperan sebagai controller
- Potensiometer sebagai sensor level
- Pompa & alarm sebagai aktuator
3️⃣ Studi Kasus (Aplikatif & Industrial)
Sebuah tangki penyimpanan cairan memiliki:
- Sensor level
- Pompa pengisian
- Alarm level tinggi
Kebutuhan sistem:
- Pompa ON jika level < setpoint
- Pompa OFF jika level ≥ setpoint
- Alarm aktif jika level terlalu tinggi
- Setpoint bisa diubah operator
- Setpoint tersimpan di EEPROM
- Level & setpoint ditampilkan di LCD 16×2
4️⃣ Alat dan Bahan
| No | Alat | Keterangan |
| 1 | Arduino Uno | 1 buah |
| 2 | LCD 16×2 | Mode 4-bit |
| 3 | Potensiometer | Sensor level |
| 4 | Push Button UP | Setting setpoint |
| 5 | Push Button DOWN | Setting setpoint |
| 6 | LED / Relay | Pompa |
| 7 | LED / Buzzer | Alarm |
| 8 | Resistor & Kabel | Secukupnya |
| 9 | Proteus / Arduino IDE | Simulasi & real |
5️⃣ Konfigurasi Pin Arduino
🔹 Input
| Komponen | Pin |
| Sensor Level | A0 |
| Button UP | D2 |
| Button DOWN | D3 |
WIRING SENSOR LEVEL (POTENSIOMETER)
| Potensiometer | Arduino |
| Kaki 1 | 5V |
| Kaki Tengah (wiper) | A0 |
| Kaki 3 | GND |
WIRING PUSH BUTTON (UP & DOWN)
Menggunakan INPUT_PULLUP (DISARANKAN)
| Tombol | Arduino | Koneksi |
| UP | D2 | ke GND |
| DOWN | D3 | ke GND |
📌 Tidak perlu resistor eksternal
📌 Aktif LOW (saat ditekan = 0)
🔹 Output
| Komponen | Pin |
| Pompa | D8 |
| Alarm | D9 |
🚰 Pompa (LED / Relay)
| Komponen | Arduino |
| LED Anoda / Relay IN | D8 |
| LED Katoda | GND via R 330Ω |
📌 Label:
Pompa pengisian tangki
🚨 Alarm (LED / Buzzer)
| Komponen | Arduino |
| LED/Buzzer + | D9 |
| LED/Buzzer − | GND |
📌 Label:
Alarm level tinggi
🔹 LCD 16×2 (4-bit)
| LCD | Arduino |
| RS | D12 |
| E | D11 |
| D4 | D5 |
| D5 | D4 |
| D6 | D7 |
| D7 | D6 |
6️⃣ Alamat EEPROM
| Data | Alamat |
| Setpoint Level | 0 |
7️⃣ Cara Kerja Sistem
- Arduino membaca nilai sensor level
- Arduino membaca setpoint dari EEPROM
- Level & setpoint ditampilkan di LCD
- Jika level < setpoint → pompa ON
- Jika level ≥ setpoint → pompa OFF
- Jika level > setpoint + margin → alarm ON
- Setpoint dapat diubah menggunakan tombol
- Perubahan setpoint langsung disimpan ke EEPROM
8️⃣ Diagram Alur Sistem
Sensor Level
↓
Arduino + EEPROM
↓
Perbandingan Level vs Setpoint
↓
Pompa ON/OFF & Alarm
↓
LCD 16×2
9️⃣ Program Arduino (LCD + EEPROM)
#include <EEPROM.h>
#include <LiquidCrystal.h>
#define BTN_UP 2
#define BTN_DOWN 3
#define POMPA 8
#define ALARM 9
#define SENSOR A0
LiquidCrystal lcd(12,11,5,4,7,6);
int setpoint;
int level;
void setup() {
pinMode(BTN_UP, INPUT_PULLUP);
pinMode(BTN_DOWN, INPUT_PULLUP);
pinMode(POMPA, OUTPUT);
pinMode(ALARM, OUTPUT);
lcd.begin(16,2);
Serial.begin(9600);
EEPROM.get(0, setpoint);
if(setpoint < 100 || setpoint > 900){
setpoint = 500;
EEPROM.put(0, setpoint);
}
lcd.setCursor(0,0);
lcd.print("Level Control");
delay(1500);
lcd.clear();
}
void loop() {
level = analogRead(SENSOR);
// Tombol UP
if(digitalRead(BTN_UP) == LOW){
setpoint += 10;
EEPROM.put(0, setpoint);
delay(300);
}
// Tombol DOWN
if(digitalRead(BTN_DOWN) == LOW){
setpoint -= 10;
EEPROM.put(0, setpoint);
delay(300);
}
// Kontrol Pompa
digitalWrite(POMPA, level < setpoint);
// Alarm
digitalWrite(ALARM, level > setpoint + 50);
// LCD Display
lcd.setCursor(0,0);
lcd.print("Lvl:");
lcd.print(level);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Set:");
lcd.print(setpoint);
lcd.print(" ");
delay(500);
}
🔟 Prosedur Praktikum
- Simulasi Proteus
- Rangkai Arduino, LCD, potensiometer, LED
- Load file HEX hasil compile Arduino
- Jalankan simulasi
- Ubah potensiometer → level berubah
- Reset simulasi → setpoint tetap tersimpan
- Arduino Asli
- Upload program
- Putar potensiometer
- Tekan tombol UP/DOWN
- Cabut dan pasang kembali power
- Amati data tetap tersimpan
1️⃣1️⃣ Hasil yang Diharapkan
| Kondisi | Output |
| Level < Setpoint | Pompa ON |
| Level ≥ Setpoint | Pompa OFF |
| Level tinggi | Alarm ON |
| Power OFF | Data EEPROM tetap |
1️⃣2️⃣ Analisis & Pembahasan
- EEPROM berfungsi sebagai memori permanen
- LCD memudahkan monitoring proses
- Sistem menyerupai kontrol level PLC
- Cocok untuk aplikasi industri skala kecil
1️⃣3️⃣ Pertanyaan Diskusi
- Mengapa EEPROM tidak cocok untuk logging cepat?
- Apa dampak write EEPROM berulang?
- Bandingkan EEPROM dengan FRAM & SD Card
- Bagaimana sistem ini diimplementasikan di PLC?
1️⃣4️⃣ Kesimpulan
- EEPROM efektif untuk menyimpan parameter kontrol
- Sistem tetap bekerja normal setelah power OFF
- LCD meningkatkan kejelasan monitoring
- Praktikum berhasil mensimulasikan sistem industri nyata








