# အလိုအလျောက် အပင်ရေဖြည့်စနစ် ![ဒီသင်ခန်းစာအတွက် Sketchnote အကျဉ်းချုပ်](../../../../../translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.my.jpg) > Sketchnote by [Nitya Narasimhan](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) ## နိဒါန်း ပြီးခဲ့သင်ခန်းစာမှာ မြေစိုထိုင်းဆကို မည်သို့စောင့်ကြည့်ရမည်ဆိုတာကို သင်လေ့လာခဲ့ပါသည်။ ဒီသင်ခန်းစာမှာတော့ မြေစိုထိုင်းဆကို အလိုအလျောက်တုံ့ပြန်နိုင်တဲ့ ရေဖြည့်စနစ်ရဲ့ အဓိကအစိတ်အပိုင်းတွေကို တည်ဆောက်နည်းကို သင်လေ့လာရမည်ဖြစ်ပြီး၊ အချိန်သတ်မှတ်မှုအကြောင်းလည်း လေ့လာရမည်ဖြစ်သည်။ အချိန်သတ်မှတ်မှုဆိုတာ ဆင်ဆာတွေက အပြောင်းအလဲကို တုံ့ပြန်ဖို့ အချိန်ယူရတာ၊ actuator တွေကလည်း ဆင်ဆာတွေက တိုင်းတာနေတဲ့ ပစ္စည်းရဲ့ အခြေအနေကို ပြောင်းလဲဖို့ အချိန်ယူရတာကို ဆိုလိုသည်။ ဒီသင်ခန်းစာမှာ အောက်ပါအကြောင်းအရာများကို လေ့လာပါမည်- * [အနိမ့်ပါဝါ IoT စက်ကိရိယာမှ အမြင့်ပါဝါ စက်ကိရိယာများကို ထိန်းချုပ်ခြင်း](../../../../../2-farm/lessons/3-automated-plant-watering) * [Relay ကို ထိန်းချုပ်ခြင်း](../../../../../2-farm/lessons/3-automated-plant-watering) * [MQTT မှတစ်ဆင့် အပင်ကို ထိန်းချုပ်ခြင်း](../../../../../2-farm/lessons/3-automated-plant-watering) * [Sensor နှင့် actuator အချိန်သတ်မှတ်မှု](../../../../../2-farm/lessons/3-automated-plant-watering) * [အချိန်သတ်မှတ်မှုကို အပင်ထိန်းချုပ် server တွင် ထည့်သွင်းခြင်း](../../../../../2-farm/lessons/3-automated-plant-watering) ## အနိမ့်ပါဝါ IoT စက်ကိရိယာမှ အမြင့်ပါဝါ စက်ကိရိယာများကို ထိန်းချုပ်ခြင်း IoT စက်ကိရိယာများသည် အနိမ့်ဗို့အားကို အသုံးပြုသည်။ ဒါဟာ sensor တွေ၊ LED တို့လို အနိမ့်ပါဝါ actuator တွေအတွက် လုံလောက်ပေမယ့် ရေစုပ်စက်လို အမြင့်ပါဝါ hardware တွေကို ထိန်းချုပ်ဖို့တော့ မလုံလောက်ပါဘူး။ အိမ်တွင်းအပင်များအတွက် အသုံးပြုနိုင်တဲ့ သေးငယ်တဲ့ စုပ်စက်တစ်ခုတောင် IoT dev kit အတွက် လုံလောက်တဲ့ လျှပ်စစ်စီးကြောင်းကို လိုအပ်ပြီး၊ board ကို ပျက်စီးစေနိုင်ပါသည်။ > 🎓 လျှပ်စစ်စီးကြောင်း (Current) ကို Amp (A) ဖြင့် တိုင်းတာပြီး၊ လျှပ်စစ်စက်ဝိုင်းတစ်ခုအတွင်း လျှပ်စစ်စီးဆင်းမှု၏ ပမာဏကို ဆိုလိုသည်။ Voltage သည် အားပေးမှုဖြစ်ပြီး၊ Current သည် အားပေးမှုအတိုင်း စီးဆင်းမှု၏ ပမာဏဖြစ်သည်။ [Wikipedia ရဲ့ လျှပ်စစ်စီးကြောင်း စာမျက်နှာ](https://wikipedia.org/wiki/Electric_current) တွင် ပိုမိုဖတ်ရှုနိုင်ပါသည်။ ဒီပြဿနာကို ဖြေရှင်းရန်အတွက် ရေစုပ်စက်ကို အပြင်ပေါ်ပါဝါထောက်ပံ့မှုနှင့် ချိတ်ဆက်ပြီး actuator တစ်ခုကို အသုံးပြုကာ စုပ်စက်ကို ဖွင့်/ပိတ်လုပ်ဆောင်ရမည်ဖြစ်သည်။ ဥပမာအားဖြင့် မီးဖွင့် switch ကို ဖိဖို့ လိုအပ်တဲ့ အနည်းငယ်သော ပါဝါ (သင့်ခန္ဓာကိုယ်မှ စွမ်းအင်) ကို အသုံးပြုကာ မီးကို 110v/240v မိန်းလျှပ်စစ်ဓာတ်အားနှင့် ချိတ်ဆက်သလိုပင် ဖြစ်သည်။ ![မီးဖွင့် switch သည် မီးကို ပါဝါပေးသည်](../../../../../translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.my.png) > 🎓 [မိန်းလျှပ်စစ်ဓာတ်အား](https://wikipedia.org/wiki/Mains_electricity) သည် ကမ္ဘာ့အချို့ဒေသများတွင် အိမ်နှင့် စီးပွားရေးလုပ်ငန်းများသို့ အမျိုးသားအဆင့်အခြေခံအဆောက်အအုံမှတစ်ဆင့် ပေးပို့သော လျှပ်စစ်ဓာတ်အားကို ဆိုလိုသည်။ ✅ IoT စက်ကိရိယာများသည် 3.3V သို့မဟုတ် 5V ကို ပေးနိုင်ပြီး၊ လျှပ်စစ်စီးကြောင်း 1 amp (1A) ထက်နည်းသည်။ ဒါကို မိန်းလျှပ်စစ်ဓာတ်အားနှင့် နှိုင်းယှဉ်ပါက 230V (မြောက်အမေရိကတွင် 120V၊ ဂျပန်တွင် 100V) ဖြစ်ပြီး၊ 30A အထိ စက်ကိရိယာများကို ပါဝါပေးနိုင်သည်။ ဒီလိုလုပ်ဆောင်နိုင်တဲ့ actuator အမျိုးအစားများစွာရှိပြီး၊ ရှိပြီးသား switch များကို လက်ချောင်းဖြင့် ဖိသလိုလုပ်ဆောင်နိုင်သော စက်ပိုင်းဆိုင်ရာပစ္စည်းများလည်း ပါဝင်သည်။ အများဆုံးအသုံးပြုသော actuator သည် relay ဖြစ်သည်။ ### Relay များ Relay သည် လျှပ်စစ် signal ကို စက်ပိုင်းဆိုင်ရာ လှုပ်ရှားမှုအဖြစ် ပြောင်းလဲကာ switch ကို ဖွင့်/ပိတ်လုပ်ဆောင်သော electromechanical switch တစ်ခုဖြစ်သည်။ Relay ၏ အဓိကအစိတ်အပိုင်းမှာ electromagnet ဖြစ်သည်။ > 🎓 [Electromagnet](https://wikipedia.org/wiki/Electromagnet) သည် ဝါယာကြိုးတစ်ချောင်းကို လျှပ်စစ်ဓာတ်အားဖြင့် စီးဆင်းစေခြင်းဖြင့် ဖန်တီးသော သံလိုက်ဖြစ်သည်။ လျှပ်စစ်ဓာတ်အားကို ဖွင့်လိုက်သောအခါ၊ ဝါယာကြိုးသည် သံလိုက်ဖြစ်လာသည်။ လျှပ်စစ်ဓာတ်အားကို ပိတ်လိုက်သောအခါ၊ သံလိုက်ဓာတ်အားကို ဆုံးရှုံးသွားသည်။ ![ဖွင့်ထားသောအခါ electromagnet သည် သံလိုက်ဓာတ်အားဖန်တီးပြီး output circuit အတွက် switch ကို ဖွင့်သည်](../../../../../translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.my.png) Relay တစ်ခုတွင် control circuit သည် electromagnet ကို ပါဝါပေးသည်။ Electromagnet ဖွင့်ထားသောအခါ၊ လှံတံတစ်ခုကို ဆွဲဆောင်ကာ switch ကို ရွှေ့ပြီး output circuit ကို ပြည့်စုံစေသည်။ ![ပိတ်ထားသောအခါ electromagnet သည် သံလိုက်ဓာတ်အားမဖန်တီးဘဲ output circuit အတွက် switch ကို ပိတ်ထားသည်](../../../../../translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.my.png) Control circuit ပိတ်ထားသောအခါ၊ electromagnet သည် ပိတ်ထားပြီး၊ လှံတံကို လွှတ်လိုက်ကာ contact များကို ဖွင့်ပြီး output circuit ကို ပိတ်ထားသည်။ Relay များသည် digital actuator များဖြစ်ပြီး၊ relay ကို ဖွင့်ရန် high signal တစ်ခုလိုအပ်ပြီး၊ ပိတ်ရန် low signal တစ်ခုလိုအပ်သည်။ Output circuit ကို အပင်ရေဖြည့်စနစ်လို ထပ်မံသော hardware များကို ပါဝါပေးရန် အသုံးပြုနိုင်သည်။ IoT စက်ကိရိယာသည် relay ကို ဖွင့်ကာ output circuit ကို ပြည့်စုံစေပြီး အပင်များကို ရေဖြည့်ပေးနိုင်သည်။ ထို့နောက် IoT စက်ကိရိယာသည် relay ကို ပိတ်ကာ ရေဖြည့်စနစ်ကို ပိတ်နိုင်သည်။ ![Relay တစ်ခု ဖွင့်ပြီး စုပ်စက်ကို ဖွင့်ကာ အပင်ကို ရေဖြည့်ပေးသည်](../../../../../images/strawberry-pump.gif) အထက်ပါဗီဒီယိုတွင် relay တစ်ခုကို ဖွင့်ထားသည်။ Relay board တစ်ခုတွင် relay ဖွင့်/ပိတ်ထားမှုကို ပြသရန် LED များပါဝင်နိုင်ပြီး၊ relay ဖွင့်ထားသောအခါ LED သည် လင်းနေသည်။ Power သည် စုပ်စက်သို့ ပေးပို့ပြီး၊ စုပ်စက်သည် ရေကို အပင်သို့ စုပ်ပေးသည်။ > 💁 Relay များကို output circuit နှစ်ခုအကြား ပြောင်းရွှေ့ရန်လည်း အသုံးပြုနိုင်သည်။ လှံတံရွှေ့သောအခါ၊ output circuit တစ်ခုမှ အခြား output circuit သို့ ပြောင်းရွှေ့ပြီး၊ ပုံမှန်အားဖြင့် common power connection သို့မဟုတ် common ground connection ကို မျှဝေထားသည်။ ✅ သုတေသနလုပ်ပါ- Relay မျိုးစုံရှိပြီး၊ control circuit သည် power ပေးသောအခါ relay ကို ဖွင့်/ပိတ်လုပ်ဆောင်မှု၊ output circuit များအရ သာမန် relay များနှင့် ကွဲပြားမှုများရှိသည်။ Relay မျိုးစုံအကြောင်းကို ရှာဖွေပါ။ လှံတံရွှေ့သောအခါ၊ electromagnet နှင့် ဆက်သွယ်မှုကို သေချာသော click အသံဖြင့် ကြားနိုင်သည်။ > 💁 Relay ကို wiring ပြုလုပ်ရာတွင်၊ connection ပြုလုပ်မှုသည် relay ကို ပိတ်စေပြီး၊ relay ပိတ်သောအခါ ပြန်ဖွင့်စေသည့်ပုံစံဖြင့် wiring ပြုလုပ်နိုင်သည်။ ဒီလိုဖြစ်သောအခါ relay သည် အလွန်မြန်စွာ click အသံထွက်ပြီး buzzing အသံဖြစ်စေသည်။ ဤနည်းလမ်းသည် ပထမဆုံးသော လျှပ်စစ်တံခါးခေါင်းစက်များတွင် အသုံးပြုခဲ့သည်။ ### Relay ပါဝါ Electromagnet သည် လှံတံကို ဆွဲဆောင်ရန် အနည်းငယ်သော ပါဝါသာ လိုအပ်ပြီး၊ IoT dev kit ၏ 3.3V သို့မဟုတ် 5V output ဖြင့် ထိန်းချုပ်နိုင်သည်။ Output circuit သည် relay အမျိုးအစားပေါ်မူတည်ပြီး၊ မိန်းလျှပ်စစ်ဓာတ်အား သို့မဟုတ် စက်မှုလုပ်ငန်းအတွက် အမြင့်ပါဝါအဆင့်များကိုပါ ထိန်းချုပ်နိုင်သည်။ IoT dev kit သည် သေးငယ်သော အပင်တစ်ပင်အတွက် ရေဖြည့်စနစ်မှ စီးပွားရေးလုပ်ငန်းတစ်ခုလုံးအတွက် စက်မှုလုပ်ငန်းစနစ်အထိ ထိန်းချုပ်နိုင်သည်။ ![Grove relay ၏ control circuit, output circuit နှင့် relay ကို ဖော်ပြထားသည်](../../../../../translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.my.png) အထက်ပါပုံတွင် Grove relay ကို ဖော်ပြထားသည်။ Control circuit သည် IoT စက်ကိရိယာနှင့် ချိတ်ဆက်ပြီး 3.3V သို့မဟုတ် 5V ဖြင့် relay ကို ဖွင့်/ပိတ်လုပ်ဆောင်သည်။ Output circuit တွင် terminal နှစ်ခုပါဝင်ပြီး၊ တစ်ခုမှာ power သို့မဟုတ် ground ဖြစ်နိုင်သည်။ Output circuit သည် 250V တွင် 10A အထိ ထိန်းချုပ်နိုင်ပြီး၊ မိန်း-powered စက်ကိရိယာများအတွက် လုံလောက်သည်။ အမြင့်ပါဝါအဆင့်များကို ထိန်းချုပ်နိုင်သော relay များလည်း ရနိုင်သည်။ ![Relay မှတစ်ဆင့် စုပ်စက်ကို wiring ပြုလုပ်ထားသည်](../../../../../translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.my.png) အထက်ပါပုံတွင်၊ relay မှတစ်ဆင့် စုပ်စက်ကို power ပေးထားသည်။ USB power supply ၏ +5V terminal မှ output circuit ၏ terminal တစ်ခုသို့ ချိတ်ဆက်ထားသော အနီရောင်ဝါယာကြိုးတစ်ချောင်းနှင့်၊ output circuit ၏ အခြား terminal မှ စုပ်စက်သို့ ချိတ်ဆက်ထားသော အနီရောင်ဝါယာကြိုးတစ်ချောင်းပါဝင်သည်။ အနက်ရောင်ဝါယာကြိုးတစ်ချောင်းသည် စုပ်စက်ကို USB power supply ၏ ground နှင့် ချိတ်ဆက်ထားသည်။ Relay ဖွင့်သောအခါ၊ circuit ကို ပြည့်စုံစေပြီး၊ 5V ကို စုပ်စက်သို့ ပေးပို့ကာ စုပ်စက်ကို ဖွင့်သည်။ ## Relay ကို ထိန်းချုပ်ခြင်း သင့် IoT dev kit မှ relay ကို ထိန်းချုပ်နိုင်ပါသည်။ ### Task - relay ကို ထိန်းချုပ်ခြင်း သင့် IoT စက်ကိရိယာကို အသုံးပြုကာ relay ကို ထိန်းချုပ်ရန် လိုအပ်သော လမ်းညွှန်ကို လိုက်နာပါ- * [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 မှတစ်ဆင့် အပင်ကို ထိန်းချုပ်ခြင်း ယခင်အခန်းများတွင် relay ကို IoT စက်ကိရိယာမှ တိုက်ရိုက် ထိန်းချုပ်ခဲ့ပြီး၊ မြေစိုထိုင်းဆ တစ်ခုတည်းကို အခြေခံထားသည်။ စီးပွားရေးလုပ်ငန်းအတွက် ရေဖြည့်စနစ်တွင် ထိန်းချုပ်မှု logic ကို အလယ်တွင် စုစည်းထားပြီး၊ sensor များစွာမှ အချက်အလက်များကို အသုံးပြုကာ ရေဖြည့်ဆုံးဖြတ်ချက်များကို ချမှတ်နိုင်သည်။ ထို့အပြင်၊ configuration များကို တစ်နေရာတည်းတွင် ပြောင်းလဲနိုင်သည်။ ဒီလိုလုပ်ဆောင်မှုကို simulation ပြုလုပ်ရန် MQTT မှတစ်ဆင့် relay ကို ထိန်းချုပ်နိုင်ပါသည်။ ### Task - MQTT မှတစ်ဆင့် relay ကို ထိန်းချုပ်ခြင်း 1. သင့် `soil-moisture-sensor` project တွင် MQTT ကို ချိတ်ဆက်ရန်လိုအပ်သော MQTT libraries/pip packages နှင့် code ကို ထည့်ပါ။ Client ID ကို `soilmoisturesensor_client` ဟု သင့် ID ဖြင့် prefix ထည့်ပါ။ > ⚠️ [Project 1, Lesson 4 တွင် MQTT ကို ချိတ်ဆက်နည်းအတွက် လမ်းညွှန်ချက်များ](../../../1-getting-started/lessons/4-connect-internet/README.md#connect-your-iot-device-to-mqtt) ကို လိုအပ်ပါက ပြန်လည်ကြည့်ပါ။ 1. မြေစိုထိုင်းဆ အချက်အလက်များနှင့်အတူ telemetry ပေးပို့ရန် လိုအပ်သော device code ကို ထည့်ပါ။ Telemetry message အတွက် property ကို `soil_moisture` ဟု အမည်ပေးပါ။ > ⚠️ [Project 1, Lesson 4 တွင် MQTT သို့ telemetry ပေးပို့နည်းအတွက် လမ်းညွှန်ချက်များ](../../../1-getting-started/lessons/4-connect-internet/README.md#send-telemetry-from-your-iot-device) ကို လိုအပ်ပါက ပြန်လည်ကြည့်ပါ။ 1. `soil-moisture-sensor-server` ဟု folder တစ်ခုဖန်တီးပြီး၊ telemetry ကို subscribe ပြုလုပ်ကာ relay ကို ထိန်းချုပ်ရန် command ပေးပို့ရန် local server code ကို ဖန်တီးပါ။ Command message ၏ property ကို `relay_on` ဟု အမည်ပေးပြီး၊ Client ID ကို `soilmoisturesensor_server` ဟု သင့် ID ဖြင့် prefix ထည့်ပါ။ Project 1, Lesson 4 တွင် ရေးသားခဲ့သော server code ၏ ဖွဲ့စည်းပုံကို ထပ်မံပြင်ဆင်ရန် ဒီ code ကို အသုံးပြုမည်ဖြစ်သည်။ > ⚠️ 💁 သင်အာရုံခံကိရိယာအနီးမှာရေသွန်းခဲ့ရင် အာရုံခံကိရိယာရဲ့ဖတ်ချက်မြန်မြန်ကျသွားပြီးနောက်ထပ်ပြန်တက်လာတာကိုတွေ့ရနိုင်ပါတယ် - ဒါဟာ အာရုံခံကိရိယာအနီးမှာရှိတဲ့ရေက မြေတွင်းတစ်လျှောက်ပျံ့နှံ့သွားပြီး အာရုံခံကိရိယာနားမှာရှိတဲ့မြေစိုထိုင်းဆကိုလျော့ကျစေတဲ့အကြောင်းကြောင့်ဖြစ်ပါတယ်။ ![မြေစိုထိုင်းဆန့်မှု 658 ကိုရေသွင်းပြီးနောက်မှသာ 320 အထိကျဆင်းသည်၊ ရေသည်မြေထဲသို့စိမ့်ဝင်ပြီးမှသာအဆင့်ပြောင်းလဲသည်](../../../../../translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.my.png) အထက်ပါပုံတွင် မြေစိုထိုင်းဆန့်မှုအဆင့် 658 ကိုဖော်ပြထားသည်။ အပင်ကိုရေသွင်းပြီးနောက် အဆင့်သည် ချက်ချင်းမပြောင်းလဲပါ၊ ရေသည် sensor သို့မရောက်သေးသောကြောင့်ဖြစ်သည်။ ရေသွင်းခြင်းသည် sensor သို့ရေမရောက်မီပြီးဆုံးနိုင်ပြီးမှသာ အဆင့်ကျဆင်းကာ မြေစိုထိုင်းဆန့်မှုအသစ်ကိုဖော်ပြနိုင်သည်။ သင်သည် မြေစိုထိုင်းဆန့်မှုအဆင့်အပေါ်မူတည်၍ relay ဖြင့် irrigation system ကိုထိန်းချုပ်ရန် code ရေးသားလိုပါက အဆိုပါနှောင့်နှေးမှုကိုစဉ်းစားပြီး IoT device တွင် ပိုမိုထိရောက်သောအချိန်ကိုထည့်သွင်းရမည်ဖြစ်သည်။ ✅ အချိန်ယူပြီး သင်ဘယ်လိုလုပ်ဆောင်မလဲဆိုတာစဉ်းစားပါ။ ### Sensor နှင့် actuator အချိန်ကိုထိန်းချုပ်ခြင်း သင်သည် လယ်ယာအတွက် irrigation system တစ်ခုတည်ဆောက်ရန်တာဝန်ယူထားသည်ဟုစဉ်းစားပါ။ မြေစိုထိုင်းဆန့်မှုအဆင့်အတွက် အပင်များအတွက်အကောင်းဆုံးအဆင့်သည် analog voltage reading 400-450 နှင့်ကိုက်ညီသည်ဟုတွေ့ရှိထားသည်။ သင်သည် device ကို nightlight အတိုင်းပုံစံတူပရိုဂရမ်ရေးနိုင်သည် - sensor သည် 450 အထက်ဖတ်ရှုနေသည့်အချိန်တွင် relay ကိုဖွင့်ကာ pump ကိုဖွင့်ရန်စနစ်ထားနိုင်သည်။ ပြဿနာမှာ ရေသည် pump မှ sensor သို့ရောက်ရန်အချိန်ယူရသည်။ sensor သည် 450 အဆင့်ကို detect လုပ်ပြီးရေကိုရပ်တန့်ပေမယ့် pump မှရေသည်မြေထဲသို့စိမ့်ဝင်နေသည့်အချိန်တွင် ရေစိုထိုင်းဆန့်မှုအဆင့်သည်ဆက်လက်ကျဆင်းနေမည်ဖြစ်သည်။ အဆုံးတွင် ရေကိုအလဟသဖြုန်းပြီး root ကိုထိခိုက်စေနိုင်သည်။ ✅ သတိပြုပါ - ရေများလွန်းခြင်းသည် ရေမလုံလောက်ခြင်းအတိုင်းပင် အပင်များအတွက်ဆိုးရွားနိုင်ပြီး ရေသည်တန်ဖိုးရှိသောအရင်းအမြစ်ဖြစ်သည်။ ပိုမိုကောင်းမွန်သောဖြေရှင်းနည်းမှာ actuator ဖွင့်ခြင်းနှင့် sensor ဖတ်ရှုမှုအကြားနှောင့်နှေးမှုရှိသည်ကိုနားလည်ရန်ဖြစ်သည်။ sensor သည်တန်ဖိုးကိုပြန်ဖတ်ရှုမီအချိန်စောင့်ရသလို actuator သည် sensor measurement ပြန်လုပ်မီအချိန်အနည်းငယ်ပိတ်ထားရမည်ဖြစ်သည်။ relay ကိုတစ်ကြိမ်ဖွင့်ထားသည့်အချိန်ကာလဘယ်လောက်ကြာရမလဲ? သတိထားပြီး relay ကိုအတိုချုပ်ဖွင့်ထားကာ ရေစိမ့်ဝင်ရန်စောင့်ပြီးမှ moisture level ကိုပြန်စစ်ပါ။ ရေကိုအမြဲတမ်းထပ်မံထည့်နိုင်သော်လည်း မြေထဲမှရေကိုပြန်ထုတ်မရနိုင်ပါ။ > 💁 အချိန်ထိန်းချုပ်မှုအမျိုးအစားသည် သင်တည်ဆောက်နေသော IoT device, သင်တိုင်းတာနေသော property, သုံးနေသော sensor နှင့် actuator များအပေါ်မူတည်၍ အလွန်ထူးခြားသည်။ ![Strawberry အပင်တစ်ပင်ကို pump ဖြင့်ရေထည့်ထားပြီး pump သည် relay နှင့်ချိတ်ဆက်ထားသည်။ relay နှင့် မြေစိုထိုင်းဆန့်မှု sensor သည် Raspberry Pi နှင့်ချိတ်ဆက်ထားသည်](../../../../../translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.my.png) ဥပမာအားဖြင့် ကျွန်ုပ်တွင် မြေစိုထိုင်းဆန့်မှု sensor နှင့် relay ဖြင့်ထိန်းချုပ်ထားသော pump ပါသော strawberry အပင်တစ်ပင်ရှိသည်။ ရေထည့်သောအခါ မြေစိုထိုင်းဆန့်မှု reading သည် 20 စက္ကန့်အကြာတွင်သာတည်ငြိမ်သည်ကိုတွေ့ရှိထားသည်။ ဒါကြောင့် relay ကိုပိတ်ပြီး 20 စက္ကန့်စောင့်ကာ moisture level ကိုစစ်ရမည်ဖြစ်သည်။ ရေမလုံလောက်ခြင်းထက် ရေများလွန်းခြင်းကိုရှောင်ရှားလိုပါသည် - pump ကိုထပ်ဖွင့်နိုင်သော်လည်း အပင်မှရေကိုပြန်ထုတ်မရနိုင်ပါ။ ![အဆင့် ၁၊ တိုင်းတာမှုလုပ်ဆောင်ပါ။ အဆင့် ၂၊ ရေထည့်ပါ။ အဆင့် ၃၊ ရေသည်မြေထဲသို့စိမ့်ဝင်ရန်စောင့်ပါ။ အဆင့် ၄၊ တိုင်းတာမှုကိုပြန်လုပ်ဆောင်ပါ](../../../../../translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.my.png) ဒါကြောင့် အကောင်းဆုံးလုပ်ဆောင်မှုမှာ အောက်ပါအတိုင်းဖြစ်သည်- * Pump ကို 5 စက္ကန့်ဖွင့်ပါ * 20 စက္ကန့်စောင့်ပါ * မြေစိုထိုင်းဆန့်မှုကိုစစ်ပါ * အဆင့်သည်လိုအပ်သောအဆင့်အောက်တွင်ရှိနေသေးလျှင် အထက်ပါအဆင့်များကိုထပ်လုပ်ဆောင်ပါ Pump အတွက် 5 စက္ကန့်သည်အလွန်ကြာနိုင်သည်၊ အထူးသဖြင့် moisture level သည်လိုအပ်သောအဆင့်အနည်းငယ်သာကျော်လွန်နေပါက။ အချိန်ကိုဘယ်လိုသုံးရမလဲဆိုတာကို sensor data ရရှိပြီး feedback loop ဖြင့်အမြဲပြန်လည်ညှိနှိုင်းခြင်းဖြင့်သိနိုင်သည်။ ဥပမာအားဖြင့် 100 အထက်ရှိသော moisture level တစ်ခုစီအတွက် pump ကို 1 စက္ကန့်ဖွင့်ခြင်းကဲ့သို့ fixed timing အစား granular timing ကိုအသုံးပြုနိုင်သည်။ ✅ သုတေသနလုပ်ပါ - အချိန်နှင့်ပတ်သက်သောအခြားအချက်များရှိပါသလား? မြေစိုထိုင်းဆန့်မှုအနည်းငယ်လျော့နည်းနေသောအချိန်တိုင်းတွင်ရေသွင်းနိုင်ပါသလား၊ ဒါမှမဟုတ် အပင်များကိုရေသွင်းရန်ကောင်းသောအချိန်နှင့်မကောင်းသောအချိန်များရှိပါသလား? > 💁 ရာသီဥတုခန့်မှန်းချက်များကိုလည်း အပြင်လယ်ယာများအတွက် automated watering system ကိုထိန်းချုပ်ရာတွင်ထည့်သွင်းစဉ်းစားနိုင်သည်။ မိုးရွာမည်ဟုမျှော်လင့်ရပါက မိုးရွာပြီးမှသာရေသွင်းခြင်းကိုလုပ်ဆောင်နိုင်သည်။ အဆိုပါအချိန်တွင် မြေစိုထိုင်းဆန့်မှုသည်ရေသွင်းရန်မလိုအပ်လောက်အောင်စိုနေပြီးရေဖြုန်းမှုကိုလျော့နည်းစေသည်။ ## Plant control server တွင်အချိန်ထည့်သွင်းပါ Server code ကို watering cycle timing ကိုထည့်သွင်းရန်နှင့် မြေစိုထိုင်းဆန့်မှုအဆင့်ပြောင်းလဲရန်စောင့်ရန်အတွက်ပြင်ဆင်နိုင်သည်။ relay timing ကိုထိန်းချုပ်ရန် server logic သည်- 1. Telemetry message ကိုလက်ခံပါ 1. မြေစိုထိုင်းဆန့်မှုအဆင့်ကိုစစ်ပါ 1. အဆင့်ကအဆင့်မကျော်လွန်ပါက ဘာမှမလုပ်ပါ။ အဆင့်ကအလွန်မြင့်နေပါက (မြေစိုထိုင်းဆန့်မှုအနည်းငယ်လျော့နည်းနေသည်)- 1. Relay ကိုဖွင့်ရန် command ပို့ပါ 1. 5 စက္ကန့်စောင့်ပါ 1. Relay ကိုပိတ်ရန် command ပို့ပါ 1. မြေစိုထိုင်းဆန့်မှုအဆင့်တည်ငြိမ်ရန် 20 စက္ကန့်စောင့်ပါ Watering cycle, telemetry message ကိုလက်ခံပြီး မြေစိုထိုင်းဆန့်မှုအဆင့်ကိုပြန်စစ်ရန်အဆင့်သို့ပြန်ရောက်ရန်လုပ်ဆောင်မှုသည် 25 စက္ကန့်ကြာသည်။ မြေစိုထိုင်းဆန့်မှုအဆင့်ကို 10 စက္ကန့်တိုင်းပို့နေသောကြောင့် server သည် မြေစိုထိုင်းဆန့်မှုအဆင့်တည်ငြိမ်ရန်စောင့်နေစဉ် message ကိုလက်ခံပြီး watering cycle တစ်ခုကိုပြန်စတင်နိုင်သည်။ ဤပြဿနာကိုဖြေရှင်းရန်နှစ်ခုသောရွေးချယ်မှုရှိသည်- * IoT device code ကိုပြောင်းပြီး telemetry ကိုတစ်မိနစ်တိုင်းပို့ရန်လုပ်ဆောင်ပါ၊ ဤနည်းဖြင့် watering cycle ပြီးဆုံးပြီးမှ message ကိုပို့မည်ဖြစ်သည် * Watering cycle အတွင်း telemetry subscription ကိုပိတ်ထားပါ ပထမရွေးချယ်မှုသည် အကြီးစားလယ်ယာများအတွက်အမြဲကောင်းသောဖြေရှင်းနည်းမဟုတ်ပါ။ လယ်သမားသည် မြေစိုထိုင်းဆန့်မှုအဆင့်ကိုရေသွင်းနေစဉ်တွင်ဖမ်းယူကာ နောက်ပိုင်းတွင် analysis ပြုလုပ်ရန်လိုအပ်နိုင်သည်၊ ဥပမာအားဖြင့် လယ်ယာ၏အခြားနေရာများတွင်ရေစီးဆင်းမှုကိုသိရှိရန် targeted watering ကိုလမ်းညွှန်ရန်လိုအပ်နိုင်သည်။ ဒုတိယရွေးချယ်မှုသည်ပိုမိုကောင်းမွန်သည် - code သည် telemetry ကိုအသုံးမပြုနိုင်သောအချိန် ignore လုပ်နေသော်လည်း telemetry သည် broker မှ data ကို subscribe လုပ်သောအခြား service များအတွက်ရှိနေဆဲဖြစ်သည်။ > 💁 IoT data သည် device တစ်ခုမှ service တစ်ခုသို့ပို့ခြင်းသာမဟုတ်၊ device များစွာမှ broker သို့ data ပို့ပြီး service များစွာမှ broker မှ data ကိုနားထောင်နိုင်သည်။ ဥပမာအားဖြင့် service တစ်ခုသည် မြေစိုထိုင်းဆန့်မှု data ကိုနားထောင်ပြီး database တွင်သိမ်းဆည်းကာ နောက်ပိုင်းတွင် analysis ပြုလုပ်နိုင်သည်။ အခြား service တစ်ခုသည် irrigation system ကိုထိန်းချုပ်ရန်အတွက် data ကိုနားထောင်နိုင်သည်။ ### Task - Plant control server တွင်အချိန်ထည့်သွင်းပါ Server code ကို relay ကို 5 စက္ကန့်ဖွင့်ပြီး 20 စက္ကန့်စောင့်ရန် update လုပ်ပါ။ 1. `soil-moisture-sensor-server` folder ကို VS Code တွင်ဖွင့်ပါ။ virtual environment ကို activate လုပ်ထားပါ။ 1. `app.py` ဖိုင်ကိုဖွင့်ပါ 1. ရှိပြီးသား imports အောက်တွင် အောက်ပါ code ကိုထည့်ပါ- ```python import threading ``` ဤ statement သည် Python libraries မှ `threading` ကို import လုပ်သည်။ threading သည် Python ကိုစောင့်နေစဉ်အခြား code ကို execute လုပ်ရန်ခွင့်ပြုသည်။ 1. Server code တွင် telemetry message ကို handle လုပ်သည့် `handle_telemetry` function မတိုင်မီ အောက်ပါ code ကိုထည့်ပါ- ```python water_time = 5 wait_time = 20 ``` ဤ code သည် relay ကို run လုပ်သည့်အချိန် (`water_time`) နှင့် မြေစိုထိုင်းဆန့်မှုကိုစစ်ရန်စောင့်ရမည့်အချိန် (`wait_time`) ကိုသတ်မှတ်သည်။ 1. ဤ code အောက်တွင် အောက်ပါ code ကိုထည့်ပါ- ```python def send_relay_command(client, state): command = { 'relay_on' : state } print("Sending message:", command) client.publish(server_command_topic, json.dumps(command)) ``` ဤ code သည် relay ကို MQTT ဖြင့်ထိန်းချုပ်ရန် command ပို့သည့် `send_relay_command` ဟုခေါ်သော function ကိုသတ်မှတ်သည်။ telemetry ကို dictionary အဖြစ်ဖန်တီးကာ JSON string သို့ပြောင်းသည်။ `state` သို့ပေးပို့သော value သည် relay ကိုဖွင့်ရန်သို့မဟုတ်ပိတ်ရန်သတ်မှတ်သည်။ 1. `send_relay_code` function အောက်တွင် အောက်ပါ 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) ``` ဤ code သည် relay ကိုလိုအပ်သော timing အပေါ်မူတည်၍ control လုပ်သည့် function ကိုသတ်မှတ်သည်။ ပထမဦးဆုံး telemetry subscription ကို unsubscribe လုပ်ကာ watering ဖြစ်နေစဉ် မြေစိုထိုင်းဆန့်မှု message မကိုင်တွယ်ရန်လုပ်ဆောင်သည်။ ထို့နောက် relay ကိုဖွင့်ရန် command ပို့သည်။ `water_time` အတွက်စောင့်ပြီး relay ကိုပိတ်ရန် command ပို့သည်။ နောက်ဆုံးတွင် `wait_time` စက္ကန့်အတွက် မြေစိုထိုင်းဆန့်မှုအဆင့်တည်ငြိမ်ရန်စောင့်သည်။ ပြီးလျှင် telemetry ကိုပြန် subscribe လုပ်သည်။ 1. `handle_telemetry` function ကို အောက်ပါအတိုင်းပြောင်းပါ- ```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() ``` ဤ code သည် မြေစိုထိုင်းဆန့်မှုအဆင့်ကိုစစ်သည်။ 450 ထက်ကြီးလျှင် မြေစိုထိုင်းဆန့်မှုအနည်းငယ်လျော့နည်းနေသောကြောင့် `control_relay` function ကိုခေါ်သည်။ ဤ function သည် separate thread တွင် run လုပ်ကာ background တွင်လုပ်ဆောင်သည်။ 1. သင်၏ IoT device ကို run လုပ်ထားပါ၊ ထို့နောက်ဤ code ကို run လုပ်ပါ။ မြေစိုထိုင်းဆန့်မှုအဆင့်ကိုပြောင်းပြီး relay တွင်ဖြစ်ပျက်မှုကိုကြည့်ရှုပါ - relay သည် 5 စက္ကန့်ဖွင့်ပြီး 20 စက္ကန့်အနည်းဆုံးပိတ်ထားမည်ဖြစ်သည်၊ မြေစိုထိုင်းဆန့်မှုအဆင့်မလုံလောက်လျှင်သာ relay ကိုပြန်ဖွင့်မည်။ ```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} ``` Simulated irrigation system တွင်စမ်းသပ်ရန်ကောင်းသောနည်းလမ်းမှာ မြေခြောက်သောမြေကိုအသုံးပြုကာ relay ဖွင့်နေစဉ်တွင် manually ရေထည့်ပါ၊ relay ပိတ်သည့်အချိန်တွင်ရေထည့်ခြင်းကိုရပ်ပါ။ > 💁 ဤ code ကို [code-timing](../../../../../2-farm/lessons/3-automated-plant-watering/code-timing) folder တွင်တွေ့နိုင်သည်။ > 💁 အကယ်၍ သင် pump ကိုအသုံးပြုကာ အစစ်အမှန် irrigation system တည်ဆောက်လိုပါက [6V water pump](https://www.seeedstudio.com/6V-Mini-Water-Pump-p-1945.html) ကို [USB terminal power supply](https://www.adafruit.com/product/3628) ဖြင့်အသုံးပြုနိုင်သည်။ pump သို့မဟုတ် pump မှ power ကို relay ဖြင့်ချိတ်ဆက်ထားရန်သေချာပါ။ --- ## 🚀 Challenge IoT device သို့မဟုတ် sensor နှင့် actuator အကြား property ပြောင်းလဲရန်အချိန်ယူရသောအခြား electrical device များကိုစဉ်းစားနိုင်ပါသလား။ သင်၏အိမ်သို့မဟုတ်ကျောင်းတွင် device များအနည်းငယ်ရှိနေပါသည်။ * သူတို့သည် property များကိုတိုင်းတာသလဲ? * actuator ကိုအသုံးပြုပြီး property ပြောင်းလဲရန်ဘယ်လောက်ကြာသလဲ? * property သည်လိုအပ်သောအဆင့်ကိုကျော်လွန်ခြင်းကအဆင်ပြေပါသလား? * လိုအပ်ပါက property ကိုလိုအပ်သောအဆင့်သို့ပြန်လည်ရောက်အောင်ဘယ်လိုလုပ်နိုင်သလဲ? ## Post-lecture quiz [Post-lecture quiz](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/14) ## Review & Self Study * relay များနှင့်ပတ်သက်သောပိုမိုသိရှိရန်၊ telephone exchanges တွင် relay များ၏သမိုင်းဝင်အသုံးပြုမှုအပါအဝင် [relay Wikipedia page](https://wikipedia.org/wiki/Relay) ကိုဖတ်ပါ။ ## Assignment [Build a more efficient watering cycle](assignment.md) --- **အကြောင်းကြားချက်**: ဤစာရွက်စာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု [Co-op Translator](https://github.com/Azure/co-op-translator) ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှုအတွက် ကြိုးစားနေသော်လည်း၊ အလိုအလျောက် ဘာသာပြန်ခြင်းတွင် အမှားများ သို့မဟုတ် မတိကျမှုများ ပါဝင်နိုင်သည်ကို သတိပြုပါ။ မူရင်းဘာသာစကားဖြင့် ရေးသားထားသော စာရွက်စာတမ်းကို အာဏာတရ အရင်းအမြစ်အဖြစ် ရှုလေ့လာသင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူ့ဘာသာပြန်ပညာရှင်များမှ ပရော်ဖက်ရှင်နယ် ဘာသာပြန်ခြင်းကို အကြံပြုပါသည်။ ဤဘာသာပြန်ကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော အလွဲအမှားများ သို့မဟုတ် အနားလွဲမှုများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။