التخزين على ذاكرة SD
حول المشروع:
في بعض المشاريع تحتاج لتسجيل مقدار كبير من المعلومات (القراءات) بدون أن تبقى باتصال مع الكمبيوتر. مثال: قياس درجة الحرارة طوال السنة. هذا العمل يسمى logging.
الخيار الأمثل في هذه الحالة هو استخدام ذاكرات الـ SD فهي رخيصة واستخدامها سهل. الرائع في الأمر أنها بإمكانك أخذ مئات أو آلاف القراءات بسهولة من الأردوينو إلى الذاكرة SD إلى الكمبيوتر إلى برنامج أكسيل ؛ ثم رسم شكل بياني يبين لك خلاصة كل تلك القراءات.

التوصيل
تتصل القطعة المخصصة لقراءة بطاقة SD بالأردوينو عن طريق بروتوكول الإتصال SPI. يعتبر SPI واحد ن أسهل بروتوكولات الاتصال ويستخدم بكثرة لربط مكونات الأنظمة الإلكترونية (أردوينو، حساسات، ذاكرات ، شرائح إلكترونية متنوعة ) يستخدم بروتوكول الـ SPI أربعة أسلاك
الوظيفة | اسم المنفذ | الإختصار | منفذ الأردوينو |
---|---|---|---|
نقل البیانات تسلسلیا من الأردوینو إلى الذاكرة | master out/slave in | MOSI | 11 |
نقل البیانات من الذاكرة إلى الأردوینو | master in/slave out | MISO | 12 |
نبضات التزامن | clock | CLK | 13 |
اختیار الملحق الفعال (في حال الربط بأكثر من ملحق) | chip select | CS | any |

الكتابة على الذاكرة
في هذا التمرين تتم الكتابة داخل ملف “jemjem” داخل الذاكرة. أولا نقوم بتعريف الكائن “jeem” و فتح الملف “jemjem.txt”. بعد ذلك نقوم بالكتابة باستخدام ()jeem.println . أخيرا عند الانتهاء من الكتابة يجب اغلاق الملف. لاحظ استخدام مكتبة “SPI.h” المخصصة لبروتوكول الاتصال SPI و مكتبة (SD.h) المخصص لقارئ الذاكرة.
#include "SPI.h"
#include "SD.h"
File jeem; // Object
int CS=8; // CS connecting to pin8
int x=20178;
void setup(){
if (!SD.begin(CS)) {return;} //make sure SD card works well
jeem = SD.open("jemjem.txt", FILE_WRITE); // opening the file
if(jeem){ // don't write untill the file is open
jeem.println("I will upload once only");
jeem.println(x);
jeem.close(); }} // the file must be closed after writing
void loop() {}
كتابة المقاومة المتغيرة
يقوم البرنامج التالي بقراءة قيمة الجهد التماثلية من المقاومة المتغيرة وكتابتها في الملف “log” داخل ذاكرة SD مع قيمة الزمن بأمر millis . لاحظ أن العملية تتكرر كل 100 ميلي ثانية.

#include "SPI.h"
#include "SD.h"
File jeem;
int CS =8;
int x;
void setup() {
if (!SD.begin(CS)) {return;} }
void loop() {
x=analogRead(A5);
jeem = SD.open("log.txt", FILE_WRITE);
if (jeem) {
jeem.print(x);
jeem.print(",");
jeem.println(millis());
jeem.close();
delay(100);}}
التعامل مع البيانات
بعد الانتهاء من تسجيل قيم الجهد التماثلية في التمرين السابق يمكن الآن الحصول على كافة البيانات التي تم كتابتها على الذاكرة من خلال توصيل الذاكرة بالكمبيوتر. يمكنك ملاحظة وجود الملف “log.txt” الذي يحتوي على القيم.
أخيرا لمعرفة كيفية تحويل القراءات إلى رسم يمكن مشاهدة الفيديو
