آموزش آردوینوپروژه های آردوینو

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

اندازه گیری دمای بدن در ورودی ادارات، مراکز خرید و… این روز ها بسیار گسترده شده است. دلیل آن نیز بیماری کرونا است. اما میتوان به جای اندازه گیری دستی، پروژه ای را طراحی کرد که با استفاده از دماسنج های مادون قرمز کار میکند و دما بدن فرد را بدون اتصال اندازه گیری میکند. در این پروژه آردوینو ما یک دماسنج مادون قرمز دیواری را طراحی میکنیم. در این پروژه هر فرد که وارد میشود نزدیک به سنسور میشود و آردوینو دمای بدن فرد را اندازه گیری میکند و آن را روی ال سی دی نمایش میدهد. همچنین زمان و دمای بدن فرد در فرمت اکسل در حافظه 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

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

4.9 (14 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

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

40 نظر

  1. با این ماژول حداکثر تا چه دمایی میشه اندازه گیری کرد

    1. سلام عزیز
      40- تا 115+ درجه سانتی گراد

  2. به نظر من فرمت فایل متنی رو بهتره csv بزاریم استاندارد تره

  3. در پيام قبلي متن كامل ارور رو براتون ارسال كردم و سوال بعديم اين بود كه شما ميتونيد به ما كمك كنيد در اين راستا كه چطور iot و thingspeak رو وارده اين كد كنيم ؟

    1. ما انجام نمیدیم، در انجمن مطرح کنید

  4. من دوتاسوال داشتم اولي اين است كه پروژه شمارو داخل خوده برنامه اردوينو وارد كردم در سايتش تا كد رو بررسي كنه و لايبرري هايي كه داخل فايل زيپ گذاشتيد رو وارد كردم و اروري كه ميده اين هستش : error compiling for board arduino uno

    1. سلام عزیز
      از نرم افزار آردوینو استفاده کنید و کتابخانه ها رو نصب کنید

  5. سلام جناب خسته نباشید ما کجا می تونیم با شما ارتباط داشته باشیم در ارتباط با کدتون چندین سوال داریم

    1. سلام عزیز
      سوالات رو در همینجا یا در انجمن اعلام کنید

  6. سلام دوسن عزیز. ممنون از حمایتتون.
    ببینید مشکل اصلی من همین قسمته. اون کتابخانه اضافه رو که مربوط به ds3231 بود رو حذف کردم ولی این فایلی که شما فرستادین رو نمیتونم به عنوان یک کتابخانه نصب کنم و این پیغام رو میده:
    ………….
    Zip doesn’t contain a library
    البته کلی پیغام مربوط به جاوا هم قبلش میده که گفتم شاید اونا مهم نباشه و پیست نکردمشون
    ببینید پسوند کتابخانه های آردوینو h. نیست برا همینه که نمیشه فایلی که شما فرستادین رو نصب کنم. اگه روش دیگه ای وجود داره که این کتابخانه شما رو نصب کنم آموزش بدید تا انجام بدم. من فک میکنم برای نصب کتابخانه MLX90615 از روش خاصی باید استفاده کنم
    بازم از شما به خاطر حمایتتون سپاسگذاری میکنم.

    1. سلام عزیز
      اون کتابخونه رو از حالت فشرده خارج کنید. فایل .h رو در پوشه ای که پروژه رو ذخیره کردید کپی کنید

    1. سلام عزیز
      برای DS3231 دو کتابخانه نصب کردید. پیشنهاد میکنم کتابخانه ها رو پاک کنید و دوباره نصب کنید
      همچنین برای MLX90615 از این کتابخانه استفاده کنید.

  7. سلام خسته نباشید.
    من برنامه رو روی آردوینو کامپایل میکنم و موقع کامپایل این ارور رو میده:
    no mathing function for call to ‘MLX90615::MLX90615

    و به این خط برنامه گیر میده:
    MLX90615 mlx = MLX90615
    ممنون میشم راهنماییم کنین

    1. سلام عزیز
      متن کامل ارور رو ارسال کنید

  8. سلام خسته نباشید. ببخشید اون source که در بخش فایل های دانلودی گذاشتین کد کل برنامه هست دیگه؟

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2. سلام خسته نباشید هزینه ساخت این پروژه چقدر هستش؟

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

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

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