SD카드 모듈
개요
아두이노 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)의 데이터가 기록된 것을 확인하실 수 있습니다.