Modul de interfațare a cardului SD pentru înregistrarea datelor

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





În acest post vom interfața modulul cardului SD cu arduino pentru înregistrarea datelor. Vom vedea o prezentare generală a modulului cardului SD și vom înțelege configurațiile lui pin și componentele de la bord. În cele din urmă, vom construi un circuit pentru a înregistra datele de temperatură și umiditate pe cardul SD.



Card digital securizat

Cardul SD sau cardul Secure Digital este un avantaj pentru electronica modernă, deoarece oferă stocare de mare capacitate la dimensiuni minime. Am folosit cardul SD pentru stocarea media într-unul din proiectele anterioare (MP3 player). Aici îl vom folosi pentru înregistrarea datelor.

Înregistrarea datelor este pasul fundamental pentru a înregistra apariția trecută a unui incident. De exemplu: oamenii de știință și cercetătorii capabili să interpreteze creșterea temperaturii globale.



Au ajuns la această concluzie după ce au înțeles modelul de creștere a temperaturii, analizând datele din ultimele decenii. Înregistrarea datelor despre incidentul actual ar putea dezvălui și despre evenimentul viitor.

Deoarece arduino este un microcontroler excelent pentru citirea datelor senzorilor și acceptă diverse protocoale de comunicare pentru a citi senzorii și perifericele de ieșire de intrare, conexiunea dintre modulul cardului SD arduino a făcut o bucată de tort.

Deoarece arduino nu are spațiu de stocare în afară de propriul spațiu de stocare a programului, putem adăuga un spațiu de stocare extern utilizând modulul descris în acest articol.

Acum, să aruncăm o privire la modulul cardului SD.

Imagine a modulului cardului SD:

Imagine a modulului cardului SD:

Flipside a modulului și configurația pinului:

Flipside a modulului și configurația pinului:

Există șase pini și acceptă protocolul de comunicație SPI (interfață periferică serială). Pentru Arduino UNO pinii de comunicație SPI sunt 13, 12, 11 și 10. Pentru Arduino mega pinii SPI sunt 50, 51, 52 și 53.

Proiectul propus este ilustrat cu Arduino UNO dacă aveți orice alt model de Arduino, vă rugăm să consultați internetul pentru pinii SPI.

Modulul este format dintr-un suport de card care ține cardul SD în poziție. Regulatorul de 3,3 V este prevăzut pentru a limita tensiunea la cardurile SD, deoarece este proiectat să funcționeze la 3,3 V și nu 5 V.

Are un circuit integrat LVC125A la bord, care este un schimbător de nivel logic. Funcția schimbătorului de nivel logic este de a reduce semnalele 5V de la arduino la 3,3V semnale logice.

Acum se încheie modulul cardului SD.

Folosind modulul cardului SD putem stoca orice rege de date, aici vom stoca date text. Vom stoca datele de temperatură și umiditate pe cardul SD. De asemenea, utilizăm modulul de ceas în timp real pentru a înregistra ora împreună cu datele senzorilor. Înregistrează datele la fiecare 30 de secunde.

Diagramă schematică:

Modul de interfațare a cardului SD pentru înregistrarea datelor

Modulul RTC va ține evidența timpului și va înregistra data și ora pe cardul SD.

LED-ul de eroare clipește rapid, dacă cardul SD nu reușește sau nu se inițializează sau cardul SD nu este prezent. Restul timpului LED-ul rămâne stins.

CUM SETI TIMPUL PENTRU RTC:

• Descărcați biblioteca de mai jos.
• După configurarea hardware finalizată, conectați arduino la computer.
• Deschideți IDE arduino
• Accesați Fișier> Exemple> DS1307RTC> SetTime.
• Încărcați codul și RTC se va sincroniza cu timpul computerului.
• Acum încărcați codul de mai jos.

Vă rugăm să descărcați următoarea bibliotecă arduino înainte de a încărca codul.

DS1307RTC: github.com/PaulStoffregen/DS1307RTC

Temperatura și umiditatea 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 dezvoltat de R.Girish ----- //

Odată ce circuitul este permis să înregistreze date pentru o perioadă de timp, puteți scoate cardul SD conectat la computerul dvs., va exista fișierul TEXT.txt în care sunt înregistrate toate datele de temperatură și umiditate împreună cu ora și data, așa cum se arată mai jos.

NOTĂ: Ideea de mai sus este un exemplu de interfață și înregistrare a datelor. Utilizarea acestui proiect depinde de imaginația dvs., puteți înregistra date de senzori de orice fel.

Prototipul autorului:

Prototip pentru modulul de card SD interfațat cu Arduino




Precedent: Senzori fără contact - infraroșu, temperatură / umiditate, capacitiv, luminos Următorul: Cum să conectați un senzor fotodiodă IR într-un circuit