واجهة وحدة بطاقة SD لتسجيل البيانات

جرب أداة القضاء على المشاكل





في هذا المنشور ، سنقوم بواجهة وحدة بطاقة SD مع اردوينو لتسجيل البيانات. سنرى نظرة عامة على وحدة بطاقة SD ونفهم تكوينات الدبوس والمكونات الموجودة على اللوحة. أخيرًا ، سنقوم بإنشاء دائرة لتسجيل بيانات درجة الحرارة والرطوبة على بطاقة SD.



البطاقة الرقمية الآمنة

تعد بطاقة SD أو بطاقة Secure Digital بمثابة نعمة للإلكترونيات الحديثة لأنها توفر سعة تخزين عالية بأقل حجم. استخدمنا بطاقة SD لتخزين الوسائط في أحد المشاريع السابقة (مشغل MP3). هنا سنستخدمه لتسجيل البيانات.

يعد تسجيل البيانات هو الخطوة الأساسية لتسجيل ما حدث في الماضي. على سبيل المثال: العلماء والباحثون قادرون على تفسير ارتفاع درجة الحرارة العالمية.



توصلوا إلى هذا الاستنتاج بعد فهم نمط ارتفاع درجة الحرارة من خلال الاطلاع على بيانات العقود القليلة الماضية. قد يؤدي تسجيل البيانات حول الحادث الحالي أيضًا إلى الكشف عن حدوثه في المستقبل.

نظرًا لأن اردوينو هو متحكم دقيق لقراءة بيانات المستشعر ويدعم بروتوكولات الاتصال المختلفة لقراءة المستشعرات والأجهزة الطرفية لإخراج الإدخال ، فإن الاتصال بين وحدة بطاقة SD اردوينو صنع قطعة من الكعكة.

نظرًا لأن arduino لا يحتوي على أي مساحة تخزين بخلاف مساحة تخزين البرنامج الخاصة به ، يمكننا إضافة وحدة تخزين خارجية باستخدام الوحدة الموصوفة في هذه المقالة.

الآن دعونا نلقي نظرة على وحدة بطاقة SD.

صورة وحدة بطاقة SD:

صورة وحدة بطاقة SD:

الجانب العكسي للوحدة وتكوين الدبوس:

الجانب العكسي للوحدة وتكوين الدبوس:

هناك ستة دبابيس وهي تدعم بروتوكول الاتصال SPI (الواجهة الطرفية التسلسلية). بالنسبة إلى Arduino UNO ، فإن دبابيس الاتصال SPI هي 13 و 12 و 11 و 10. بالنسبة إلى Arduino mega ، تكون دبابيس SPI 50 و 51 و 52 و 53.

يتم توضيح المشروع المقترح باستخدام Arduino UNO إذا كان لديك أي طراز آخر من Arduino ، فيرجى الرجوع إلى الإنترنت للحصول على دبابيس SPI.

تتكون الوحدة من حامل بطاقة يحمل بطاقة SD في مكانها. يتم توفير منظم 3.3 فولت للحد من الجهد لبطاقات SD حيث إنه مصمم للعمل عند 3.3 فولت وليس 5 فولت.

لديها دائرة متكاملة LVC125A على اللوحة وهي عبارة عن ناقل مستوى منطقي. تتمثل وظيفة ناقل الحركة المنطقي في تقليل إشارات 5 فولت من إشارات اردوينو إلى إشارات المنطق 3.3 فولت.

الآن هذا يختتم وحدة بطاقة SD.

باستخدام وحدة بطاقة SD ، يمكننا تخزين أي ملك من البيانات ، وهنا سنقوم بتخزين البيانات النصية. سنقوم بتخزين بيانات درجة الحرارة والرطوبة على بطاقة SD. نحن نستخدم أيضًا وحدة ساعة الوقت الفعلي لتسجيل الوقت جنبًا إلى جنب مع بيانات المستشعر. يسجل البيانات كل 30 ثانية.

رسم تخطيطى:

واجهة وحدة بطاقة SD لتسجيل البيانات

ستقوم وحدة RTC بتتبع الوقت وتسجيل التاريخ والوقت في بطاقة SD.

يومض مؤشر LED الخطأ بسرعة ، في حالة فشل بطاقة SD أو فشل التهيئة أو عدم وجود بطاقة SD. باقي الوقت يظل المصباح مطفأ.

كيفية ضبط الوقت على RTC:

• قم بتنزيل المكتبة أدناه.
• بعد الانتهاء من إعداد الأجهزة ، قم بتوصيل Arduino بجهاز الكمبيوتر.
• افتح اردوينو IDE
• اذهب إلى ملف> أمثلة> DS1307RTC> SetTime.
• قم بتحميل الكود وستتم مزامنة RTC مع وقت الكمبيوتر.
• الآن قم بتحميل الكود أدناه.

يرجى تنزيل مكتبة اردوينو التالية قبل تحميل الكود.

DS1307RTC: github.com/PaulStoffregen/DS1307RTC

درجة حرارة DHT11 والرطوبة: arduino-info.wikispaces.com/file/detail/DHT-lib.zip

برنامج:

//-----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 ----- //

بمجرد السماح للدائرة بتسجيل البيانات لبعض الوقت ، يمكنك إزالة بطاقة SD المتصلة بجهاز الكمبيوتر الخاص بك ، وسيكون هناك ملف TEXT.txt حيث يتم تسجيل جميع بيانات درجة الحرارة والرطوبة مع الوقت والتاريخ ، كما هو موضح أدناه.

ملاحظة: الفكرة أعلاه هي مثال على كيفية إنشاء واجهة وتسجيل البيانات. يعتمد استخدام هذا المشروع على خيالك ، يمكنك تسجيل بيانات الاستشعار من أي نوع.

النموذج الأولي للمؤلف:

النموذج الأولي لوحدة بطاقة SD المتداخلة مع Arduino




السابق: مستشعرات تلامس - الأشعة تحت الحمراء ، درجة الحرارة / الرطوبة ، بالسعة ، الضوء التالي: كيفية توصيل مستشعر الثنائي الضوئي IR في دائرة