SD카드 모듈

아두위키 : Arduwiki


개요

아두이노 SD 카드 모듈은 아두이노 보드와 호환되는 SD 카드 인터페이스 모듈입니다. 아두이노 보드에서 SD 카드를 읽고 쓸 수 있게 해줌으로써 다양한 프로젝트에서 데이터 저장, 로깅, 파일 관리 등의 용도로 사용할 수 있습니다.


사양

항목 내용
지원 카드 Micro SD 카드, Micro SDHC 카드 (고속 카드 지원)
전원 레벨 변환 5V 및 3.3V 시스템 인터페이스 가능
전원 공급 범위 4.5V - 5.5V, 3.3V 레귤레이터 회로 내장
통신 인터페이스 표준 SPI 인터페이스
핀 구성 GND, VCC, MISO, MOSI, SCK, CS
포지셔닝 홀 4개의 M2 스크류 포지셔닝 홀 (지름 2.2mm)


활용 예제

회로 구성

아두이노 핀 번호 SD 카드 모듈
4 CS
11 MOSI
12 MISO
13 SCK
GND GND
5V 또는 3.3V VCC

SD 카드 포맷

본 예제의 경우 SD카드가 깔끔한 상태에서 시작하기 위해 SD카드를 포맷합니다.

SD카드 리더기를 활용해 PC에 연결한 후 폴더를 우클릭해 포맷해주세요.

(※ 필수가 아닙니다! SD카드에 중요한 자료가 있을 수 있으니 백업은 늘 필수입니다.)


1. SD카드에 쓰기

SD카드에 "GONGZIPSA" 문구를 기록하는 예제입니다. 내부에 텍스트 파일이 생성됩니다.

#include <SD.h>

File myFile;

void setup() {
  Serial.begin(9600);
  
  // SD 카드 초기화
  if (!SD.begin(4)) {
    Serial.println("SD 카드 초기화 실패");
    return;
  }
  
  // 파일 쓰기
  myFile = SD.open("test.txt", FILE_WRITE);
  
  if (myFile) {
    Serial.println("test.txt 파일 쓰기 시작");
    myFile.println("GONGZIPSA");
    myFile.close();
    Serial.println("파일 쓰기 완료");
  } else {
    Serial.println("파일 쓰기 실패");
  }
}

void loop() {
  // 아무 동작 없음
}


15번째 줄 FILE_WRITE 외에도 READ 모드가 있습니다.

모드 설명
FILE_READ 파일을 읽기 전용으로 엽니다. 파일에 쓸 수 없습니다. 파일이 존재하지 않으면 열 수 없습니다.
FILE_WRITE 파일을 쓰기 모드로 엽니다. 파일이 존재하지 않으면 새로 생성합니다. 기존 파일이 있을 경우, 파일의 끝에 데이터를 추가합니다.

기존 내용을 덮어쓰지는 않습니다.


실행 결과


2. SD카드에서 파일 읽기

SD카드 내 파일을 읽어 시리얼 모니터로 출력하는 예제입니다.

#include <SD.h>

File myFile;

void setup() {
  Serial.begin(9600);
  
  // SD 카드 초기화
  if (!SD.begin(4)) {
    Serial.println("SD 카드 초기화 실패");
    return;
  }
  
  // 파일 읽기
  myFile = SD.open("test.txt");
  
  if (myFile) {
    Serial.println("test.txt 파일 읽기 시작");
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    myFile.close();
    Serial.println("파일 읽기 완료");
  } else {
    Serial.println("파일 읽기 실패");
  }
}

void loop() {
  // 아무 동작 없음
}


실행 결과


3. SD카드 내 파일 목록 확인

SD카드 내 파일의 목록을 시리얼 모니터로 출력하는 예제입니다.

#include <SD.h>

void setup() {
  Serial.begin(9600);
  
  if (!SD.begin(4)) {
    Serial.println("SD 카드 초기화 실패");
    return;
  }
  
  Serial.println("파일 목록:");
  listFiles(SD.open("/"));
}

void loop() {
  // 아무 동작 없음
}

void listFiles(File dir) {
  while (true) {
    File entry = dir.openNextFile();
    if (!entry) {
      break; // 더 이상 파일이 없음
    }
    Serial.print(entry.name());
    if (entry.isDirectory()) {
      Serial.println(" [디렉토리]");
      listFiles(entry); // 재귀적으로 디렉토리 내의 파일을 출력
    } else {
      Serial.print(" [파일 크기: ");
      Serial.print(entry.size());
      Serial.println(" 바이트]");
    }
    entry.close();
  }
}


실행 결과


4. 센서 데이터 로그 기록하기

토양 수분 센서(YL-69) 센서 데이터를 3초마다 기록하여 SD카드에 저장하는 예제입니다.

#include <SPI.h>
#include <SD.h>

void setup() {
  Serial.begin(9600);

  // SD 카드 초기화
  if (!SD.begin(4)) {
    Serial.println("SD 카드 초기화 실패");
    return;
  }

  // YL-69 센서 초기화 (아날로그 핀 설정)
  pinMode(A0, INPUT);
}

void loop() {
  // YL-69 센서 데이터 읽기
  int moistureLevel = analogRead(A0);

  // moisture.txt 파일을 FILE_WRITE 모드로 열기
  File myFile = SD.open("moisture.txt", FILE_WRITE);
  
  if (myFile) {
    // 센서 데이터를 파일에 기록
    myFile.print("Moisture Level: ");
    myFile.println(moistureLevel); // 파일에 데이터 추가
    myFile.close(); // 파일 닫기
    Serial.println("데이터 기록 완료");
  } else {
    Serial.println("파일 쓰기 실패");
  }

  delay(3000); // 3초마다 데이터 기록
}


실행 결과

시리얼 모니터에 "데이터 기록 완료"가 출력되며, SD카드를 PC에 연결해보면 기존에 만들었던 TEXT.txt 파일과 지금 기록한 MOISTURE.txt 파일이 존재합니다. MOISTURE.txt에는 토양 수분 센서(YL-69)의 데이터가 기록된 것을 확인하실 수 있습니다.


구매 링크

공집사몰