Contactless IR Thermometer with Arduino & MLX90614 | আইআর কন্টাক্টলেস থার্মোমিটার
সাধারনত আমরা জ্বর মাপি কিভাবে? থার্মোমিটার শরীরে স্পর্শ করাই তাই না? অন্যকোনো বস্তুর তাপমাত্রা মাপতেও এই কাজটিই করা লাগে। আইআর থার্মোমিটারের বৈশিষ্ট্য হল, এই ধরনের থার্মোমিটাকে কোনো বস্তুর গায়ে স্পর্শ না করিয়েই তাপমাত্রা পরিমাপ করা যায়। এই টিউটোরিয়ালে আমরা আরডুইনো দিয়ে একটি আইআর থার্মোমিটার তৈরী করব। থার্মোমিটারের সেন্সর হিসেবে ব্যবহার করব Infrared Thermometer – MLX90614। নামেই বোঝা যাচ্ছে MLX90614 একটি আইআর টেম্পারেচার সেন্সর। এটি I2C কমিউনিকেশনের মাধ্যমে মাইক্রোকন্ট্রোলার বা আরডুইনোর সাথে যুক্ত হতে পারে।
প্রয়োজনীয় যন্ত্রপাতিঃ
সার্কিটঃ
আরডুইনো এবং থার্মোমিটারের মধ্যে নিচের কানেকশনটি সম্পন্ন করি।
আরডুইনো এবং এলসিডির মধ্যে নিচের কানেকশনটি সম্পন্ন করি।
Arduino UNO R3 | LCD |
VCC | VDD,A |
GND | VSS,K,RW |
5,4,3,2 | D4,D5,D6,D7 |
12 | RS |
11 | E |
এলসিডির V0 পিনে ভ্যারিয়েবল পটের তিন নং পিনকে সংযুক্ত করি। পটের অপর দুই পিন VCC ও GND এর সাথে সংযুক্ত করি।
পাওয়ার দেবার আগে আমাদের পুরো সার্কিটটি দেখতে ছিল এরকম।
কোডঃ
এই থার্মোমিটারের প্রোগ্রামটি লিখতে হলে আরডুইনোতে অবশ্যই i2cmaster.h এবং twimaster.cpp নামক লাইব্রেরি ফাইলদুটি ইন্সটল করা থাকতে হবে।এইখান থেকে লাইব্রেরি ফোল্ডারটি ডাউনলোড করুন। নিচের কোডটি লিখে কম্পাইল এবং আপলোড করুন।
#include <i2cmaster.h> #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup(){ lcd.begin(16, 2); Serial.begin(9600); Serial.println("Setup..."); i2c_init(); //Initialise the i2c bus PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups } void loop(){ int dev = 0x5A<<1; int data_low = 0; int data_high = 0; int pec = 0; i2c_start_wait(dev+I2C_WRITE); i2c_write(0x07); // read i2c_rep_start(dev+I2C_READ); data_low = i2c_readAck(); //Read 1 byte and then send ack data_high = i2c_readAck(); //Read 1 byte and then send ack pec = i2c_readNak(); i2c_stop(); //This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614) double tempData = 0x0000; // zero out the data int frac; // data past the decimal point // This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte. tempData = (double)(((data_high & 0x007F) << 8) + data_low); tempData = (tempData * tempFactor)-0.01; float celcius = tempData - 273.15; float fahrenheit = (celcius*1.8) + 32; Serial.print("Celcius: "); Serial.println(celcius); Serial.print("Fahrenheit: "); Serial.println(fahrenheit); lcd.clear(); lcd.setCursor(5,0); lcd.print(fahrenheit);//Show the temperature in LCD lcd.print((char)223);// command for printing ? sign in LCD Ref:http://forum.arduino.cc/index.php?topic=19002.0 lcd.print("F");// F for Farenhiet lcd.setCursor(5,1); lcd.print(celcius);//Show the temperature in LCD lcd.print((char)223);// command for printing ? sign in LCD Ref:http://forum.arduino.cc/index.php?topic=19002.0 lcd.print("C");// C for Celcius delay(1000); // wait a second before printing again }
থার্মোমিটারটিকে কোনোকিছুর সামনে ধরে সেই বস্তুর তাপমাত্রা নির্নয় করা যাবে। সিরিয়াল মনিটর এবং এলসিডি দুটো জায়গাতেই তাপমাত্রা দেখা যাবে। সেলসিয়াস এবং ফারেনহাইট দুই ফরম্যাটেই রেজাল্ট দেখানো হয়েছে থার্মোমিটারটিতে। এই থার্মোমিটার দিয়ে জ্বর মাপতে চাইলে কানের ছিদ্র বরাবর সেন্সরটিকে ধরতে হবে। কিন্তু স্পর্শ করানো যাবে না। প্রজেক্টে দুটো ব্রেডবোর্ড ব্যবহার করা হয়েছে যাতে করে একটি ব্রেডবোর্ডসহ সেন্সর কানের কাছে ধরলে অপরটিতে কানেক্ট করা এলসিডিতে শরীরের তাপমাত্রা দেখা যায়। জ্বর মাপার কাজে নিয়মিত ব্যবহার করতে চাইলে ব্রেডবোর্ড বাদ দিয়ে কম্প্যাক্ট পিসিবি বানিয়ে ফেলাই উত্তম। আইডিয়ার জন্য স্পার্কফানের এই টিউটোরিয়ালটি দেখুন।