Interface Arduino dengan Micro SD (SD Card)

Fungsi Modul Micro SD

Jika kita membuat alat data logger menggunakan Arduino, apakah sudah ada gambaran data tersebut disimpan dimana? Seperti misalnya data logger suhu, data suhu ini jika kita capture/simpan tiap detik maka dalam satu jam saja sudah tersimpan 3600 data, bagaimana dengan sehari? Sebulan? Bahkan dalam kurun waktu 1 tahun? Ini tentu akan menjadi masalah karena kapasitas penyimpanan di Arduino terbatas. Solusinya adalah dengan menambahkan micro SD sehingga kita dapat dengan mudah menyimpan data-data dalam jumlah banyak. Interface Arduino dengan micro SD memerlukan perantara yang bernanama modul micro SD.

Komunikasi SPI

Modul micro SD ini menjadi jembatan komunikasi antara Arduino dengan micro SD, kita bisa membaca dan menulis data di micro SD. Komunikasi antara Arduino dengan micro SD menggunakan protocol SPI (serial peripheral interface). Apa itu protocol SPI? SPI merupakan tipe komunikasi sinkronus dimana memerlukan sinyal clock untuk mensinkronisasi antara transmitter dan receiver atau antara master dengan slave. Sinyal clock harus bersumber dari master, sinyal ini diteruskan ke slave. Hal yang menarik dalam komunikasi SPI adalah hanya satu devide menjadi master namun slavenya bisa banyak, konsep yang tidak kita temukan di komunikasi I2C. Dalam kasus interface antara Arduino dengan micro SD, Arduino bertindak sebagai master dan micro SD sebagai slave. SPI ini adalah salah satu dari baeberapa komunikasi serial seperti I2C, USB, UART dan lain-lain.  Terdapat empat pin penting di SPI:

MOSI: Master-Out/Slave-In

MISO: Master-In/Slave-Out

SCK: Serial Clock

CS: Chip Select, atau SS: slave Select

Penjelasan:
MOSI adalah sinyal dihasilkan master kemudian data tersebut diterima oleh slave, setelah menerima data slave mentransmisikan sinyal pemberitahuan ke MOSI, sinyal tersebut dikirim melalui pin MISO. Sinyal clock dihasilkan master kemudian diteruskan ke slave melalui pin SCK. Sedangkan pin SS/CS berfungsi untuk memilih slave tertentu oleh master. Perlu diperhatikan bahwa setiap satu siklus clock, satu bit data ditransfer dari master ke slave dan satu bit data ditransmisiksn dari slave ke master. Proses ini terjadi secara simultan (bersamaan) dan setelah delapan siklus clock, satu byte data berhasil ditransfer. Untuk lebih jelasnya dapat dilihat pada gambar berikut ini:

Gambar 1. Komunikasi SPI antara master dan slave

Komunikasi jenis ini boleh menggunakan lebih dari satu slave atau disebut juga dengan istilah duplex. Komunikasi SPI memiliki kecepatan transfer data sampai dengan 25 Mbps, akan tetapi jarak maksimum antara master dan slave adalah 20 cm.

Berikut adalah pin-pin pada modul micro SD:

Gambar 2. Modul Micro SD

Berdasarkan gambar 2 di atas, terdapat regulator tegangan 3.3V sehingga jika kita koneksi ke pin 5V ke Arduino maka tidak masalah karena regulator tegangan akan menurunkannya sesuai dengan tegangan yang diperlukan oleh micro SD. Supaya lebih jelas, skematik rangkaian untuk modul micro SD dapat dilihat pada gambar berikut ini:

Gambar 3. Skematik rangkaian modul micro SD

Koneksi dengan Arduino

Koneksi pin antara modul micro SD dengan Arduino Uno dapat dilihat pada tabel berikut ini:

Supaya lebih jelas, berikut ini adalah rangkaian modul micro SD dengan Arduino:

Gambar 4. Rangkaian antara modul micro SD dengan Arduino

Command untuk micro SD yang dapat kita gunakan saat menjalankan Arduino IDE adalah sebagai berikut:

Menulis atau membuat data di Micro SD

Setelah membuat rangkaian seperti pada gambar 4 di atas, selanjutnya buka IDE Arduino, lalu ketikkan sintaks berikut ini. jika anda belum memiliki library SD card di IDE Arduino, silahkan download melalui link ini:

SD-Master

#include <SPI.h> //memasukkan library komunikasi SPI
#include <SD.h> //memasukkan library SD card
File myFile; //inisiasi variabel bernama myFile
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
if (!SD.begin(10)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
// open the file. note that only one file can be open at a time,
myFile = SD.open("test.txt", FILE_WRITE); //menggunakan command SD.open
// if the file opened okay, write to it:
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.println("This is a test file :)"); //menggunakan command file.println
myFile.println("testing 1, 2, 3."); //menggunakan command file.println
//menuliskan angka 0 sampai dengan 19 di micro SD
for (int i = 0; i<20; i++) {
myFile.println(i);
}
// close the file:
myFile.close();
Serial.println("DONE");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
}
void loop() {
// nothing happens after setup
}

Setelah diupload ke Arduino, buka serial monitor lalu hasilnya adalah sebagai berikut:

Gambar 5. tampilan di serial monitor menunjukkan test.txt berhasil dibuat

Dengan demikian kita sudah berhasil membuat / menulis data di micro SD

 

Membaca data dari micro SD card

Sekarang kita akan mencoba membaca data dari micro SD, langkah pertama adalah menuliskan sintaks berikut ini ke IDE Arduino:

#include &lt;SPI.h&gt; //memasukkan library komunikasi SPI
#include &lt;SD.h&gt; //memasukkan library SD card
File myFile; //inisiasi variabel bernama myFile
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
if (!SD.begin(10)) { //jika komunikasi dengan SD card gagal maka tuliskan: initialization failed!
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
// membuka file bernama test.txt
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("test.txt:");
// read from the file until there's nothing else in it:
while (myFile.available()) {
Serial.write(myFile.read());
}
// close the file:
myFile.close();
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
}
void loop() {
// nothing happens after setup
}

Setelah diupload ke Arduino, selanjutnya buka serial monitor hasilnya adalah sebagai berikut ini:

Gambar 6. Data berhasil dibuka melalui komunikasi serial

Dengan demikian kita sudah menguasai bagaimana cara koneksi modul micro SD dengan Arduino, membuat data dan membaca data di micro SD.

Leave a Reply

Your email address will not be published. Required fields are marked *