مشروع تسجيل البيانات وعرضها على ملف Excel باستخدام وحدة بطاقة SD ووحدة DS3231 اكتب تعليقُا

تم نشر هذا المشروع لجميع الأشخاص المهتمين في مجال تصنيع وابتكار المشاريع الإلكترونية والبرمجية، و نود التنويه أن موقع انا الكتروني يخلي مسؤوليته التامة في حال لم يعمل المشروع لدى العميل أو في حال الاستخدام الخاطئ للمكونات الإلكترونية والكهربائية التي قد تؤدي لحدوث أي مشكلة لا سمح الله.
  • في هذا المشروع، سيتم استخدام وحدة DS3231 من أجل الحصول على الوقت الحالي والتاريخ ودرجة الحرارة.
  • يتم عرض البيانات على شاشة LCD، حيث تُسجّل على بطاقة microSD بواسطة موديول microSD.
  • من أجل تحليل البيانات، يتم عرضها على مجدول Excel.
  • بعبارة أخرى، يهدف المشروع إلى جمع وتحليل البيانات على المدى اليعيد، بدلاً من عرضها مؤقتا على الشاشة.
  • كما أن استخدام Excel يفيد أيضًا في معالجة وتحليل البيانات باستخدام أدوات وتقنيات إحصائية متقدمة.
  • من أجل عرض البيانات على مجدول EXCEL، يجب اتباع الخطوات التالية (كما يمكن الاعتماد على الصور المضافة في الأسفل):
  1. افتح مجدول Excel وأنشئ جدول بيانات جديد.
  2. انقر على علامة التبويب “Data” في شريط أدوات Excel.
  3. انقر على الخيار “From Text/CSV”.
  4. انتقل إلى ملف “DATA.txt” الذي يحتوي على البيانات التي تريد استيرادها، ثم انقر على “Import”.
  5. في نافذة الحوار التي تظهر: اختر “Comma” في قسم “Delimiter” وكذلك “Do not detect data type” في قسم “Data Type Detection”.
  6. انقر على “Load”.
  7. يجب أن تظهر البيانات الآن في ورقة Excel.
  8. حدد تنسيق “Time” للعمود الثاني وتنسيق “Number” للعمود الثالث، ثم انقر على “OK”.
  9. استبدل الفواصل بنقاط في العمود الثالث.
  10. حدد العمودين الثاني والثالث.
  11. انقر على علامة التبويب “Insert” في شريط أدوات Excel.
  12. حدد الخيار الأول “2-D Line” في قسم “Charts”.
  13. الآن، قد تم إنشاء الرسم البياني (درجة الحرارة من خلال الوقت) كرسم خطي ثنائي الأبعاد.
  14. يمكنك أيضًا تخصيص الرسم البياني، عن طريق تعديل العنوان ولون الخط وحدود المحور وفقًا لتفضيلاتك.

ادوات المشروع

تنويه: استخدم لوحة Bread board لتوصيل الوحدات بمنفذ 5V و GND
  • اردوينو اونو مع سلك توصيل Arduino Uno: عدد 1
  • لوح تجارب 400 نقطة لون ابيض Solderless Breadboard: عدد 1
  • LCD1604 شاشة بخلفية زرقاء اربعة صفوف: عدد 1 (يجب تلحيمه مع موديول تشغيل شاشة LCD بطرفين)
  • موديول تشغيل شاشة LCD بطرفين: عدد 1
  • موديول الوقت الحقيقي DS3231 RTC Module Precise: عدد 1
  • بطارية ليثيوم 3 فولت إنرجايزر CR2032 Energizer 3V Lithium Battery: عدد 1
  • موديول قراءة وكتابة بطاقات الذاكرة SD Reading Writing Module: عدد 1
  • أسلاك توصيل ذكر لذكر 40 قطعة 20 سم Male to Male jumper wires
  • أسلاك توصيل من ذكر إلى أنثى 40 دبوس 20 سم wires 40pcs Male to Female
  • بطاقة ذاكرة ساندسك الترا 16 جيجابايت SanDisk ultra micro: عدد1

مخطط المشروع

الكود البرمجي

تنبيه : في حال لم تكن متأكد من قدرتك على تنفيذ خطوات المشروع يرجى استشارة شخص متخصص في هذا المجال.
  • للتعرف على تجهيز لوحة أردوينو للبرمجة قم بزيارة الرابط التالي.
  • للإطلاع على كيفية تحميل وتنصيب المكتبات قم بزيارة الرابط التالي.
  • قبل تحميل الكود البرمجي، عليك تحميل المكتبات التالية:
  • Wire.h
  • RTClib.h
  • LiquidCrystal_I2C.h
  • SD.h
  • في حال لم يعمل هذا الكود البرمجي، قم بتحميل ملف الكود بالضغط على زر التحميل الموجود في الأسفل.

// Description :// Displaying the current time, date and temperature on the 16×4 LCD screen and data logging to a microsd card
// Affichage de l’heure et la date actuelle ansi que la température sur l’écran LCD 16×4 et l’enregistrement des données sur une carte microSD.
// Inspired from this code : File => Examples => RTClib => ds3231 / inspiré de ce code : Fichier => Exemples => RTClib => ds3231

#include <Wire.h> // Include the Wire library for I2C communication // Inclure la bibliothèque Wire pour la communication I2C
#include <RTClib.h> // Include the RTClib library for the DS3231 module // Inclure la bibliothèque RTClib pour le module DS3231
#include <LiquidCrystal_I2C.h> // Include the LiquidCrystal_I2C library for the LCD screen // Inclure la bibliothèque LiquidCrystal_I2C pour l’écran LCD
#include <SD.h> // Include the SD library for the microSD card // Inclure la bibliothèque SD pour la carte microSD

