Pengenalan EEPROM pada Arduino dan Cara Penggunaannya

 

Tutorial ini menjelaskan apa itu EEPROM pada Arduino dan kegunaannya. Selain itu, akan dibahas cara menulis (write) dan membaca (read) data dari EEPROM, serta contoh proyek sederhana untuk menerapkan konsep yang telah dipelajari.

Sebagai catatan, tersedia juga tutorial serupa untuk ESP32 yang membahas penyimpanan data permanen menggunakan flash memory.

Pendahuluan

Ketika kita mendefinisikan dan menggunakan sebuah variabel pada program Arduino (sketch), data yang dihasilkan hanya bertahan selama Arduino dalam kondisi menyala. Jika Arduino di-reset atau daya dimatikan, maka data tersebut akan hilang.

Apabila kita ingin menyimpan data agar tetap tersedia untuk penggunaan berikutnya meskipun Arduino dimatikan atau di-reset, maka kita perlu menggunakan EEPROM Arduino. EEPROM memungkinkan data variabel tetap tersimpan secara permanen.

Apa Itu EEPROM?

Mikrokontroler pada papan Arduino (misalnya ATmega328 pada Arduino Uno) memiliki memori EEPROM (Electrically Erasable Programmable Read-Only Memory). EEPROM merupakan memori berukuran kecil yang digunakan untuk menyimpan data bertipe byte.

Data yang disimpan di EEPROM tidak akan hilang meskipun Arduino di-reset atau sumber daya dimatikan. Secara sederhana, EEPROM dapat dianggap sebagai penyimpanan permanen, mirip seperti hard drive pada komputer, namun dengan kapasitas yang jauh lebih kecil.

EEPROM dapat:

  • Dibaca
  • Dihapus
  • Ditulis ulang secara elektronik

Pada Arduino, EEPROM dapat diakses dengan mudah menggunakan library EEPROM.

Kapasitas Penyimpanan EEPROM

Setiap alamat EEPROM hanya dapat menyimpan 1 byte data (8-bit), yang berarti hanya dapat menyimpan nilai antara 0 hingga 255.

Kapasitas EEPROM berbeda-beda tergantung jenis mikrokontroler Arduino yang digunakan, seperti ditunjukkan pada tabel berikut:

Mikrokontroler Kapasitas EEPROM
ATmega328 (Arduino Uno, Nano, Mini) 1024 byte
ATmega168 (Arduino Nano) 512 byte
ATmega2560 (Arduino Mega) 4096 byte

Jika kapasitas tersebut masih kurang, kita dapat menggunakan EEPROM eksternal.

Umur Pakai EEPROM

EEPROM memiliki umur pakai terbatas. Pada Arduino, setiap alamat EEPROM umumnya mampu menangani sekitar 100.000 siklus tulis/hapus.

Namun, proses pembacaan (read) tidak memiliki batasan, sehingga data dapat dibaca sebanyak apa pun tanpa mempengaruhi umur EEPROM.

Aplikasi EEPROM pada Proyek Arduino

Menyimpan Kondisi Terakhir (Last State)

EEPROM sangat berguna pada proyek Arduino yang membutuhkan penyimpanan data meskipun daya mati, seperti:

  • Mengingat kondisi terakhir suatu perangkat
  • Menghitung jumlah aktivasi suatu alat

Contoh kasus:

  • Arduino mengontrol sebuah lampu dan lampu dalam keadaan menyala
  • Tiba-tiba listrik mati
  • Ketika listrik kembali menyala, lampu kembali mati, bukan ke kondisi sebelumnya

Kondisi ini sering tidak diinginkan. Idealnya, Arduino dapat mengingat kondisi terakhir sebelum kehilangan daya.

Solusinya adalah dengan menyimpan status lampu ke EEPROM, lalu saat Arduino menyala kembali, program akan membaca data tersebut dan mengatur kondisi lampu sesuai nilai yang tersimpan.

Membaca dan Menulis EEPROM

Untuk menggunakan EEPROM, kita perlu menambahkan library berikut:

#include <EEPROM.h>

Menulis Data ke EEPROM

Untuk menulis data ke EEPROM digunakan fungsi:

EEPROM.write(address, value);

Contoh: menyimpan nilai 9 pada alamat 0:

EEPROM.write(0, 9);

Membaca Data dari EEPROM

Untuk membaca data dari EEPROM digunakan fungsi:

EEPROM.read(address);

Contoh membaca data dari alamat 0:

EEPROM.read(0);

Jika sebelumnya tersimpan nilai 9, maka fungsi ini akan mengembalikan nilai tersebut.

Memperbarui Data (Update)

Arduino menyediakan fungsi EEPROM.update() yang lebih efisien:

EEPROM.update(address, value);

Fungsi ini hanya akan menulis data jika nilainya berbeda dengan data yang sudah tersimpan. Dengan demikian, jumlah siklus tulis EEPROM dapat dikurangi dan umur EEPROM menjadi lebih panjang.

Contoh Proyek

Arduino Mengingat Status LED

Pada contoh ini, Arduino akan mengingat status LED (ON/OFF) meskipun di-reset atau dimatikan.

Komponen yang Dibutuhkan

  • Arduino Uno
  • 1 buah LED
  • 1 buah resistor 220 Ω
  • 1 buah push button
  • 1 buah resistor 1 kΩ
  • Breadboard
  • Kabel jumper

Skema Rangkaian

Rangkaian terdiri dari sebuah push button yang digunakan untuk menyalakan dan mematikan LED.

Program Arduino

Kode berikut akan:

  • Mengubah status LED setiap kali tombol ditekan
  • Menyimpan status LED ke EEPROM
  • Membaca status LED dari EEPROM saat Arduino dinyalakan kembali
#include <EEPROM.h>




const int buttonPin = 8;

const int ledPin = 4;




int ledState;

int buttonState;

int lastButtonState = LOW;




long lastDebounceTime = 0;

long debounceDelay = 50;




void setup() {

  pinMode(buttonPin, INPUT);

  pinMode(ledPin, OUTPUT);




  Serial.begin(9600);




  checkLedState();

}




void loop() {

  int reading = digitalRead(buttonPin);




  if (reading != lastButtonState) {

    lastDebounceTime = millis();

  }




  if ((millis() - lastDebounceTime) > debounceDelay) {

    if (reading != buttonState) {

      buttonState = reading;




      if (buttonState == HIGH) {

        ledState = !ledState;

      }

    }

  }




  digitalWrite(ledPin, ledState);

  EEPROM.update(0, ledState);




  lastButtonState = reading;

}




void checkLedState() {

  Serial.println("Status LED setelah restart:");

  ledState = EEPROM.read(0);




  if (ledState == 1) {

    Serial.println("ON");

    digitalWrite(ledPin, HIGH);

  } else {

    Serial.println("OFF");

    digitalWrite(ledPin, LOW);

  }

}

Penjelasan Program

Program ini menggunakan teknik debounce untuk membaca tombol dengan stabil.
Setiap perubahan status LED disimpan ke EEPROM menggunakan:

EEPROM.update(0, ledState);

Saat Arduino dinyalakan kembali, fungsi checkLedState() akan:

  1. Membaca nilai EEPROM
  2. Mengatur LED sesuai status terakhir sebelum Arduino mati

Dengan demikian, Arduino dapat mengingat kondisi terakhir LED, meskipun terjadi reset atau pemadaman listrik.

 

Related Articles