Read/Write Data for Micro SD card Module with Arduino UNO

บทความนี้เป็นการทดลองใช้งานโมดูลสำหรับอ่านและเขียนข้อมูลไปยัง SD Card โดยใช้บอร์ดควบคุม Arduino UNO และใช้การสื่อสารระหว่างตัว SD Card กับบอร์ดควบคุม Arduino UNO แบบ SPI ซึ่งในบทความการทดลองนี้จะใช้ตัวอย่างโปรแกรมไม่ยากนัก ซึ่งใช้ไลบารี่ SPI.h และ SD.h ในการพัฒนาร่วมกับโปรแกรมหลักให้เข้าใจง่ายยิ่งขึ้น

Read/Write Data for Micro SD card Module with Arduino UNO
รูปที่ 1 ลักษณะของโมดูล SD Card
Read/Write Data for Micro SD card Module with Arduino UNO
รูปที่ 2 การต่อวงจร SD Card และบอร์ดควบคุม Arduino UNO

ในรูปที่ 1 และรูปที่ 2 แสดงลักษณะของโมดูล SD Card และการต่อวงจรระหว่างโมดูล SD Card กับบอร์ดควบคุม Arduino UNO โดยจะใช้สายไฟแบบแพรที่ช่วยให้ต่อวงจรได้ง่ายและรวดเร็ว รวมทั้งการต่อวงจรแบ่งแรงดัน (Voltage Divider) สำหรับเป็นสัญญาณอินพุตให้กับขารับสัญญาณอะนาลอก A0, A1 และ A2 ในการทดลองครั้งนี้

/*
Arduino Code Ref. https://how2electronics.com/using-sd-card-module-with-arduino-read-write-data-logger/#google_vignette
*/

#include <SPI.h>  // Include SPI library 
#include <SD.h>   // Include SD library

int ADC_CH0=0;
int ADC_CH1=0;
int ADC_CH2=0;

File dataFile;
  
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()) 
  {
    Serial.println("initialization failed!");
    while (1);
  }
    Serial.println("initialization done.");
    delay(2000); 
}
 
  uint16_t line = 1; 
void loop() {
  
  delay(1000);  
  
  ADC_CH0 = analogRead(A0);
  ADC_CH1 = analogRead(A1);
  ADC_CH2 = analogRead(A2);
  
  dataFile = SD.open("ADCLog.txt", FILE_WRITE);  
  // if the file opened okay, write to it:
  
  if (dataFile) 
  {
    
 // Sense to Serial monitor
    Serial.print(line);
    Serial.print(": ADC0 = ");  
    Serial.print(ADC_CH0);
    Serial.print(", ADC1 = ");  
    Serial.print(ADC_CH1); 
    Serial.print(", ADC2 = ");  
    Serial.print(ADC_CH2); 
    Serial.println("  "); 
    
 // Write data to SD card file (ADC Log.txt)
    dataFile.print(line++);
    dataFile.print(": ADC0 = ");
    dataFile.print(ADC_CH0);
    dataFile.print(", ADC1 = ");
    dataFile.print(ADC_CH1);
    dataFile.print(", ADC2 = ");
    dataFile.print(ADC_CH2);
    
    dataFile.println(" ");
    dataFile.close();    
  }
  // if the file didn't open, print an error:
  else
    Serial.println("error opening ADC Log.txt");
}

Important SD Module Library Commands

Read/Write Data for Micro SD card Module with Arduino UNO
รูปที่ 3 ลักษณะการใส่ SD Card เข้ากับโมดูล
Read/Write Data for Micro SD card Module with Arduino UNO
รูปที่ 4 การแสดงผลข้อมูลที่เขียนลง SD Card ผ่านหน้าต่างพอร์ตอนุกรม

รูปที่ 4 การแสดงผลข้อมูลที่เขียนลง SD Card ผ่านหน้าต่างพอร์ตอนุกรม เพื่อให้ผู้ทดลองทราบลำดับการทำงานเพื่อเชื่อมต่อกับโมดูล SD Card ซึ่งจะเห็นว่าโปรแกรมจะทำหน้าที่อ่านค่าที่ได้จากสัญญาณอะนาลอกที่ช่อง A0,A1 และ A2 และบันทึกลงใน SD Card นั้นเอง

Read/Write Data for Micro SD card Module with Arduino UNO
รูปที่ 5 ไฟล์ข้อมูลที่เขียนใน SD Card เมื่อเสียบเข้ากับ Windows

รูปที่ 5 เป็นการเปิดไฟล์ข้อมูลที่เขียนใน SD Card โดยระบบปฏิบัติการวินโดว์ (Windows) เมื่อนำหน่วยความจำ SD Card เสียบเข้ากับวินโดว์ จะมีไฟล์ข้อมูลที่ชื่อ ADCLOG.TXT ให้ทราบ (ในกรอบสีแดง)

Read/Write Data for Micro SD card Module with Arduino UNO
รูปที่ 6 แสดงข้อมูลต่างๆ ในไฟล์ ADCLOG.TXT

รูปที่ 6 เมื่อทำการเปิดไฟล์ ADCLOG.TXT ภายในไฟล์จะแสดงข้อมูลต่างๆ ที่ทำการบันทึกไว้ โดยสามารถนำข้อมูลที่ได้นำเข้าสู่โปรแกรม Excel เพื่อจัดรูปแบบให้เรียนร้อยและนำไปแสดงผลให้เข้าใจได้ง่ายในรูปแบบกราฟหรือตัวเลขได้ตามที่ต้องการภายหลัง

Read/Write Data for Micro SD card Module with Arduino UNO
รูปที่ 7 แสดงการต่อวงจรระหว่างโมดูล SD Card กับบอร์ดควบคุม Arduino UNO และสัญญาณอะนาลอกที่ขา A0, A1 และ A2
Read/Write Data for Micro SD card Module with Arduino UNO
รูปที่ 8 ลักษณะของการทดลงใช้งานโมดูล SD Card และบอร์ดควบคุม Arduino UNO ทั่วไป

สำหรับบทความการทดลองใช้งานโมดูลสำหรับอ่านและเขียนข้อมูลไปยัง SD Card โดยใช้บอร์ดควบคุม Arduino UNO นี้ เป็นการนำโมดูลสำเร็จมาใช้งานได้ทันที ซึ่งตัวอย่างในบทความนี้จะทำการอ่านค่าสัญญาณอะนาลอกเข้าที่ช่อง A0,A1 และ A2 ตามลำดับ เพื่อให้เห็นลักษณะของการนำไปใช้งานจริง ทั้งนี้ผู้อ่านยังสามารถปรับรูปแบบการรับค่าจากอุปกรณ์เซนเซอร์หรืออินพุตต่างๆ ได้ตามที่ต้องการ

Reference

  1. https://www.instructables.com/SD-Card-Module-With-Arduino-How-to-ReadWrite-Data/
  2. https://medium.com/@madhurajayashanka/complete-guide-to-connecting-a-microsd-card-module-to-arduino-and-saving-data-in-csv-format-1f30a163cab
  3. https://www.arduino.cc/reference/en/libraries/sd/
  4. https://docs.arduino.cc/learn/programming/sd-guide/
  5. https://www.hackster.io/electropeak/sd-card-module-with-arduino-how-to-read-write-data-37f390
  6. https://how2electronics.com/using-sd-card-module-with-arduino-read-write-data-logger/#google_vignette