SD카드 모듈: 두 판 사이의 차이
(새 문서: {{#seo:|title=아두위키 : 아두이노 SD카드 모듈 가이드|title_mode=append|keywords=아두이노, 정보과학, 메이커학습, 수행평가, SD카드 모듈, 아두이노 작품, 캡스톤작품, 아두이노 예제코드|description=아두이노로 SD카드 모듈을 제어하는 방법(기본정보, 회로, 예제 코드)을 소개합니다. 정보과학과 메이커수업에 활용가능합니다.}}) |
잔글편집 요약 없음 |
||
1번째 줄: | 1번째 줄: | ||
{{#seo:|title=아두위키 : 아두이노 SD카드 모듈 가이드|title_mode=append|keywords=아두이노, 정보과학, 메이커학습, 수행평가, SD카드 모듈, 아두이노 작품, 캡스톤작품, 아두이노 예제코드|description=아두이노로 SD카드 모듈을 제어하는 방법(기본정보, 회로, 예제 코드)을 소개합니다. 정보과학과 메이커수업에 활용가능합니다.}} | {{#seo:|title=아두위키 : 아두이노 SD카드 모듈 가이드|title_mode=append|keywords=아두이노, 정보과학, 메이커학습, 수행평가, SD카드 모듈, 아두이노 작품, 캡스톤작품, 아두이노 예제코드|description=아두이노로 SD카드 모듈을 제어하는 방법(기본정보, 회로, 예제 코드)을 소개합니다. 정보과학과 메이커수업에 활용가능합니다.}}[[파일:아두이노 SD 카드 모듈 대표이미지1.jpg|861x861픽셀]] | ||
== '''개요''' == | |||
아두이노 SD 카드 모듈은 아두이노 보드와 호환되는 SD 카드 인터페이스 모듈입니다. 아두이노 보드에서 SD 카드를 읽고 쓸 수 있게 해줌으로써 다양한 프로젝트에서 데이터 저장, 로깅, 파일 관리 등의 용도로 사용할 수 있습니다. | |||
== '''사양''' == | |||
{| class="wikitable" | |||
!항목 | |||
!내용 | |||
|- | |||
|'''지원 카드''' | |||
|Micro SD 카드, Micro SDHC 카드 (고속 카드 지원) | |||
|- | |||
|'''전원 레벨 변환''' | |||
|5V 및 3.3V 시스템 인터페이스 가능 | |||
|- | |||
|'''전원 공급 범위''' | |||
|4.5V - 5.5V, 3.3V 레귤레이터 회로 내장 | |||
|- | |||
|'''통신 인터페이스''' | |||
|표준 SPI 인터페이스 | |||
|- | |||
|'''핀 구성''' | |||
|GND, VCC, MISO, MOSI, SCK, CS | |||
|- | |||
|'''포지셔닝 홀''' | |||
|4개의 M2 스크류 포지셔닝 홀 (지름 2.2mm) | |||
|} | |||
== '''활용 예제''' == | |||
=== 회로 구성 === | |||
{| class="wikitable" | |||
!아두이노 핀 번호 | |||
!SD 카드 모듈 | |||
|- | |||
|4 | |||
|CS | |||
|- | |||
|11 | |||
|MOSI | |||
|- | |||
|12 | |||
|MISO | |||
|- | |||
|13 | |||
|SCK | |||
|- | |||
|GND | |||
|GND | |||
|- | |||
|5V 또는 3.3V | |||
|VCC | |||
|} | |||
[[파일:SD카드모듈회로.jpg|1027x1027픽셀]] | |||
=== SD 카드 포맷 === | |||
본 예제의 경우 SD카드가 깔끔한 상태에서 시작하기 위해 SD카드를 포맷합니다. | |||
SD카드 리더기를 활용해 PC에 연결한 후 폴더를 우클릭해 포맷해주세요. | |||
'''<u>(※ 필수가 아닙니다! SD카드에 중요한 자료가 있을 수 있으니 백업은 늘 필수입니다.)</u>''' | |||
[[파일:SD카드포맷.png|395x395픽셀]] | |||
=== 1. SD카드에 쓰기 === | |||
SD카드에 "GONGZIPSA" 문구를 기록하는 예제입니다. 내부에 텍스트 파일이 생성됩니다.<syntaxhighlight lang="c++" line="1"> | |||
#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() { | |||
// 아무 동작 없음 | |||
} | |||
</syntaxhighlight> | |||
15번째 줄 FILE_WRITE 외에도 READ 모드가 있습니다. | |||
{| class="wikitable" | |||
!모드 | |||
!설명 | |||
|- | |||
|<code>FILE_READ</code> | |||
|파일을 읽기 전용으로 엽니다. 파일에 쓸 수 없습니다. 파일이 존재하지 않으면 열 수 없습니다. | |||
|- | |||
|<code>FILE_WRITE</code> | |||
|파일을 쓰기 모드로 엽니다. 파일이 존재하지 않으면 새로 생성합니다. 기존 파일이 있을 경우, 파일의 끝에 데이터를 추가합니다. | |||
기존 내용을 덮어쓰지는 않습니다. | |||
|} | |||
==== 실행 결과 ==== | |||
[[파일:SD카드모듈예제1결과.jpg|932x932픽셀]] | |||
=== 2. SD카드에서 파일 읽기 === | |||
SD카드 내 파일을 읽어 시리얼 모니터로 출력하는 예제입니다.<syntaxhighlight lang="c++" line="1"> | |||
#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() { | |||
// 아무 동작 없음 | |||
} | |||
</syntaxhighlight> | |||
==== 실행 결과 ==== | |||
[[파일:SD카드모듈예제2결과.png|1014x1014픽셀]] | |||
=== 3. SD카드 내 파일 목록 확인 === | |||
SD카드 내 파일의 목록을 시리얼 모니터로 출력하는 예제입니다.<syntaxhighlight lang="c++" line="1"> | |||
#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(); | |||
} | |||
} | |||
</syntaxhighlight> | |||
==== 실행 결과 ==== | |||
[[파일:SD카드모듈예제3결과.png|974x974픽셀]] | |||
=== 4. 센서 데이터 로그 기록하기 === | |||
[[토양 수분 센서(YL-69)]] 센서 데이터를 3초마다 기록하여 SD카드에 저장하는 예제입니다.<syntaxhighlight lang="c++" line="1"> | |||
#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초마다 데이터 기록 | |||
} | |||
</syntaxhighlight> | |||
==== 실행 결과 ==== | |||
시리얼 모니터에 "데이터 기록 완료"가 출력되며, SD카드를 PC에 연결해보면 기존에 만들었던 TEXT.txt 파일과 지금 기록한 MOISTURE.txt 파일이 존재합니다. MOISTURE.txt에는 토양 수분 센서(YL-69)의 데이터가 기록된 것을 확인하실 수 있습니다. | |||
[[파일:SD카드모듈예제4결과.jpg|859x859픽셀]] | |||
== '''구매 링크''' == | |||
[https://gongzipsa.com/shop/1717136808 공집사몰] |
2024년 8월 6일 (화) 19:23 판
개요
아두이노 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)의 데이터가 기록된 것을 확인하실 수 있습니다.