File dataFile;
RTC_DS3231 rtc; // Initialize the rtc object for the DS3231 module // Initialiser l’objet rtc pour le module DS3231
LiquidCrystal_I2C lcd(0X27, 16, 4); // Initialize the lcd object for the LCD screen // Initialiser l’objet lcd pour l’écran LCD
const int chipSelect = 10; // Define the chip select pin for the microSD card // Définir le pin de sélection de la carte microSD

char daysOfTheWeek[7][12] = {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”};
byte char_temp[8]={B00100,B01010,B01010,B01110,B01110,B11111,B11111,B01110}; // for thermometer icon / pour l’icône du thermomètre

void setup() {

rtc.begin();
lcd.init(); // Initialize the LCD screen // Initialiser l’écran LCD
lcd.backlight(); // Activate the LCD screen backlight // Activer le rétroéclairage de l’écran LCD
lcd.createChar(0,char_temp);
if (! rtc.begin()) { // Check if the DS3231 module is connected and functional // Vérifier si le module DS3231 est connecté et fonctionnel
lcd.setCursor(0,1);
lcd.print(“DS3231 Error!”);
while (1);
}
if (!SD.begin(chipSelect)) { // Check if the microSD card is connected and functional // Vérifier si la carte microSD est connectée et fonctionnelle
lcd.setCursor(0,1);
lcd.print(“SD card error!”);
while (1);
}
if (rtc.lostPower()) { // Check if the main power supply of the DS3231 is removed // Vérifier si l’alimentation principale du DS3231 est coupée
lcd.setCursor(0,1);
lcd.print(“RTC has lost power!”);
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

if (SD.exists(“data.txt”)) // Check if the “data.txt” file exists // Vérifier si le fichier “data.txt” existe
{
SD.remove(“data.txt”); // If the file exists, remove it // Supprimer le fichier “data.txt” s’il existe
}

lcd.setCursor(0,1); // Move the LCD screen cursor to position 0,0 // Déplacer le curseur de l’écran LCD en position 0,0
lcd.print(” Welcome…”);
delay(3000);
lcd.clear();
}

void loop() {
DateTime now = rtc.now(); // Read current date and time from DS3231 module // Lire la date et l’heure actuelles depuis le module DS3231
float tempC = rtc.getTemperature(); // Read temperature from DS3231 module // Lire la température depuis le module DS3231

//——————————Date display – Affichage de la date—————————–//
lcd.setCursor(6,0);
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
lcd.setCursor(0,1);
lcd.print(“Date:”);
lcd.setCursor(6,1);
if (now.day() <=9 )
{
lcd.print(“0”);
lcd.setCursor(7,1);
lcd.print(now.day(),DEC);
}
else {lcd.print(now.day(),DEC);}
lcd.setCursor(8,1);
lcd.print(“:”);
lcd.setCursor(9,1);
if (now.month() <=9 )
{
lcd.print(“0”);
lcd.setCursor(10,1);
lcd.print(now.month(),DEC);
}
else {lcd.print(now.month(),DEC);}
lcd.setCursor(11,1);
lcd.print(“:”);
lcd.setCursor(12,1);
lcd.print(now.year(),DEC);
//——————————Time dsiplay – Affichage du temps—————————–//
lcd.setCursor(0, 2);
lcd.print(“Time:”);
lcd.setCursor(6,2);
if (now.hour() <=9 )
{
lcd.print(“0”);
lcd.setCursor(7,2);
lcd.print(now.hour(),DEC);
}
else {lcd.print(now.hour(),DEC);}
lcd.setCursor(8,2);
lcd.print(“:”);
lcd.setCursor(9,2);
if (now.minute() <=9 )
{
lcd.print(“0”);
lcd.setCursor(10,2);
lcd.print(now.minute(),DEC);
}
else {lcd.print(now.minute(),DEC);}
lcd.setCursor(11,2);
lcd.print(“:”);
lcd.setCursor(12,2);

if (now.second() <=9 )
{
lcd.print(“0”);
lcd.setCursor(13,2);
lcd.print(now.second(),DEC);
}
else {lcd.print(now.second(),DEC);}
//—————————-Temperature display – Affichage de la température—————————//
lcd.setCursor(0,3);
lcd.print(“Temp:”);
lcd.setCursor(6,3);
lcd.print(rtc.getTemperature());
lcd.setCursor(11,3);
lcd.write((char)223);
lcd.setCursor(12,3);
lcd.print(“C”);
lcd.setCursor(15,3);
lcd.print(char(0));

// Open the file for saving data. // ouverture du fichier pour enregistrer les données
dataFile = SD.open(“data.txt”, FILE_WRITE);

// if the file is open, we save the data // si le fichier est ouvert, on enregistre les données
if (dataFile) {
dataFile.print(now.year(), DEC);
dataFile.print(‘/’);
dataFile.print(now.month(), DEC);
dataFile.print(‘/’);
dataFile.print(now.day(), DEC);
dataFile.print(‘,’);
dataFile.print(now.hour(), DEC);
dataFile.print(‘:’);
dataFile.print(now.minute(), DEC);
dataFile.print(‘:’);
dataFile.print(now.second(), DEC);
dataFile.print(‘,’);
dataFile.println(tempC);
dataFile.close();
} else {
lcd.setCursor(0,2);
lcd.print(“Recording error!”);
}
delay(1000);
}

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *