Propojení modulu SD karty pro protokolování dat

Vyzkoušejte Náš Nástroj Pro Odstranění Problémů





V tomto příspěvku budeme propojovat modul SD karty s Arduino pro záznam dat. Uvidíme přehled modulu SD karty a pochopíme jeho konfigurace pinů a komponenty na desce. Nakonec vytvoříme obvod pro zaznamenávání údajů o teplotě a vlhkosti na SD kartu.



Zabezpečená digitální karta

SD karta nebo karta Secure Digital je výhodou pro moderní elektroniku, protože poskytuje velkokapacitní úložiště při minimální velikosti. SD kartu jsme použili k ukládání médií v jednom z předchozích projektů (MP3 přehrávač). Zde jej použijeme pro záznam dat.

Protokolování dat je základním krokem k zaznamenání minulého výskytu incidentu. Například: vědci a vědci schopní interpretovat vzestup globální teploty.



K tomuto závěru dospěli poté, co pochopili vzestup teplotního vzorce pohledem na data posledních několika desetiletí. Zaznamenávání údajů o aktuálním incidentu může také odhalit budoucí výskyt.

Jelikož je Arduino skvělým mikrokontrolérem pro čtení dat ze senzorů a podporuje různé komunikační protokoly pro čtení senzorů a vstupních výstupních periferií, bylo spojení mezi modulem SD karty Arduino hračkou.

Vzhledem k tomu, že arduino nemá jiné úložiště než svůj vlastní programový úložný prostor, můžeme přidat externí úložiště pomocí popsaného modulu v tomto článku.

Nyní se podívejme na modul SD karty.

Obrázek modulu SD karty:

Obrázek modulu SD karty:

Překlopení modulu a konfigurace kolíků:

Překlopení modulu a konfigurace kolíků:

Existuje šest pinů a podporuje komunikační protokol SPI (sériové periferní rozhraní). Pro Arduino UNO jsou komunikační piny SPI 13, 12, 11 a 10. Pro Arduino mega jsou SPI piny 50, 51, 52 a 53.

Navrhovaný projekt je znázorněn na Arduino UNO, pokud máte jakýkoli jiný model Arduina, podívejte se na SPI na internetu.

Modul se skládá z držáku karty, který drží SD kartu na místě. Regulátor 3,3 V slouží k omezení napětí na SD karty, protože je navržen tak, aby fungoval při 3,3 V, nikoli 5 V.

Má integrovaný obvod LVC125A, což je řadič logické úrovně. Funkce řadiče logické úrovně je snížit 5V signály z Arduina na 3,3V logické signály.

Tím je modul SD karty ukončen.

Pomocí modulu SD karty můžeme ukládat jakýkoli král dat, zde budeme ukládat textová data. Budeme ukládat údaje o teplotě a vlhkosti na SD kartu. Rovněž využíváme modul hodin reálného času k zaznamenávání času spolu s daty ze senzorů. Zaznamenává data každých 30 sekund.

Schematický diagram:

Propojení modulu SD karty pro protokolování dat

Modul RTC bude sledovat čas a zaznamenávat datum a čas na SD kartu.

Chybová LED rychle bliká, pokud SD karta selže nebo se neinicializuje nebo SD karta není přítomna. Po zbytek času LED nesvítí.

JAK NASTAVIT ČAS NA RTC:

• Stáhněte si níže uvedenou knihovnu.
• Po dokončení nastavení hardwaru připojte arduino k PC.
• Otevřete arduino IDE
• Přejděte na Soubor> Příklady> DS1307RTC> SetTime.
• Nahrajte kód a RTC se synchronizuje s časem počítače.
• Nyní nahrajte níže uvedený kód.

Před nahráním kódu si prosím stáhněte následující arduino knihovnu.

DS1307RTC: github.com/PaulStoffregen/DS1307RTC

Teplota a vlhkost 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 vyvinutý R.Girishem ----- //

Jakmile je obvodu povoleno po určitou dobu zaznamenávat data, můžete odebrat kartu SD připojenou k počítači, bude soubor TEXT.txt, který zaznamená všechna data o teplotě a vlhkosti spolu s časem a datem, jak je uvedeno níže.

POZNÁMKA: Výše ​​uvedená myšlenka je příkladem, jak propojit a zaznamenat data. Využití tohoto projektu závisí na vaší fantazii, můžete zaznamenávat data senzorů jakéhokoli druhu.

Autorův prototyp:

Prototyp pro modul karty SD s rozhraním Arduino




Předchozí: Bezkontaktní senzory - infračervené, teplotní / vlhkostní, kapacitní, lehké Další: Jak připojit IR fotodiodový senzor na obvod