Smart Home League
جزوهی آموزشی درسبهدرس — زیر ۱۴ سال (پرایمری)
6 درس
نصب و اجرا
پوشهی Smart Home League که دریافت کردهاید دو زیرپوشه دارد: Windows و Mac.
ویندوز
- وارد پوشهی Windows شوید و روی
Smart Home League.exe دوبار کلیک کنید.
- اگر بار اول ویندوز پیام امنیتی داد: More info و سپس Run anyway را بزنید.
- پنجرهی بازی خودش باز میشود — همین!
مک
- وارد پوشهی Mac شوید و روی
Smart Home League (Mac).command دوبار کلیک کنید.
- اگر مک اجازه نداد: روی همان فایل راستکلیک → Open → Open (فقط بار اول لازم است).
- اگر مک پیشنهاد نصب ابزار خط فرمان (python3) داد، Install را بزنید و بعد از پایان، دوباره دوبار کلیک کنید.
در خودِ برنامه: زبان از منوی ☰ قابل تغییر است؛ «کد پایه»، «هلپرها» و «حالت مسابقه» روی صفحهی اول هر لیگ هستند و کتابچهی کامل قوانین از دکمهی «قوانین» باز میشود.
هلپر AI در U14 — قدرتهای اضافه
همان هلپر AI فرستاستپ است، با حسها و حرکتهای بیشتر:
- قطبنما: حرکتِ «Turn to °» بچرخ-تا-درجهی مطلق است — ربات آنقدر میچرخد تا heading همان عدد شود.
- شمارهی اتاق و درصد تمیزی: حسهای room و clean را روی یک قانون بیندازید: «اگر در اتاق ۲ بودم و اتاق ۲ بیش از ۸۰٪ تمیز بود…».
- قانون سهحرکته: هر قانون تا ۳ حرکت پشتسرهم دارد — «بچرخ به ۲۷۰ ← مستقیم برو ← بچرخ به ۱۸۰» دقیقاً مسیر خروج از اتاق است.
- دکمهی «🚪 قانونِ خروج از اتاقِ تمامشده» همین قانون نمونه را یکجا میسازد؛ درجهی هر مرحله را با نقشهی خودتان تنظیم کنید.
- مثل همیشه: ▶ اجرا، ⬇ ذخیره، و عددهای زرد قابل ویرایش در خودِ کد.
سنسورهای ربات در یک نگاه
- سه سنسور فاصلهی آلتراسونیک (US) —
front روبهجلو، frontleft جلو سمتِ چپ، frontright جلو سمتِ راست (سانتیمتر).
- بامپر —
bumperfront و bumperback (۰ یا ۱).
- سنسور رنگ —
color.
- قطبنما —
heading از ۰ تا ۳۵۹ درجه.
- شمارهی اتاق و درصد تمیزی —
room و clean1..clean5.
سه سنسور فاصلهی آلتراسونیک (US): front جلوی ربات، frontleft جلو-چپ، frontright جلو-راست — و حلقهی نارنجی، بامپر (سپر لمسی) است
پیش از شروع
نکته: برنامهی ربات ۱۰ بار در ثانیه از بالا تا پایین اجرا میشود؛ مقداری که در wheelleft و wheelright میگذارید تا اجرای بعدی میماند. هر درس یک برنامهی کامل و قابلاجراست — آن را در بخش «آموزش» داخل برنامه اجرا کنید یا در ادیتور مسابقه بگذارید.
درس ۱ — سه سنسور فاصله، بدون توقف
خانهی U14 بزرگتر است و وقت طلاست: بهجای «بایست و بچرخ»، با سه سنسور جلو فرمان بده. مانعِ چپ؟ قوس به راست. مانعِ راست؟ قوس به چپ. روبهرو بسته؟ چرخش درجا. چرخهایی که نمیایستند یعنی کاشیهایی که پشتسرهم رنگ میشوند.
wheelleft = 25
wheelright = 25
if front < 60: # روبهرو بسته
wheelleft = 18
wheelright = -18
elif frontleft < 50: # مانع سمت چپ
wheelleft = 25
wheelright = 8
elif frontright < 50: # مانع سمت راست
wheelleft = 8
wheelright = 25
نتیجهی مورد انتظار: ربات بدون ایست در خانهی بزرگ میگردد و از کنار مبلها سُر میخورد. توجه داشته باشید: قوسِ پیوسته دور یک پایهی صندلی میتواند «مدار» شود — درس ۶ راهحلش را دارد.
درس ۲ — فرشها پول نمیدهند
سنسور رنگ فرش را قبل از ورود میبیند: green فرش بزرگ است — نصف سرعت و صفر امتیاز؛ purple فرش کوچک — صفر امتیاز. در U14 کفِ خیس هم هست که ۲ کاشی جریمه دارد و از رنگ دیده نمیشود — پس عادتِ دورماندن از فرشها مسیرهای امنتر هم میسازد.
wheelleft = 25
wheelright = 25
if timer > 0:
timer -= 1
wheelleft = -25
wheelright = -8 # عقبِ کج: هم دور میشوی هم میچرخی
elif color == green: # فرش بزرگ
timer = 8
elif color == purple: # فرش کوچک
timer = 5
نتیجهی مورد انتظار: نرسیده به فرش سبز، با قوسِ عقبگرد ازش جدا میشود و مسیر تازه میگیرد. timer فرش سبز عمداً بلندتر است (۸ در برابر ۵) — سبز گرانتر است!
درس ۳ — تایمر و state: مانورِ چندتکه
گاهی یک مانور دو تکه دارد: «عقب بکش، بعد بچرخ». timer میگوید چقدر، و state یادش میماند کدام تکهایم: state = 2 دندهعقب، state = 1 چرخش به راست. بلوک بالای منطق با همین دو عدد، مانور را قدمبهقدم پیش میبرد.
wheelleft = 25
wheelright = 25
if timer > 0:
timer -= 1
if state == 2: # تکهی ۱: عقب
wheelleft = -25
wheelright = -25
if timer == 0: # عقب تمام شد؟
state = 1 # -> تکهی ۲: چرخش
timer = 4
else: # state == 1
wheelleft = 18
wheelright = -18
elif bumper == 1: # خوردم!
state = 2 # اول عقب...
timer = 5
نتیجهی مورد انتظار: بعد از هر برخورد، اول نیمثانیه عقب میکشد و «بعد» میچرخد — دو تکه، پشتسرهم، بدون گیجبازی. timer = 4 چرخش را کوتاه و بلند کنید تا زاویه عوض شود.
درس ۴ — سه سبک برای حرکتِ ماندگار
سه ابزار دارید: سبک ۱ timer + بلوک شمارش (خودتان میشمارید). سبک ۲ movetime — چرخها را تنظیم کنید و بگویید چند قدم نگهشان دارد؛ شمارش خودکار است. سبک ۳ حرکتهای آسان — backward(2) و دوستانش؛ عدد = ثانیه. کد پایین سبک ۱ را اجرا میکند؛ کامنتها ۲ و ۳ را نشان میدهند.
wheelleft = 25
wheelright = 25
# سبک ۱: تایمر
if timer > 0:
timer -= 1
wheelleft = -25
wheelright = -25
elif color == green:
timer = 20 # ۲۰ قدم = ۲ ثانیه
wheelleft = -25
wheelright = -25
# سبک ۲: movetime — بالا را پاک کن و امتحان کن:
# if color == green:
# wheelleft = -25
# wheelright = -25
# movetime = seconds(2)
# سبک ۳: حرکت آسان — کوتاهترین:
# if color == green:
# backward(2)
نتیجهی مورد انتظار: هر سه سبک همان یک کار را میکنند: ~۲ ثانیه عقب وقتی سبز پیدا شد. اول سبک ۱ را اجرا کنید، بعد دوتای دیگر را از کامنت دربیاورید — و شمارشِ timer / movetime را زنده در پنل ببینید.
درس ۵ — قطبنما (heading)
چیزی که U14 دارد و FS ندارد: heading — جهتِ ربات از ۰ تا ۳۵۹ درجه (۰ = شرق، ۹۰ = شمال، ۱۸۰ = غرب، ۲۷۰ = جنوب). با آن میتوانید «رو به شمال شو» بنویسید، مسیر شما را بعد از ده مانور دوباره پیدا کنید، یا نیمهی حریف را نشانه بگیرید.
wheelleft = 25
wheelright = 25
# رو به شمال (۹۰ درجه) شو، بعد مستقیم برو
if heading < 82 or heading > 98:
wheelleft = -12 # بچرخ تا شمالی شوی
wheelright = 12
else:
wheelleft = 25 # شمالی هستی -> بران
wheelright = 25
if bumper == 1: # به چیزی خوردی؟
backward(1) # عقب — و باز رو به شمال
نتیجهی مورد انتظار: ربات اول درجا میچرخد تا heading در پنل حدود ۹۰ شود، بعد صاف به سمت شمال میراند؛ بعد از هر برخورد هم دوباره شمال را پیدا میکند. 90 را ۰ کنید تا شرقرو شود.
درس ۶ — کنج، و درسِ «همیشه یکطرف»
وقتی هر سه سنسور فاصله عدد کوچک میگویند، در کنجی — تکانهای کوچک شما را برمیگردانند همانجا؛ یک چرخش حسابی لازم است. و یک یافتهی اندازهگیریشده از کد قهرمان: فرارِ «هر بار یکطرف» ربات را بین دو مانع موج میاندازد. در آزمایش ما، همیشه-راست ۱۴۲ کاشی گرفت و فرارِ متغیر فقط ۵۴!
wheelleft = 25
wheelright = 25
if timer > 0:
timer -= 1
wheelleft = 18 # چرخش به راست — همیشه راست!
wheelright = -18
elif front < 55 and frontleft < 55 and frontright < 55:
timer = 8 # کنج: چرخش بزرگ (~۱۳۰ درجه)
elif front < 70:
timer = 3 # دیوار: چرخش کوتاه
نتیجهی مورد انتظار: در فضای باز صاف میراند، کنارِ دیوار چرخش کوتاه میزند و در کنجها یکباره ~۱۳۰ درجه میچرخد و آزاد میشود. حالا کد کامل «🏆 قهرمان U14» را از منوی رباتها بردارید و مقایسه کنید — همین درسها آنجا کنار هماند.