رباتیک و هوافضا

فرستنده اطلاعات آردوینو(مانند دما، رطوبت و زمان) به کارت SD و کامپیوتر

فرستنده اطلاعات آردوینو(مانند دما، رطوبت و زمان) به کارت SD و کامپیوتر

به نام خدا

فرستنده اطلاعات آردوینو(مانند دما، رطوبت و زمان) به کارت SD و کامپیوتر

 

فرستنده اطلاعات آردوینو(مانند دما، رطوبت و زمان) به کارت SD و کامپیوتر

 

در این پروژه شما یاد میگیرید که چطور داده ها را با دقت زمانی خاص ذخیره کنید. ما از برد آردوینو برای جمع آوری اطلاعات (در این پروژه دما، رطوبت، تاریخ و زمان) استفاده می کنیم و آنها را روی SD cart و کامپیوتر ذخیره میکنیم.

برای حفظ تاریخ و زمان ما از ماژول RTC DS3231 استفاده میکنیم و دما و رطوبت را با استفاده از سنسور DHT11 اندازه گیری خواهیم کرد. در پایان این پروژه شما ثبت اطلاعات را بر روی sd cart و همچنین نحوه ارسال داده ها به صفحه ی اکسل کامپیوتر از طریق ارتباط سریال یاد می گیرید.

 

قطعات مورد نیاز:

۱ – برد بورد

۲ – Arduino UNO (هر نسخه از آن)

۳ – سنسور دما DHT11

۴ – ماژول RTC DS3231

۵ – ماژول SD Card

۶ – سیم برای اتصال قطعات

۷ – کامپیوتر یا لب تاب

 

فرستنده اطلاعات آردوینو(مانند دما، رطوبت و زمان) به کارت SD و کامپیوتر

تصویری از ماژول سنسور دما و رطوبت DHT11 در بالا آمده است.

 

 مدار پروژه:

 

مدار این پروژه را میتوانید در تصویر زیر ببینید.

فرستنده اطلاعات آردوینو(مانند دما، رطوبت و زمان) به کارت SD و کامپیوتر

 

با توجه به تصویر چون ما از ماژول ها در پروژه استفاده میکنیم . برای وصل کردن قطعات میتوانید از جدول زیر استفاده کنید.

 

 

پین آردوینو پین مربوط به ماژول
سنسور داما DHT111
Vcc ۵V
Gnd Gnd
Nc Nc
Out Pin 7
ماژول RTC DS3231
Vcc ۵V
Gnd Gnd
SCL Pin A5
SDA Pin A4
ماژول SD card
Vcc ۵V
Gnd Gnd
MISO Pin 12
MOSI Pin 11
SCK Pin 13
CS Pin 4

 

 

توضیح برنامه :

 

برنامه ی ما باید طوری باشد که کار های زیر را برای ما انجام دهد:

اطلاعات مربوط به سنسور DTH11 (یا هر داده دیگر که وارد خواهد شد) را بخواند، پرو تکل  I2C را برای خواندن از ماژول TRC تعریف کند ، پروتکل SPI را برای اتصال ماژول sd card با برد آردوینو تعریف کند ، تاریخ، زمان، دما و رطوبت را در SD card ذخیره کند و تاریخ، زمان، دما و رطوبت را در صفحه اکسل باز شده در رایانه شما ذخیره کند .

شما باید دو کتابخانه زیر را دانلود کنید.

  1. کتابخانه سنسور DHT11
دانلود فایل
  1. کتابخانه ماژول RTC DS3231
دانلود فایل

وقتی کتابخانه های بالا را دانلود کردید آنها را از مسیر زیر به نرم افزار آردوینو خود اضافه کنید.

Sketch->Include Library -> Add .ZIP Library

برای آنکه اطلاعات را از آردوینو به صورت پیوسته به یک صفحه اکسل در کامپیوتر ارسال کنیم ، نیاز به نصب نرم افزار PLX-DAQ با توجه به سیستم عامل خود دارید. وقتی این نرم افزار را نصب کردید باید پوشه ای بر روی صفحه دکستاپ شما ایجاد شود.

 

خواندن اطلاعات از DS3231 :

این ماژول دارای یک منبع تغذیه است که وقتی منبع تغذیه اصلی از آن جدا یا آردوینو ریستارت شود، تاریخ و ساعت را حفظ میکند. پس تنها لازم است که یک بار تاریخ و زمان را روی این ماژول تنظیم کنیم .

