# মাটির আর্দ্রতা নির্ণয় ![A sketchnote overview of this lesson](../../../../sketchnotes/lesson-6.jpg) > স্কেচনোটটি তৈরী করেছেন [Nitya Narasimhan](https://github.com/nitya). বড় সংস্করণে দেখার জন্য ছবিটিতে ক্লিক করতে হবে। > ## লেকচার-পূর্ববর্তী কুইজ [লেকচার-পূর্ববর্তী কুইজ](https://thankful-pond-0eba8f10f.1.azurestaticapps.net/quiz/11) ## সূচনা গত পাঠে আমরা একটি পারিপার্শ্বিক বৈশিষ্ট্য পরিমাপ করেছি এবং উদ্ভিদ বৃদ্ধির পূর্বাভাস দেওয়ার জন্য এটি ব্যবহার করে দেখেছি। তাপমাত্রা নিয়ন্ত্রণ করা যায়, তবে এটি করা ব্যয়বহুল,এইজন্য নিয়ন্ত্রিত পরিবেশ প্রয়োজন। উদ্ভিদের বৃদ্ধির জন্য যে পারিপার্শ্বিক বৈশিষ্ট্য সহজে নিয়ন্ত্রণ করা যায়, হল পানি - এটি এমন কিছু যা বিশাল আকারের খামারে সেচকার্য থেকে শুরু করে, প্রতিদিন ছোট বাচ্চারা তাদের বাগানে পানি দেয়ার পাত্র দিয়ে নিয়ন্ত্রণ করে। ![A child watering a garden](../../../../images/child-watering-garden.jpg) এই পাঠে আমরা শিখবো মাটির আর্দ্রতা পরিমাপ করা এবং পরবর্তী পাঠে কীভাবে একটি স্বয়ংক্রিয় জল সরবরাহ ব্যবস্থা নিয়ন্ত্রণ করা যায় তা জানবো। এই পাঠটি তৃতীয় আরেকটি সেন্সরের সাথে আমাদের পরিচয় করিয়ে দিবে। আমরা ইতিমধ্যে একটি আলোক সেন্সর, একটি তাপমাত্রা সেন্সর ব্যবহার করেছি। সুতরাং এই পাঠে আমরা জানবো কীভাবে একটি মাটির আর্দ্রতা সংবেদক ডেটা প্রেরণ করা যাবে - এছাড়াও আইওটি ডিভাইসগুলির সাথে কীভাবে সেন্সর এবং অ্যাকচুয়েটর যোগাযোগ করে সে সম্পর্কে আরও জানতে পারবো। এই পাঠে অন্তর্ভুক্ত রয়েছেঃ * [মাটির আদ্রতা](#মাটির-আদ্রতা) * [আইওটি ডিভাইসের সাথে সেন্সরগুলি কীভাবে যোগাযোগ করে](#সেন্সর-কীভাবে-আইওটি-ডিভাইসের-সাথে-যোগাযোগ-করে) * [মাটিতে আর্দ্রতার মাত্রা পরিমাপ](#মাটিতে-আর্দ্রতার-মাত্রা-পরিমাপ) * [সেন্সর ক্যালিব্রেশন](#সেন্সর-ক্যালিব্রেশন) ## মাটির আদ্রতা গাছপালা জন্মাতে পানি প্রয়োজন। তারা পুরো দেহ জুড়ে পানি শোষণ করে, বেশিরভাগই মূল দ্বারা শোষিত হয়। উদ্ভিদ পানি তিনটি জিনিসের জন্য ব্যবহার করে: * [সালোকসংশ্লেষণ](https://wikipedia.org/wiki/Photosynthesis) - উদ্ভিদ পানি, কার্বন ডাইঅক্সাইড এবং আলো দিয়ে কার্বোহাইড্রেট এবং অক্সিজেন তৈরির জন্য রাসায়নিক বিক্রিয়া তৈরি করে। * [প্রস্বেদন](https://wikipedia.org/wiki/Transpiration) - গাছপালা বাতাসে পানি অপসারণ করে বাষ্পাকারে। এই প্রক্রিয়াটি উদ্ভিদের চারপাশে পুষ্টি বহন করে এবং উদ্ভিদকে শীতল করে, যেমন মানুষের ঘাম হয়। * গঠন - গাছের কাঠামো বজায় রাখতে পানি প্রয়োজন - এদের 90% পানি (মানুষের যেখানে 60%) এবং এই পানি তাদের দেহের কোষগুলিকে শক্ত রাখে। যদি একটি উদ্ভিদের পর্যাপ্ত পানি না থাকে, তবে এটি মারা যাবে । ![Water is absorbed through plant roots then carried around the plant, being used for photosynthesis and plant structure](../../../../images/transpiration.png) ✅ ছোট একটি গবেষণা করা যাক: প্রস্বেদনের মাধ্যমে কতটা পানি নির্গমণ হয়? মূল উদ্ভিদের বৃদ্ধির জন্য মাটির আর্দ্রতা থেকে পানি সরবরাহ করে। মাটিতে খুব কম পানি থাকলে , উদ্ভিদ বৃদ্ধি পেতে পর্যাপ্ত পরিমাণে শোষণ করতে পারে না। আবার প্রচুর পরিমাণে পানি থাকলে শিকড় প্রয়োজনীয় অক্সিজেন গ্রহণ করতে পারে না। এর ফলে তা মারা যায় এবং গাছটি বেঁচে থাকার জন্য পর্যাপ্ত পুষ্টি পেতে পারে না। একজন কৃষকের সর্বোত্তম গাছের বৃদ্ধি পাওয়ার জন্য মাটি খুব বেশি ভেজা বা খুব বেশি শুকনো - কোনটিই হওয়া যাবেনা। আইওটি ডিভাইসগুলি এক্ষেত্রে সাহায্য করতে পারে - মাটির আর্দ্রতা পরিমাপ করে , কেবল যখন প্রয়োজন হয় তখনই কৃষককে সেচ দেয়ার বার্তা দিবে। ### মাটির আর্দ্রতা মাপার উপায়সমূহ মাটির আর্দ্রতা পরিমাপ করতে বিভিন্ন ধরণের সেন্সর ব্যবহার করা যায়ঃ * রোধক-ভিত্তিক সেন্সর - একটি রেজিস্টিভ সেন্সরের দুটি প্রোব রয়েছে যা মাটিতে সংযুক্ত থাকে। একটির মাধ্যমে তড়িৎ প্রবাহ প্রেরণ করা হয়, এবং অন্যটি দ্বারা গৃহীত হয়। ১মটি থেকে ২য়টির মাঝে তড়িতের পার্থক্যের মাধ্যমে সেন্সর মাটির রোধের পরিমাপ করে । পানি বিদ্যুতের একটি ভাল কন্ডাক্টর, তাই মাটির পানির পরিমাণ যত বেশি থাকে তত প্রতিরোধ ক্ষমতা কম হয়। ![A resistive soil moisture sensor](../../../../images/resistive-soil-moisture-sensor.png) > 💁 কয়েক সেন্টিমিটার দূরত্বে দুটি পৃথক ধাতুর দুটি টুকরো ব্যবহার করে এবং একটি মাল্টিমিটার ব্যবহার করে তাদের মধ্যে প্রতিরোধের পরিমাপ করে আমরা একটি মাটির আর্দ্রতা সেন্সর তৈরি করতে পারি। * ক্যাপাসিটর-ভিত্তিক সেন্সর - একটি ক্যাপাসিটিভ আর্দ্রতা সেন্সর ২টি পজিটিভ এবং নেগেটিভ বৈদ্যুতিক প্লেট এর মাঝে বৈদ্যুতিক চার্জের পরিমাণকে পরিমাপ করে যাকে [ক্যাপাসিট্যান্স](https://wikipedia.org/wiki/Capacitance) বলা হয়। আর্দ্রতার মাত্রা পরিবর্তনের সাথে সাথে মাটির ক্যাপাসিট্যান্স পরিবর্তিত হয় এবং এটির প্রভাবে ভোল্টেজ পরিবর্তন হয় এবং তা আইওটি ডিভাইস দ্বারা পরিমাপ করা যায়। মাটি যত বেশি ভেজা, ততই কম ভোল্টেজ আসে। ![A capacitive soil moisture sensor](../../../../images/grove-capacitive-soil-moisture-sensor.png) এগুলি অ্যানালগ সেন্সর, মাটির আর্দ্রতা নির্দেশ করতে ভোল্টেজ পরিমাপ করে। তাহলে এই ভোল্টেজটি আমাদের কোডে কিভাবে আসে? সেন্সর আরো আলাপের আগে আমরা দেখে নিবো আইওটি ডিভাইসগুলির সাথে সেন্সর এবং অ্যাকচুয়েটর কীভাবে যোগাযোগ করে । ## সেন্সর কীভাবে আইওটি ডিভাইসের সাথে যোগাযোগ করে এখন পর্যন্ত এই পাঠগুলিতে আমরা বেশ কয়েকটি সেন্সর এবং অ্যাকচুয়েটর সম্পর্কে শিখেছি এবং যদি কেউ হার্ডওয়্যার ল্যাবগুলি করে থাকে, তবে এগুলি তার আইওটি ডেভ কিটের সাথে যোগাযোগ করে চলেছে। কিন্তু এই যোগাযোগ কীভাবে কাজ করে? মাটির আর্দ্রতা সেন্সর থেকে রোধের পরিমাপ এর মত একটি সাধারণ সংখ্যা কোডে কীভাবে ব্যবহার করা হচ্ছে? বেশিরভাগ ক্ষেত্রেই সেন্সর এবং অ্যাকচুয়েটরের সাথে যোগাযোগের জন্য হার্ডওয়্যার এবং একটি যোগাযোগ প্রোটোকল প্রয়োজন - এটি ডেটা প্রেরণ এবং গ্রহণের সর্বজনস্বীকৃত উপায়। উদাহরণস্বরূপ একটি ক্যাপাসিটিভ আর্দ্রতা সেন্সর এর কথা ভাবা যাক: * এই সেন্সরটি আইওটি ডিভাইসের সাথে কীভাবে সংযুক্ত রয়েছে? * যদি এটি ভোল্টেজ পরিমাপ করে(যা কিনা একটি অ্যানালগ সংকেত), তবে এটির ডিজিটাল উপস্থাপনা তৈরি করতে এডিসি (AC to DC) এর প্রয়োজন হবে যা এনালগ ডেটাকে 0 এবং 1 হিসেবে পাঠাবে। তবে প্রতিটি বিট কতক্ষণ সময়ের জন্য পাঠানো হবে? * আবার কোন সেন্সর যদি কোন ডিজিটাল মান দেয়, তবে এটি 0 এবং 1 এর সিরিজ পাঠাবে। এক্ষেত্রেও প্রশ্ন হলো প্রতিটি বিট কতক্ষণ সময়ের জন্য প্রেরণ করা হয়? * যদি ০.১ সেকেন্ডের জন্য ভোল্টেজ হাই (High) থাকে, তবে এটি কী একক ১বিট নাকি ২টি একটানা বিটের মান নাকি ১০টির ? * ঠিক কোন সময়ে এই সংখ্যা গুলো গণনা শুরু হয়? `00001101` কী 25, বা প্রথম 5 টি বিট কী পূর্ববর্তী মানের শেষাংশ? হার্ডওয়্যার একটি বস্তুগত সংযোগ তৈরী করে যার মাধ্যমে ডেটা প্রেরণ করা হয়। এখানে বিভিন্ন যোগাযোগ প্রোটোকল এটি নিশ্চিত করে যে, ডেটা প্রেরণ বা গ্রহণ সঠিক উপায়ে হচ্ছে যাতে প্রতিটি স্তরে ডেটা ব্যবহার উপযোগী থাকে। ### General Purpose Input Output (GPIO) pins জিপিআইও হল পিনের এমন একটি সেট যা আইওটি ডিভাইসের সাথে হার্ডওয়্যার সংযোগ করতে ব্যবহার করা যাবে। প্রায়শই আইওটি ডেভলাপার কিটগুলিতে যেমন রাস্পবেরি পাই বা উইও টার্মিনালে এই পিন পাওয়া যায়। আমরা এই পাঠে আলোচনা হতে যাওয়া বিভিন্ন প্রোটোকল আমরা GPIO পিনের সাথে ব্যবহার করতে পারবো। কিছু জিপিআইও পিন ভোল্টেজও সরবরাহ করে, সাধারণত 3.3V বা 5V, কিছু পিন গ্রাউন্ড করা থাকে এবং অন্যগুলো প্রোগ্রামিং এর মাধ্যমে নিয়ন্ত্রণ করা হয় এরা হয় ভোল্টেজ (আউটপুট) প্রেরণ করতে পারে, বা একটি ভোল্টেজ (ইনপুট) গ্রহণ করতে পারে। > 💁 বৈদ্যুতিক সার্কিট সম্পূর্ণ করার জন্য মূলত গ্রাউন্ডের সাথে কোন একটি ভোল্টেজ সংযোগ করতে হবে। কোন ব্যাটারির পজিটিভ (+ ve) টার্মিনাল হিসাবে ভোল্টেজ এবং নেগেটিভ (-ve) টার্মিনাল হিসাবে গ্রাউন্ডকে চিন্তা করা যায়। শুধুমাত্র অন/অফ (High/Low) ভ্যালুর প্রয়োজন হলে GPIO পিনকে সরাসরি ডিজিটাল সেন্সর বা একচুয়েটরের সাথে সংযোগ করা যায়। উদাহরণস্বরূপঃ * বাটন - You can connect a button between a 5V pin and a pin set to input. When you press the button it completes a circuit between the 5V pin, through the button to the input pin. From code you can read the voltage at the input pin, and if it is high (5V) then the button is pressed, if it is low (0v) then the button is not pressed. Remember the actual voltage itself is not read, instead you get a digital signal of 1 or 0 depending on if the voltage is above a threshold or not. একটি 5 ভোল্টের পিন এবং ইনপুট পিনের মধ্যে একটি বাটন সংযোগ করা যায়। বাটন প্রেস করলে, 5V পিন থেকে বাটনের ভেতর দিয়ে এটি একটি ইনপুট সার্কিট সম্পূর্ণ করে। কোড থেকে ইনপুট পিনের ভোল্টেজ এর মান জানা যায়। যদি মান High (5V) হয়, তবে তার মানে বাটনে প্রেস করা হয়েছে কিন্তু যদি এটি Low(0V) হয়, সেটি বোঝায় যে বাটনে প্রেস করা হয়নি। এক্ষেত্রে এটি অবশ্যই মনে রাখতে হবে যে এখানে প্রকৃত ভোল্টেজ আসেনি, বরং এর ডিজিটাল সিগন্যাল হিসেবে 1 বা 0 এসেছে। ![A button is sent 5 volts. When not pressed it returns 0 volts, or 0, when pressed it returns 5 volts, or 1](../../../../images/button-with-digital.png) * এলইডি - একটি আউটপুট পিন এবং গ্রাউন্ড পিনের মধ্যে একটি এলইডি সংযোগ করা যাবে ( এখানে একটি রেজিস্টর বা রোধ ব্যবহার করতে হবে, অন্যথায় এলইডি পুড়ে যাবে)। কোড থেকে আপনি আউটপুট পিনটি High সেট করলে এটি 3.3V প্রেরণ করবে। এখানে 3.3V পিন থেকে এলইডি এর মাধ্যমে গ্রাউন্ড পিনে একটি সার্কিট তৈরি হয়েছে। এতে LED জ্বলে উঠবে। ![An LED is sent a signal of 0 (3.3V), which lights the LED. If it is sent 0 (0v), the LED is not lit.](../../../../images/led-digital-control.png) আরও উন্নত সেন্সরগুলির জন্য, সেন্সর এবং অ্যাকচুয়েটরের সাথে জিপিআইও পিনগুলি সরাসরি ডিজিটাল ডেটা প্রেরণ এবং গ্রহণের জন্য সরাসরি ব্যবহার করা যায়। ADC এবং DAC সহ কন্ট্রোলার বোর্ডের মাধ্যমেও অ্যানালগ সেন্সর এবং অ্যাকচুয়েটরের সাথে যোগাযোগ স্থাপন করা যাবে। > 💁 এই ল্যাবগুলির জন্য একটি রাস্পবেরি পাই ব্যবহার করলে, সেটিতে গ্রোভ বেস হ্যাট এর জিপিআইওর মাধ্যমে এনালগ সেন্সর সংকেতগুলিকে ডিজিটাল রূপান্তর করতে হার্ডওয়্যার রয়েছে। ✅ জিপিআইও পিন সহ আইওটি ডিভাইস আমাদের কাছে থাকলে, এই পিনগুলি সন্ধান করে কোনগুলো গ্রাউন্ড আবার কোনগুলা ভোল্টেজের জন্য বা প্রোগ্রামেবল - তা সনাক্ত করি। ### অ্যানালগ পিন কিছু ডিভাইস, যেমন আরডুইনো ডিভাইসগুলিতে অ্যানালগ পিন থাকেে। এগুলি জিপিআইও পিনের মতই, তবে ডিজিটাল সিগন্যাল সমর্থন করার পরিবর্তে, তাদের কাছে ভোল্টেজ রেঞ্জকে সংখ্যাসূচক মানগুলিতে রূপান্তর করতে একটি এডিসি রয়েছে। সাধারণত এডিসির একটি 10-বিট রেজোলিউশন থাকে যার অর্থ এটি ভোল্টেজকে 0 থেকে 1,023 এর একটি মানে রূপান্তর করে। উদাহরণস্বরূপ, একটি 3.3V বোর্ডে, সেন্সরটি যদি 3.3V প্রদান করে, তবে প্রত্যাবর্তিত মানটি হবে 1,023। যদি প্রাপ্ত ভোল্টেজটি 1.65v হয়, তবে তার মান 511 হবে। ![A soil moisture sensor sent 3.3V and returning 1.65v, or a reading of 511](../../../../images/analog-sensor-voltage.png) > 💁 নাইটলাইট এ ফিরে যাই - লেসন-৩ : আলোক সেন্সর 0-1,023 এর একটি মান দেয়। যদি আমরা উইও টার্মিনাল ব্যবহার করি, তবে সেন্সরটি একটি এনালগ পিনের সাথে সংযুক্ত ছিল। যদি আমরা রাস্পবেরি পাই ব্যবহার করি, তবে তা জিপিআইও পিনের সাথে যোগাযোগের জন্য ইন্টিগ্রেটেড এডিসিযুক্ত বেস হ্যাটে একটি এনালগ পিনের সাথে সংযুক্ত ছিল। ভার্চুয়াল ডিভাইসটি একটি অ্যানালগ পিনের অনুকরণ করতে 0-1,023 থেকে একটি মান প্রেরণের জন্য সেট করা হয়েছিল। মাটির আর্দ্রতা সেন্সরগুলি ভোল্টেজের উপর নির্ভর করে, সুতরাং এনালগ পিনগুলি ব্যবহার করে 0-1,023 এর মান দেবে। ### Inter Integrated Circuit (I2C) I2C, যেটিকে পড়া হয় *I-স্কয়ার-C*, একটি মাল্টি কন্ট্রোলার, মাল্টি পেরিফেরাল ব্যবস্থা যা কোন সংযুক্ত ডিভাইস একটি মাল্টি-কন্ট্রোলার, মাল্টি পেরিফেরিয়াল প্রোটোকল হিসেবে কাজ করতে পারে I2C বাস (ডেটা স্থানান্তরকারী যোগাযোগ ব্যবস্থা) এর সাথে। সংযুক্ত ডিভাইসের এড্রেসযুক্ত প্রতিটি প্যাকেট সহ সকল ডেটাই এড্রেস প্যাকেট হিসাবে প্রেরণ করা হয়। > 💁 এই মডেলটিকে প্রভু(Master)/ক্রীতদাস(Slave) হিসাবে উল্লেখ করা হত, তবে Slave বা দাসত্বের সাথে জড়িত থাকার কারণে এই পরিভাষা বাদ দেওয়া হচ্ছে। [Open Source Hardware Association থেকে বর্তমানে **controller/peripheral** এই পরিভাষা গৃহিত হয়েছে](https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/), তবে কিছু কিছু স্থানে এখনও পুরানো পরিভাষার উল্লেখ দেখতে পাওয়া যায়। প্রটি ডিভাইসের একটি এড্রেস থাকে যা I2C বাসের সাথে সংযোগে দরকার হয় এবং এগুলো সাধারণত আগে থেকেই ডিভাইসে কোড করা থাকে। উদাহরণস্বরূপ, সীডের প্রতি ধরণের গ্রোভ সেন্সরের একই এড্রেস রয়েছে, সুতরাং সমস্ত আলোক সেন্সরের একই ঠিকানা রয়েছে, সমস্ত বাটনের একই ঠিকানা রয়েছে যা লাইট সেন্সর ঠিকানা থেকে পৃথক। কিছু ডিভাইসের সাথে জাম্পার সেটিংস বা সোল্ডারিং পিনগুলি একসাথে পরিবর্তন করে ঠিকানা পরিবর্তন করার উপায় রয়েছে। I2C এর একটি বাস রয়েছে যাতে ২টি মেইন তার(Wire) এবং ২টি পাওয়ার সরবরাহের তার(Wire) রয়েছেঃ | তার (Wire) | নাম | বর্ণনা | | ---- | --------- | ----------- | | SDA | Serial Data | এই তারটি ডিভাইসগুলির মধ্যে ডেটা প্রেরণের জন্য ব্যবহৃত হয় | | SCL | Serial Clock | এই তারটি নিয়ামক দ্বারা নির্ধারিত হারে একটি ঘড়ি সংকেত প্রেরণ করে | | VCC | Voltage common collector | ডিভাইসগুলির জন্য পাওয়ার সাপ্লাইয়ে ব্যবহৃত হয়। এটি এসডিএ এবং এসসিএল তারগুলির সাথে সংযুক্ত হয়ে একটি পুল-আপ রেজিস্টারের মাধ্যমে তাদের পাওয়ার সরবরাহ করে যা সিগন্যালকে অফ করে দিতে পারে, যখন কোন ডিভাইস নিয়ন্ত্রক থাকে না | | GND | Ground | এটি বৈদ্যুতিক সার্কিটের জন্য একটি সাধারণ গ্রাউন্ড সরবরাহ করে | ![I2C bus with 3 devices connected to the SDA and SCL wires, sharing a common ground wire](../../../../images/i2c.png) ডেটা প্রেরণের জন্য, একটি ডিভাইস প্রেরণ শুরুর শর্ত প্রকাশ করবে যা দ্বারা বোঝা যাবে যে এটি ডেটা প্রেরণের জন্য প্রস্তুত। এটি তখন নিয়ন্ত্রক বা কন্ট্রোলার ডিভাইস হিসেবে কাজ করবে। এরপরে নিয়ন্ত্রকটি সেই ডিভাইসের ঠিকানা প্রেরণ করে যার সাথে এটি যোগাযোগ করতে চায়, সেই সাথে এটিও জানানো হয় ডেটা Read নাকি Write কোনটি করতে চায়। ডেটা পাঠানোর পরে, কন্ট্রোলার এটি শেষ হয়ে গেছে তা বোঝাতে একটি স্টপ শর্ত প্রেরণ করে। এর পরে অন্য ডিভাইসটি নিয়ন্ত্রক হয়ে উঠতে পারে এবং ডেটা প্রেরণ বা গ্রহণ সে নিজেই শুরু করতে পারে। I2C এর গতিসীমার লিমিট রয়েছে, যেখানে ৩টি ভিন্ন মোড রয়েছে বিভিন্ন স্পীডের। সবথেকে বেশি গতিশীল হলো High Speed mode যার সর্বোচ্চ স্পীড 3.4Mbps (megabits per second),যদিও খুব অল্পসংখ্যক ডিভাইসই এত স্পীড সরবরাহ করে। উদাহরণস্বরূপ রাস্পবেরি পাইয়ের কথা ধরা যাক, এটির গতি fast mode পর্যন্তই, যার মান 400Kbps (kilobits per second)। Standard mode টি এক্ষেত্রে 100Kbps সরবরাহ করে। > 💁 আমরা যদি রাস্পবেরি পাইয়ের সাথে গ্রোভ বেস হ্যাট ব্যবহার করি আমাদের আইওটি হার্ডওয়্যার হিসেবে, সেখানে অনেকগুলো I2C সকেট দেখা যাবে, I2C সেন্সরের সাথে সংযোগ স্থাপনের জন্য। অ্যানালগ গ্রোভ সেন্সরগুলিও ডিজিটাল ডেটা হিসাবে অ্যানালগ মানগুলি প্রেরণ করতে একটি এডিসি সহ I2C ব্যবহার করে। তাহলে, আমাদের ব্যবহৃত আলোক সেন্সর যা একটি এনালগ পিনকে সিমুলেট করে, সেখানে শুধুমাত্র ডিজিটাল ডেটা সাপোর্ট করা পাই তে বার্তা পাঠানো হয়েছে I2C এর মাধ্যমে। ### Universal asynchronous receiver-transmitter (UART) UART তে সার্কিটরি থাকে, যা দুটি ডিভাইসকে যোগাযোগ করার সুযোগ দেয়। প্রতিটি ডিভাইসে 2টি যোগাযোগ পিন থাকে - transmit (Tx) এবং receive (Rx), যেখানে দ্বিতীয় ডিভাইসের আরএক্স পিনের সাথে সংযুক্ত হয় প্রথম ডিভাইসের টিএক্স পিন এবং দ্বিতীয় ডিভাইসের টিএক্স পিনের সাথে ১মটির আরএক্স পিন সংযুক্ত হয়ে, উভয় দিক দিয়ে ডেটা প্রেরণের সুযোগ তৈরী করে। * ডিভাইস-১ থেকে ডেটা পাঠানো হয়, এটির Tx পিনের মাধ্যমে, যা ২য় ডিভাইসের Rx পিন গ্রহণ করে। * আবার, ডিভাইস-২ থেকে এটির Tx পিনের মাধ্যমে ডেটা পাঠানো হলে, তা ১ম ডিভাইসের Rx পিন গ্রহণ করে। ![UART with the Tx pin on one chip connected to the Rx pin on another, and vice versa](../../../../images/uart.png) > 🎓 ডেটাকে বিট আকারে প্রেরণ করা হয় এবং এটি *সিরিয়াল* কম্যুনিকেশন হিসাবে পরিচিত। বেশিরভাগ অপারেটিং সিস্টেম এবং মাইক্রোকন্ট্রোলারগুলিতে * সিরিয়াল পোর্ট * থাকে, এটি এমন সংযোগ যা আমাদের কোডে থাকা সিরিয়াল ডেটা প্রেরণ ও গ্রহণ করতে পারে। UART ডিভাইসে [baud rate](https://wikipedia.org/wiki/Symbol_rate) (অপর নাম 'সিম্বল রেট') নামক একটি বিষয় রয়েছে যেটি দ্বারা প্রতি সেকেন্ডে বিট আকারে ডেটা প্রেরণ ও গ্রহণের স্পীড বোঝায়। একটি সাধারণ baud rate হলো 9,600,যার মানে 9,600 bits (0 এবং 1) ডেটা প্রতি সেকেন্ডে প্রেরণ করা হচ্ছে। UART তে স্টার্ট এবং স্টপ বিট রয়েছে - এটি স্টার্ট এবং স্টপ বিট প্রেরণ করে এই বিষয়টি জানায় যে এটি এখন ১ বাইট (৮ বিট) ডেটা পাঠাবে, তারপর সেই ৮বিটের পর একটি স্টপ বাইট যাবে। UART স্পীড নির্ভর করে হার্ডওয়্যার গতির উপর, তবে সর্বোচ্চ গতিও 6.5 Mbpsএর বেশি হয়না। আমরা UART কে ব্যবহার করে পারি GPIO পিনের মাধ্যমে - যেখানে ১টি পিনকে Tx এবং অন্যটিকে Rx হিসেবে সেট করে তারপর আরেকটি ডিভাইসের সাথে যুক্ত করতে হবে। > 💁 যদি নিজের আইওটি হার্ডওয়্যার হিসাবে আমরা গ্রোভ বেস হ্যাট সহ রাস্পবেরি পাই ব্যবহার করি, তবে বোর্ডটিতে একটি ইউআরটি সকেট দেখা যাবে যা আমরা ইউআরটি প্রোটোকল ব্যবহার করে সেন্সরগুলির সাথে যোগাযোগ করতে ব্যবহার করতে পারবো। ### Serial Peripheral Interface (SPI) এসপিআই হলো স্বল্প দূরত্বে যোগাযোগের জন্য ডিজাইন করা পদ্ধতি যেমনঃ মাইক্রোকন্ট্রোলারের মাধ্যমে ফ্ল্যাশ মেমরির মতো স্টোরেজ ডিভাইসে যোগাযোগ করা। এটি একক নিয়ন্ত্রক (সাধারণত আইওটি ডিভাইসের প্রসেসর) যা একাধিক পেরিফেরালের সাথে যোগাযোগ করতে সক্ষম এমন একটি controller/peripheral মডেলের উপর ভিত্তি করে নির্মিত। নিয়ন্ত্রক একটি পেরিফেরাল নির্বাচন করে এবং ডেটা প্রেরণ বা অনুরোধ করে সবকিছু নিয়ন্ত্রণ করে। SPI কন্ট্রোলারে ৩টি তার ব্যবহৃত হয়, আর প্রতি পেরিফেরালে ১টি করে অতিরিক্ত তার। এগুলো হলোঃ | তার | নাম | বর্ণনা | | ---- | --------- | ----------- | | COPI | Controller Output, Peripheral Input | এই তারটি নিয়ন্ত্রক থেকে পেরিফেরালে ডেটা প্রেরণের জন্য। | | CIPO | Controller Input, peripheral Output | এই তারটি পেরিফেরাল থেকে নিয়ন্ত্রকে ডেটা প্রেরণের জন্য। | | SCLK | Serial Clock | এই তারটি নিয়ামক দ্বারা নির্ধারিত হারে একটি ক্লক সিগন্যাল প্রেরণ করে। | | CS | Chip Select | কন্ট্রোলারের একাধিক তার রয়েছে। প্রতি পেরিফেরালে একটি এবং প্রতিটি তারের পেরিফেরাল সিএস তারের সাথে সংযোগ স্থাপন করে। | ![SPI with on controller and two peripherals](../../../../images/spi.png) CS তারটি একবারে একটি পেরিফেরাল সক্রিয় করতে ব্যবহৃত হয়। COPI এবং CIPO তারগুলিতে যোগাযোগ করে। যখন কন্ট্রোলারকে পেরিফেরাল পরিবর্তন করার দরকার হয়, এটি বর্তমানে সক্রিয় পেরিফেরিয়ালের সাথে সংযুক্ত সিএস তারগুলি নিষ্ক্রিয় করে। তারপরে যে পেরিফেরালে সাথে সংযুক্ত হতে চায়, তার সাথে কানেকশনকে সক্রিয় করে। SPI হলো *ফুল-ডুপ্লেক্স* পদ্ধতি, অর্থাৎ COPI and CIPO ব্যবহার করে কন্ট্রোলার ও পেরিফেরাল একইসাথে ডেটা প্রেরণ ও গ্রহণ করতে পারবে। SPI মূলত SCLK wire এর মাধ্যমে যুক্ত হয়, যাতে সবগুলো ডিভাইসের মাঝে সুসংগতি(sync) বজায় রাখা যায়, যা UART এর স্টপ এবং স্টার্ট বিটের থেকে সম্পূর্ণ ভিন্ন কনসেপ্ট। SPI এর কোন সুনির্দিষ্ট স্পীড লিমিট নেই, তাই প্রায়শোই সেকেন্ডে কয়েক মেগাবাইট স্পীডেও ডেটা পাঠানো যায়। IoT developer kits গুলো সাধারণত GPIO পিনের মাধ্যমে SPI সাপোর্ট করে। উদাহরণস্বরূপ, রাস্পবেরি পাইয়ে GPIO পিন 19, 21, 23, 24 এবং 26 ব্যবহৃত হয় SPI এর জন্য। ### Wireless (তারবিহীন যোগাযোগ) কিছু সেন্সর সাধারণ Wireless প্রোটোকলে যোগাযোগ স্থাপন করতে পারে যেমনঃ ব্লুটুথ (মূলত ব্লুটুথ লো এনার্জি বা BLE), LoRaWAN (a **Lo**ng **Ra**nge low power networking protocol) কিংবা ওয়াইফাই ব্যবহার করে। এতে সরাসরি হার্ডওয়্যারে যুক্ত না থেকেও সংযোগ স্থাপন করা যায়। যেমন, বাণিজ্যিকভাবে ব্যবহৃত মাটির আর্দ্রতা সেন্সর । এগুলি কোনও জমিতে মাটির আর্দ্রতা পরিমাপ করে, তারপরে LoRaWan এর মাধ্যমে ডেটা কোনও হাব ডিভাইসে প্রেরণ করবে, যা ডেটা প্রক্রিয়া করবে বা ইন্টারনেটে প্রেরণ করবে। এটি সেন্সরটিকে আইওটি ডিভাইস থেকে দূরে থাকার সুযোগ দেয় যা ডেটা পরিচালনা সহজ করে, বিদ্যুতের খরচ এবং বড় ওয়াইফাই নেটওয়ার্ক বা দীর্ঘ তারের প্রয়োজনীয়তা হ্রাস করে। ফিটনেস ট্র্যাকার এর মত উন্নত সেন্সর সম্বলিত যন্ত্রগুলোর জন্য বিএলই জনপ্রিয়। এগুলি একাধিক সেন্সর একত্রিত করে BLE এর মাধ্যমে ফোনে আইওটি ডিভাইসের সেন্সর ডেটা প্রেরণ করে। ✅ আমাদের নিজেদের বাড়িতে বা শিক্ষা প্রতিষ্ঠানে কোনও ব্লুটুথ সেন্সর রয়েছে কী? এর মধ্যে তাপমাত্রা সেন্সর, ডিভাইস ট্র্যাকার এবং ফিটনেস ডিভাইস অন্তর্ভুক্ত থাকতে পারে। বাণিজ্যিক ডিভাইসগুলির সংযোগের জন্য একটি জনপ্রিয় উপায় হল জিগবি (Zigbee)। জিগবি ডিভাইসের মধ্যে মেশ নেটওয়ার্ক তৈরি করতে ওয়াইফাই ব্যবহার করে, যেখানে প্রতিটি ডিভাইস যতটা সম্ভব কাছাকাছি ডিভাইসের সাথে সংযোগ স্থাপন করে মাকড়সার ওয়েবের মতো সংযোগ তৈরি করে। যখন কোন ডিভাইস ইন্টারনেটে কোনও বার্তা প্রেরণ করতে চায় তখন এটি এটি নিকটতম ডিভাইসে প্রেরণ করতে পারে, যা এটি অন্য নিকটবর্তী ডিভাইসগুলিতে প্রেরণ করতে পারে এবং ততক্ষণ এটি চলে যতক্ষণ তা কোন সমন্বয়কের কাছে পৌঁছানোর মাধ্যমে এবং ইন্টারনেটে প্রেরণ হচ্ছেনা। > 🐝 Zigbee শব্দটি এসেছে মূলত মৌচাকে মৌমাছির দোলনাচ (Waggle) থেকে । ## মাটিতে আর্দ্রতার মাত্রা পরিমাপ আমরা মাটির আর্দ্রতা সেন্সর, একটি আইওটি ডিভাইস এবং একটি ঘরের উদ্ভিদ ব্যবহার করে মাটিতে আর্দ্রতা স্তরটি পরিমাপ করতে পারবো। ### কাজ - মাটিতে আর্দ্রতার পরিমাপ আইওটি ডিভাইস ব্যবহার করে মাটিতে আর্দ্রতার পরিমাপ করার জন্য নিম্নের যেকোন একটি প্রাসঙ্গিক গাইড অনুসরণ করা যেতে পারে। * [Arduino - Wio Terminal](wio-terminal-soil-moisture.md) * [Single-board computer - Raspberry Pi](pi-soil-moisture.md) * [Single-board computer - Virtual device](virtual-device-soil-moisture.md) ## সেন্সর ক্যালিব্রেশন সেন্সরগুলি রোধ বা ক্যাপাসিট্যান্সের মতো বৈদ্যুতিক বৈশিষ্ট্যগুলির পরিমাপের উপর নির্ভর করে। > 🎓 রোধ পরিমাপ করা হয় ওহম (Ω) এককে যার দ্বারা বোঝায় কোনও কিছুর মধ্য দিয়ে যাতায়াত করা বৈদ্যুতিক কারেন্টের কত প্রতিবন্ধকতা রয়েছে । যখন কোনও উপাদানের উপর ভোল্টেজ প্রয়োগ করা হয় তখন এর মধ্য দিয়ে প্রবাহিত কারেন্টের পরিমাণ উপাদানটির রোধের উপর নির্ভর করে। [উইকিপিডিয়া থেকে বৈদ্যুতিক রোধ](https://wikipedia.org/wiki/Electrical_resistance_and_conductance) পড়লে এ সংক্রান্ত আরো জানা যাবে। > 🎓 ক্যাপাসিট্যান্স পরিমাপ করা হয় ফ্যারাড (F)এককে যার দ্বারা বোঝায় কোন উপাদান বা সার্কিটের বৈদ্যুতিক শক্তি সংগ্রহ এবং সঞ্চয় করার ক্ষমতা। [উইকিপিডিয়া থেকে ক্যাপাসিট্যান্স](https://wikipedia.org/wiki/Capacitance) পড়লে এ সংক্রান্ত আরো জানা যাবে। এই পরিমাপগুলি সবসময়ই যে খুব বেশি ব্যবহারযোগ্য বা সরাসরি উপকারী - তা কিন্তু নয়। একটি তাপমাত্রা সেন্সর কল্পনা করা যাক যা 22.5KΩ পরিমাপ দিয়েছে! কিন্তু এর পরিবর্তে পরিমাপকৃত মানটি ক্যালিব্রেটেড হয়ে একটি দরকারী ইউনিটে রূপান্তরিত হওয়া দরকার - যা পরিমাপ করা মানের সাথে এর পরিমাণের তুলনা করে আমাদের কাজের জন্য ব্যবহারযোগ্য সঠিক এককে রূপান্তর করবে। কিছু সেন্সর ব্যবহারের পূর্বেই ক্যালিব্রেটেড করা থাকে। উদাহরণস্বরূপ, গত পাঠটিতে যে তাপমাত্রা সেন্সরটি আমরা ব্যবহার করেছি সেটি ইতিমধ্যে ক্যালিব্রেট করা হয়েছিল যাতে এটি তাপমাত্রা পরিমাপ করে °C এককে। কারখানায় তৈরি প্রথম সেন্সরটি পরিচিত তাপমাত্রার এবং রোধের পরিমাপের একটি রেঞ্জ পাবে। এরপরে এটিতে কিছু গাণিতিক হিসেবের মাধ্যমে এমনভাবে তৈরী করা হবে যেন তা Ω (রোধের একক) এ মাপা মানকে °C এ রূপান্তর করতে পারে। > 💁 রোধ থেকে তাপমাত্রার হিসেবের সমীকরণকে বলা হয় [Steinhart–Hart equation](https://wikipedia.org/wiki/Steinhart–Hart_equation)। ### মাটি আর্দ্রতা সেন্সর ক্যালিব্রেট করা গ্রাভিমেট্রিক বা ভলিউমেট্রিক ভাবে পানির পরিমাণ ব্যবহার করে, মাটির আর্দ্রতা পরিমাপ করা হয়। * গ্রাভিমেট্রিক হল প্রতি ইউনিট ভরের মাটির জন্য, পানির ভর যেমন, প্রতি কেজি শুষ্ক মাটির জন্য এতে পানির কেজি পরিমাণ। * ভলিউমেট্রিক হলো প্রতি ইউনিট আয়তনের মাটির জন্য, পানির আয়তন যেমন, প্রতি কিউবমিটার শুষ্ক মাটির জন্য এতে পানির কিউবিক মিটার পরিমাণ। মাটির আর্দ্রতা সেন্সরগুলি বৈদ্যুতিক রোধ বা ক্যাপাসিট্যান্স পরিমাপ করে - এটি কেবল মাটির আর্দ্রতার দ্বারা পরিবর্তিত হয় না, তবে মাটির উপাদানগুলিও তার বৈদ্যুতিক বৈশিষ্ট্যগুলিকে পরিবর্তন করতে পারে মাটির প্রকারভেদে। আদর্শভাবে সেন্সরগুলি ক্যালিব্রেট করা উচিত - এটি সেন্সর থেকে পাঠ গ্রহণ করছে এবং আরও বৈজ্ঞানিক পদ্ধতির সাহায্যে প্রাপ্ত পরিমাপগুলির সাথে তাদের তুলনা করছে। উদাহরণস্বরূপ, একটি ল্যাব বছরে কয়েকবার নেওয়া নির্দিষ্ট ক্ষেত্রের নমুনাগুলি ব্যবহার করে গ্র্যাভিমেট্রিক মাটির আর্দ্রতা গণনা করতে পারে, এবং এই সংখ্যাগুলি সেন্সরটি ক্যালিব্রেট করতে ব্যবহৃত হয়েছিল, যা সেন্সর পাঠকে গ্র্যাভিমেট্রিক মাটির আর্দ্রতার সাথে মিলিয়েছে। ![A graph of voltage vs soil moisture content](../../../../images/soil-moisture-to-voltage.png) উপরের গ্রাফটি দেখায় যে কীভাবে সেন্সরটি ক্যালিব্রেট করতে হয়। ভোল্টেজ একটি মাটির নমুনার জন্য ক্যাপচার করা হয় যা পরে কোনও ল্যাবটিতে শুকনো ওজনের সাথে আর্দ্র ওজনের তুলনা করে (ওজন ভেজা পরিমাপ করে, তারপরে একটি চুলায় শুকিয়ে শুকনো পরিমাপ করে) পরিমাপ করা হয়। কয়েকটি রিডিং নেওয়া হয়ে গেলে, এটি কোনও গ্রাফ এবং পয়েন্টের সাথে লাগানো একটি লাইনে প্লট করা যেতে পারে। এই লাইনটি তখন আইওটি ডিভাইস দ্বারা গৃহীত মাটির আর্দ্রতা সংবেদক পাঠকে প্রকৃত মাটির আর্দ্রতা পরিমাপে রূপান্তর করতে ব্যবহার করা যেতে পারে। 💁 রোধভিত্তিক মাটির আর্দ্রতা সেন্সরগুলির জন্য, মাটির আর্দ্রতা বাড়ার সাথে সাথে ভোল্টেজ বৃদ্ধি পায়। ক্যাপাসিটিভ মাটি আর্দ্রতা সেন্সরগুলির জন্য, মাটির আর্দ্রতা বাড়ার সাথে সাথে ভোল্টেজ হ্রাস পায়, সুতরাং এর জন্য গ্রাফগুলি উপরের দিকে নয়, নীচের দিকে ঢালু হবে। ![A soil moisture value interpolated from the graph](../../../../images/soil-moisture-to-voltage-with-reading.png) উপরের গ্রাফটি মাটির আর্দ্রতা সেন্সর থেকে পাওয়া একটি ভোল্টেজ রিডিং দেখায় এবং গ্রাফের রেখার সাথে এটি অনুসরণ করে প্রকৃত মাটির আর্দ্রতা গণনা করা যায়। এই পদ্ধতির অর্থ কৃষকের একটি জমির জন্য কেবল অল্প কয়েকটি ল্যাব পরিমাপ দরকার, তারপরে তারা মাটির আর্দ্রতা পরিমাপ করতে আইওটি ডিভাইসগুলি ব্যবহার করা যাবে - যা পরিমাপের সময়কে দ্রুততর করবে। --- ## 🚀 চ্যালেঞ্জ রোধভিত্তিক এবং ক্যাপাসিটিভ মাটির আর্দ্রতা সেন্সরের বিভিন্ন পার্থক্য রয়েছে। এই পার্থক্যগুলি কী কী এবং কোন ধরণটি কোন কৃষকের ব্যবহারের জন্য সবচেয়ে ভাল? এই পরামর্শ কী উন্নয়নশীল এবং উন্নত দেশগুলির মধ্যে পরিবর্তিত হয়? ## লেকচার-পরবর্তী কুইজ [লেকচার-পরবর্তী কুইজ](https://thankful-pond-0eba8f10f.1.azurestaticapps.net/quiz/12) ## রিভিউ এবং স্ব-অধ্যয়ন সেন্সর এবং অ্যাকচুয়েটরের জন্য ব্যবহৃত হার্ডওয়্যার এবং প্রোটোকল সম্পর্কে জানতে নিম্নোক্ত বিষয়গুলি পড়া উচিতঃ * [GPIO Wikipedia page](https://wikipedia.org/wiki/General-purpose_input/output) * [UART Wikipedia page](https://wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter) * [SPI Wikipedia page](https://wikipedia.org/wiki/Serial_Peripheral_Interface) * [I2C Wikipedia page](https://wikipedia.org/wiki/I²C) * [Zigbee Wikipedia page](https://wikipedia.org/wiki/Zigbee) ## Assignment [সেন্সর ক্যালিব্রেশন](assignment.bn.md)