پروژه الکترونیکپروژه های آردوینوپروژه های دما و رطوبت

ساخت دماسنج بدون تماس با آردوینو (مخصوص کرونا و ثبت در فرمت اکسل)

اندازه گیری دمای بدن در ورودی ادارات، مراکز خرید و… اینروز ها بسیار گسترده شده است. دلیل آن نیز بیماری کرونا است. اما میتوان به جای اندازه گیری دستی، پروژه ای را طراحی کرد که با استفاده از دماسنج های مادون قرمز کار میکند و دما بدن فرد را بدون اتصال اندازه گیری میکند. در این پروژه آردوینو ما یک دماسنج مادون قرمز دیواری را طراحی میکنیم. در این پروژه هر فرد که وارد میشود نزدیک به سنسور میشود و آردوینو دمای بدن فرد را اندازه گیری میکند و آن را روی ال سی دی نمایش میدهد. همچنین زمان و دمای بدن فرد در فرمت اکسل در حافظه SD ذخیره میشود. همچنین برای ثبت کردن نام کارمند های خود میتوانید از تگ های RFID استفاده کنید.

فیلم عملکرد پروژه در انتهای صفحه قرار داده شده است.

پروژه های دیگر در زمینه کرونا را هم مشاهده کنید : 

شماتیک مدار پروژه دماسنج کرونا

شماتیک کامل برای دماسنج مادون قرمز بدون تماس در زیر آورده شده است. ممکن است در نگاه اول مدار پیچیده به نظر برسد اما ساده است.

شماتیک مدار پروژه دماسنج کرونا

قطعات مورد نیاز برای دماسنج بدون تماس

  1. برد آردوینو نانو
  2. سنسور دما MLX90615
  3. سنسور مجاورت TCRT5000
  4. ماژول DS3231 RTC
  5. ال سی دی کاراکتری 16*2
  6. ماژول کارت SD
  7. بازر
  8. LED قرمز
  9. LED سبز
  10. مقاومت 1K ، 4.7K ، 10K
  11. پتانسیومتر 10K
  12. آداپتور برق 12 ولت 1 آمپر DC

سنسور مجاورت TCRT5000 IR : از این سنسور برای تشخیص اینکه فردی دست خود را مقابل سنسور قرار داده است استفاده می شود. این یک سنسور مجاورت ساده است که ما قبلاً در بسیاری از پروژه ها از آن استفاده کرده ایم. اما در این پروژه برای جلوگیری از تداخل نور خورشید با سنسور دما استفاده میشود.

TCRT5000 نیز به عنوان یک سنسور مادون قرمز می تواند به طور نادرست در اثر نور خورشید تحریک شود زیرا اشعه خورشید نیز از اشعه IR تشکیل شده است. برای جلوگیری از راه اندازی نادرست ناشی از نور خورشید ، ما LED گیرنده IR را به پورت آنالوگ آردوینو و ال ای دی فرستنده IR را به یک پین دیجیتال متصل کرده ایم. به این ترتیب می توان سیگنال IR دریافت شده توسط گیرنده IR را هنگام روشن شدن فرستنده IR اندازه گیری کرد و دوباره می توانیم آن را هنگامی که فرستنده IR خاموش است اندازه گیری کنیم. اینکار باعث میشود نویز نور خورشید در عملکرد دستگاه ما تاثیر نگذارد.

ماژول DS3231 RTC : ماژول DS3231 RTC برای بدست آوردن زمان و تاریخ استفاده می شود. ماژول RTC باتری داخلی خود را دارد بنابراین حتی در صورت قطع برق آردوینو نیز زمان حفظ میشود. DS3231 با پایه های I2C ارتباط برقرار میکند و از همین رو به همان پایه های MLX90615 متصل است. این دو ماژول آدرس I2C متفاوتی دارند و بنابراین نگرانی از بابت تداخل سیگنال ها نداریم.

ماژول کارت SD: از ماژول کارت SD برای اتصال کارت SD به میکروکنترلر آردوینو و ذخیره مقدار دما و زمان اسکن در یک فایل متنی استفاده می شود. این ماژول با پروتکل ارتباطی SPI کار می کند و از این رو ما آن را به پین ​​های SPI آردوینو مانند تصویر بالا متصل کرده ایم.

صفحه نمایش LCD 16×2: نمایشگر LCD برای نمایش مقدار دما و زمان استفاده می شود. این یک نمایشگر LCD کاراکتری 16×2 ساده است که ما در بسیاری از پروژه های دیگر از آن استفاده کرده ایم.

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

LED و Buzzer: در آخر ، ما LED ها و Buzzer را برای نشان دادن خروجی داریم. اگر درجه حرارت نرمال باشد ، زنگ اخطار به همراه LED سبز یک بار بوق می زند و در صورت وجود دمای بالا، چندین بار همراه با LED قرمز بوق می زند.

کد آردوینو برای دما سنج بدون اتصال

کد آردوینو برای دما سنج بدون اتصال

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

#define Buzz 5
#define Green 3
#define Red 4
#include <Wire.h>
#include "DS3231.h"
#include "MLX90615.h"
#include <LiquidCrystal.h>
#include <SPI.h>
#include <SD.h>

سپس دو متغیر اصلی داریم که باید براساس برنامه شما تنظیم شوند. اولین متغیر error_correction است که مقدار دمایی است که از حسگر MLX90615 به مقدار اصلی اضافه می شود. متغیر بعدی Range_senstivity است ، این مقدار برای تعیین میزان نزدیک شدن فرد قبل از اینکه دستگاه ما شروع به کار کند استفاده می شود. من از مقدار 200 استفاده کرده ام اما اگر می خواهید دامنه را افزایش دهید می توانید این مقدار را کاهش دهید.

float error_correction  = 4; //اضافه به مقدار واقعی
int Range_sensitivity = 200; //کاهش مقدار برای افزایش دامنه

ما عملکرد اولیه کارت SD را داریم که برای برقراری ارتباط SPI با کارت SD و ایجاد یک پرونده در کارت SD به نام Temp_Log.text استفاده می شود. سپس این پرونده را نیز باز کرده و عنوان های گزارش را می نویسیم. در اینجا ما تاریخ ، زمان و دما را ثبت می کنیم بنابراین عنوان ها را بر اساس آن ها نامگذاری می کنیم. در هنگام اجرای عملکرد Setup ، این عملکرد فقط یک بار فراخوانی می شود.

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید
void Initialize_SDcard()
{
  // بررسی وجود کارت حفاظه
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // عدم انجام کار دیگر
    return;
  }
   // بازکردن فایل
  File dataFile = SD.open("Temp_Log.txt", FILE_WRITE);
  // نوشتن در فایل
  if (dataFile) {
    dataFile.println("Date,Time,Temperature"); //نوشتن اولین ردیف
    dataFile.close();
  }
}

سپس ما عملکرد کارت SD را داریم که برای نوشتن مقادیر در پرونده متنی که ما ایجاد کردیم استفاده می شود. هر زمان که قرائت جدیدی انجام می شود ، این عملکرد فراخوانی می شود. قالب گزارش “تاریخ ، زمان ، دما” خواهد بود که با کاما از هم جدا میشوند. به عنوان مثال گزارش “19.08.2020،10: 45: 17،35.6” خواهد بود.

void Write_SDcard()
{
  File dataFile = SD.open("Temp_Log.txt", FILE_WRITE);
  // اگر فایل در دسترس باشد
  if (dataFile) {
    dataFile.print(rtc.getDateStr()); //نوشتن تاریخ
    dataFile.print(","); //رفتن به ستون بعد با کاما
    dataFile.print(rtc.getTimeStr()); //نوشتن ساعت
    dataFile.print(",");  //رفتن به ستون بعد با کاما
    dataFile.print(temperature); //نوشتن دما
    dataFile.println(); //پایان ردیف
    dataFile.close(); //بستن فایل
  }
  else
  Serial.println("OOPS!! SD card writing failed");
}

ما در عملکرد void setup ، ارتباط سریال را شروع میکنیم، پیامی را در ال سی دی نمایش میدهیم و نوع پین ها را تعریف میکنیم.

void setup() {
  Serial.begin(9600);
  rtc.begin();
  lcd.begin(16, 2);
  lcd.print("Temp. Scanner");
  lcd.setCursor(0,1);
  lcd.print("CircuitDigest");
  pinMode(2,OUTPUT);
  pinMode(Buzz,OUTPUT);
  pinMode(Red,OUTPUT);
  pinMode(Green,OUTPUT);
  mlx.begin();
  digitalWrite(Buzz,LOW);
  digitalWrite(Red,LOW);
  digitalWrite(Green,LOW);
  Initialize_SDcard();
}