// Init the DS3231 using the hardware interface
DS3231  rtc(SDA, SCL);
void Initialize_RTC()
{
   // Initialize the rtc object
  rtc.begin();

//#### the following lines can be uncommented to set the date and time for the first time### 
/*
rtc.setDOW(FRIDAY);     // Set Day-of-Week to SUNDAY
rtc.setTime(18, 46, 45);     // Set the time to 12:00:00 (24hr format)
rtc.setDate(6, 30, 2017);   // Set the date to January 1st, 2014
*/
}

 

توجه: در اولین استفاده از این ماژول شما باید تاریخ و ساعت را روی آن تنظیم کنید. برای تنظیم تاریخ و ساعت شما می توانید از RTC IC DS1307 برای خواندن تاریخ و ساعت از آردوینو استفاده کنید.

 

خواندن اطلاعات از DHT11 :

 

DHT11 سنسوری برای خواندن مقدار دما و رطوبت است. این سنسور اطلاعات را از طریق پین خروجی ماژول به صورت ۸ بیتی ارسال می کند.

 

#define DHT11_PIN 7 //Sensor output pin is connected to pin 7
dht DHT; //Sensor object named as DHT
void Read_DHT11()
{
int chk = DHT.read11(DHT11_PIN);
}

 

در اینجا ما پین خروجی ماژول را به پین شماره ۷ وصل کرده ایم . فراخوانی DHT.read(شماره ی پین) مقدار دما و رطوبت را میخواند و آن را به صورت پارامتری به عنوان DHT.temperature و DHT.Humidity ذخیره میکند.

بیشتر بخوانید...  ساعت زنگدار و دماسنج به همراه کنترل از راه دور با آردوینو

 

اتصال ماژول SD card :

 

void Initialize_SDcard()
{
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }

   // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("LoggerCD.txt", FILE_WRITE);
  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println("Date,Time,Temperature,Humidity"); //Write the first row of the excel file
    dataFile.close();
  }
}

 

در تابع Initialize_SDcard یک فایل متنی به نام “LoggerCD.txt” ایجاد می کنیم خط اول برنامه ی ما را بنویسید. در این جا مقادیر را با استفاده از “,” (کامای انگلیسی) از هم جدا می کنیم. استفاده از آن به این معنی است که وقتی یه کاما می گذاریم، به سلول بعدی در صفحه ی اکسل حرکت میکنیم.

 

ارسال داده ها به SD CARD :

 

با استفاده از کتابخانه  های DS3231 و DHT11 می توانیم این چهار پارامتر را دریافت کنیم و آنها را در پارامتر های زیر ذخیره کنیم. در جدول زیر نشان داده شده است.

 

تاریخ rtc.getDateStr());
ساعت rtc.getTimeStr());
دما DHT.temperature
رطوبت DHT.humidity

 

اکنون ما میتوانیم با استفاده از دستور print این پارامتر ها را در کارت SD ذخیره کنیم.

dataFile.print(parameter);

می بینید که هر پارامتر با کاما جدا میشود تا نمایش آن راحت تر باشد و از دستور dataFile.println()  برای نشان دادن اتمام دستورات استفاده میشود.

 

ارسان داده ها به PLX-DAQ:

 

DAQ  نرم افزار یست که به ما کمک می کند تا مقادیر را از آردوینو به طور مستقیم به یک فایل اکسل در لپ تاب یا کامپیوتر ارسال کنیم.  برای اینکار از نرم افزار های زیر استفاده کنید.

  1. شما میتوانید داده های خود را در هنگام ارسال ببینید و آن ها را برای رسم نمودار استفاده کنید.
  2. برای نظارت بر تاریخ و ساعت شما نیازی به ماژول RTC DS3231 نیازی ندارید.میتوانید به راحتی از تاریخ و ساعت سیستم خود استفاده کنید و آنها را به طور مستقیم در اکسل ذخیره کنید.

.

