Arduino uno R3 adalah board mikrokontroller berbasis ATmega328P. Uno R3 memiliki 14 pin digital yang dapat digunakan sebagai input ataupun output dan 6 di antaranya dapat digunakan sebagai PWM serta memiliki 6 pin analog yang digunakan sebagai input. Uno R3 dilengkapi dengan resonator berbahan keramik dengan kekuatan 16 MHz dan untuk mengaktifkannya maka gunakanlah koneksi USB yang sudah terpasang dengan arduino uno R3. Uno R3 juga dilengkapi dengan tombol reset dan header ISCP. Spesifikasi di atas sudah cukup lengkap bagi programmer, tentunya disesuaikan lagi dengan kebutuhan koding masing-masing proyek.
Ukuran berat arduino uno R3 sekitar 25 gram, lebar 53,4 mm, dan panjang 68,6 mm. Uno R3 memiliki 2 prosesor yaitu prosesor utama dan prosesor serial USB. Prosesor utama ialah ATmega328P dengan kekuatan 16 MHz dan prosesor serial USB ialah ATmega1602 dengan kekuatan yang sama yaitu 16 MHz.
Tegangan on-off arduino uno R3 sebesar 5V, tegangan masukan atau nominal sebesar 7V sampai 12V, dan arus DC per pin on-off sebesar 20 mA. Uno R3 memiliki pin LED bawaan sejumlah 13 pin, pin on-off digital sejumlah 14 pin, pin masukan analog sejumlah 8 pin, dan pin PWM sejumlah 6 pin yang didapat dari pin digital input ataupun output. Uno R3 dilengkapi dengan 4 pelindung relai, pelindung motor rev 3, pelindung ethernet rev 2, dan pelindung gerak 9 sumbu. Uno R3 juga dilengkapi dengan konektor colokan barel yang berfungsi baik dengan baterai standar 9V.
Library arduino uno R3 ada 3, di antaranya: 1. Kabel untuk I2c/TWI. 2. SPI digunakan jika arduino sebagai pengontrolnya. 3. Servo digunakan untuk mengontrol motor servo.
Arduno uno R3 selain dapat diakses di software arduino IDE, dapat diakses juga di arduino CLI dan penyunting web. Chip pada uno R3 dapat diganti untuk memulai dari awal dengan harga yang cukup tinggi. Bagaimana dengan eepromnya? Yuk kita bahas!
Eeprom adalah memori yang memiliki nilai dan akan disimpan juga tidak terhapus meskipun board arduino dimatikan, pada uno R3, jumlah eeprom sebanyak 1 KB memori. Seorang programmer tidak perlu install ulang untuk library eeprom karena library eeprom sudah terpasang otomatis yang pastinya disesuaikan dengan board-nya. Berikut daftar board arduino yang memiliki eeprom: 1. Arduino uno R4 minimal 2. Wifi arduino uno R4 3. Arduino uno rev 3 4. Arduino uno wifi rev 2 5. Arduino mega 2560 rev 3 6. Arduino nano 7. Arduino mikro 8. Arduino leornardo
Pertama eeprom clear yaitu fungsi untuk mengatur semua byte ke 0 dan menyimpan informasi baru. Seperti yang sudah diketahui bahwa arduino uno memiliki 1 KB memori eeprom dan contoh lainnya adalah arduino mega yang memiliki 4 KB memori eeprom. Perhatikan gambar berikut:
Kedua, eeprom CRC yang berfungsi untuk mengetahui apakah data telah berubah atau rusak. Gambar di bawah menunjukkan cara mengetahui jumlah CRC pada eeprom serta melihat cara kerja eeprom sebagai array. Hal yang perlu diingat yaitu setiap perubahan pada CRC maka data yang disimpan juga mengalami perubahan. Perhatikan contoh kode berikut:
Serial.begin(9600);
while (!Serial) {
}
//Print length of data to run CRC on.
Serial.print("EEPROM length: ");
Serial.println(EEPROM.length());
//Print the result of calling eeprom_crc()
Serial.print("CRC32 of EEPROM data: 0x");
Serial.println(eeprom_crc(), HEX);
Serial.print("\n\nDone!");
}
void loop() {
/* Empty loop */
}
unsigned long eeprom_crc(void) {
c onst unsigned long crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc = ~0L;
f or (int index = 0 ; index < EEPROM.length() ; ++index) {
crc = crc_table[(crc ^ EEPROM[index]) & 0x0f] ^ (crc >> 4);
crc = crc_table[(crc ^ (EEPROM[index] >> 4)) & 0x0f] ^ (crc >> 4);
crc = ~crc;
}
return crc;
}
Ketiga, eeprom get ialah fungsi yang bertujuan menunjukkan cara beda untuk membaca dan menulis yang bekerja pada byte tunggal. Perhatikan kode berikut:
#include <EEPROM.h>
void setup() {
float f = 0.00f; //Variable to store data read from EEPROM.
int eeAddress = 0; //EEPROM address to start reading from
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Read float from EEPROM: ");
//Get the float data from the EEPROM at position 'eeAddress'
EEPROM.get(eeAddress, f);
Serial.println(f, 3); //This may print 'ovf, nan' if the data inside the EEPROM is not a valid float.
secondTest(); //Run the next test.
}
struct MyObject {
float field1;
byte field2;
char name[10];
};
void secondTest() {
int eeAddress = sizeof(float); //Move address to the next byte after float 'f'.
MyObject customVar; //Variable to store custom object read from EEPROM.
EEPROM.get(eeAddress, customVar);
Serial.println("Read custom object from EEPROM: ");
Serial.println(customVar.field1);
Serial.println(customVar.field2);
Serial.println(customVar.name);
}
void loop() {
/* Empty loop */
}
Keempat, eeprom iterasi yang sering digunakan untuk menelusuri seluruh ruang memori eeprom. Fungsi ini tidak bisa berjalan sendiri tapi digunakan sebagai sumber aplikasi di tempat lain.
#include <EEPROM.h>
void setup() {
for (int index = 0 ; index < EEPROM.length() ; index++) {
//Add one to each cell in the EEPROM
EEPROM[ index ] += 1;
}
int index = 0;
while (index < EEPROM.length()) {
//Add one to each cell in the EEPROM
EEPROM[ index ] += 1;
index++;
}
int idx = 0; //Used 'idx' to avoid name conflict with 'index' above.
do {
//Add one to each cell in the EEPROM
EEPROM[ idx ] += 1;
idx++;
} while (idx < EEPROM.length());
} //End of setup function.
void loop() {}
Kelima, ada fungsi eeprom put yaitu fungsi untuk mengetahui jumlah byte yang tertera terkait tipe data atau struktur khusus variabel yang akan ditulis.
};
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
float f = 123.456f; //Variable to store in EEPROM.
int eeAddress = 0; //Location we want the data to be put.
//One simple call, with the address first and the object second.
EEPROM.put(eeAddress, f);
Serial.println("Written float data type!");
//Data to store.
MyObject customVar = {
3.14f,
65,
"Working!"
};
eeAddress += sizeof(float); //Move address to the next byte after float 'f'.
EEPROM.put(eeAddress, customVar);
Serial.print("Written custom data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!");
}
void loop() {
/* Empty loop */
}
Keenam, ada fungsi eeprom read yang berfungsi untuk mencetak nilai ke jendela serial pada aplikasi arduino IDE dan aplikasi sejenis.
Ketujuh ada fungsi eeprom update yang digunakan untuk menghemat waktu eksekusi dan menghindari penulisan ulang yang sama. Sebagai informasi, setiap penulisan pada arduino membutuhkan waktu 3,3 ms dan eeprom juga memiliki batas jumlah siklus per lokasi yaitu sebesar 100.000.
Terakhir yaitu fungsi eeprom write yang digunakan untuk menyimpan nilai agar tetap berada di eeprom walaupun board dimatikan dan sewaktu-waktu bisa diambil kembali oleh sketsa lain. Perhatikan contoh berikut:
Referensi: (2024, 29 Januari). Panduan untuk EEPROM. https://docs.arduino.cc/learn/programming/eeprom-guide/. https://docs.arduino.cc/hardware/uno-rev3/ Gambar 1 sampai 8. Sumber: Dokumentasi Pribadi.