# کنترل یک رله - سخت‌افزار مجازی IoT در این بخش از درس، شما یک رله به دستگاه IoT مجازی خود اضافه خواهید کرد، علاوه بر سنسور رطوبت خاک، و آن را بر اساس سطح رطوبت خاک کنترل خواهید کرد. ## سخت‌افزار مجازی دستگاه IoT مجازی از یک رله شبیه‌سازی‌شده Grove استفاده خواهد کرد. این کار باعث می‌شود این آزمایش مشابه استفاده از Raspberry Pi با یک رله فیزیکی Grove باشد. در یک دستگاه IoT فیزیکی، رله معمولاً یک رله باز معمولی است (به این معنی که مدار خروجی باز یا قطع است زمانی که هیچ سیگنالی به رله ارسال نمی‌شود). چنین رله‌ای می‌تواند مدارهای خروجی تا 250 ولت و 10 آمپر را مدیریت کند. ### افزودن رله به CounterFit برای استفاده از یک رله مجازی، باید آن را به برنامه CounterFit اضافه کنید. #### وظیفه رله را به برنامه CounterFit اضافه کنید. 1. پروژه `soil-moisture-sensor` از درس قبلی را در VS Code باز کنید اگر هنوز باز نشده است. شما به این پروژه اضافه خواهید کرد. 1. مطمئن شوید که برنامه وب CounterFit در حال اجرا است. 1. یک رله ایجاد کنید: 1. در کادر *Create actuator* در پنل *Actuators*، از منوی کشویی *Actuator type* گزینه *Relay* را انتخاب کنید. 1. مقدار *Pin* را روی *5* تنظیم کنید. 1. دکمه **Add** را انتخاب کنید تا رله روی پین 5 ایجاد شود. ![تنظیمات رله](../../../../../translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.fa.png) رله ایجاد خواهد شد و در لیست محرک‌ها ظاهر می‌شود. ![رله ایجاد شده](../../../../../translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.fa.png) ## برنامه‌نویسی رله اکنون می‌توان برنامه سنسور رطوبت خاک را برای استفاده از رله مجازی برنامه‌ریزی کرد. ### وظیفه دستگاه مجازی را برنامه‌ریزی کنید. 1. پروژه `soil-moisture-sensor` از درس قبلی را در VS Code باز کنید اگر هنوز باز نشده است. شما به این پروژه اضافه خواهید کرد. 1. کد زیر را به فایل `app.py` در زیر واردات موجود اضافه کنید: ```python from counterfit_shims_grove.grove_relay import GroveRelay ``` این دستور `GroveRelay` را از کتابخانه‌های شبیه‌سازی Python Grove وارد می‌کند تا با رله مجازی Grove تعامل داشته باشد. 1. کد زیر را در زیر اعلان کلاس `ADC` اضافه کنید تا یک نمونه از `GroveRelay` ایجاد شود: ```python relay = GroveRelay(5) ``` این یک رله با استفاده از پین **5** ایجاد می‌کند، پینی که رله را به آن متصل کرده‌اید. 1. برای آزمایش اینکه آیا رله کار می‌کند، کد زیر را به حلقه `while True:` اضافه کنید: ```python relay.on() time.sleep(.5) relay.off() ``` این کد رله را روشن می‌کند، 0.5 ثانیه صبر می‌کند، سپس رله را خاموش می‌کند. 1. برنامه Python را اجرا کنید. رله هر 10 ثانیه روشن و خاموش خواهد شد، با یک تأخیر نیم ثانیه‌ای بین روشن و خاموش شدن. شما خواهید دید که رله مجازی در برنامه CounterFit بسته و باز می‌شود همانطور که رله روشن و خاموش می‌شود. ![رله مجازی روشن و خاموش می‌شود](../../../../../images/virtual-relay-turn-on-off.gif) ## کنترل رله بر اساس رطوبت خاک اکنون که رله کار می‌کند، می‌توان آن را بر اساس خوانش‌های رطوبت خاک کنترل کرد. ### وظیفه رله را کنترل کنید. 1. سه خط کدی که برای آزمایش رله اضافه کرده‌اید را حذف کنید. آن‌ها را با کد زیر جایگزین کنید: ```python if soil_moisture > 450: print("Soil Moisture is too low, turning relay on.") relay.on() else: print("Soil Moisture is ok, turning relay off.") relay.off() ``` این کد سطح رطوبت خاک را از سنسور رطوبت خاک بررسی می‌کند. اگر بالای 450 باشد، رله را روشن می‌کند و اگر زیر 450 باشد، آن را خاموش می‌کند. > 💁 به یاد داشته باشید که سنسور رطوبت خاک خازنی به این صورت عمل می‌کند که هرچه سطح رطوبت خاک پایین‌تر باشد، رطوبت بیشتری در خاک وجود دارد و بالعکس. 1. برنامه Python را اجرا کنید. خواهید دید که رله بسته به سطح رطوبت خاک روشن یا خاموش می‌شود. تنظیمات *Value* یا *Random* سنسور رطوبت خاک را تغییر دهید تا تغییر مقدار را مشاهده کنید. ```output Soil Moisture: 638 Soil Moisture is too low, turning relay on. Soil Moisture: 452 Soil Moisture is too low, turning relay on. Soil Moisture: 347 Soil Moisture is ok, turning relay off. ``` > 💁 شما می‌توانید این کد را در پوشه [code-relay/virtual-device](../../../../../2-farm/lessons/3-automated-plant-watering/code-relay/virtual-device) پیدا کنید. 😀 برنامه کنترل رله توسط سنسور رطوبت خاک مجازی شما موفقیت‌آمیز بود! **سلب مسئولیت**: این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه انسانی حرفه‌ای استفاده کنید. ما هیچ مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.