void Initialize_PlxDaq()
{
Serial.println("CLEARDATA"); //clears up any data left from previous projects
Serial.println("LABEL,Date,Time,Temperature,Humidity"); //always write LABEL, to indicate it as first line
}
void Write_PlxDaq()
  {
    Serial.print("DATA"); //always write "DATA" to Inidicate the following as Data
    Serial.print(","); //Move to next column using a ","

    Serial.print("DATE"); //Store date on Excel
    Serial.print(","); //Move to next column using a ","

    Serial.print("TIME"); //Store date on Excel
    Serial.print(","); //Move to next column using a ","

    Serial.print(DHT.temperature); //Store date on Excel
    Serial.print(","); //Move to next column using a ","

    Serial.print(DHT.humidity); //Store date on Excel
    Serial.print(","); //Move to next column using a ","

    Serial.println(); //End of Row move to next row

  }

 

این نرم افزار توانایی تشخیص کلمات کلیدی DATA ،LABAL ، DATE ، TIME و غیره را دارد. همانطور که در تابع Initialize می بینید،کلمه ی کلیدی “LABEL” برای نوشتن اولین ردیف صفحه اکسل استفاده میشود.بعدا در تابع write از کلمه کلیدی “DATA” استفاده می کنیم تا نشان دهد که اطلاعات زیر باید به عنوان DATA در نظر گرفته شود.برای این که مشخص کنیم می خاهیم به ردیف بعدی حرکت کنیم باید از کاما (“,”) استفاده کنیم . از Serial.println() برای نشان دادن پایان ردیف استفاده می کنیم.

 

نحوه کار:

 

برای فعال کردن PLX-DAQ برای ارسال اطلاعات به اکسل باید مراحل زیر را انجام دهید.

مرحله اول :Plx-Daq Spreadsheet” را که هنگام نصب برنامه در دکستاپ شما ایجاد شده است را باز کنید.

مرحله دوم : اگه یک قفل امنیتیی بود، روی گزینه ی Options->Enable the content -> Finish -> OK برای دریافت صفحه  زیر کلید کنید

 

فرستنده اطلاعات آردوینو(مانند دما، رطوبت و زمان) به کارت SD و کامپیوتر

 

مرحله سوم : حال مقدار baud را ۹۶۰۰  انتخاب کنید، و شماره ی پورتی که آردوینو ی خود را با آن وصل کرده اید را در قسمت port  بنویسید و روی connecte کلید کنید.بعد از انجام این کار مقادیر شما باید به سیستم وارد شود،همانطور که در تصویر زیر نشان داده شده است.

بیشتر بخوانید...  نمایش ساعت و تقویم کامل روی LCD با واحد RTC

 

فرستنده اطلاعات آردوینو(مانند دما، رطوبت و زمان) به کارت SD و کامپیوتر

 

برای اینکه ببینید این کار به درستی انجام میشود شما میتوانید SD card  را از مدار جدا کنید و آن را به سیستم خود وصل کنید. شما باید یک فایل متنی به نام “LoggerCD.txt” در آن پیدا کنید. وقتی آن را باز کردید چیزی شبیه به عکس زیر خواهید دید.

 

فرستنده اطلاعات آردوینو( مانند دما، رطوبت و زمان) به کارت SD و کامپیوتر

 

برای باز کردن این فایل در اکسل باید :

  1. اکسل را باز کنید، روی File->Open کلید کنید حال فرمت فایل های نشان داده شده را روی “All file” بگذارید و “LoggerCD” را از sd card باز کنید.
  2. روی next کلید کنید و کاما را به عنوان یک delimiter انتخاب کنید.
  3. دوباره روی next کلیک کنید.
  4. سپس روی finish کلیک کنید.
  5. حال مقادیر شما در اکسل به صورت زیر نمایش داده میشنود.

 

فرستنده اطلاعات آردوینو( مانند دما، رطوبت و زمان) به کارت SD و کامپیوتر

 

 

دانلود کد:

 دانلود فایل

کد پروژه:

 * Program to demonstrate Data Logging/Visualisation using Arduino
 * 
 * ###Connection with SD card module###
 * Vcc->5V
 * Gnd->Gnd
 * MISO->pin 12
 * MOSI->pin 11
 * SCK-> pin 13
 * CS-> pin 4
 * 
 * ###Connection with DS3231###
 * Vcc->5V
 * Gns->Gnd
 * SCL->pin A5
 * SDA-> pin A4
 * 
 * ###Connection with DT11###
 * Vcc->5V
 * Gnd->Gnd
 * Out-> pin 7
 * 
 * 
 */
