데이터 로깅을위한 인터페이스 SD 카드 모듈

문제를 제거하기 위해 도구를 사용해보십시오





이 게시물에서는 데이터 로깅을 위해 SD 카드 모듈을 arduino와 인터페이스 할 것입니다. SD 카드 모듈의 개요를보고 핀 구성과 온보드 구성 요소를 이해합니다. 마지막으로 온도 및 습도 데이터를 SD 카드에 기록하는 회로를 구성합니다.



보안 디지털 카드

SD 카드 또는 Secure Digital 카드는 최소한의 크기로 대용량 스토리지를 제공하므로 최신 전자 제품에 유용합니다. 이전 프로젝트 (Mp3 플레이어) 중 하나에서 미디어 저장 용으로 SD 카드를 사용했습니다. 여기서는 데이터 로깅에 사용할 것입니다.

데이터 로깅은 사건의 과거 발생을 기록하는 기본적인 단계입니다. 예 : 지구 온도 상승을 해석 할 수있는 과학자와 연구원.



그들은 지난 수십 년간의 데이터를보고 온도 상승 패턴을 이해 한 후이 결론에 도달했습니다. 현재 사건에 대한 데이터를 기록하면 향후 사건에 대해서도 공개 될 수 있습니다.

arduino는 센서 데이터를 읽기위한 훌륭한 마이크로 컨트롤러이고 센서 및 입력 출력 주변 장치를 읽기위한 다양한 통신 프로토콜을 지원하기 때문에 SD 카드 모듈 arduino 간의 연결이 케이크 조각을 만들었습니다.

arduino에는 자체 프로그램 저장 공간 외에 다른 저장소가 없기 때문에이 기사에서 설명하는 모듈을 사용하여 외부 저장소를 추가 할 수 있습니다.

이제 SD 카드 모듈을 살펴 보겠습니다.

SD 카드 모듈 이미지 :

SD 카드 모듈 이미지 :

모듈 및 핀 구성의 뒷면 :

모듈 및 핀 구성의 뒷면 :

6 개의 핀이 있으며 SPI (Serial Peripheral Interface) 통신 프로토콜을 지원합니다. Arduino UNO의 경우 SPI 통신 핀은 13, 12, 11 및 10입니다. Arduino mega의 경우 SPI 핀은 50, 51, 52 및 53입니다.

제안 된 프로젝트는 Arduino UNO로 설명되어 있습니다. 다른 Arduino 모델이있는 경우 SPI 핀에 대해서는 인터넷을 참조하십시오.

모듈은 SD 카드를 제자리에 고정하는 카드 홀더로 구성됩니다. 3.3V 레귤레이터는 5V가 아닌 3.3V에서 작동하도록 설계되었으므로 SD 카드의 전압을 제한하기 위해 제공됩니다.

그것은 로직 레벨 시프터 인 보드에 LVC125A 집적 회로를 가지고 있습니다. 로직 레벨 시프터의 기능은 arduino에서 3.3V 로직 신호로 5V 신호를 줄이는 것입니다.

이제 SD 카드 모듈을 마칩니다.

SD 카드 모듈을 사용하여 모든 데이터를 저장할 수 있습니다. 여기서는 텍스트 데이터를 저장합니다. 온도 및 습도 데이터를 SD 카드에 저장합니다. 또한 센서 데이터와 함께 시간을 기록하기 위해 실시간 시계 모듈을 활용하고 있습니다. 30 초마다 데이터를 기록합니다.

개략도:

데이터 로깅을위한 인터페이스 SD 카드 모듈

RTC 모듈은 시간을 추적하고 날짜와 시간을 SD 카드에 기록합니다.

SD 카드가 실패하거나 초기화에 실패하거나 SD 카드가없는 경우 오류 LED가 빠르게 깜박입니다. 나머지 시간에는 LED가 꺼져 있습니다.

RTC에 시간을 설정하는 방법 :

• 아래 라이브러리를 다운로드하십시오.
• 하드웨어 설정이 완료되면 arduino를 PC에 연결합니다.
• arduino IDE 열기
• 파일> 예> DS1307RTC> SetTime으로 이동합니다.
• 코드를 업로드하면 RTC가 컴퓨터의 시간과 동기화됩니다.
• 이제 아래 주어진 코드를 업로드하십시오.

코드를 업로드하기 전에 다음 arduino 라이브러리를 다운로드하십시오.

DS1307RTC : github.com/PaulStoffregen/DS1307RTC

DHT11 온도 및 습도 : arduino-info.wikispaces.com/file/detail/DHT-lib.zip

프로그램:

//-----Program developed by R.Girish-----//
#include
#include
#include
#include
#include
#include
#define DHTxxPIN A0
const int cs = 10
const int LED = 7
dht DHT
int ack
int f
File myFile
void setup()
{
Serial.begin(9600)
pinMode(LED,OUTPUT)
if (!SD.begin(cs))
{
Serial.println('Card failed, or not present')
while(true)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
}
Serial.println('Initialization done')
}
void loop()
{
myFile = SD.open('TEST.txt', FILE_WRITE)
if(myFile)
{
Serial.println('----------------------------------------------')
myFile.println('----------------------------------------------')
tmElements_t tm
if(!RTC.read(tm))
{
goto A
}
if (RTC.read(tm))
{
Serial.print('TIME:')
if(tm.Hour>12) //24Hrs to 12 Hrs conversion//
{
if(tm.Hour==13)
{
Serial.print('01')
myFile.print('01')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==14)
{
Serial.print('02')
myFile.print('02')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==15)
{
Serial.print('03')
myFile.print('03')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==16)
{
Serial.print('04')
myFile.print('04')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==17)
{
Serial.print('05')
myFile.print('05')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==18)
{
Serial.print('06')
myFile.print('06')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==19)
{
Serial.print('07')
myFile.print('07')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==20)
{
Serial.print('08')
myFile.print('08')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==21)
{
Serial.print('09')
myFile.print('09')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==22)
{
Serial.print('10')
myFile.print('10')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==23)
{
Serial.print('11')
myFile.print('11')
Serial.print(':')
myFile.print(':')
}
else
{
Serial.print(tm.Hour)
myFile.print(tm.Hour)
Serial.print(':')
myFile.print(':')
}
Serial.print(tm.Minute)
myFile.print(tm.Minute)
Serial.print(':')
myFile.print(':')
Serial.print(tm.Second)
myFile.print(tm.Second)
if(tm.Hour>=12)
{
Serial.print(' PM')
myFile.print( ' PM')
}
if(tm.Hour<12)
{
Serial.print('AM')
myFile.print( ' AM')
}
Serial.print(' DATE:')
myFile.print(' DATE:')
Serial.print(tm.Day)
myFile.print(tm.Day)
Serial.print('/')
myFile.print('/')
Serial.print(tm.Month)
myFile.print(tm.Month)
Serial.print('/')
myFile.print('/')
Serial.println(tmYearToCalendar(tm.Year))
myFile.println(tmYearToCalendar(tm.Year))
Serial.println('----------------------------------------------')
myFile.println('----------------------------------------------')
} else {
A:
if (RTC.chipPresent())
{
Serial.print('RTC stopped!!!')
myFile.print('RTC stopped!!!')
Serial.println(' Run SetTime code')
myFile.println(' Run SetTime code')
} else {
Serial.print('RTC Read error!')
myFile.print('RTC Read error!')
Serial.println(' Check circuitry!')
myFile.println(' Check circuitry!')
}
}
ack=0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack=1
break
}
if(ack==0)
{
f=DHT.temperature*1.8+32
Serial.print('Temperature(C) = ')
myFile.print('Temperature(°C) = ')
Serial.println(DHT.temperature)
myFile.println(DHT.temperature)
Serial.print('Temperature(F) = ')
myFile.print('Temperature(°F) = ')
Serial.print(f)
myFile.print(f)
Serial.print('n')
myFile.println(' ')
Serial.print('Humidity(%) = ')
myFile.print('Humidity(%) = ')
Serial.println(DHT.humidity)
myFile.println(DHT.humidity)
Serial.print('n')
myFile.println(' ')
}
if(ack==1)
{
Serial.println('NO DATA')
myFile.println('NO DATA')
}
for(int i=0 i<30 i++)
{
delay(1000)
}
}
myFile.close()
}
}

//-----R.Girish가 개발 한 프로그램 ----- //

회로가 일정 시간 동안 데이터를 기록하도록 허용되면 컴퓨터에 연결된 SD 카드를 제거 할 수 있습니다. 아래 그림과 같이 모든 온도 및 습도 데이터가 시간과 날짜와 함께 기록되는 TEXT.txt 파일이 있습니다.

참고 : 위의 아이디어는 데이터를 인터페이스하고 기록하는 방법의 예입니다. 이 프로젝트의 활용은 상상력에 달려 있으며 모든 종류의 센서 데이터를 기록 할 수 있습니다.

저자의 프로토 타입 :

Arduino가있는 인터페이스 SD 카드 모듈의 프로토 타입




이전 : 비접촉식 센서 – 적외선, 온도 / 습도, 정전 용량, 조명 Next : 회로에 IR 포토 다이오드 센서를 연결하는 방법