Membaca Konten SD Card Baris per Baris Menggunakan Arduino

Untuk proyek berbasis mikrokontroler, ada kalanya kita sebaiknya menggunakan SD card sebagai media penyimpanan data. Data yang telah tersimpan pada SD Card mungkin juga ingin dibaca dan diproses lebih lanjut. Pada tutorial ini, kita akan membaca isi dari SD Card baris per baris dan melakukan...


on Sab, 01/14/2023 - 08:42
76 View

Untuk proyek berbasis mikrokontroler, ada kalanya kita sebaiknya menggunakan SD card sebagai media penyimpanan data. Data yang telah tersimpan pada SD Card mungkin juga ingin dibaca dan diproses lebih lanjut. Pada tutorial ini, kita akan membaca isi dari SD Card baris per baris dan melakukan konversi format data dari tiap-tiap elemen dalam baris data tersebut.

Alat dan Bahan

Berikut alat dan bahan yang digunakan dalam tutorial ini:

  1. Arduino UNO
  2. SD Card Module
  3. SD Card Adapter
  4. Micro SD Card
  5. Kabel jumper

Persiapan Data

Asumsi saat ini kita telah memiliki data hasil pengukuran. Undulah file di repositori berikut. Simpan file UDARA.txt pada SD Card melalui komputer Anda. Setelah tersimpan, masukkan SD Card ke SD Card Module. Kita akan menggunakan UDARA.txt ini sebagai contoh file. Anda dapat menggunakan contoh hasil pengukuran lainnya. UDARA.txt berisikan beberapa baris hasil pengukuran kualitas udara (indoor). Sumber data aslinya dapat dilihat di sini.

Skema Hardware

Mikrokontroler dan SD Card module menggunakan komunikasi SPI. Rangkailah mikrokontroler dan SD Card module sesuai dengan gambar berikut:

SD Card
SD Card

Pemrograman Arduino

Konten yang terbaca dari SD Card memiliki format String. Setelah dibaca, tiap-tiap elemen akan dikonversi sesuai dengan format yang diperlukan (integer atau float). Setelah terkonversi, kita dapat menggunakannya sebagai variabel untuk proses selanjutnya.

Berikut contoh pemrograman Arduino yang digunakan untuk membaca konten dari SD Card baris per baris.

  1. #include <SPI.h>
  2. #include <SD.h>
  3.  
  4. // gunakan pin D10 untuk pin CS
  5. #define PIN_SD_SS 10
  6.  
  7. // jumlah kolom sebanyak 6
  8. #define JUMLAH_KOLOM 6
  9.  
  10. // ukuran buffer untuk menyimpan 1 baris data
  11. #define BUFFER_BARIS 50
  12.  
  13. File fileSDCard;
  14. String buffer_string;
  15. boolean SDfound;
  16. char *strings_dataSD[JUMLAH_KOLOM];
  17. char *ptr = NULL;
  18.  
  19. int co2;
  20. float kelembaban;
  21. float pm10;
  22. float pm25;
  23. float suhu;
  24. float voc;
  25.  
  26.  
  27. void setup() {
  28. Serial.begin(9600);
  29. while (!Serial);
  30. delay(1000);
  31.  
  32. if (SDfound == 0) {
  33. if (!SD.begin(PIN_SD_SS)) {
  34. Serial.print("SD Card tidak ditemukan!");
  35. while(1);
  36. }
  37. }
  38.  
  39. SDfound = 1;
  40. Serial.print("SD Card ditemukan!");
  41. fileSDCard = SD.open("UDARA.txt", FILE_READ);
  42.  
  43. if (!fileSDCard) {
  44. Serial.print("File tidak dapat dibaca!");
  45. while(1);
  46. }
  47.  
  48. while (fileSDCard.available()) {
  49. Serial.println("\nHasil baca baris dari SD Card:");
  50. // baca sampai baris terakhir (bertemu ENTER)
  51. buffer_string = fileSDCard.readStringUntil('\n');
  52. Serial.println(buffer_string);
  53.  
  54. //Ubah String ke array char untuk tiap data
  55. char charBuf[BUFFER_BARIS];
  56. buffer_string.toCharArray(charBuf, BUFFER_BARIS);
  57.  
  58. //pecah string sesuai delimiter (kita pakai koma)
  59. byte index = 0;
  60. ptr = strtok(charBuf, ","); //demiter koma
  61.  
  62. while (ptr != NULL){
  63. strings_dataSD[index] = ptr;
  64. index++;
  65. ptr = strtok(NULL, ",");
  66. }
  67.  
  68. // konversi array char ke int atau float
  69. co2 = atoi(strings_dataSD[0]); //integer
  70. kelembaban = atof(strings_dataSD[1]); //float
  71. pm10 = atof(strings_dataSD[2]);
  72. pm25 = atof(strings_dataSD[3]);
  73. suhu = atof(strings_dataSD[4]);
  74. voc = atof(strings_dataSD[5]);
  75.  
  76. // print hasil konversi
  77. Serial.print("\nCO2 = ");
  78. Serial.println(co2);
  79. Serial.print("Kelembaban = ");
  80. Serial.println(kelembaban);
  81. Serial.print("Particulate Matter PM10 = ");
  82. Serial.println(pm10);
  83. Serial.print("Particulate Matter PM2.5 = ");
  84. Serial.println(pm25);
  85. Serial.print("Suhu = ");
  86. Serial.println(suhu);
  87. Serial.print("Volatile Organic Compound (VOC) = ");
  88. Serial.println(voc);
  89.  
  90. delay(1000);
  91. }
  92.  
  93. fileSDCard.close();
  94. }
  95.  
  96. void loop() {
  97. // tidak melakukan apa-apa
  98. }

Berikut contoh tampilan hasil percobaan:

SD Card Output
SD Card Output

Profil Penulis

User Picture
  • Member Since 8 tahun ago
Kusuma Wardana

MATLAB, Mikrokontroler, FPGA, Elektronika, Kontrol/Kendali, Signal Processing

I Nyoman Kusuma Wardana, yang akrab dipanggil Kusuma, lahir dan besar di Bali. Ia tinggal di Desa Wisata Ubud, dan lebih banyak melaksanakan aktivitasnya di Denpasar. Profesinya adalah sebagai staf pengajar di Jurusan Teknik Elektro, Politeknik...

Komentar Terbaru

Comments