سپس در داخل عملکرد void loop ، کد ما زمان و تاریخ فعلی را دریافت می کند و آن را روی LCD به روز می کند. سپس پین دیجیتالی 2 را که به LED فرستنده مادون قرمز متصل است روشن می کنیم و قرائت آنالوگ را در A7 که LED گیرنده مادون قرمز به آن متصل است ، انجام می دهیم. سپس مجدداً این کار را با خاموش بودن چراغ IR تکرار می کنیم. این به ما کمک می کند تا مقدار Noise و Noise + Signal را از حسگر مادون قرمز بدست آوریم. سپس فقط باید مقدار Noise را از مقدار Noise + Signal کم کنیم تا مقدار Signal را بدست آوریم.

lcd.setCursor(0,1);
 lcd.print("Date: ");
 lcd.print(rtc.getDateStr());
  digitalWrite(2,HIGH);    // روشن کردن ال ای دی مادون قرمز
  delayMicroseconds(500);  // زمان روشن بودن
  Noise_P_Signal=analogRead(A7);        // خواندن مقدار A0 => noise+signal
  digitalWrite(2,LOW);    // خاموش کردن ال ای دی مادون قرمز
  delayMicroseconds(500);  // زمان خاموش بودن
  Noise=analogRead(A7);        // خواندن مقدار A0 => noise 
  Signal = Noise - Noise_P_Signal;

مقدار سیگنال به ما می گوید که بدون تأثیر نور خورشید در اطراف، فرد چقدر به سنسور IR TCRT5000 نزدیک است. سپس با مقایسه این مقدار سیگنال و مقدار نویز ، ما دماسنج خود را برای خواندن مقدار دما و همچنین ذخیره آن در کارت SD راه اندازی خواهیم کرد. اگر دما نرمال باشد ، Led  سبز روشن می شود و اگر دما زیاد باشد ، LED قرمز روشن می شود.

if (Signal>Range_sensitivity && Noise >500)
{
   digitalWrite(Buzz,HIGH);
  if (trigger == true)
   Serial.println("start")
   digitalWrite(2,LOW); //خاموش کردن ال ای دی مادون قرمز برای جلوگیری از تداخل
   for (int i=1; i<=3; i++)
   {
   temperature = (mlx.get_object_temp()) + error_correction;
   Serial.println(temperature,1);
   delay(150);
   }
digitalWrite(Buzz,LOW);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temp:  ");
  lcd.print(temperature,1);
  lcd.setCursor(0,1);
  lcd.print("Saved to SD card");
 Write_SDcard();

تست دماسنج مادون قرمز دیجیتال دیواری

ما برای تغذیه دستگاه از آداپتور 12 ولت 1 آمپر استفاده کردیم و دستگاه را بر روی دیوار نصب کردیم. همانطور که می بینید دستگاه به طور پیش فرض زمان و تاریخ را نشان می دهد. اگر شخصی جلوی سنسور دستگاه را بگیرد یا دست خود را نشان دهد ، دمای بدن فرد را می خواند و آن را بر روی صفحه نمایش می دهد همانطور که در تصویر زیر هنگام آزمایش نشان داده شده است. همچنین همین مقدار با زمان و تاریخ روی کارت SD ذخیره می شود.

تست دماسنج مادون قرمز دیجیتال دیواری

در پایان روز میتوانید کارت حافظه را از دستگاه جدا کنید. سپس فایل را با نرم افزار اکسل باز کنید. تصویر زیر باز شدن فایل را با نرم افزار Notepad نشان میدهد.

ثبت دما در فایل متنی با آردوینو

تصویر زیر نیز دما، تاریخ و ساعت های ثبت شده را در نرم افزار اکسل نشان میدهد.

ثبت دما در فایل اکسل با Arduino

فیلم زیر نیز به شما در درک نحوه کار پروژه دماسنج کرونا با سنسور مادون قرمز را نشان میدهد.

دانلود فیلم پروژه دماسنج کرونا بدون تماس با آردوینو

موارد موجود در فایل : سورس کامل ، شماتیک کامل

پروژه ها رایگان هستند. برای دانلود فایل های پروژه باید در سایت عضو باشید. ثبت نام / ورود

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید
امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید
محمد رحیمی

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. مالکیتی بر مطالب ارائه شده ندارم. اکثر فعالیت بنده در زمینه ترجمه است. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید)

