Veri Kaydı için Arabirim SD Kart Modülü

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu yazıda veri kaydı için SD kart modülünü arduino ile arayüzleyeceğiz. SD kart modülüne genel bakışı göreceğiz ve pin yapılandırmalarını ve yerleşik bileşenlerini anlayacağız. Son olarak, sıcaklık ve nem verilerini SD karta kaydetmek için bir devre inşa edeceğiz.



Güvenli Dijital Kart

SD kart veya Secure Digital kart, minimum boyutta yüksek kapasiteli depolama sağladığı için modern elektronikler için nimettir. SD kartı, önceki projelerden birinde (Mp3 oynatıcı) medya depolaması için kullandık. Burada veri kaydı için kullanacağız.

Veri kaydı, bir olayın geçmiş olaylarını kaydetmek için temel adımdır. Örneğin: küresel sıcaklığın yükselişini yorumlayabilen bilim adamları ve araştırmacılar.



Son birkaç on yılın verilerine bakarak yükselen sıcaklık modelini anladıktan sonra bu sonuca vardılar. Mevcut olayla ilgili verilerin kaydedilmesi, gelecekteki olay hakkında da bilgi verebilir.

Arduino, sensör verilerini okumak için harika bir mikrodenetleyici olduğundan ve sensörleri ve giriş çıkış çevre birimlerini okumak için çeşitli iletişim protokollerini desteklediğinden, SD kart modülü arduino arasındaki bağlantı çocuk oyuncağıdır.

Arduino'nun kendi program depolama alanı dışında bir depolama alanı olmadığı için, bu makalede açıklanan modülü kullanarak harici bir depolama ekleyebiliriz.

Şimdi SD kart modülüne bir göz atalım.

SD kart modülünün görüntüsü:

SD kart modülünün görüntüsü:

Modülün diğer tarafı ve pin yapılandırması:

Modülün diğer tarafı ve pin yapılandırması:

Altı pin vardır ve SPI (seri çevresel arayüz) iletişim protokolünü destekler. Arduino UNO için SPI iletişim pinleri 13, 12, 11 ve 10'dur. Arduino mega için SPI pinleri 50, 51, 52 ve 53'tür.

Önerilen proje Arduino UNO ile gösterilmektedir, eğer başka bir Arduino modeline sahipseniz, lütfen SPI pinleri için internete bakın.

Modül, SD kartı yerinde tutan bir kart tutucusundan oluşur. Voltajı SD kartlara sınırlamak için 3.3V regülatör sağlanmıştır, çünkü 5V değil 3.3V'de çalışacak şekilde tasarlanmıştır.

Lojik seviye değiştirici olan kart üzerinde LVC125A entegre devreye sahiptir. Mantıksal seviye değiştiricinin işlevi, 5V sinyallerini arduino'dan 3,3V mantık sinyallerine düşürmektir.

Şimdi bu SD kart modülünü tamamlıyor.

SD kart modülünü kullanarak herhangi bir veriyi saklayabiliriz, burada metin verilerini saklayacağız. Sıcaklık ve nem verilerini SD karta kaydedeceğiz. Ayrıca, sensör verileriyle birlikte zamanı kaydetmek için gerçek zamanlı saat modülünü kullanıyoruz. Verileri her 30 saniyede bir kaydeder.

Şematik diyagram:

Veri Kaydı için Arabirim SD Kart Modülü

RTC modülü saati takip edecek ve tarih ve saati SD karta kaydedecektir.

SD kart başarısız olursa veya başlatılamazsa veya SD kart yoksa, hata LED'i hızla yanıp söner. Kalan zaman LED kapalı kalır.

RTC İÇİN ZAMAN NASIL AYARLANIR:

• Aşağıdaki kitaplığı indirin.
• Donanım kurulumu tamamlandıktan sonra arduino'yu PC'ye bağlayın.
• Açık arduino IDE
• Dosya> Örnekler> DS1307RTC> SetTime'a gidin.
• Kodu yükleyin, RTC bilgisayarın saatiyle senkronize olacaktır.
• Şimdi aşağıda verilen kodu yükleyin.

Kodu yüklemeden önce lütfen aşağıdaki arduino kitaplığını indirin.

DS1307RTC: github.com/PaulStoffregen/DS1307RTC

DHT11 sıcaklık ve nem: 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()
}
}

// ----- R.Girish tarafından geliştirilen program ----- //

Devrenin bir süre veri kaydetmesine izin verildiğinde, SD kartını bilgisayarınıza bağlayabilirsiniz, aşağıda gösterildiği gibi saat ve tarih ile birlikte tüm sıcaklık ve nem verilerinin kaydedildiği TEXT.txt dosyası olacaktır.

NOT: Yukarıdaki fikir, verilerin nasıl arayüzleneceği ve kaydedileceği bir örnektir. Bu projenin kullanımı hayal gücünüze bağlıdır, her türlü sensör verilerini kaydedebilirsiniz.

Yazarın prototipi:

Arduino ile Arayüzlü SD Kart Modülü Prototipi




Önceki: Temassız Sensörler - Kızılötesi, Sıcaklık / Nem, Kapasitif, Işık Sonraki: Bir Devreye IR Fotodiyot Sensörü Nasıl Bağlanır