#include <DS3231.h> //Library for RTC module (Download from Link in article)
#include <SPI.h> //Library for SPI communication (Pre-Loaded into Arduino)
#include <SD.h> //Library for SD card (Pre-Loaded into Arduino)
#include <dht.h> //Library for dht11 Temperature and Humidity sensor (Download from Link in article)
#define DHT11_PIN 7 //Sensor output pin is connected to pin 7
dht DHT; //Sensor object named as DHT
const int chipSelect = 4; //SD card CS pin connected to pin 4 of Arduino
// Init the DS3231 using the hardware interface
DS3231  rtc(SDA, SCL);
void setup()
{
  // Setup Serial connection
  Serial.begin(9600);
  Initialize_SDcard();
  Initialize_RTC();
  Initialize_PlxDaq();
}
void loop()
{
  Read_DHT11();
  Write_SDcard();
  Write_PlxDaq();
  delay(5000); //Wait for 5 seconds before writing the next data 
}
void Write_PlxDaq()
  {
    Serial.print("DATA"); //always write "DATA" to Indicate the following as Data
    Serial.print(","); //Move to next column using a ","
    Serial.print("DATE"); //Store date on Excel
    Serial.print(","); //Move to next column using a ","
    Serial.print("TIME"); //Store date on Excel
    Serial.print(","); //Move to next column using a ","
    Serial.print(DHT.temperature); //Store date on Excel
    Serial.print(","); //Move to next column using a ","
    Serial.print(DHT.humidity); //Store date on Excel
    Serial.print(","); //Move to next column using a ","
    Serial.println(); //End of Row move to next row
  }
void Initialize_PlxDaq()
{
Serial.println("CLEARDATA"); //clears up any data left from previous projects
Serial.println("LABEL,Date,Time,Temperature,Humidity"); //always write LABEL, to indicate it as first line
}
void Write_SDcard()
{
    // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("LoggerCD.txt", FILE_WRITE);
  // if the file is available, write to it:
  if (dataFile) {
    dataFile.print(rtc.getDateStr()); //Store date on SD card
    dataFile.print(","); //Move to next column using a ","
    dataFile.print(rtc.getTimeStr()); //Store date on SD card
    dataFile.print(","); //Move to next column using a ","
    dataFile.print(DHT.temperature); //Store date on SD card
    dataFile.print(","); //Move to next column using a ","
    dataFile.print(DHT.humidity); //Store date on SD card
    dataFile.print(","); //Move to next column using a ","
    dataFile.println(); //End of Row move to next row
    dataFile.close(); //Close the file
  }
  else
  Serial.println("OOPS!! SD card writing failed");
}
void Initialize_SDcard()
{
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
   // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("LoggerCD.txt", FILE_WRITE);
  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println("Date,Time,Temperature,Humidity"); //Write the first row of the excel file
    dataFile.close();
  }
}
void Initialize_RTC()
{
   // Initialize the rtc object
  rtc.begin();
//#### The following lines can be uncommented to set the date and time for the first time###  
/*
rtc.setDOW(FRIDAY);     // Set Day-of-Week to SUNDAY
rtc.setTime(18, 46, 45);     // Set the time to 12:00:00 (24hr format)
rtc.setDate(6, 30, 2017);   // Set the date to January 1st, 2014 
*/
}
void Read_DHT11()
{
int chk = DHT.read11(DHT11_PIN);
}
/*void Read_DateTime()
{  
  // Send date
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");
  // Send time
  Serial.println(rtc.getTimeStr());
}*/
/*void Read_TempHum()
{
  Serial.print("Temperature = ");
  Serial.println(DHT.temperature);
  Serial.print("Humidity = ");
  Serial.println(DHT.humidity);
 // delay(1000);
}*/

 

دیدگاه‌ها (2)

*
*

    محمدرضا مهمان جولای 31, 2019 پاسخ

    با سلام
    آیا آردینو برای محیط های صنعتی هم مناسب می باشد،یا صرفا جنبه ی آموزشی دارند؟؟

      Admin مدیر کل نوامبر 4, 2020 پاسخ

      سلام
      من توی پروژه های مختلف توی محیط صنعتی هم استفاده کردم. اگه خیلی وسواس داری میتونید از آردوینو مدل DUE که پردازندش آرم هستش استفاده کنی