Modul kartice SD za beleženje podatkov

Preizkusite Naš Instrument Za Odpravo Težav





V tej objavi bomo povezali modul kartice SD z arduino za beleženje podatkov. Ogledali si bomo pregled modula kartice SD in razumeli njegove konfiguracije pinov ter komponente na vozilu. Končno bomo zgradili vezje za beleženje podatkov o temperaturi in vlažnosti na kartico SD.



Varna digitalna kartica

Kartica SD ali kartica Secure Digital je dobro za sodobno elektroniko, saj zagotavlja veliko zmogljivost shranjevanja pri minimalni velikosti. Kartico SD smo uporabili za shranjevanje medijev v enem od prejšnjih projektov (Mp3 predvajalnik). Tu ga bomo uporabili za beleženje podatkov.

Beleženje podatkov je temeljni korak za beleženje preteklega dogodka incidenta. Na primer: znanstveniki in raziskovalci, ki znajo razlagati dvig svetovne temperature.



Do tega zaključka so prišli, ko so razumeli vzorec naraščajoče temperature, ko so si ogledali podatke zadnjih nekaj desetletij. Snemanje podatkov o trenutnem incidentu lahko razkrije tudi prihodnji pojav.

Ker je arduino odličen mikrokrmilnik za branje podatkov senzorjev in podpira različne komunikacijske protokole za branje senzorjev in vhodne izhodne periferne enote, je povezava med modulom kartice SD arduino naredila kos.

Ker arduino nima prostora za shranjevanje, razen lastnega prostora za shranjevanje programov, lahko z opisanim modulom v tem članku dodamo zunanji pomnilnik.

Zdaj pa si oglejmo modul kartice SD.

Slika modula SD kartice:

Slika modula SD kartice:

Drsna stran modula in konfiguracija zatiča:

Drsna stran modula in konfiguracija zatiča:

Obstaja šest nožic in podpira komunikacijski protokol SPI (serijski periferni vmesnik). Za Arduino UNO so komunikacijski zatiči SPI 13, 12, 11 in 10. Za Arduino mega so zatiči SPI 50, 51, 52 in 53.

Predlagani projekt je ponazorjen z Arduino UNO, če imate kakšen drug model Arduina, prosimo, poiščite zatiči SPI na internetu.

Modul je sestavljen iz nosilca kartice, ki drži kartico SD na mestu. 3.3V regulator je namenjen omejevanju napetosti na SD kartice, saj je zasnovan tako, da deluje pri 3.3V in ne 5V.

Na krovu ima integrirano vezje LVC125A, ki prestavlja logični nivo. Naloga logičnega preklopnika nivoja je zmanjšati 5V signale iz arduina na 3.3V logične signale.

Zdaj zaključujemo modul kartice SD.

Z modulom SD kartice lahko shranimo poljubne podatke, tukaj bomo shranili besedilne podatke. Podatke o temperaturi in vlažnosti bomo shranili na kartico SD. Za beleženje časa skupaj s podatki senzorja uporabljamo tudi modul ure v realnem času. Podatke beleži vsakih 30 sekund.

Shematski diagram:

Modul kartice SD za beleženje podatkov

Modul RTC bo zapisoval čas in zapisoval datum in uro na kartico SD.

Lučka LED za napako hitro utripa, če kartica SD ne uspe ali se je ne da inicializirati ali če kartica SD ni prisotna. Preostali čas LED ne sveti.

KAKO NASTAVITI ČAS ZA RTC:

• Prenesite spodnjo knjižnico.
• Po končani namestitvi strojne opreme povežite arduino z računalnikom.
• Odprite arduino IDE
• Odprite Datoteka> Primeri> DS1307RTC> SetTime.
• Naložite kodo in RTC se bo sinhroniziral s časom računalnika.
• Zdaj naložite spodnjo kodo.

Pred nalaganjem kode prenesite naslednjo knjižnico arduino.

DS1307RTC: github.com/PaulStoffregen/DS1307RTC

Temperatura in vlažnost 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 razvil R.Girish ----- //

Ko lahko vezje za nekaj časa beleži podatke, lahko odstranite kartico SD, ki se poveže z računalnikom, v datoteki TEXT.txt pa bodo zabeleženi vsi podatki o temperaturi in vlažnosti, skupaj s časom in datumom, kot je prikazano spodaj.

OPOMBA: Zgornja ideja je primer povezovanja in snemanja podatkov. Uporaba tega projekta je odvisna od vaše domišljije, lahko snemate kakršne koli podatke senzorjev.

Avtorjev prototip:

Prototip za vmesniški modul SD kartice z Arduino




Prejšnja: Brezkontaktni senzorji - Infrardeči, Temperatura / Vlažnost, Kapacitivni, Svetloba Naprej: Kako povezati IR senzor za fotodiodo v vezje