ساخت دماسنج بدون تماس با آردوینو (مخصوص کرونا و ثبت در اکسل)
محتویات
اندازه گیری دمای بدن در ورودی ادارات، مراکز خرید و… این روز ها بسیار گسترده شده است. دلیل آن نیز بیماری کرونا است. اما میتوان به جای اندازه گیری دستی، پروژه ای را طراحی کرد که با استفاده از دماسنج های مادون قرمز کار میکند و دما بدن فرد را بدون اتصال اندازه گیری میکند. در این پروژه آردوینو ما یک دماسنج مادون قرمز دیواری را طراحی میکنیم. در این پروژه هر فرد که وارد میشود نزدیک به سنسور میشود و آردوینو دمای بدن فرد را اندازه گیری میکند و آن را روی ال سی دی نمایش میدهد. همچنین زمان و دمای بدن فرد در فرمت اکسل در حافظه SD ذخیره میشود. همچنین برای ثبت کردن نام کارمند های خود میتوانید از تگ های RFID استفاده کنید.
فیلم زیر نیز به شما در درک نحوه کار پروژه دماسنج کرونا با سنسور مادون قرمز را نشان میدهد.
پروژه های دیگر در زمینه کرونا را هم مشاهده کنید :
- پروژه دماسنج کرونا با موبایل اندروید و آردوینو (ثبت تصویر و خروجی اکسل)
- پروژه تب سنج کرونا ارزان قیمت با آردوینو و سنسور DS18B20
شماتیک مدار پروژه دماسنج کرونا
شماتیک کامل برای دماسنج مادون قرمز بدون تماس در زیر آورده شده است. ممکن است در نگاه اول مدار پیچیده به نظر برسد اما ساده است.
قطعات مورد نیاز برای دماسنج بدون تماس
- برد آردوینو نانو
- سنسور دما MLX90615
- سنسور مجاورت TCRT5000
- ماژول DS3231 RTC
- ال سی دی کاراکتری 16*2
- ماژول کارت SD
- بازر
- LED قرمز
- LED سبز
- مقاومت 1K ، 4.7K ، 10K
- پتانسیومتر 10K
- آداپتور برق 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 نشان میدهد.
تصویر زیر نیز دما، تاریخ و ساعت های ثبت شده را در نرم افزار اکسل نشان میدهد.
موارد موجود در فایل : سورس کامل ، شماتیک کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
با این ماژول حداکثر تا چه دمایی میشه اندازه گیری کرد
سلام عزیز
40- تا 115+ درجه سانتی گراد
به نظر من فرمت فایل متنی رو بهتره csv بزاریم استاندارد تره
سلام عزیز
هر دو مناسب هست
در پيام قبلي متن كامل ارور رو براتون ارسال كردم و سوال بعديم اين بود كه شما ميتونيد به ما كمك كنيد در اين راستا كه چطور iot و thingspeak رو وارده اين كد كنيم ؟
ما انجام نمیدیم، در انجمن مطرح کنید
من دوتاسوال داشتم اولي اين است كه پروژه شمارو داخل خوده برنامه اردوينو وارد كردم در سايتش تا كد رو بررسي كنه و لايبرري هايي كه داخل فايل زيپ گذاشتيد رو وارد كردم و اروري كه ميده اين هستش : error compiling for board arduino uno
سلام عزیز
از نرم افزار آردوینو استفاده کنید و کتابخانه ها رو نصب کنید
سلام جناب خسته نباشید ما کجا می تونیم با شما ارتباط داشته باشیم در ارتباط با کدتون چندین سوال داریم
سلام عزیز
سوالات رو در همینجا یا در انجمن اعلام کنید
سلام دوسن عزیز. ممنون از حمایتتون.
ببینید مشکل اصلی من همین قسمته. اون کتابخانه اضافه رو که مربوط به ds3231 بود رو حذف کردم ولی این فایلی که شما فرستادین رو نمیتونم به عنوان یک کتابخانه نصب کنم و این پیغام رو میده:
………….
Zip doesn’t contain a library
البته کلی پیغام مربوط به جاوا هم قبلش میده که گفتم شاید اونا مهم نباشه و پیست نکردمشون
ببینید پسوند کتابخانه های آردوینو h. نیست برا همینه که نمیشه فایلی که شما فرستادین رو نصب کنم. اگه روش دیگه ای وجود داره که این کتابخانه شما رو نصب کنم آموزش بدید تا انجام بدم. من فک میکنم برای نصب کتابخانه MLX90615 از روش خاصی باید استفاده کنم
بازم از شما به خاطر حمایتتون سپاسگذاری میکنم.
سلام عزیز
اون کتابخونه رو از حالت فشرده خارج کنید. فایل .h رو در پوشه ای که پروژه رو ذخیره کردید کپی کنید
سلام دوست عزیز. من همچنان منتظر پاسخ شما هستم
سلام عزیز
برای DS3231 دو کتابخانه نصب کردید. پیشنهاد میکنم کتابخانه ها رو پاک کنید و دوباره نصب کنید
همچنین برای MLX90615 از این کتابخانه استفاده کنید.
سلام خسته نباشید.
من برنامه رو روی آردوینو کامپایل میکنم و موقع کامپایل این ارور رو میده:
no mathing function for call to ‘MLX90615::MLX90615
و به این خط برنامه گیر میده:
MLX90615 mlx = MLX90615
ممنون میشم راهنماییم کنین
سلام عزیز
متن کامل ارور رو ارسال کنید
سلام خسته نباشید. ببخشید اون source که در بخش فایل های دانلودی گذاشتین کد کل برنامه هست دیگه؟
سلام عزیز، بله
سلام شما از چه سایتی سنسور دما MLX90615 را خریداری کرده اید؟؟
جناب پروژه دماسنج بدون تماس با آردوینو ترجمه شده است و من این پروژه رو به صورت عملی نبستم.
سلام می شود از این ماژول استفاده کرد.ماژول دماسنج غیرتماسی مادون قرمز (GY-906 (MLX90614
ممنون
سلام جناب. این پروژه با سنسور مورد نظر شما تست نشده است.
می شود تست کنید
من سنسور مورد نظر شما رو در دسترس ندارم جناب
سلام خسته نباشید من پروژه را انجام دادم فقط موقعی که روشن میکنم مینویسه time: canner circuit digest میشه راهنمایی کنید و علتو بگید ممنون میشم
سلام جناب. این پیام برای مقدمه هست و در هنگام راه اندازی پروزه نمایش داده میشه شما میتونید این پیام رو در تابع void setup تغییر بدید.
سلام خسته نباشید
من پروژه را انجام دادم فقط موقعی که روشن میکنم مینویسه
time: canner
circuit digest
میشه راهنمایی کنید و علتو بگید ممنون میشم
سلام جناب. این پیامی هست که در تابع Void Setup تعیین میکتید که در هنگام راه اندازی چه متنی نمایش داده بشه.
بله ارزتون درسته ولی روی همین متن گیر میکنه و ادامه نمیده
چرا این اتفاق می افته؟
دقت بفرمایید ماژول DS3231 به طور صحیح متصل و فعال باشه. چون اگر تا این مرحله بمونه، یعنی به این خط از کد رسیده :
lcd.print(rtc.getTimeStr());
و بعد از اون نتونسته پیش بره.
بله ماژول درست نصب شده و حتی چندین بار ماژول راهم عوض کردم با یکی دیگه ولی بازم هیچ تغییری نکرد
مشکل از کتابخونه ها نمیتونه باشه؟
فکر نمیکنم مشکل از کتابخانه باشه. محض احتیاط از این کتابخانه استفاده کنید : DS3231-1.0.2.zip
با سلام و تشکر میشه خواهش کنم تو فریت زینگ هم نقشه سخت افزاری رو بکشید اخه برای من مبتدی کمی نقشه خوانی ضعیف هست میترسم اشتباه وصل کنم مدار بسوزه تا الان یه ماژول سوزوندم ممنون میشم محبت کنید
این طور نقشه ها از فریتزینگ هم راحت تر هستند، شما سیم های اضافه رو نمیبینید و به راحتی میبینید کدوم پین به کدوم پین متصل شده. فعلا در حال آماده سازی دوره آموزش آردوینو هستم و متاسفانه نمیرسم برای اینکار.
سلام وقت بخیر
من فایل دانلودی رو دانلود کردم اما انگار مربوط به یه پروژه دیگه هست میشه بررسی کنید تشکر
سلام جناب. بله متاسفانه فایل اشتباهی درج شده بود اکنون ویرایش شد و میتونید استفاده کنید.
سلام خسته نباید ببخشید من این کتابخانه ها رو ندارم از کجا میتونم نصب کنم:
#include
#include
#include
#include
به علت موجود نبودن از این ماژول دماسنج مادون قرمز (GY-906 (MLX90614 استفائه کردم آیا باید در کتابخانه هم تغییر ایجاد کنم یا مکلی نداره؟
سلام جناب. در پیام هایی که دادید، نام کتابخانه ها مشخص نیست. اگر در مورد این پروژه هست، کتابخانه های مورد نیاز در فایل دانلودی قرار گرفته اند. در مورد سوال دومتون ممکنه نیاز به درج کتابخانه و تغییر در کد باشه.
سلام خسته نباشید هزینه ساخت این پروژه چقدر هستش؟
سلام جناب. قیمت دقیقی نمیتونم بدم قطعات قیمتشون هر روز تغییر میکنه شما باید بررسی کنید فروشگاه ها رو ببینید قطعات رو با چه قیمتی میفروشند.