Interfejs modułu karty SD do rejestracji danych

Wypróbuj Nasz Instrument Do Eliminowania Problemów





W tym poście zamierzamy połączyć moduł karty SD z arduino do rejestracji danych. Zobaczymy przegląd modułu karty SD i zrozumiemy jego konfiguracje pinów i komponenty pokładowe. Na koniec będziemy budować obwód, który będzie rejestrował dane dotyczące temperatury i wilgotności na karcie SD.



Bezpieczna karta cyfrowa

Karta SD lub karta Secure Digital jest dobrodziejstwem dla nowoczesnej elektroniki, ponieważ zapewnia dużą pojemność przy minimalnym rozmiarze. Użyliśmy karty SD do przechowywania multimediów w jednym z poprzednich projektów (odtwarzacz MP3). Tutaj będziemy go używać do logowania danych.

Rejestrowanie danych jest podstawowym krokiem do rejestrowania zdarzenia incydentu w przeszłości. Na przykład: naukowcy i badacze, którzy potrafią zinterpretować wzrost temperatury na świecie.



Doszli do tego wniosku po zrozumieniu wzorca wzrostu temperatury na podstawie danych z ostatnich kilku dekad. Rejestracja danych o bieżącym zdarzeniu może również ujawnić informacje o przyszłym zdarzeniu.

Ponieważ arduino jest świetnym mikrokontrolerem do odczytu danych z czujników i obsługuje różne protokoły komunikacyjne do odczytu czujników i peryferiów wejściowych, połączenie między modułem karty SD arduino było bułką z masłem.

Ponieważ arduino nie ma innej pamięci poza własną przestrzenią na programy, możemy dodać pamięć zewnętrzną za pomocą opisanego modułu w tym artykule.

Przyjrzyjmy się teraz modułowi karty SD.

Obraz modułu karty SD:

Obraz modułu karty SD:

Druga strona modułu i konfiguracja pinów:

Druga strona modułu i konfiguracja pinów:

Jest sześć pinów i obsługuje protokół komunikacyjny SPI (szeregowy interfejs peryferyjny). Dla Arduino UNO piny komunikacyjne SPI to 13, 12, 11 i 10. Dla Arduino mega piny SPI to 50, 51, 52 i 53.

Proponowany projekt jest zilustrowany Arduino UNO, jeśli masz inny model Arduino, zapoznaj się z Internetem w celu uzyskania pinów SPI.

Moduł składa się z uchwytu na kartę, który utrzymuje kartę SD na miejscu. Regulator 3,3 V służy do ograniczania napięcia do kart SD, ponieważ został zaprojektowany do działania przy 3,3 V, a nie 5 V.

Posiada układ scalony LVC125A na pokładzie, który jest logicznym przesuwnikiem poziomu. Funkcją przełącznika poziomu logicznego jest redukcja sygnałów 5 V z sygnałów logicznych arduino do sygnałów logicznych 3,3 V.

Na tym kończy się moduł karty SD.

Korzystając z modułu karty SD możemy przechowywać dowolne dane, tutaj będziemy przechowywać dane tekstowe. Będziemy przechowywać dane dotyczące temperatury i wilgotności na karcie SD. Wykorzystujemy również moduł zegara czasu rzeczywistego do rejestrowania czasu wraz z danymi z czujników. Rejestruje dane co 30 sekund.

Schemat:

Interfejs modułu karty SD do rejestracji danych

Moduł RTC będzie śledził czas i zapisywał datę i godzinę na karcie SD.

Dioda LED błędu miga szybko, jeśli karta SD nie działa lub nie można jej zainicjować lub karta SD nie jest obecna. Przez resztę czasu dioda LED pozostaje wyłączona.

JAK USTAWIĆ CZAS NA RTC:

• Pobierz poniższą bibliotekę.
• Po zakończeniu konfiguracji sprzętu podłącz arduino do komputera.
• Otwórz arduino IDE
• Przejdź do Plik> Przykłady> DS1307RTC> SetTime.
• Prześlij kod, a RTC zostanie zsynchronizowany z czasem komputera.
• Teraz załaduj kod podany poniżej.

Proszę pobrać następującą bibliotekę arduino przed załadowaniem kodu.

DS1307RTC: github.com/PaulStoffregen/DS1307RTC

Temperatura i wilgotność DHT11: arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Program:

//-----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()
}
}

// ----- Program opracowany przez R.Girisha ----- //

Gdy obwód będzie mógł rejestrować dane przez jakiś czas, możesz wyjąć kartę SD i podłączyć ją do komputera, pojawi się plik TEXT.txt, w którym zapisane są wszystkie dane dotyczące temperatury i wilgotności wraz z godziną i datą, jak pokazano poniżej.

UWAGA: Powyższy pomysł jest przykładem interfejsu i rejestrowania danych. Wykorzystanie tego projektu zależy od Twojej wyobraźni, możesz rejestrować dane z czujników dowolnego rodzaju.

Prototyp autora:

Prototyp dla połączonego modułu karty SD z Arduino




Poprzedni: Czujniki bezkontaktowe - podczerwień, temperatura / wilgotność, pojemność, światło Dalej: Jak podłączyć czujnik fotodiody IR w obwodzie