فهرست مطالب:
- تدارکات
- مرحله 1: همه اجزا را لحیم کرده و برنامه را در NodeMCU بارگذاری کنید
- مرحله 2: پیکربندی SQL Server
- مرحله 3: پیکربندی سرور فایل
- مرحله 4: مستندات کاربر
- مرحله 5: راه اندازی ماژول
- مرحله 6: اکنون زمان آن رسیده است که داده ها را در ابر ارائه دهید
- مرحله 7: به روز رسانی از طریق هوا (OTA)
- مرحله 8: نحوه دسترسی کاربر/مشتری به داده ها…
- مرحله 9: محدودیت های این پروژه
- مرحله 10: پیشرفت های بیشتر که می توان در این پروژه انجام داد
- مرحله 11: چند کلمه برای مخاطبان
تصویری: سیستم پایش آب و هوای هوشمند IoT توزیع شده با استفاده از NodeMCU: 11 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:51
همه شما ممکن است از ایستگاه هواشناسی سنتی آگاه باشید. اما آیا تا به حال فکر کرده اید که در واقع چگونه کار می کند؟ از آنجا که ایستگاه هواشناسی سنتی پرهزینه و حجیم است ، تراکم این ایستگاه ها در واحد سطح بسیار کمتر است که به نادرستی داده ها کمک می کند. من به شما توضیح می دهم چگونه: فرض کنید یک ایستگاه در وسط یک شهر واقع شده است و تنها ایستگاهی است که در شعاع 'x' متر واقع شده است ، در صورت وجود هرگونه عامل آلودگی در مجاورت ، می توان آن را به راحتی تعصب کرد. ایستگاه کل منطقه شعاع 'x' را آلوده نشان می دهد زیرا آن ایستگاه واحد وظیفه تعیین داده های آب و هوایی کل منطقه را بر عهده دارد.
برای غلبه بر این مشکل ، تراکم ماژول ها باید افزایش یابد که این امر تنها در صورتی امکان پذیر است که ماژول ها ارزان تر بوده و ردپای کوچکتری نسبت به مدل قبلی داشته باشند.
به همین دلیل است که راه حل پیشنهادی من راه حل مناسبی برای این مشکل است ، هزینه آن کمتر از 10 دلار است و همچنین به راحتی روی کف من قرار می گیرد.
چگونه کار می کند…
3 بخش اصلی این پروژه وجود دارد.
سمت دستگاه:
دستگاه یک ماژول اینترنت اشیا است که در تصویر نشان داده شده است و داده های آب و هوا را در هر بازه زمانی 'x' به سرور ارسال می کند. داده ها شامل داده های واقعی آب و هوا ، موقعیت جغرافیایی ماژول است. یعنی مختصات آن ، آدرس MAC آن ؛ برای شناسایی منحصر به فرد دستگاه ، نسخه سیستم عامل آن در حال حاضر در حال اجرا است. سمت دستگاه شامل ماژول های N است که در سراسر منطقه توزیع شده و داده ها را به طور فعال به سرور ارائه می دهد.
سمت سرور:
همانطور که از نامش پیداست ، این سرور متمرکز است که چندین عملیات مانند دریافت داده ها از ماژول ها و ذخیره آنها در پایگاه داده ، به روز رسانی ماژول با آخرین سیستم عامل در صورت اجرا بر روی نسخه قدیمی تر ، ارسال داده های آب و هوا به مشتری در صورت درخواست
مشتری/سمت کاربر:
این کاربر نهایی است که اطلاعات آب و هوا را از سرور درخواست می کند. سرویس گیرنده مکان فعلی را ارسال می کند و بر اساس موقعیت مکانی ، سرور فاصله بین مشتری و همه ماژول ها را محاسبه می کند و داده های آب و هوایی نزدیکترین ماژول را به مشتری ارسال می کند که دقیق در نظر گرفته می شود.
تدارکات
- NodeMCU (ESP8266-12E)
- DHT11 (سنسور رطوبت و دما)
- BMP180 (سنسور فشار و دما)
- MQ-135 (سنسور شاخص کیفیت هوا)
- کابل USB (برای بارگذاری برنامه)
- منبع تغذیه 5 ولت
- خازن ها (اختیاری: قرار دادن موازی خط برق)
- Arduino IDE (برای اشکال زدایی و بارگذاری برنامه)
- برنامه POSTMAN (اختیاری: برای اشکال زدایی API)
- یک وب سایت (برای میزبانی PHP و سرور MySQL)
مرحله 1: همه اجزا را لحیم کرده و برنامه را در NodeMCU بارگذاری کنید
تمام قطعات را همانطور که در نمودار مدار روی یک تخته پرف نشان داده شده است به NodeMCU لحیم کنید. همچنین ، یک خازن را به موازات خطوط برق بچسبانید ، زیرا در هنگام انتقال و دریافت فعال اطلاعات ، برق بالا می رود.
پس از اتمام کار لحیم کاری ، کد ارائه شده در فایل "code.c" را بارگذاری کنید.
توجه: فراموش نکنید که اعتبارنامه ها را با اعتبار خود جایگزین کنید. همچنین پرونده ای با نام "html_file.h" را در داخل پوشه arduino sketch قرار دهید. همه فایلهای هدر مورد استفاده در این پروژه را می توانید در اینجا پیدا کنید
ویژگی های کد:
نقطه دسترسی: از آنجایی که برنامه ریزی هر ماژول با اعتبار در تولید انبوه دشوار است ، ماژول در اولین بوت خود یک صفحه وب را میزبانی می کند تا اعتبار WiFi را که ماژول ها باید به آن متصل شوند ، پذیرفته و برای استفاده بعدی در EEPROM ذخیره کند.
پس از پیکربندی اعتبارنامه ، NodeMCU EEPROM را برای اعتبار بررسی می کند و به اعتبار WiFi موجود در EEPROM متصل می شود.
پس از اتصال موفقیت آمیز به WiFi ، NodeMCU بارگذاری داده ها را در هر بازه زمانی 'x' شروع می کند ، داده ها شامل آب و هوا ، آدرس MAC ماژول ، نسخه سیستم عامل ، موقعیت جغرافیایی دستگاه است.
به روز رسانی OTA: ماژول همچنین هر روز در زمان خاصی که در کد مشخص شده است ، بروزرسانی سیستم عامل جدید را بررسی می کند. این ویژگی مفید است زیرا برای هیچ سازنده ای امکان تغییر برنامه و تغییر برنامه در هر صورت وجود ندارد.
Timer Watchdog: Atlast باید راهی برای بازیابی خود بدون هیچ دخالت انسانی در صورت گیر افتادن یا تصادف وجود داشته باشد. این را می توان با استفاده از تایمر Watchdog به دست آورد. روش کار این است: یک روال فرعی Interrupt وجود دارد که هر ثانیه اجرا می شود. ISR هر زمان که شمارنده را اجرا می کند شمارنده را افزایش می دهد و بررسی می کند که آیا شمارنده به حداکثر تعداد رسیده است یا خیر. هنگامی که شمارنده به حداکثر مقدار برسد ، ماژول با فرض خرابی خود را تنظیم مجدد می کند. در حالت عادی ، شمارنده همیشه قبل از رسیدن به حداکثر تعداد مجدداً تنظیم می شود.
مرحله 2: پیکربندی SQL Server
راه اندازی SQL Server نیز بسیار ساده است. فقط کافی است یک پایگاه داده در سرور SQL ایجاد کرده و با وارد کردن پرونده ای با نام "database_structure.txt" تنظیمات را وارد کنید. در این مرحله می توانید فایل را پیدا کنید. از آنجا که دستورالعمل اجازه بارگذاری فایل های ".sql" را نمی دهد ، من فایل را به ".txt" تغییر نام دادم.
توجه: نام فایل را از ".txt" به ".sql" تغییر دهید.
مرحله 3: پیکربندی سرور فایل
اگر صاحب یک وب سایت هستید و به صورت آنلاین میزبانی می شود ، پیکربندی سرور واقعاً آسان است. من کل مراحل راه اندازی وب سایت و میزبانی آن را مرور نمی کنم ، زیرا خارج از محدوده این آموزش است. اما می توانید آن را در رایانه شخصی خود به عنوان localhost میزبانی کنید تا کار فایل ها را امتحان کنید.
از آنجا که Instructable اجازه بارگذاری فایل های PHP را نمی دهد ، نام فایل ها را به ".txt" تغییر دادم.
توجه: لطفاً نام پسوند فایلها را به ".php" تغییر دهید. همچنین فراموش نکنید که اعتبار پرونده "config.php" را تغییر دهید.
کافی است فایل ها را روی سرور بارگذاری کنید و خوب پیش می روید.
اطلاعات کوتاهی در مورد فایل های PHP به شما می دهم.
db_config.php:
در این فایل ، تمام اطلاعات مورد نیاز برای اتصال به سرور SQL ذخیره می شود.
db_connect:
در این فایل کلاس مورد نیاز برای اتصال پایگاه داده موجود است.
insert.php:
NodeMCU این فایل PHP را برای بارگذاری داده ها در سرور با استفاده از روش GET فراخوانی می کند. این فایل همچنین مسئول ذخیره همان داده ها در سرور SQL است.
retrieve.php:
کاربر/مشتری این PHP را با استفاده از روش GET فراخوانی می کند. سرور فاصله بین کاربر و همه ماژول ها را محاسبه می کند. سپس اطلاعات نزدیکترین ماژول به عنوان پاسخ به سرویس گیرنده در قالب JSON/XML به دلخواه مشتری ارسال می شود.
update.php:
این فایل PHP هر روز در یک ساعت خاص توسط ماژول فراخوانی می شود تا بررسی شود که آیا آخرین نسخه سیستم عامل در حال اجرا است یا خیر. کافیست آخرین فایل ".bin" را در سرور فایل قرار دهید و فهرست متغیر فایل را در متغیر فایل مشخص کنید.
اگر این تعداد زیادی فایل در ابتدا دلهره آور به نظر می رسند ، در مرحله بعد مستندات کاربر را وارد کرده ام.
مرحله 4: مستندات کاربر
معرفی:
Weather API یک رابط کاربری ساده برای درخواست داده های آب و هوا برای مکان های روی سطح زمین ارائه می دهد. شما اطلاعات آب و هوا را برای یک جفت عرض/طول جغرافیایی خاص با قالب خروجی مشخص شده درخواست می کنید. API دما ، رطوبت ، فشار و شاخص کیفیت هوا را که آخرین بار توسط نزدیکترین ماژول از محل درخواست شده ثبت شده است ، برمی گرداند.
قبل از اینکه شروع کنی:
این سند برای توسعه دهندگان وب سایت و تلفن همراه است که می خواهند اطلاعات آب و هوا را در برنامه ای که در حال توسعه است درج کنند. این کاربرد را با استفاده از API و مواد مرجع بر روی پارامترهای موجود معرفی می کند.
درخواست داده های آب و هوا:
درخواست های API هوا به عنوان یک رشته URL ساخته شده است. API داده های آب و هوا را برای نقطه ای از زمین ، که توسط یک جفت عرض/طول جغرافیایی مشخص شده است ، برمی گرداند. توجه داشته باشید که دقت داده های آب و هوا مستقیماً با چگالی ماژول های قرار گرفته در یک منطقه متناسب است.
یک درخواست API آب و هوا به شکل زیر است:
example.com/retrieve.php؟lat=25.96446&lon=53.9443&format=json
جایی که قالب خروجی (قالب) ممکن است یکی از مقادیر زیر باشد:
- JSON (توصیه می شود) ، خروجی را در JavaScript Object Notation (JSON) نشان می دهد. یا
- XML ، خروجی را در XML نشان می دهد که در گره پیچیده شده است.
پارامترهای درخواست:
همانطور که در همه URL ها استاندارد است ، پارامترها با استفاده از کاراکتر ampersand (&) جدا می شوند. لیست پارامترها و مقادیر احتمالی آنها در زیر نشان داده شده است.
پارامترهای مورد نیاز:
- lat: نمایانگر عرض جغرافیایی یک مکان برای جستجو است. (به عنوان مثال lat = 19.56875)
- lon: نمایانگر طول جغرافیایی یک مکان برای جستجو است. (به عنوان مثال lon = 72.97568)
پارامترهای اختیاری:
format: قالب خروجی پاسخ داده های آب و هوا را مشخص می کند. می تواند JSON یا XML باشد. به طور پیش فرض JSON است. (به عنوان مثال قالب = json یا قالب = xml)
پاسخ های آب و هوا:
برای هر درخواست معتبر ، سرویس منطقه زمانی پاسخ را در قالبی که در URL درخواست مشخص شده است باز می گرداند. هر پاسخ شامل عناصر زیر است:
-
موفقیت: مقداری که وضعیت پاسخ را نشان می دهد.
- 0: منفی ؛ نشان می دهد که درخواست ناقص بوده است.
- 1: مثبت ؛ نشان می دهد که درخواست موفقیت آمیز بوده است.
- message: رشته ای که دلیل ناهنجاری درخواست را نشان می دهد. فقط در صورت منفی بودن وضعیت موجود است.
-
data: یک آرایه با پارامترهای متعدد آب و هوا.
- temp: داده های دما
- hum: داده های حضور رطوبت
- pres: داده های فشار مطلق
- aqi: شاخص کیفیت هوا در حال حاضر
نمونه های پاسخ هر دو فرمت را می توان در تصاویر مشاهده کرد.
مرحله 5: راه اندازی ماژول
یک نقطه دسترسی ایجاد می شود و یک صفحه وب روی یک آدرس IP (پیش فرض: 192.168.4.1) میزبانی می شود تا اعتبارنامه ها را از مدیر دستگاه/کاربر در اولین بوت دریافت کند یا اگر ماژول اعتبارات ذخیره شده قبلی را در برنامه پیدا نکند. EEPROM
کاربر باید SSID و گذرواژه ای را که کاربر می خواهد ماژول به آن متصل شود وارد کند. اگر به مرورگر اجازه دسترسی به مکان را بدهید ، عرض و طول جغرافیایی به طور خودکار پر می شود.
پس از وارد کردن همه جزئیات ، روی دکمه "SEND" کلیک کنید ، و سپس همه اعتبارنامه ها در EEPROM ماژول نوشته می شوند.
این مرحله بسیار مهم است زیرا هنگام تولید انبوه ماژول ها ، برنامه ریزی همه ماژول ها با داده های مکان دقیق و اعتبار WiFi امکان پذیر نیست. همچنین ، کدگذاری اعتبارنامه های برنامه توصیه نمی شود ، زیرا اگر اصلاً نیاز به جابجایی ماژول به مکان دیگری داشته باشیم یا بخواهیم اعتبار WiFi را تغییر دهیم ، باید برنامه را مجددا برنامه ریزی کنیم. برای جلوگیری از این مشکل ، عملکرد راه اندازی اولیه اجرا می شود.
مرحله 6: اکنون زمان آن رسیده است که داده ها را در ابر ارائه دهید
پس از اتمام تمام مراحل قبلی ، اکنون وقت آن است که به ماژول اجازه دهیم داده ها را روی سرور بارگذاری کند. پس از ذخیره اطلاعات کاربری ، بارگذاری به طور خودکار شروع می شود.
این "insert.php" را به عنوان یک تماس API با عبور از همه پارامترها برای ارسال در روش GET فراخوانی می کند.
قطعه کد زیر نحوه پردازش پارامترها را نشان می دهد.
if (isset ($ _ GET ['temp']) && isset ($ _ GET ['hum']) && isset ($ _ GET ['pres']) && isset ($ _ GET ['aqi']) && isset ($ _ GET ['mac']) && isset ($ _ GET ['lat']) && isset ($ _ GET ['lon']))) 2. {3. // برنامه اصلی 4.}
مانند این ، همه ماژول ها بارگذاری داده ها را شروع می کنند.
توجه: اگر احساس می کنید سرور بیش از حد بار می شود ، فرکانس بارگذاری را در کد پایین بیاورید.
مرحله 7: به روز رسانی از طریق هوا (OTA)
پس از اینکه ماژول به طور کامل راه اندازی شد و شروع به بارگذاری داده ها کرد ، هر روز در زمان خاصی که در برنامه ذکر شده است ، بروزرسانی سیستم عامل را بررسی می کند. در صورت یافتن ، فایل باینری موجود در آن را بارگیری و چشمک می زند. و در غیر این صورت ، عملیات عادی بارگذاری داده ها ادامه می یابد.
برای بررسی بروزرسانی جدید ، ماژول با ارسال آدرس MAC در سرصفحه درخواست خود ، "update.php" را فراخوانی می کند. سپس سرور بررسی می کند که آیا آدرس MAC خاص به روز رسانی جدیدی دارد یا خیر ، در صورت پاسخ ، فایل باینری آخرین سیستم عامل را ارسال می کند.
همچنین همه سرصفحه های لازم برای احراز هویت اولیه ماژول را بررسی می کند.
مرحله 8: نحوه دسترسی کاربر/مشتری به داده ها…
دسترسی به داده ها از سرور بسیار ساده است. فقط با فراخوانی "retrieve.php" ، داده های آب و هوا را در قالب JSON دریافت می کنیم. پس از آن ، فقط موضوع تجزیه داده های JSON برای دسترسی به عناصر فردی است. مشابه پاسخ XML است. کاربر همیشه می تواند قالب ترجیحی پاسخ را که کاربر در آن راحت کار می کند ، مشخص کند. اگر کاربر قالب را مشخص نکند ، فرمت پیش فرض JSON است.
نمونه درخواست با استفاده از ابزار POSTMAN برای بررسی عملکرد API انجام می شود.
نمونه ای از تجزیه پاسخ JSON در جاوا اسکریپت در قطعه کد زیر نشان داده شده است.
var url = "https://example.com/retrieve.php؟lat=19.044848&lon=72.8464373"؛؛ تابع httpGet (theUrl) {var xmlHttp = new XMLHttpRequest ()؛ xmlHttp.open ("GET" ، theUrl ، false) ؛ // false برای درخواست همزمان xmlHttp.send (null) ؛ بازگشت xmlHttp.responseText؛ } var myVar = httpGet (url)؛ var obj = JSON.parse (myVar)؛ document.getElementById ("aqi"). innerHTML = obj.data [0].aqi؛ document.getElementById ("دما"). innerHTML = Math.round (obj.data [0].temp) + "° C"؛ document.getElementById ("temp"). innerHTML = Math.round (obj.data [0].temp) + "° C"؛ document.getElementById ("رطوبت"). innerHTML = Math.round (obj.data [0].hum) + "٪" ؛ document.getElementById ("فشار"). innerHTML = Math.round (obj.data [0].pres) + "mb" ؛
کد منبع مثال صفحه HTML که پاسخ JSON را تجزیه می کند در پایان این مرحله در دسترس است.
توجه: پسوند فایل را به ".html" تغییر دهید.
مرحله 9: محدودیت های این پروژه
- پروژه از GET برای ارسال داده استفاده می کند. حتی اگر با داده های حساس سروکار نداشته باشد ، داده ها به راحتی قابل دستکاری هستند زیرا هیچ مکانیزمی برای بررسی صحت منبع به غیر از بررسی سرفصل ها ندارد ، که به راحتی قابل تغییر است و حتی یک دستگاه معمولی می تواند جعل شود به نظر می رسد ماژول آب و هوا
- از آنجا که ماژول صرفاً متکی و وابسته به سایر نقاط دسترسی (WIFI) است تا داده هایی را ارسال کند که در بیشتر موارد از سازمان های دیگر خواهد بود. اگر به هر دلیلی نقطه دسترسی به کار افتاده باشد ، ماژول نمی تواند داده ارسال کند.
- اگرچه این پروژه برای افزایش دقت سیستم موجود ساخته شده است ، اما سنسور موجود در بازار از دقت کمتر از حد انتظار برخوردار است که در نتیجه منجر به شکست هدف اصلی آن می شود.
- در حین برنامه ریزی پروژه ، من قصد داشتم یک حالت را وارد کنم که در آن سرور به طور متوسط مقدار داده را بر اساس موقعیت مکانی برای تصحیح خطا در نظر می گیرد. اما با پیاده سازی این ویژگی ، متوجه شدم که برای ترجمه مختصات به مناطق جغرافیایی به برخی از API های شخص ثالث نیاز دارد.
مرحله 10: پیشرفت های بیشتر که می توان در این پروژه انجام داد
- دقت ماژول را می توان با استفاده از سنسورها به منظور استفاده خاص به جای استفاده از ماژول عمومی موجود در بازار ، بیشتر افزایش داد.
- ماژول را می توان برای استفاده مستقل تر با استفاده از یک تراشه مخصوص که به صورت بی سیم با Cell-tower ارتباط دارد ارسال کرد تا داده ها را ارسال کند و در نتیجه تحمل خطا را بهبود بخشد.
- از پانل های خورشیدی و سیستم باتری می توان در رابطه با حالت خواب عمیق ESP استفاده کرد و در نتیجه بهره وری را بهبود بخشید و آن را از منبع تغذیه خارجی مستقل تر کرد.
- POST را می توان برای ارسال داده ها با مکانیسم احراز هویت مانند استفاده از کدهای چرخه ای برای هر انتقال داده استفاده کرد.
- به جای NodeMCU ، که یک برد نمونه سازی است ، می توانیم از یک میکروکنترلر سفارشی در تولید انبوه استفاده کنیم که نه تنها هزینه را کاهش می دهد بلکه از منابع سیستم نیز بهترین استفاده را می کند.
- در ارتباط با API جغرافیایی Google و اتصال به هر WIFI باز موجود ، ماژول می تواند حتی بدون پیکربندی آن کار کند. آماده انتقال داده ها به کارخانه بدون هیچ گونه راه اندازی.
مرحله 11: چند کلمه برای مخاطبان
سلام بچه ها ، من متوجه می شوم که این یک آموزش مبتدی نیست ، زیرا من به تک تک جزئیاتی که باید پرداخته شود اشاره نکرده ام. و همچنین این پروژه واقعاً وسیع است که در یک دستورالعمل پوشش داده شود. با این وجود ، من تمام تلاش خود را کردم تا همه جنبه های مهم پروژه را پوشش دهم. من همچنین می دانم که یک ویدئو که کار پروژه را به نمایش می گذارد واقعاً عالی خواهد بود ، اما از آنجا که این اولین دستورالعمل آموزشی من است و صادقانه بگویم ، این اولین انتشار من در مورد هر چیزی شبیه به این است ، من از قرار گرفتن در مقابل بسیار عصبی بودم. دوربین.
اگر در ساخت این پروژه یا هر چیزی شبیه به آن به کمک احتیاج دارید ، کافی است با من در [email protected] تماس بگیرید ، یا می توانید مانند همیشه نظر دهید. من سعی می کنم تا جایی که می توانم به شما کمک کنم.
متشکرم!!
توصیه شده:
سیستم پارکینگ هوشمند مبتنی بر اینترنت اشیا با استفاده از NodeMCU ESP8266: 5 مرحله
سیستم پارک هوشمند مبتنی بر اینترنت اشیا با استفاده از NodeMCU ESP8266: امروزه پیدا کردن پارکینگ در مناطق شلوغ بسیار دشوار است و هیچ سیستمی برای جزییات موجود بودن پارکینگ به صورت آنلاین وجود ندارد. تصور کنید اگر می توانید اطلاعات موجود بودن محل پارکینگ را در تلفن خود دریافت کنید و در اطراف خود رومینگ ندارید تا بررسی کنید
سیستم پایش آب و هوای داخلی بر پایه رزبری پای: 6 مرحله
سیستم نظارت بر آب و هوای داخلی بر اساس Raspberry Pi: این وبلاگ را بخوانید و سیستم خود را بسازید تا بتوانید هنگام خشکی یا رطوبت اتاق خود هشدارها را دریافت کنید. سیستم پایش آب و هوای داخلی چیست و چرا به آن نیاز داریم؟ با نگاهی گذرا به اقلیم کلیدی
سیستم پایش خودکار آب رودخانه: 14 مرحله
سیستم پایش خودکار آب رودخانه: این دستورالعمل برای مستندسازی سیستم نظارت خودکار آب رودخانه استفاده می شود. پارامترهای کنترل شده سطح آب و دمای آب است. هدف این پروژه توسعه یک چوب چوب ارزان قیمت و مستقل بود که
سیستم آبیاری هوشمند با استفاده از IoT # "ساخته شده روی BOLT": 6 مرحله (همراه با تصاویر)
سیستم آبیاری هوشمند با استفاده از IoT # "ساخته شده روی BOLT": سیستم آبیاری هوشمند یک دستگاه مبتنی بر اینترنت اشیا است که قادر است با تجزیه و تحلیل رطوبت خاک و شرایط آب و هوایی (مانند باران) فرآیند آبیاری را خودکار کند. همچنین داده های حسگرها نیز به صورت گرافیکی در BOLT نمایش داده شود
سیستم زنگ ساده توزیع شده برنامه ریزی شده: 6 مرحله
سیستم زنگ ساده توزیع شده: من در یک برنامه آموزشی کار می کنم که خارج از محوطه معمول دبیرستان تنظیم شده است. از آنجا که ما عمدتا در یک ساختمان اداری بدون امکانات رفاهی معمولی یک مدرسه هستیم ، زنگ هایی برای هشدار برای پایان یا شروع کلاس نداریم. دانش آموزانی که ما