পাঠ ৩৬ · ৫৭-এর মধ্যে · মডিউল ৯
Home / Courses / Microprocessors, Embedded Systems & IoT / সেন্সর ও ইন্টারফেসিং

সেন্সরের ধরন ও ইন্টারফেসিং

Sensor types and interfacing
৯ মিনিট পড়া মধ্যম · Intermediate Python সিমুলেশনসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • সাধারণ সেন্সর ক্যাটেগরিগুলো ও তাদের ব্যবহারিক উদাহরণ
  • প্রতিটি ক্যাটেগরির সেন্সর সাধারণত কোন ইন্টারফেস (analog/GPIO/I2C/SPI) ব্যবহার করে
  • সেন্সর রিডিং কেন নয়েজি হয়, এবং একটি সরল ফিল্টারিং কৌশল দিয়ে কীভাবে তা কমানো যায়
  • M9-এর বাকি পাঠগুলোর (ক্যালিব্রেশন, মোটর কন্ট্রোল, সেন্সর ফিউশন) জন্য ভিত্তি তৈরি

১ · সেন্সর কী এবং কেন দরকার

একটি সেন্সরSensorএকটি ফিজিক্যাল রাশি (তাপ, আলো, চাপ, গতি ইত্যাদি) মেপে একটি বৈদ্যুতিক সিগন্যালে রূপান্তরকারী উপাদান। হলো এমন একটি উপাদান যা বাস্তব জগতের একটি ফিজিক্যাল রাশি (তাপমাত্রা, আলোর তীব্রতা, চাপ, গতি) মেপে সেটিকে একটি বৈদ্যুতিক সিগন্যালে (ভোল্টেজ, রেজিস্ট্যান্স, ডিজিটাল পালস) রূপান্তর করে। মাইক্রোকন্ট্রোলার নিজে থেকে বাইরের জগৎ "দেখতে" পারে না — সেন্সরের মাধ্যমেই এটি বাস্তব জগতের তথ্য পায়, আর অ্যাকচুয়েটরের (মোটর, রিলে — L38-L39-এ বিস্তারিত) মাধ্যমে বাস্তব জগতে প্রভাব ফেলে। এই ইনপুট-প্রসেস-আউটপুট চক্রই বেশিরভাগ এমবেডেড/IoT ডিভাইসের কেন্দ্রে থাকে।

২ · সাধারণ সেন্সর ক্যাটেগরি

নিচে কয়েকটি সবচেয়ে বহুল ব্যবহৃত সেন্সর ক্যাটেগরি ও এদের সাধারণ ইন্টারফেস টাইপ দেওয়া হলো:

ক্যাটেগরি উদাহরণ সাধারণ ইন্টারফেস
তাপমাত্রাথার্মিস্টর, LM35, DS18B20analog+ADC অথবা 1-Wire
আর্দ্রতাDHT22, SHT31digital GPIO টাইমিং অথবা I2C
আলোLDR, BH1750analog+ADC অথবা I2C
মোশন/অ্যাক্সিলেরোমিটারPIR, MPU6050digital GPIO (PIR) অথবা I2C/SPI (IMU)
প্রক্সিমিটি/দূরত্বHC-SR04, ToF সেন্সরdigital GPIO টাইমিং অথবা I2C
গ্যাসMQ-সিরিজanalog+ADC

লক্ষ্য করুন — একই ক্যাটেগরির সেন্সরও ভিন্ন ইন্টারফেস ব্যবহার করতে পারে (যেমন তাপমাত্রা সেন্সর analog বা 1-Wire দুটোই হতে পারে); এটা নির্ভর করে সেন্সরের ভেতরে নিজস্ব কনভার্সন/প্রসেসিং সার্কিট আছে কিনা তার উপর।

ফিজিক্যাল রাশি (তাপ/আলো/গতি) সেন্সর (পরিমাপ) ইন্টারফেস (ADC/GPIO/I2C/SPI) মাইক্রোকন্ট্রোলার (ডেটা প্রসেস করে)
যেকোনো সেন্সর চেইনের সাধারণ প্রবাহ — ফিজিক্যাল রাশি থেকে সেন্সর, তারপর একটি নির্দিষ্ট ইন্টারফেস দিয়ে মাইক্রোকন্ট্রোলার পর্যন্ত (ইন্টারফেসিং মেকানিক্সের জন্য M4-M6 দেখুন)।

৩ · সেন্সর নয়েজ ও ফিল্টারিং

বাস্তব সেন্সর রিডিং কখনোই একদম নিখুঁত হয় না — ইলেকট্রনিক নয়েজ, তাপমাত্রার ওঠানামা, বা যান্ত্রিক কম্পনের কারণে একই স্থির মান বারবার মাপলেও প্রতিবার কিছুটা ভিন্ন সংখ্যা আসে। নিচের কোড সেলে একটি তাপমাত্রা সেন্সরের ১২টি নয়েজি রিডিং ফিক্সড সিড দিয়ে সিমুলেট করা হয়েছে, তারপর একটি সরল মুভিং-এভারেজ ফিল্টার (সাম্প্রতিক কয়েকটি রিডিং-এর গড়) প্রয়োগ করে দেখানো হয়েছে ফিল্টার করা রিডিং প্রকৃত মানের কাছাকাছি — এটি শুধু দাবি নয়, কোড সেলটি সত্যিই গড় পরম ত্রুটি (Mean Absolute Error, MAE) গণনা করে কাঁচা ও ফিল্টার করা রিডিং-এর মধ্যে তুলনা করে।

Python
import random

TRUE_TEMP_C = 25.0   # প্রকৃত (true) তাপমাত্রা -- বাস্তবে অজানা, শুধু সিমুলেশনের জন্য জানা আছে
NOISE_STD = 1.5       # সেন্সরের পরিমাপ-নয়েজের স্ট্যান্ডার্ড ডেভিয়েশন (°C)

rng = random.Random(42)   # ফিক্সড সিড -- রিপ্রোডিউসিবল রেজাল্টের জন্য
raw_readings = [round(rng.gauss(TRUE_TEMP_C, NOISE_STD), 3) for _ in range(12)]

def moving_average(readings, window=4):
    filtered = []
    for i in range(len(readings)):
        start = max(0, i - window + 1)
        chunk = readings[start:i + 1]
        filtered.append(sum(chunk) / len(chunk))
    return filtered

filtered_readings = moving_average(raw_readings, window=4)

def mean_abs_error(readings, true_value):
    return sum(abs(r - true_value) for r in readings) / len(readings)

raw_mae = mean_abs_error(raw_readings, TRUE_TEMP_C)
filtered_mae = mean_abs_error(filtered_readings, TRUE_TEMP_C)

print("নমুনা\tকাঁচা রিডিং\tমুভিং-এভারেজ ফিল্টার")
for i, (r, f) in enumerate(zip(raw_readings, filtered_readings), start=1):
    print(f"{i}\t{r:.3f}\t\t{f:.3f}")

print(f"\nপ্রকৃত মান: {TRUE_TEMP_C} °C")
print(f"কাঁচা রিডিং-এর গড় পরম ত্রুটি (MAE): {raw_mae:.4f} °C")
print(f"ফিল্টার করা রিডিং-এর গড় পরম ত্রুটি (MAE): {filtered_mae:.4f} °C")
improvement_pct = (1 - filtered_mae / raw_mae) * 100
print(f"ফিল্টারিং ত্রুটি কমিয়েছে: {raw_mae - filtered_mae:.4f} °C ({improvement_pct:.1f}% কম)")

    
এই নির্দিষ্ট ফিক্সড-সিড রানে কাঁচা রিডিং-এর MAE প্রায় ০.৬৪ °C, কিন্তু ৪-নমুনার মুভিং-এভারেজ ফিল্টার প্রয়োগ করার পর MAE নেমে আসে প্রায় ০.২৭ °C-এ — অর্থাৎ প্রায় ৫৭% কম ত্রুটি। এটি সত্যিই কোড থেকে গণনা করা ফলাফল, কল্পিত সংখ্যা নয়। তবে মনে রাখবেন — উইন্ডো যত বড় হবে, নয়েজ তত বেশি কমবে, কিন্তু দ্রুত পরিবর্তনশীল সিগন্যালের ক্ষেত্রে রেসপন্স তত ধীর (ল্যাগি) হয়ে যাবে — এটি একটি বাস্তব ট্রেড-অফ।
মূল কথা · Key takeaway

প্রতিটি সেন্সর ক্যাটেগরির জন্য সঠিক ইন্টারফেস বেছে নেওয়া (analog+ADC, digital GPIO, I2C, বা SPI) এবং রিডিং-এর নয়েজ বোঝা ও ফিল্টার করা — এই দুটোই একটি নির্ভরযোগ্য সেন্সর সিস্টেম তৈরির প্রথম ধাপ। পরের পাঠ (L37) দেখাবে কীভাবে সঠিক ক্যালিব্রেশন দিয়ে কাঁচা ADC মানকে সঠিক ইঞ্জিনিয়ারিং ইউনিটে রূপান্তর করতে হয়।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ একটি DS18B20 তাপমাত্রা সেন্সর 1-Wire প্রোটোকল ব্যবহার করে, কিন্তু একটি সাধারণ থার্মিস্টর সরাসরি analog+ADC ব্যবহার করে — এই পার্থক্যের পেছনের কারণ কী বলে আপনার মনে হয়?

DS18B20-এর ভেতরে নিজস্ব একটি ছোট চিপ আছে যা তাপমাত্রা মেপে সেটিকে ইতিমধ্যে ডিজিটাল সংখ্যায় রূপান্তর করে এবং 1-Wire প্রোটোকলে পাঠায় — তাই মাইক্রোকন্ট্রোলারের নিজের ADC-এর দরকার হয় না। থার্মিস্টর কেবল একটি প্যাসিভ রেজিস্ট্যান্স উপাদান (তাপমাত্রার সাথে রেজিস্ট্যান্স বদলায়) — তার নিজস্ব কোনো প্রসেসিং ক্ষমতা নেই, তাই মাইক্রোকন্ট্রোলারকে নিজেই ADC দিয়ে ভোল্টেজ মেপে তাপমাত্রায় রূপান্তর করতে হয়।

প্র ০২ উপরের কোড সেলে window=4-এর বদলে window=1 ব্যবহার করলে ফিল্টার করা রিডিং-এর সাথে কাঁচা রিডিং-এর সম্পর্ক কী হবে?

window=1 মানে প্রতিটি "গড়" আসলে শুধু সেই মুহূর্তের একটি রিডিং নিয়ে গণনা হবে — অর্থাৎ ফিল্টার করা রিডিং কাঁচা রিডিং-এর সাথে হুবহু এক হয়ে যাবে, কোনো নয়েজ-হ্রাস ঘটবে না। এই কারণেই মুভিং-এভারেজ ফিল্টারের কার্যকারিতা উইন্ডো সাইজের উপর সরাসরি নির্ভরশীল।

প্র ০৩ একটি PIR মোশন সেন্সর কেন সাধারণত digital GPIO দিয়ে ইন্টারফেস করা হয়, analog+ADC দিয়ে নয়?

PIR সেন্সর মূলত একটি বাইনারি প্রশ্নের উত্তর দেয় — "সামনে গতি আছে কিনা" — এটি একটি সরল HIGH/LOW সিগন্যাল, কোনো গ্রেডেশন/ভ্যালুর দরকার নেই। তাই একটি সাধারণ ডিজিটাল GPIO পিন (L14) যথেষ্ট — ADC-এর অতিরিক্ত রেজোলিউশন এখানে অপ্রয়োজনীয় জটিলতা যোগ করবে।

অনুশীলন

  1. চিন্তা করুন: উপরের কোড সেলে NOISE_STD-এর মান ৪.৫ (এখনকার তিনগুণ) করলে raw_mae-এর মান কীভাবে বদলাবে বলে আপনার ধারণা?

    গড়ে raw_mae-এর মান আনুপাতিকভাবে প্রায় তিনগুণ বেড়ে যাবে, কারণ Gaussian নয়েজের গড় পরম বিচ্যুতি সরাসরি তার স্ট্যান্ডার্ড ডেভিয়েশনের সাথে সমানুপাতিক — তবে ফিল্টার করা MAE-ও একই অনুপাতে বাড়বে, তাই ফিল্টারিং-এর শতাংশ উন্নতি (~৫৭%) মোটামুটি একই থাকার কথা।

  2. পরীক্ষা করুন: উপরের কোড সেলে window=4-এর বদলে window=8 ব্যবহার করে Run চেপে দেখুন filtered_mae আরও কমে কিনা।

    সাধারণত হ্যাঁ — বড় উইন্ডো আরও বেশি নমুনার উপর গড় নেয়, তাই র‍্যান্ডম নয়েজ আরও বেশি বাতিল হয়ে যায় এবং filtered_mae আরও কমে (যদিও মাত্র ১২টি নমুনার মধ্যে window=8 ব্যবহার করলে প্রথম কয়েকটি রিডিং কম নমুনা দিয়ে গড় হবে, তাই উন্নতি সীমিত থাকতে পারে)।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

  • কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ মাইক্রোপ্রসেসর আর্কিটেকচার, এমবেডেড C, GPIO, টাইমার/PWM/ADC, সিরিয়াল প্রোটোকল, RTOS, সেন্সর/অ্যাকচুয়েটর, IoT আর্কিটেকচার, ওয়্যারলেস প্রোটোকল, MQTT/CoAP ও IoT সিকিউরিটি — বাকি পাঠগুলো শীঘ্রই যুক্ত হবে।
  • Computer Architecture & Digital Logic কোর্স সহোদর কোর্স ADC/GPIO-এর মতো পেরিফেরালের সাধারণ ডিজিটাল-লজিক ভিত্তি সেই কোর্সে কভার করা হয়েছে।
  • সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity, Cloud Computing & DevOps, Computer Networks, Operating Systems, Computer Architecture, Design and Analysis of Algorithms ও আরও অনেক কোর্স — সব এক জায়গায়।
আগের পাঠ
এমবেডেড সিস্টেম রিলায়েবিলিটি ও ফল্ট টলারেন্স