এই টিউটোরিয়াল এ আমরা দেখবো কিভাবে আরডুইনো দিয়ে খুব সহজে ডিজিটাল থার্মোমিটার বানানো যায়। ডিজিটাল থার্মোমিটার বানাতে আমাদের নিচের জিনিস গুলোর দরকার হবে :
- ১ টি আরডুইনো (উনো/ন্যানো/মেগা) (Arduino uno/nano or mega)
- ১ টি এলসিডি ডিসপ্লে (16×1 or 16×2)
- ১ টি টেম্পারেচার সেন্সর (LM35)
- ১ টি ব্রেডবোর্ড (Breadboard)
এই প্রজেক্ট টি বানাতে আমরা একটি ১৬ক্স২ এলসিডি ডিসপ্লে ব্যবহার করেছি। আপনি যদি আগে কখনো এলসিডি ডিসপ্লে দিয়ে কাজ না করে থাকেন তাহলে নিচের লিংক থেকে আমাদের এলসিডি ডিসপ্লে ইন্টারফেসিং টিউটোরিয়াল টি দেখে আসুন।
প্রথমে LM35 টেম্পারেচার সেন্সর সম্পর্কে জেনে নেয়া যাক। এই সেন্সর এর ৩ টি পিন থাকে এবং দেখতে অনেকটা ট্রান্সিস্টর (BJT) এর মতো। নিচের ছবিতে পিন কনফিগারেশন দেখানো হয়েছে।

এই সেন্সর দিয়ে তাপমাত্রা মাপার জন্যে এর ১ নম্বর পিন এ ভোল্টেজ দিতে হয় (৪ থেকে টো ভোল্ট) আর ৩ নম্বর পিন কে গ্রাউন্ড (Ground or -Ve of battery) এর সাথে সংযোগ করতে হয়। ২ নম্বর পিন হল আউটপুট। এই পিন থেকে একটা ভোল্টেজ পাওয়া যায় যার মান নির্ভর করে সেন্সর টি যেখানে আছে সেখানকার তাপমাত্রার উপর। তার মানে হলো আমরা যদি এই পিনের ভোল্টেজ মাপতে পারি তবে সেখানথেকে তাপমাত্রা বের করতে পারবো। আর এই পিনের ভোল্টেজ মাপা এবং সেখানথেকে তাপমাত্রা বের করার কাজটাই আমরা আরডুইনো দিয়ে করবো।
প্রতি ১ ডিগ্রী সেলসিয়াস তাপমাত্রার জন্যে এই সেন্সর এর আউটপুট পিন এ ১০ মিলি ভোল্ট আউটপুট পাওয়া যায়। তার মানে হলো আমরা যদি আউটপুট পিন থেকে ২৫০ মিলি ভোল্ট পাই তবে তাপমাত্রা হলো ২৫০/১০ = ২৫ ডিগ্রী সেলসিয়াস।
আরডুইনোর সাথে সংযোগ
নিচের ছবি তে আরডুইনোর সাথে টেম্পারেচার সেন্সর এর সংযোগ দেখানো হয়েছে। এখানে সেন্সর এর আউটপুট পিন কে আমরা আরডুইনোর A0 পিন এর সাথে সংযোগ করেছি। A0 হল একটা এনালগ পিন। এই এনালগ পিন এর মাধ্যমে সেন্সর থেকে প্রাপ্ত এনালগ ভোল্টেজ কে ডিজিটাল মান এ কনভার্ট করা যায়। আরডুইনো তে সর্বমোট ৬ টি এনালগ পিন আছে (A0 to A5)। আমরা সেন্সর এর আউটপুট এই ৬ টি এনালগ পিন এর যেকোনো একটি তে সংযোগ করতে পারতাম।

সেন্সর থেকে প্রাপ্ত তাপমাত্রার মান আমরা একটা ডিসপ্লে তে দেখতে চাই। সেজন্যে আরডুইনোর সাথে একটা এলসিডি ডিসপ্লে সংযোগ করতে হবে। আমরা আরডুইনোর সাথে ডিসপ্লের সংযোগ টা উপরে দেয়া টিউটোরিয়াল এর মতো রেখেছি। পরিপূর্ণ সংযোগ নিচের ছবি তে দেখানো হয়েছে।

আরডুইনো দিয়ে এনালগ ভোল্টেজ রিড (Read) করা
আমরা জানি মাইক্রোকন্ট্রোলের কিংবা অন্য কোনো ডিজিটাল ডিভাইস এনালগ ডাটা/ভোল্টেজ নিয়ে কোনো কাজ করতে পারে না। মাইক্রোকন্ট্রোলের দিয়ে এনালগ ডাটা প্রসেস করার জন্যে সেই ডাটা কে ডিজিটাল বা বাইনারি নাম্বার এ পরিবর্তন করতে হয়। এনালগ থেকে ডিজিটাল কনভার্টার (Analog to Digital Converter) সে কাজটি করে থাকে। আরডুইনো মাইক্রোকন্ট্রোলের মধ্যে সেরকম একটা এনালগ থেকে ডিজিটাল কনভার্টার আছে। এনালগ টু ডিজিটাল কনভার্টার এর আউটপুট হলো কতগুলো বাইনারি ডিজিট যেটা একেক কনভার্টার এর জন্যে একেক রকম হতে পারে। আরডুইনোর ক্ষেত্রে সেটা হল ১০ বিট। অর্থাদ আরডুইনো একটা এনালগ ভোল্টেজ কে ডিজিটাল এ কনভার্ট করে ১০ ডিজিট এর একটা বাইনারি নাম্বার আউটপুট দেয়। এটাকে বলা হয়
রেজোলিউশন (Resolution)। ১০ বিট এর একটি বাইনারি নাম্বার এর মান হচ্ছে সর্বোচ্চ ১০২৩। আর আরডুইনোর এনালগ পিন সর্বোচ্চ এনালগ ভোল্টেজ রিড করতে পারে ৫ ভোল্ট। তারমানে আমরা যদি কোনো একটা এনালগ পিন রিড করে ডিজিটাল মান পাই ১০২৩ তবে অবশ্যই ওই পিন ৫ ভোল্ট পাচ্ছে। তাই ঐকিক নিয়ম অনুসারে আমরা যদি ডিজিটাল মান X রিড করি তবে ভোল্টেজ হবে :
Vout = X * (5 / 1024)
এখন প্রশ্ন হলো আমরা কিভাবে আরডুইনোর মাধ্যমে সেই X এর মান টা পাবো। সেটা পাবার জন্যে আরডুইনোর একটা ফাঙ্কশন আছে analogRead(pin number) . পিন নাম্বার (pin number) এর জাগায় আমরা যে পিন থেকে রিড করতে চাচ্ছি সেই পিন এর নাম লিখতে হয়। আমাদের এই প্রজেক্ট এর জন্যে সেটা হচ্ছে A0। তাই আমাদের জন্যে সেই কোড লাইন টি হবে :
analogRead(A0);
প্রোগ্রামিং (Programming)
সেন্সর থেকে তাপমাত্রা রিড করে ডিসপ্লে তে দেখতে চাইলে নিচের প্রোগ্রাম টা আপলোড করলেই হবে। প্রোগ্রাম আপলোড করলে নিচের ছবির মতো আউটপুট পাওয়া যাবে।
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
void setup() {
lcd.begin(16, 2);
}
void loop() {
int reading = analogRead(A0);
// Convert the reading into voltage (mV):
float voltage = reading * (5000 / 1024.0);
// Convert the voltage into the temperature in degree Celsius:
float temperature = voltage / 10;
// Print the temperature in the display:
lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
delay(1000);
//read temperature every 1 second
}

এবার উপরে দেয়া কোডের কয়েকটি লাইন একটু বেখ্যা করা যাক। নিচের লাইনটির মাধ্যমে A0 পিন থেকে এনালগ মান রিড করে reading নামক ভ্যারিয়েবল এর মধ্যে রাখা হয়েছে। এই মানটাই হচ্ছে উপরের সূত্রে ব্যবহৃত X এর মান।
int reading = analogRead(A0);
নিচের লাইনের মাধ্যমে সেই মানকে ভোল্টেজ এ পরিবর্তন (convert) করা হয়েছে। এইখানে ৫ এর পরিবর্তে ৫০০০ ব্যবহার করে সরাসরি মিলি ভোল্ট এ মান পাওয়া যাচ্ছে। আমাদের মিলি ভোল্ট মান দরকার কারণ তাপমাত্রার মান সরাসরি মিলি ভোল্ট এর উপর নির্ভর করে।
float voltage = reading * (5000 / 1024.0);
নিচের লাইনের মাধ্যমে প্রাপ্ত মিলি ভোল্ট কে ১০ দিয়ে ভাগ করে সরাসরি ডিগ্রী সেলসিয়াস এ তাপমাত্রা পাওয়া যাচ্ছে। তারপর এই তাপমাত্রা কে ডিসপ্লে তে দেখানো হয়েছে।
float temperature = voltage / 10;
নিচের লিংক থেকে আপনি এই প্রজেক্ট টি সরাসরি সিমুলেশন করে দেখতে পারেন। সিমুলেশন এ ব্যবহৃত সেন্সর টি একটু ভিন্ন হওয়ায় তাপমাত্রার মান ঠিক নাও দেখতে পারে।