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:
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:
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:
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:
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:
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 <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)) { //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:
Dengan demikian kita sudah menguasai bagaimana cara koneksi modul micro SD dengan Arduino, membuat data dan membaca data di micro SD.