Hardware/Arduino

SD 카드를 아두이노에 연결하기...

초인로크 2014. 4. 18. 16:40
반응형

connectBlue사의 OLS426를 달고나서 센서로 통신 성공한 다음에 센서값을 파일로 보존하려는데,

아두이노 단독으로는 파일을 보존 할 수가 없어서 SD카드를 달아서 저장해 보려고 시도했다.

정말 단순하게 땜질만 해봤는데, 의외로 잘 동작하니까 좋네.


이번에는 평소에 안쓰던 10번,11번,12번,13번핀과 3.3V,GND를 이용하였다. 왜 평소에 안쓰냐면 핀 8번부터가 일반적인 만능기판 구멍과는 달라서 핀을 그냥 땜질해버리면 끼워쓸쑤가 없기에, 약간의 핀헤더의 조정이 필요하다. 아두이노 전용 만능기판도 팔긴하던데, 4배정도 비싸므로 그냥 손놀림으로 끝나는 핀헤더조정을 했다. 0.5칸정도 구부려주면 그럭저럭 쓸만하게 된다. (아래 사진을 보면 핀헤더가 왼쪽방향으로 구부러 진 모습을 확인할 수 있다.)




인터넷 검색시에 저항을 추가하던가, 직접 SD카드 모듈을 사서 하는 방법 등이 있었으나, 돈이들고, 간단히 확인하고 싶어서 핀과 SD카드의 결선만으로 테스트 했다. 이 방법이 안정하지 않은 방법일 수도 있으므로 이용할 사람의 주의를 요하는 항목이다. 괄호안의 내용은 핀번호를 의미한다.



데이터가 CSV파일로 저장되어 있는것을 아래와 같이 확인했다. 파일저장날짜는 Real Time Clock(RTC)가 없어서 2000년도로 전부 기록이 되어있다.
엑셀로 편집이 가능하기 때문에 그래프 그려서 확인해 볼수 있다.




위의 시스템에 사용한 소스코드는 아래와 같다.

출처를 적어야 겠는데, 전에 참고를 했던 블로그가 사라졌는거 같다..;;


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/* SD card attached
  MOSI --> pin 11
  MISO --> pin 12
  CLK(SCK) --> pin 13
  CS -> pin 10
*/
#include <SPI.h>
#include <SD.h>
const int chipSelect = 10;
int led = 13;
File dataFile;
 
void setup()
{
  Serial.begin(19200);
  Serial.print("Initializing SD card...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(SS, OUTPUT);
  pinMode(led, OUTPUT);   
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present"); // don't do anything more:
    while (1) ;
  }
  Serial.println("card initialized.");
  // open a new file if it doesn't exist and leave the loop:
  char filename[] = "DATA_000.CSV";  
  for (uint8_t i = 0; i < 1000; i++) {
    filename[5= i/100 + '0';
    filename[6= (i%100)/10 + '0';
    filename[7= i%10 + '0';
    if (! SD.exists(filename)) {
      dataFile = SD.open(filename, FILE_WRITE);
      break;
    }
  }
 
  if (! dataFile) {
    Serial.println("could not create file");
  }
  Serial.print("Logging to: ");
  Serial.println(filename);
}
 
 
int i = 0;  //Use this for the counter
 
void loop()
{
  String dataString = "";
  // read six analog inputs (Pin 0 .. Pin 5) and append to the string:
  for (int analogPin = 0; analogPin < 6; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 5) {
      dataString += ",";
    }
  }
  Serial.println(dataString);
  dataFile.println(dataString);
  digitalWrite(led, HIGH); 
  
  i++;
  
  if (i>0){  //Call every times
    dataFile.flush();
    i = 0;
  }
  digitalWrite(led, LOW); 
  delay(5000); // scan time setting (every 5 seconds)
}
cs



<참고한 사이트>

1. How To: Connect Your Old SD Card To An Arduino

2. Arduino - SD Library

3. Using the SD library to log data


반응형