🌈 چراغ خلقوخو — لامپی که رنگ عوض میکند
یکی از رضایتبخشترین پروژههای اول: یک چراغ که آرامآرام رنگ عوض میکند. قطعات کم، نتیجه چشمگیر.
ترکیب رنگ
LED RGB در واقع سه LED در یک بدنه است. با کم و زیاد کردن هرکدام بین ۰ تا ۲۵۵، هر رنگی میسازی: قرمز + سبز = زرد، سبز + آبی = فیروزهای، هر سه = سفید.
مدار
سه پایهی رنگ، هرکدام از طریق مقاومت ۲۲۰ اهمی خودش، به پایههای PWM (۹، ۱۰، ۱۱). پایهی بلند مشترک به GND (نوع کاتد مشترک) یا به ۵ ولت (نوع آند مشترک).
⚠️ هر کانال مقاومت جدا میخواهد. یک مقاومت مشترک روی پایهی بلند باعث میشود رنگها روی هم اثر بگذارند و ترکیبها اشتباه دربیایند.
چرخهی نرم رنگینکمان
const int R = 9, G = 10, B = 11;
void setColor(int r, int g, int b) {
analogWrite(R, r);
analogWrite(G, g);
analogWrite(B, b);
}
void setup() {
pinMode(R, OUTPUT); pinMode(G, OUTPUT); pinMode(B, OUTPUT);
}
void loop() {
// قرمز به سبز
for (int i = 0; i < 256; i++) { setColor(255 - i, i, 0); delay(12); }
// سبز به آبی
for (int i = 0; i < 256; i++) { setColor(0, 255 - i, i); delay(12); }
// آبی به قرمز
for (int i = 0; i < 256; i++) { setColor(i, 0, 255 - i); delay(12); }
}
چرا اینطور نرم است؟
در هر حلقه یک رنگ کم میشود و رنگ بعدی به همان اندازه زیاد — پس روشنایی کل ثابت میماند و گذر رنگ بدون پرش انجام میشود.
نسخهی کنترلدار
// با پتانسیومتر رنگ را انتخاب کن
int pos = map(analogRead(A0), 0, 1023, 0, 767);
if (pos < 256) setColor(255 - pos, pos, 0);
else if (pos < 512) setColor(0, 511 - pos, pos - 256);
else setColor(pos - 512, 0, 767 - pos);
اگر آند مشترک داری
منطق برعکس میشود: analogWrite(pin, 0) یعنی کاملاً روشن. کافی است همهجا 255 - value بنویسی.