22 نظر

  1. سلام شما از چه سایتی سنسور دما MLX90615 را خریداری کرده اید؟؟

    1. جناب پروژه دماسنج بدون تماس با آردوینو ترجمه شده است و من این پروژه رو به صورت عملی نبستم.

  2. سلام می شود از این ماژول استفاده کرد.ماژول دماسنج غیرتماسی مادون قرمز (GY-906 (MLX90614
    ممنون

    1. سلام جناب. این پروژه با سنسور مورد نظر شما تست نشده است.

        1. من سنسور مورد نظر شما رو در دسترس ندارم جناب

  3. سلام خسته نباشید من پروژه را انجام دادم فقط موقعی که روشن میکنم مینویسه time: canner circuit digest میشه راهنمایی کنید و علتو بگید ممنون میشم

    1. سلام جناب. این پیام برای مقدمه هست و در هنگام راه اندازی پروزه نمایش داده میشه شما میتونید این پیام رو در تابع void setup تغییر بدید.

  4. سلام خسته نباشید
    من پروژه را انجام دادم فقط موقعی که روشن میکنم مینویسه
    time: canner
    circuit digest
    میشه راهنمایی کنید و علتو بگید ممنون میشم

    1. سلام جناب. این پیامی هست که در تابع Void Setup تعیین میکتید که در هنگام راه اندازی چه متنی نمایش داده بشه.

      1. بله ارزتون درسته ولی روی همین متن گیر میکنه و ادامه نمیده
        چرا این اتفاق می افته؟

        1. دقت بفرمایید ماژول DS3231 به طور صحیح متصل و فعال باشه. چون اگر تا این مرحله بمونه، یعنی به این خط از کد رسیده :
          lcd.print(rtc.getTimeStr());
          و بعد از اون نتونسته پیش بره.

        2. بله ماژول درست نصب شده و حتی چندین بار ماژول راهم عوض کردم با یکی دیگه ولی بازم هیچ تغییری نکرد
          مشکل از کتابخونه ها نمیتونه باشه؟

        3. فکر نمیکنم مشکل از کتابخانه باشه. محض احتیاط از این کتابخانه استفاده کنید : DS3231-1.0.2.zip

  5. با سلام و تشکر میشه خواهش کنم تو فریت زینگ هم نقشه سخت افزاری رو بکشید اخه برای من مبتدی کمی نقشه خوانی ضعیف هست میترسم اشتباه وصل کنم مدار بسوزه تا الان یه ماژول سوزوندم ممنون میشم محبت کنید

    1. این طور نقشه ها از فریتزینگ هم راحت تر هستند، شما سیم های اضافه رو نمیبینید و به راحتی میبینید کدوم پین به کدوم پین متصل شده. فعلا در حال آماده سازی دوره آموزش آردوینو هستم و متاسفانه نمیرسم برای اینکار.

  6. سلام وقت بخیر
    من فایل دانلودی رو دانلود کردم اما انگار مربوط به یه پروژه دیگه هست میشه بررسی کنید تشکر

    1. سلام جناب. بله متاسفانه فایل اشتباهی درج شده بود اکنون ویرایش شد و میتونید استفاده کنید.

  7. سلام خسته نباید ببخشید من این کتابخانه ها رو ندارم از کجا میتونم نصب کنم:
    #include
    #include
    #include
    #include
    به علت موجود نبودن از این ماژول دماسنج مادون قرمز (GY-906 (MLX90614 استفائه کردم آیا باید در کتابخانه هم تغییر ایجاد کنم یا مکلی نداره؟

    1. سلام جناب. در پیام هایی که دادید، نام کتابخانه ها مشخص نیست. اگر در مورد این پروژه هست، کتابخانه های مورد نیاز در فایل دانلودی قرار گرفته اند. در مورد سوال دومتون ممکنه نیاز به درج کتابخانه و تغییر در کد باشه.

        1. سلام جناب. قیمت دقیقی نمیتونم بدم قطعات قیمتشون هر روز تغییر میکنه شما باید بررسی کنید فروشگاه ها رو ببینید قطعات رو با چه قیمتی میفروشند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *