You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/bn/2-farm/lessons/3-automated-plant-watering/README.md

314 lines
54 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "f7bb24ba53fb627ddb38a8b24a05e594",
"translation_date": "2025-08-27T11:11:41+00:00",
"source_file": "2-farm/lessons/3-automated-plant-watering/README.md",
"language_code": "bn"
}
-->
# স্বয়ংক্রিয় উদ্ভিদ জলসেচন
![এই পাঠের একটি স্কেচনোট সংক্ষিপ্ত বিবরণ](../../../../../translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.bn.jpg)
> স্কেচনোট: [নিত্য নারাসিমহান](https://github.com/nitya)। বড় সংস্করণের জন্য ছবিতে ক্লিক করুন।
এই পাঠটি [IoT for Beginners Project 2 - Digital Agriculture series](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) এর অংশ হিসেবে [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) থেকে শেখানো হয়েছিল।
[![IoT চালিত স্বয়ংক্রিয় উদ্ভিদ জলসেচন](https://img.youtube.com/vi/g9FfZwv9R58/0.jpg)](https://youtu.be/g9FfZwv9R58)
## প্রাক-পাঠ কুইজ
[প্রাক-পাঠ কুইজ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/13)
## ভূমিকা
গত পাঠে, আপনি মাটির আর্দ্রতা পর্যবেক্ষণ করতে শিখেছেন। এই পাঠে আপনি একটি স্বয়ংক্রিয় জলসেচন সিস্টেমের মূল উপাদান তৈরি করতে শিখবেন যা মাটির আর্দ্রতার প্রতি সাড়া দেয়। আপনি সময় সম্পর্কে শিখবেন - কীভাবে সেন্সর পরিবর্তনের প্রতিক্রিয়া জানাতে সময় নিতে পারে এবং কীভাবে অ্যাকচুয়েটর সেন্সর দ্বারা পরিমাপ করা বৈশিষ্ট্য পরিবর্তন করতে সময় নিতে পারে।
এই পাঠে আমরা আলোচনা করব:
* [লো-পাওয়ার IoT ডিভাইস থেকে হাই-পাওয়ার ডিভাইস নিয়ন্ত্রণ](../../../../../2-farm/lessons/3-automated-plant-watering)
* [রিলে নিয়ন্ত্রণ](../../../../../2-farm/lessons/3-automated-plant-watering)
* [MQTT এর মাধ্যমে আপনার উদ্ভিদ নিয়ন্ত্রণ](../../../../../2-farm/lessons/3-automated-plant-watering)
* [সেন্সর এবং অ্যাকচুয়েটর টাইমিং](../../../../../2-farm/lessons/3-automated-plant-watering)
* [আপনার উদ্ভিদ নিয়ন্ত্রণ সার্ভারে টাইমিং যোগ করুন](../../../../../2-farm/lessons/3-automated-plant-watering)
## লো-পাওয়ার IoT ডিভাইস থেকে হাই-পাওয়ার ডিভাইস নিয়ন্ত্রণ
IoT ডিভাইসগুলি কম ভোল্টেজ ব্যবহার করে। যদিও এটি সেন্সর এবং LED-এর মতো লো-পাওয়ার অ্যাকচুয়েটরের জন্য যথেষ্ট, এটি বৃহত্তর হার্ডওয়্যার নিয়ন্ত্রণ করার জন্য খুব কম, যেমন সেচের জন্য ব্যবহৃত একটি জল পাম্প। এমনকি ছোট পাম্প, যা আপনি গৃহস্থালির গাছের জন্য ব্যবহার করতে পারেন, IoT ডেভ কিটের জন্য খুব বেশি কারেন্ট টানে এবং বোর্ডটি পুড়ে যেতে পারে।
> 🎓 কারেন্ট, যা অ্যাম্প (A) এ পরিমাপ করা হয়, একটি সার্কিটের মধ্য দিয়ে প্রবাহিত বিদ্যুতের পরিমাণ। ভোল্টেজ চাপ প্রদান করে, কারেন্ট হল কতটা চাপ দেওয়া হচ্ছে। আপনি কারেন্ট সম্পর্কে আরও পড়তে পারেন [উইকিপিডিয়ার ইলেকট্রিক কারেন্ট পৃষ্ঠায়](https://wikipedia.org/wiki/Electric_current)।
এর সমাধান হল একটি পাম্পকে একটি বাহ্যিক পাওয়ার সাপ্লাইয়ের সাথে সংযুক্ত করা এবং একটি অ্যাকচুয়েটর ব্যবহার করে পাম্পটি চালু করা, ঠিক যেমন আপনি একটি লাইট চালু করতে একটি সুইচ ব্যবহার করেন। আপনার আঙুলের জন্য একটি সুইচ ফ্লিপ করতে একটি ক্ষুদ্র পরিমাণ শক্তি লাগে (আপনার শরীরের শক্তি আকারে), এবং এটি আলোকে 110v/240v মেইনস বিদ্যুতে সংযুক্ত করে।
![একটি লাইট সুইচ একটি আলোতে শক্তি চালু করে](../../../../../translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.bn.png)
> 🎓 [মেইনস বিদ্যুৎ](https://wikipedia.org/wiki/Mains_electricity) হল বিদ্যুৎ যা বিশ্বের অনেক অংশে জাতীয় অবকাঠামোর মাধ্যমে বাড়ি এবং ব্যবসায় সরবরাহ করা হয়।
✅ IoT ডিভাইসগুলি সাধারণত 3.3V বা 5V প্রদান করতে পারে, 1 অ্যাম্প (1A) এর কম কারেন্ট সহ। এটি মেইনস বিদ্যুতের সাথে তুলনা করুন, যা প্রায়শই 230V (উত্তর আমেরিকায় 120V এবং জাপানে 100V) হয় এবং 30A কারেন্ট টানা ডিভাইসগুলির জন্য শক্তি প্রদান করতে পারে।
অনেক ধরনের অ্যাকচুয়েটর রয়েছে যা এটি করতে পারে, যার মধ্যে রয়েছে বিদ্যমান সুইচগুলিতে সংযুক্ত করার জন্য যান্ত্রিক ডিভাইস যা সেগুলিকে চালু করার জন্য একটি আঙুলের অনুকরণ করে। সবচেয়ে জনপ্রিয় হল একটি রিলে।
### রিলে
রিলে একটি ইলেক্ট্রোমেকানিক্যাল সুইচ যা একটি বৈদ্যুতিক সংকেতকে একটি যান্ত্রিক গতিতে রূপান্তর করে যা একটি সুইচ চালু করে। রিলের মূল অংশ হল একটি ইলেক্ট্রোম্যাগনেট।
> 🎓 [ইলেক্ট্রোম্যাগনেট](https://wikipedia.org/wiki/Electromagnet) হল চুম্বক যা একটি তারের কয়েলের মধ্য দিয়ে বিদ্যুৎ প্রবাহিত করে তৈরি করা হয়। যখন বিদ্যুৎ চালু হয়, কয়েলটি চুম্বকীয় হয়ে যায়। যখন বিদ্যুৎ বন্ধ হয়, কয়েলটি তার চুম্বকত্ব হারায়।
![চালু হলে, ইলেক্ট্রোম্যাগনেট একটি চুম্বকীয় ক্ষেত্র তৈরি করে, আউটপুট সার্কিটের জন্য সুইচ চালু করে](../../../../../translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.bn.png)
একটি রিলেতে, একটি নিয়ন্ত্রণ সার্কিট ইলেক্ট্রোম্যাগনেটকে শক্তি দেয়। যখন ইলেক্ট্রোম্যাগনেট চালু হয়, এটি একটি লিভার টানে যা একটি সুইচ সরায়, একটি জোড়া যোগাযোগ বন্ধ করে এবং একটি আউটপুট সার্কিট সম্পূর্ণ করে।
![বন্ধ হলে, ইলেক্ট্রোম্যাগনেট একটি চুম্বকীয় ক্ষেত্র তৈরি করে না, আউটপুট সার্কিটের জন্য সুইচ বন্ধ করে](../../../../../translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.bn.png)
যখন নিয়ন্ত্রণ সার্কিট বন্ধ থাকে, ইলেক্ট্রোম্যাগনেট বন্ধ হয়ে যায়, লিভারটি ছেড়ে দেয় এবং যোগাযোগগুলি খুলে দেয়, আউটপুট সার্কিট বন্ধ করে দেয়। রিলে হল ডিজিটাল অ্যাকচুয়েটর - রিলেকে একটি উচ্চ সংকেত চালু করে, একটি নিম্ন সংকেত বন্ধ করে।
আউটপুট সার্কিট অতিরিক্ত হার্ডওয়্যার চালানোর জন্য ব্যবহার করা যেতে পারে, যেমন একটি সেচ ব্যবস্থা। IoT ডিভাইসটি রিলেকে চালু করতে পারে, আউটপুট সার্কিট সম্পূর্ণ করে যা সেচ ব্যবস্থাকে শক্তি দেয়, এবং গাছগুলি জল পায়। তারপর IoT ডিভাইসটি রিলেকে বন্ধ করতে পারে, সেচ ব্যবস্থার শক্তি কেটে দেয়, জল বন্ধ করে দেয়।
![একটি রিলে চালু হচ্ছে, একটি পাম্প চালু করে একটি গাছে জল পাঠাচ্ছে](../../../../../images/strawberry-pump.gif)
উপরের ভিডিওতে, একটি রিলে চালু করা হয়েছে। রিলেতে একটি LED জ্বলে উঠেছে যা নির্দেশ করে এটি চালু রয়েছে (কিছু রিলে বোর্ডে LED থাকে যা নির্দেশ করে রিলে চালু বা বন্ধ রয়েছে কিনা), এবং পাম্পে শক্তি পাঠানো হয়েছে, এটি চালু করে এবং একটি গাছে জল পাম্প করছে।
> 💁 রিলে দুটি আউটপুট সার্কিটের মধ্যে স্যুইচ করতে ব্যবহার করা যেতে পারে, একটি চালু এবং বন্ধ করার পরিবর্তে। লিভারটি সরানোর সাথে সাথে এটি একটি আউটপুট সার্কিট সম্পূর্ণ করার পরিবর্তে একটি ভিন্ন আউটপুট সার্কিট সম্পূর্ণ করে, সাধারণত একটি সাধারণ পাওয়ার সংযোগ বা সাধারণ গ্রাউন্ড সংযোগ ভাগ করে।
✅ কিছু গবেষণা করুন: রিলের একাধিক ধরন রয়েছে, যেমন নিয়ন্ত্রণ সার্কিট পাওয়ার প্রয়োগ করার সময় রিলেকে চালু বা বন্ধ করে কিনা, বা একাধিক আউটপুট সার্কিট। এই বিভিন্ন ধরনের সম্পর্কে জানুন।
যখন লিভারটি সরানো হয়, আপনি সাধারণত এটি ইলেক্ট্রোম্যাগনেটের সাথে যোগাযোগ করতে একটি স্পষ্ট ক্লিক শব্দ শুনতে পারেন।
> 💁 একটি রিলে এমনভাবে তারযুক্ত হতে পারে যাতে সংযোগ তৈরি করা আসলে রিলের শক্তি ভেঙে দেয়, রিল বন্ধ করে দেয়, যা তখন রিলকে শক্তি পাঠায় এটি আবার চালু করে, এবং এভাবে চলতে থাকে। এর মানে হল রিলে অত্যন্ত দ্রুত ক্লিক করবে একটি গুঞ্জন শব্দ তৈরি করে। এটি কীভাবে কিছু প্রথম গুঞ্জনকারী বৈদ্যুতিক দরজার ঘণ্টায় ব্যবহৃত হয়েছিল।
### রিলে শক্তি
ইলেক্ট্রোম্যাগনেট লিভার টানতে এবং সক্রিয় করতে বেশি শক্তি প্রয়োজন হয় না, এটি IoT ডেভ কিটের 3.3V বা 5V আউটপুট ব্যবহার করে নিয়ন্ত্রিত হতে পারে। আউটপুট সার্কিট অনেক বেশি শক্তি বহন করতে পারে, রিলের উপর নির্ভর করে, যার মধ্যে মেইনস ভোল্টেজ বা এমনকি শিল্প ব্যবহারের জন্য উচ্চ শক্তি স্তর রয়েছে। এভাবে একটি IoT ডেভ কিট একটি সেচ ব্যবস্থা নিয়ন্ত্রণ করতে পারে, একটি একক গাছের জন্য একটি ছোট পাম্প থেকে শুরু করে একটি সম্পূর্ণ বাণিজ্যিক খামারের জন্য একটি বিশাল শিল্প ব্যবস্থা পর্যন্ত।
![একটি গ্রোভ রিলে যেখানে নিয়ন্ত্রণ সার্কিট, আউটপুট সার্কিট এবং রিলে লেবেলযুক্ত](../../../../../translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.bn.png)
উপরের ছবিতে একটি গ্রোভ রিলে দেখানো হয়েছে। নিয়ন্ত্রণ সার্কিটটি একটি IoT ডিভাইসে সংযুক্ত হয় এবং 3.3V বা 5V ব্যবহার করে রিলকে চালু বা বন্ধ করে। আউটপুট সার্কিটে দুটি টার্মিনাল রয়েছে, যেকোনো একটি পাওয়ার বা গ্রাউন্ড হতে পারে। আউটপুট সার্কিট 250V এ 10A পর্যন্ত পরিচালনা করতে পারে, যা বিভিন্ন মেইনস-চালিত ডিভাইসের জন্য যথেষ্ট। আপনি এমন রিলে পেতে পারেন যা আরও উচ্চ শক্তি স্তর পরিচালনা করতে পারে।
![একটি রিলের মাধ্যমে তারযুক্ত একটি পাম্প](../../../../../translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.bn.png)
উপরের ছবিতে, একটি রিলের মাধ্যমে একটি পাম্পে শক্তি সরবরাহ করা হয়েছে। একটি লাল তার USB পাওয়ার সাপ্লাইয়ের +5V টার্মিনালকে রিলের আউটপুট সার্কিটের একটি টার্মিনালের সাথে সংযুক্ত করেছে এবং একটি অন্য লাল তার আউটপুট সার্কিটের অন্য টার্মিনালকে পাম্পের সাথে সংযুক্ত করেছে। একটি কালো তার পাম্পকে USB পাওয়ার সাপ্লাইয়ের গ্রাউন্ডের সাথে সংযুক্ত করেছে। যখন রিলে চালু হয়, এটি সার্কিটটি সম্পূর্ণ করে, পাম্পে 5V পাঠায়, পাম্পটি চালু করে।
## রিলে নিয়ন্ত্রণ
আপনি আপনার IoT ডেভ কিট থেকে একটি রিলে নিয়ন্ত্রণ করতে পারেন।
### কাজ - একটি রিলে নিয়ন্ত্রণ করুন
আপনার IoT ডিভাইস ব্যবহার করে একটি রিলে নিয়ন্ত্রণ করতে প্রাসঙ্গিক গাইডটি অনুসরণ করুন:
* [Arduino - Wio Terminal](wio-terminal-relay.md)
* [Single-board computer - Raspberry Pi](pi-relay.md)
* [Single-board computer - Virtual device](virtual-device-relay.md)
## MQTT এর মাধ্যমে আপনার উদ্ভিদ নিয়ন্ত্রণ
এখন পর্যন্ত আপনার রিলে একটি একক মাটির আর্দ্রতা পাঠের উপর ভিত্তি করে IoT ডিভাইস দ্বারা সরাসরি নিয়ন্ত্রিত হয়েছে। একটি বাণিজ্যিক সেচ ব্যবস্থায়, নিয়ন্ত্রণ লজিক কেন্দ্রীভূত হবে, যা একাধিক সেন্সর থেকে ডেটা ব্যবহার করে জলসেচনের সিদ্ধান্ত নিতে এবং যেকোনো কনফিগারেশন একক স্থানে পরিবর্তন করতে সক্ষম হবে। এটি অনুকরণ করতে, আপনি MQTT এর মাধ্যমে রিলেকে নিয়ন্ত্রণ করতে পারেন।
### কাজ - MQTT এর মাধ্যমে রিলে নিয়ন্ত্রণ করুন
1. আপনার `soil-moisture-sensor` প্রকল্পে MQTT-তে সংযোগ করতে প্রাসঙ্গিক MQTT লাইব্রেরি/পিপ প্যাকেজ এবং কোড যোগ করুন। ক্লায়েন্ট আইডি আপনার আইডি দ্বারা প্রিফিক্সড `soilmoisturesensor_client` হিসাবে নামকরণ করুন।
> ⚠️ [প্রকল্প 1, পাঠ 4-এ MQTT-তে সংযোগ করার নির্দেশাবলী](../../../1-getting-started/lessons/4-connect-internet/README.md#connect-your-iot-device-to-mqtt) প্রয়োজন হলে উল্লেখ করতে পারেন।
1. মাটির আর্দ্রতা সেটিংস সহ টেলিমেট্রি পাঠাতে প্রাসঙ্গিক ডিভাইস কোড যোগ করুন। টেলিমেট্রি বার্তার জন্য, প্রপার্টি `soil_moisture` হিসাবে নামকরণ করুন।
> ⚠️ [MQTT-তে টেলিমেট্রি পাঠানোর নির্দেশাবলী](../../../1-getting-started/lessons/4-connect-internet/README.md#send-telemetry-from-your-iot-device) প্রয়োজন হলে উল্লেখ করতে পারেন।
1. টেলিমেট্রিতে সাবস্ক্রাইব করতে এবং একটি কমান্ড পাঠাতে স্থানীয় সার্ভার কোড তৈরি করুন যা `soil-moisture-sensor-server` নামে একটি ফোল্ডারে রিলেকে নিয়ন্ত্রণ করে। কমান্ড বার্তায় প্রপার্টি `relay_on` হিসাবে নামকরণ করুন এবং ক্লায়েন্ট আইডি আপনার আইডি দ্বারা প্রিফিক্সড `soilmoisturesensor_server` হিসাবে সেট করুন। প্রকল্প 1, পাঠ 4-এর জন্য আপনি যে সার্ভার কোড লিখেছেন তার একই কাঠামো রাখুন কারণ আপনি এই পাঠে পরে এই কোডে যোগ করবেন।
> ⚠️ [MQTT-তে টেলিমেট্রি পাঠানোর নির্দেশাবলী](../../../1-getting-started/lessons/4-connect-internet/README.md#write-the-server-code) এবং [MQTT-তে কমান্ড পাঠানোর নির্দেশাবলী](../../../1-getting-started/lessons/4-connect-internet/README.md#send-commands-to-the-mqtt-broker) প্রয়োজন হলে উল্লেখ করতে পারেন।
1. প্রাপ্ত কমান্ড থেকে রিলেকে নিয়ন্ত্রণ করতে প্রাসঙ্গিক ডিভাইস কোড যোগ করুন, বার্তার `relay_on` প্রপার্টি ব্যবহার করে। `soil_moisture` যদি 450 এর বেশি হয় তবে `relay_on` এর জন্য true পাঠান, অন্যথায় false পাঠান, ঠিক যেমন আপনি আগে IoT ডিভাইসের জন্য যুক্তি যোগ করেছিলেন।
> ⚠️ [MQTT থেকে কমান্ডের প্রতিক্রিয়া জানানোর নির্দেশাবলী](../../../1-getting-started/lessons/4-connect-internet/README.md#handle-commands-on-the-iot-device) প্রয়োজন হলে উল্লেখ করতে পারেন।
> 💁 আপনি এই কোডটি [code-mqtt](../../../../../2-farm/lessons/3-automated-plant-watering/code-mqtt) ফোল্ডারে খুঁজে পেতে পারেন।
আপনার ডিভাইস এবং স্থানীয় সার্ভারে কোডটি চালু আছে তা নিশ্চিত করুন এবং এটি পরীক্ষা করুন মাটির আর্দ্রতার স্তর পরিবর্তন করে, হয় ভার্চুয়াল সেন্সর দ্বারা পাঠানো মান পরিবর্তন করে, অথবা মাটিতে জল যোগ করে বা সেন্সরটি মাটি থেকে সরিয়ে।
## সেন্সর এবং অ্যাকচুয়েটর টাইমিং
পাঠ 3-এ আপনি একটি নাইটলাইট তৈরি করেছিলেন - একটি LED যা একটি লাইট সেন্সর দ্বারা কম আলো সনাক্ত করার সাথে সাথে চালু হয়। লাইট সেন্সরটি আলো স্তরের পরিবর্তন তাৎক্ষণিকভাবে সনাক্ত করেছিল এবং ডিভাইসটি দ্রুত প্রতিক্রিয়া জানাতে সক্ষম হয়েছিল, শুধুমাত্র `loop` ফাংশন বা `while True:` লুপের বিলম্বের দৈর্ঘ্য দ্বারা সীমাবদ্ধ। একজন IoT ডেভেলপার হিসাবে, আপনি সবসময় এমন একটি দ্রুত প্রতিক্রিয়া লুপের উপর নির্ভর করতে পারবেন না।
### মাটির আর্দ্রতার জন্য টাইমিং
যদি আপনি একটি শারীরিক সেন্সর ব্যবহার করে মাটির আর্দ্রতা নিয়ে শেষ পাঠটি করেছেন, তবে আপনি লক্ষ্য করেছেন যে আপনার গাছকে জল দেওয়ার পরে মাটির আর্দ্রতা পড়তে কয়েক সেকেন্ড সময় লেগেছে। এটি সেন্সর ধীরগতির কারণে নয়, বরং মাটির মধ্য দিয়ে জল প্রবাহিত হতে সময় লাগে।
💁 যদি আপনি সেন্সরের খুব কাছাকাছি পানি দেন, তাহলে আপনি দেখতে পারেন যে রিডিং দ্রুত কমে গেছে, তারপর আবার বেড়ে গেছে - এটি ঘটে কারণ সেন্সরের কাছে থাকা পানি মাটির বাকি অংশে ছড়িয়ে পড়ে, যার ফলে সেন্সরের কাছে মাটির আর্দ্রতা কমে যায়।
![মাটির আর্দ্রতার একটি পরিমাপ ৬৫৮ দেখাচ্ছে যা পানি দেওয়ার সময় পরিবর্তন হয় না, এটি কেবল ৩২০-এ নেমে আসে যখন পানি মাটির ভেতর দিয়ে শোষিত হয়](../../../../../translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.bn.png)
উপরের চিত্রে, মাটির আর্দ্রতার একটি পরিমাপ ৬৫৮ দেখাচ্ছে। গাছে পানি দেওয়া হয়, কিন্তু এই পরিমাপটি সঙ্গে সঙ্গে পরিবর্তন হয় না, কারণ পানি এখনও সেন্সরে পৌঁছায়নি। পানি দেওয়া শেষ হতে পারে সেন্সরে পৌঁছানোর আগেই, এবং তখন মানটি নতুন আর্দ্রতার স্তর প্রতিফলিত করতে কমে যায়।
যদি আপনি মাটির আর্দ্রতার স্তরের উপর ভিত্তি করে একটি রিলে দিয়ে সেচ ব্যবস্থা নিয়ন্ত্রণের কোড লিখতেন, তবে আপনাকে এই বিলম্বটি বিবেচনায় নিতে হবে এবং আপনার IoT ডিভাইসে আরও স্মার্ট টাইমিং তৈরি করতে হবে।
✅ একটু সময় নিয়ে ভাবুন, কীভাবে এটি করা যেতে পারে।
### সেন্সর এবং অ্যাকচুয়েটরের টাইমিং নিয়ন্ত্রণ করুন
ধরুন আপনাকে একটি খামারের জন্য সেচ ব্যবস্থা তৈরি করার দায়িত্ব দেওয়া হয়েছে। মাটির ধরন অনুযায়ী, গাছের জন্য আদর্শ মাটির আর্দ্রতার স্তর -৪৫০ এর একটি অ্যানালগ ভোল্টেজ রিডিংয়ের সাথে মেলে।
আপনি ডিভাইসটি এমনভাবে প্রোগ্রাম করতে পারেন যেমনটি নাইটলাইটের ক্ষেত্রে করা হয় - যতক্ষণ সেন্সর ৪৫০ এর উপরে পড়ে, একটি রিলে চালু করে পাম্প চালু করুন। সমস্যাটি হলো, পাম্প থেকে পানি মাটির ভেতর দিয়ে সেন্সরে পৌঁছাতে কিছুটা সময় লাগে। সেন্সরটি ৪৫০ স্তর সনাক্ত করার সাথে সাথে পানি বন্ধ করে দেবে, কিন্তু পাম্প করা পানি মাটির ভেতর দিয়ে শোষিত হতে থাকায় পানি স্তর কমতে থাকবে। এর ফলাফল হলো পানির অপচয় এবং শিকড়ের ক্ষতির ঝুঁকি।
✅ মনে রাখবেন - খুব বেশি পানি গাছের জন্য খুব কম পানির মতোই ক্ষতিকর হতে পারে এবং এটি একটি মূল্যবান সম্পদের অপচয়।
উত্তম সমাধান হলো বুঝতে পারা যে অ্যাকচুয়েটর চালু হওয়ার এবং সেন্সর যে সম্পত্তি পরিমাপ করে তার পরিবর্তন হওয়ার মধ্যে একটি বিলম্ব রয়েছে। এর মানে হলো, সেন্সরটি কেবলমাত্র কিছুক্ষণ অপেক্ষা করার পর মানটি পুনরায় পরিমাপ করা উচিত নয়, বরং অ্যাকচুয়েটরটি বন্ধ হওয়ার পর কিছুক্ষণ অপেক্ষা করা উচিত পরবর্তী সেন্সর পরিমাপ নেওয়ার আগে।
প্রতিবার রিলে কতক্ষণ চালু থাকবে? সতর্কতার দিক থেকে এটি ভালো যে রিলে কেবলমাত্র অল্প সময়ের জন্য চালু রাখা, তারপর পানি শোষিত হওয়ার জন্য অপেক্ষা করা, তারপর আর্দ্রতার স্তর পুনরায় পরীক্ষা করা। সর্বোপরি, আপনি সবসময় আরও পানি যোগ করার জন্য পাম্পটি আবার চালু করতে পারেন, কিন্তু আপনি মাটি থেকে পানি সরাতে পারবেন না।
> 💁 এই ধরনের টাইমিং নিয়ন্ত্রণটি আপনি যে IoT ডিভাইস তৈরি করছেন, যে সম্পত্তি পরিমাপ করছেন এবং যে সেন্সর ও অ্যাকচুয়েটর ব্যবহার করছেন তার উপর নির্ভর করে খুব নির্দিষ্ট।
![একটি স্ট্রবেরি গাছ একটি পাম্পের মাধ্যমে পানির সাথে সংযুক্ত, পাম্পটি একটি রিলের সাথে সংযুক্ত। রিলে এবং মাটির আর্দ্রতা সেন্সর উভয়ই একটি র‌্যাস্পবেরি পাইয়ের সাথে সংযুক্ত](../../../../../translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.bn.png)
উদাহরণস্বরূপ, আমার একটি স্ট্রবেরি গাছ রয়েছে যার সাথে একটি মাটির আর্দ্রতা সেন্সর এবং একটি পাম্প রয়েছে যা একটি রিলের মাধ্যমে নিয়ন্ত্রিত। আমি লক্ষ্য করেছি যে যখন আমি পানি যোগ করি তখন মাটির আর্দ্রতার পরিমাপ স্থিতিশীল হতে প্রায় ২০ সেকেন্ড সময় লাগে। এর মানে হলো আমাকে রিলে বন্ধ করতে হবে এবং আর্দ্রতার স্তর পরীক্ষা করার আগে ২০ সেকেন্ড অপেক্ষা করতে হবে। আমি কম পানি দেওয়ার পক্ষে বেশি, কারণ আমি সবসময় পাম্পটি আবার চালু করতে পারি, কিন্তু আমি গাছ থেকে পানি সরাতে পারি না।
![ধাপ ১, পরিমাপ নিন। ধাপ ২, পানি যোগ করুন। ধাপ ৩, পানি মাটির ভেতর দিয়ে শোষিত হওয়ার জন্য অপেক্ষা করুন। ধাপ , পরিমাপ পুনরায় নিন](../../../../../translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.bn.png)
এর মানে হলো সেরা প্রক্রিয়াটি এমন একটি সেচ চক্র হবে যা নিম্নরূপ:
* পাম্পটি ৫ সেকেন্ডের জন্য চালু করুন
* ২০ সেকেন্ড অপেক্ষা করুন
* মাটির আর্দ্রতা পরীক্ষা করুন
* যদি স্তরটি এখনও প্রয়োজনীয় স্তরের উপরে থাকে, তাহলে উপরের ধাপগুলো পুনরাবৃত্তি করুন
৫ সেকেন্ড পাম্পের জন্য খুব বেশি সময় হতে পারে, বিশেষত যদি আর্দ্রতার স্তর কেবলমাত্র প্রয়োজনীয় স্তরের সামান্য উপরে থাকে। সঠিক টাইমিং নির্ধারণের সেরা উপায় হলো এটি চেষ্টা করা, তারপর সেন্সর ডেটা পাওয়ার পর এটি সামঞ্জস্য করা, একটি ক্রমাগত ফিডব্যাক লুপের মাধ্যমে। এটি আরও সূক্ষ্ম টাইমিংয়ের দিকে নিয়ে যেতে পারে, যেমন প্রয়োজনীয় মাটির আর্দ্রতার প্রতি ১০০ এর জন্য পাম্পটি ১ সেকেন্ড চালু করা, একটি নির্দিষ্ট ৫ সেকেন্ডের পরিবর্তে।
✅ কিছু গবেষণা করুন: অন্য কোনো টাইমিং বিবেচনা আছে কি? মাটির আর্দ্রতা কম হলেই কি গাছকে পানি দেওয়া যায়, নাকি গাছকে পানি দেওয়ার জন্য দিনের নির্দিষ্ট সময় ভালো বা খারাপ হতে পারে?
> 💁 আবহাওয়ার পূর্বাভাসও বাইরের চাষাবাদের জন্য স্বয়ংক্রিয় সেচ ব্যবস্থার নিয়ন্ত্রণে বিবেচনা করা যেতে পারে। যদি বৃষ্টির সম্ভাবনা থাকে, তাহলে পানি দেওয়ার কাজটি বৃষ্টি শেষ হওয়া পর্যন্ত স্থগিত রাখা যেতে পারে। তখন মাটি হয়তো যথেষ্ট আর্দ্র হয়ে যাবে এবং আর পানি দেওয়ার প্রয়োজন হবে না, যা বৃষ্টির ঠিক আগে পানি দেওয়ার চেয়ে অনেক বেশি কার্যকর।
## আপনার গাছ নিয়ন্ত্রণ সার্ভারে টাইমিং যোগ করুন
সার্ভার কোডটি সেচ চক্রের টাইমিং এবং মাটির আর্দ্রতার স্তর পরিবর্তনের জন্য অপেক্ষা করার নিয়ন্ত্রণ যোগ করতে সংশোধন করা যেতে পারে। রিলে টাইমিং নিয়ন্ত্রণের জন্য সার্ভারের লজিক হলো:
1. টেলিমেট্রি বার্তা প্রাপ্তি
1. মাটির আর্দ্রতার স্তর পরীক্ষা করুন
1. যদি এটি ঠিক থাকে, কিছু করবেন না। যদি রিডিংটি খুব বেশি হয় (যার মানে মাটির আর্দ্রতা খুব কম), তাহলে:
1. রিলে চালু করার জন্য একটি কমান্ড পাঠান
1. ৫ সেকেন্ড অপেক্ষা করুন
1. রিলে বন্ধ করার জন্য একটি কমান্ড পাঠান
1. মাটির আর্দ্রতার স্তর স্থিতিশীল হওয়ার জন্য ২০ সেকেন্ড অপেক্ষা করুন
সেচ চক্র, টেলিমেট্রি বার্তা প্রাপ্তি থেকে মাটির আর্দ্রতার স্তর পুনরায় প্রক্রিয়া করার জন্য প্রস্তুত হওয়া পর্যন্ত প্রক্রিয়া, প্রায় ২৫ সেকেন্ড সময় নেয়। আমরা প্রতি ১০ সেকেন্ডে মাটির আর্দ্রতার স্তর পাঠাচ্ছি, তাই একটি ওভারল্যাপ রয়েছে যেখানে একটি বার্তা প্রাপ্তি হয় যখন সার্ভার মাটির আর্দ্রতার স্তর স্থিতিশীল হওয়ার জন্য অপেক্ষা করছে, যা আরেকটি সেচ চক্র শুরু করতে পারে।
এটি মোকাবিলা করার দুটি বিকল্প রয়েছে:
* IoT ডিভাইস কোডটি পরিবর্তন করে প্রতি মিনিটে কেবলমাত্র টেলিমেট্রি পাঠানো, যাতে সেচ চক্রটি সম্পন্ন হয় পরবর্তী বার্তা পাঠানোর আগে
* সেচ চক্র চলাকালীন টেলিমেট্রি থেকে সদস্যতা বাতিল করা
প্রথম বিকল্পটি সবসময় বড় খামারের জন্য ভালো সমাধান নয়। কৃষক হয়তো মাটির আর্দ্রতার স্তরগুলি সেচ দেওয়ার সময় সংগ্রহ করতে চাইতে পারেন পরবর্তী বিশ্লেষণের জন্য, উদাহরণস্বরূপ খামারের বিভিন্ন অঞ্চলে পানির প্রবাহ সম্পর্কে সচেতন হতে এবং আরও লক্ষ্যভিত্তিক সেচের নির্দেশনা দিতে। দ্বিতীয় বিকল্পটি ভালো - কোডটি কেবলমাত্র টেলিমেট্রি উপেক্ষা করছে যখন এটি ব্যবহার করতে পারছে না, কিন্তু টেলিমেট্রি এখনও সেখানে রয়েছে অন্য পরিষেবাগুলোর জন্য যারা এটি সাবস্ক্রাইব করতে পারে।
> 💁 IoT ডেটা কেবলমাত্র একটি ডিভাইস থেকে একটি পরিষেবায় পাঠানো হয় না, বরং অনেক ডিভাইস একটি ব্রোকারে ডেটা পাঠাতে পারে, এবং অনেক পরিষেবা ব্রোকার থেকে ডেটা শুনতে পারে। উদাহরণস্বরূপ, একটি পরিষেবা মাটির আর্দ্রতার ডেটা শুনতে পারে এবং এটি একটি ডাটাবেসে সংরক্ষণ করতে পারে পরবর্তী বিশ্লেষণের জন্য। অন্য একটি পরিষেবা একই টেলিমেট্রি শুনতে পারে একটি সেচ ব্যবস্থা নিয়ন্ত্রণ করার জন্য।
### কাজ - আপনার গাছ নিয়ন্ত্রণ সার্ভারে টাইমিং যোগ করুন
আপনার সার্ভার কোড আপডেট করুন যাতে এটি রিলে ৫ সেকেন্ডের জন্য চালায়, তারপর ২০ সেকেন্ড অপেক্ষা করে।
1. `soil-moisture-sensor-server` ফোল্ডারটি VS Code-এ খুলুন যদি এটি ইতিমধ্যে খোলা না থাকে। নিশ্চিত করুন যে ভার্চুয়াল এনভায়রনমেন্ট সক্রিয় রয়েছে।
1. `app.py` ফাইলটি খুলুন
1. বিদ্যমান ইমপোর্টগুলোর নিচে `app.py` ফাইলে নিম্নলিখিত কোড যোগ করুন:
```python
import threading
```
এই বিবৃতিটি পাইথনের লাইব্রেরি থেকে `threading` ইমপোর্ট করে, যা অপেক্ষা করার সময় পাইথনকে অন্য কোড কার্যকর করতে দেয়।
1. সার্ভার কোডে টেলিমেট্রি বার্তা প্রক্রিয়াকরণের জন্য ব্যবহৃত `handle_telemetry` ফাংশনের আগে নিম্নলিখিত কোড যোগ করুন:
```python
water_time = 5
wait_time = 20
```
এটি নির্ধারণ করে রিলে কতক্ষণ চালানো হবে (`water_time`), এবং মাটির আর্দ্রতা পরীক্ষা করার আগে কতক্ষণ অপেক্ষা করা হবে (`wait_time`)।
1. এই কোডের নিচে নিম্নলিখিত কোড যোগ করুন:
```python
def send_relay_command(client, state):
command = { 'relay_on' : state }
print("Sending message:", command)
client.publish(server_command_topic, json.dumps(command))
```
এই কোডটি একটি ফাংশন সংজ্ঞায়িত করে যার নাম `send_relay_command`, যা রিলে নিয়ন্ত্রণ করার জন্য MQTT-এর মাধ্যমে একটি কমান্ড পাঠায়। টেলিমেট্রি একটি ডিকশনারি হিসেবে তৈরি করা হয়, তারপর একটি JSON স্ট্রিংয়ে রূপান্তরিত হয়। `state`-এ পাস করা মান নির্ধারণ করে রিলে চালু বা বন্ধ থাকবে কিনা।
1. `send_relay_code` ফাংশনের পরে নিম্নলিখিত কোড যোগ করুন:
```python
def control_relay(client):
print("Unsubscribing from telemetry")
mqtt_client.unsubscribe(client_telemetry_topic)
send_relay_command(client, True)
time.sleep(water_time)
send_relay_command(client, False)
time.sleep(wait_time)
print("Subscribing to telemetry")
mqtt_client.subscribe(client_telemetry_topic)
```
এটি একটি ফাংশন সংজ্ঞায়িত করে যা প্রয়োজনীয় টাইমিংয়ের উপর ভিত্তি করে রিলে নিয়ন্ত্রণ করে। এটি প্রথমে টেলিমেট্রি থেকে সদস্যতা বাতিল করে যাতে সেচ চলাকালীন মাটির আর্দ্রতার বার্তা প্রক্রিয়া না হয়। এরপর এটি রিলে চালু করার জন্য একটি কমান্ড পাঠায়। তারপর এটি `water_time` এর জন্য অপেক্ষা করে এবং রিলে বন্ধ করার জন্য একটি কমান্ড পাঠায়। অবশেষে এটি `wait_time` সেকেন্ডের জন্য মাটির আর্দ্রতার স্তর স্থিতিশীল হওয়ার জন্য অপেক্ষা করে। তারপর এটি টেলিমেট্রিতে পুনরায় সদস্যতা নেয়।
1. `handle_telemetry` ফাংশনটি নিম্নলিখিত কোডে পরিবর্তন করুন:
```python
def handle_telemetry(client, userdata, message):
payload = json.loads(message.payload.decode())
print("Message received:", payload)
if payload['soil_moisture'] > 450:
threading.Thread(target=control_relay, args=(client,)).start()
```
এই কোডটি মাটির আর্দ্রতার স্তর পরীক্ষা করে। যদি এটি ৪৫০ এর বেশি হয়, তাহলে মাটির আর্দ্রতার প্রয়োজন, তাই এটি `control_relay` ফাংশন কল করে। এই ফাংশনটি একটি আলাদা থ্রেডে চালানো হয়, যা ব্যাকগ্রাউন্ডে চলে।
1. নিশ্চিত করুন যে আপনার IoT ডিভাইস চালু রয়েছে, তারপর এই কোডটি চালান। মাটির আর্দ্রতার স্তর পরিবর্তন করুন এবং দেখুন কী ঘটে রিলের সাথে - এটি ৫ সেকেন্ডের জন্য চালু হবে তারপর কমপক্ষে ২০ সেকেন্ড বন্ধ থাকবে, কেবলমাত্র চালু হবে যদি মাটির আর্দ্রতার স্তর যথেষ্ট না হয়।
```output
(.venv) ➜ soil-moisture-sensor-server ✗ python app.py
Message received: {'soil_moisture': 457}
Unsubscribing from telemetry
Sending message: {'relay_on': True}
Sending message: {'relay_on': False}
Subscribing to telemetry
Message received: {'soil_moisture': 302}
```
একটি সিমুলেটেড সেচ ব্যবস্থায় এটি পরীক্ষা করার একটি ভালো উপায় হলো শুকনো মাটি ব্যবহার করা, তারপর রিলে চালু থাকা অবস্থায় হাতে করে পানি ঢালা, রিলে বন্ধ হওয়ার সাথে সাথে পানি ঢালা বন্ধ করা।
> 💁 আপনি এই কোডটি [code-timing](../../../../../2-farm/lessons/3-automated-plant-watering/code-timing) ফোল্ডারে খুঁজে পেতে পারেন।
> 💁 আপনি যদি একটি পাম্প ব্যবহার করে একটি বাস্তব সেচ ব্যবস্থা তৈরি করতে চান, তাহলে আপনি একটি [৬ ভোল্টের পানি পাম্প](https://www.seeedstudio.com/6V-Mini-Water-Pump-p-1945.html) একটি [ইউএসবি টার্মিনাল পাওয়ার সাপ্লাই](https://www.adafruit.com/product/3628) এর সাথে ব্যবহার করতে পারেন। নিশ্চিত করুন যে পাম্পে যাওয়ার বা পাম্প থেকে আসা পাওয়ারটি রিলের মাধ্যমে সংযুক্ত রয়েছে।
---
## 🚀 চ্যালেঞ্জ
আপনার কি মনে হয় অন্য কোনো IoT বা বৈদ্যুতিক ডিভাইস রয়েছে যার একই ধরনের সমস্যা রয়েছে যেখানে অ্যাকচুয়েটরের ফলাফল সেন্সরে পৌঁছাতে কিছুটা সময় লাগে? আপনার বাড়ি বা স্কুলে হয়তো এমন কিছু ডিভাইস রয়েছে।
* তারা কী সম্পত্তি পরিমাপ করে?
* অ্যাকচুয়েটর ব্যবহারের পর সম্পত্তি পরিবর্তন হতে কতক্ষণ সময় লাগে?
* সম্পত্তি প্রয়োজনীয় মানের বাইরে চলে গেলে কি তা ঠিক আছে?
* যদি প্রয়োজনীয় মানে ফিরিয়ে আনা প্রয়োজন হয়, তাহলে কীভাবে তা করা যেতে পারে?
## পোস্ট-লেকচার কুইজ
[পোস্ট-লেকচার কুইজ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/14)
## পর্যালোচনা ও স্ব-অধ্যয়ন
* রিলেগুলোর উপর আরও পড়ুন, যার মধ্যে টেলিফোন এক্সচেঞ্জে তাদের ঐতিহাসিক ব্যবহারের তথ্য রয়েছে [রিলে উইকিপিডিয়া পেজে](https://wikipedia.org/wiki/Relay)।
## অ্যাসাইনমেন্ট
[আরও কার্যকর সেচ চক্র তৈরি করুন](assignment.md)
---
**অস্বীকৃতি**:
এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না।