حسگر رنگ در روبی: ربات رنگها را میبیند
ربات روبی فقط رنگ نمیزند؛ رنگها را میخواند هم. با حسگر رنگ میتواند یک خط رنگی را دنبال کند یا با دیدن یک رنگ خاص بپیچد.
حسگر رنگ چه کار میکند؟
دو نوع حسگر رنگ داریم. colorSensor اسم رنگ خانهی زیر پای روبی را بهشکل متن انگلیسی برمیگرداند، مثل red یا blue، و اگر خانه رنگ نداشته باشد none برمیگرداند. حسگرهای بلهوخیر هم هستند: onRed یعنی «زیر پایم قرمز است؟» و frontIsRed، leftIsRed و rightIsRed همین را برای خانهی جلو، چپ و راست میپرسند.
این حسگرها برای همهی رنگها کار میکنند و اسم رنگ را میتوان فارسی هم نوشت: جلو_قرمز، چپ_آبی، راست_سبز و روی_زرد. برای «هر رنگی» هم frontIsPaint یا frontIsPainted و برای زیر پا onPaint یا روی_رنگ هست. رنگ سفید هم رنگ حساب میشود.
شکل بلوکی و شکل کد
در فهرست کشویی بلوکهای اگر و تا_وقتی، حسگرهای رنگ جلو، راست و چپ برای شش رنگ سفید، سیاه، قرمز، سبز، آبی و زرد آمدهاند. در کد همهی رنگها در دسترساند.
- ✅ مقایسهی متن: if colorSensor = "red": (با یک علامت مساوی)
- ✅ خانهی بیرنگ: if colorSensor = none:
- ✅ زیر پا: onRed، isRed، روی_قرمز
- ✅ کنار: frontIsBlue، leftIsGreen، جلو_آبی
یک مثال کوچک با ربات روبی
روبی روی یک مسیر رنگی است و هر جا خانهی جلو سیاه باشد باید به راست بپیچد: while not onTarget: و داخلش if frontIsBlack: right، else: forward. برای ماموریتهای تمیزکاری هم if onPaint: erasePaint فقط خانههای رنگی را پاک میکند.
اشتباههای رایج
خروجی colorSensor همیشه اسم انگلیسی رنگ است؛ پس مقایسه با "قرمز" جواب نمیدهد و باید "red" نوشت. در مقایسهی متن هم یک علامت مساوی به کار میرود، چون == در روبی فقط با عدد کار میکند.
- ✅ مقایسهی colorSensor با اسم فارسی رنگ
- ✅ نوشتن == بهجای = برای مقایسهی متن
- ✅ قاطی کردن onRed (زیر پا) با frontIsRed (خانهی جلو)
در کدام درسها و لیگها استفاده میشود؟
حسگر رنگ موضوع اصلی درس ۱۹ «دنبال رنگ» است و در درس ۲۲ «الگوریتم نقاش» همراه حلقه و شرط برای ساختن و اصلاح الگو به کار میرود. colorSensor در آزمایشگاه آزاد هم جزو پنل زندهی حسگرهاست.
نکته برای والدین و معلم
رباتهای واقعی دنبالکنندهی خط هم با حسگر رنگ کار میکنند. این ارتباط را به کودک بگویید؛ شنیدن اینکه همین ایده در کارخانهها و انبارها به کار میرود، انگیزهی زیادی میسازد.
سوالهای پرتکرار
colorSensor برای خانهی بیرنگ چه برمیگرداند؟
none؛ میتوانید بنویسید if colorSensor = none:
آیا حسگر رنگ اسم فارسی دارد؟
بله، برای حسگرهای بلهوخیر: جلو_قرمز، چپ_آبی، روی_زرد و مانند اینها.
چرا colorSensor == "red" خطا میدهد؟
در روبی == فقط بعد از خود یک عدد میآید؛ برای متن یک علامت مساوی بنویسید.