Işık takip eden robot, önüne takılan iki LDR ile hangi tarafın daha aydınlık olduğunu ölçüp tekerleklerini o yöne süren bir Arduino projesidir. Sol LDR daha çok ışık görürse robot sola, sağ LDR görürse sağa döner; iki taraf eşitse ileri gider. Devre Arduino Uno, L298N motor sürücü, 2WD şase ve iki 18650 pille kurulur.
Karanlık bir odada el fenerini tuttuğunuz yöne dönüp peşinizden gelen bir robot, sensör okumayı, karar vermeyi ve motor sürmeyi aynı anda öğretir. Bu projede iki ışık sensörü (LDR), Arduino Uno ve L298N motor sürücüyle ışık takip eden bir robot yapıyoruz. Proje ortaokul ve lise teknoloji ödevleri, meslek lisesi atölyeleri ve TÜBİTAK 4006 bilim fuarları için uygundur.
Işık takip eden robot nedir?
Işık takip eden robot, ışık sensörleriyle ortamdaki en parlak yönü bulan ve tekerleklerini o yöne süren otonom bir araçtır. Doğada bu davranışın adı fototaksistir; bazı böcekler ve tek hücreli canlılar ışığa doğru hareket eder.
Robotun "gözleri" iki LDR'dir (Light Dependent Resistor, ışığa bağımlı direnç). LDR'nin direnci karanlıkta yüzlerce kΩ'a çıkar, aydınlıkta birkaç kΩ'a düşer. Arduino bu değişimi gerilim olarak okur ve sol ile sağ tarafı karşılaştırır. LDR'nin yapısını LDR ışık sensörü yazısında anlattık.
Hangi malzemeler gerekir?
Işık takip eden robot için Arduino Uno, iki LDR ve iki 10 kΩ direnç, L298N motor sürücü, iki motorlu 2WD şase ve iki 18650 pilli anahtarlı pil yuvası yeterlidir.
Malzeme listesi
| Malzeme | Adet | Ne işe yarar? |
|---|---|---|
| Arduino Uno R3 (CH340, USB kablolu) | 1 | LDR'leri okur, motorlara karar verir |
| 5 mm LDR ışık sensörü | 2 | Sol ve sağ "göz" |
| 10 kΩ 1/4 W direnç | 2 | LDR ile gerilim bölücü kurar |
| L298N regülatörlü çift motor sürücü | 1 | İki motorun yönünü ve hızını kontrol eder |
| 2WD araç seti | 1 | Şase, iki redüktörlü motor ve tekerlekler |
| 18650 ikili pil yuvası, anahtarlı | 1 | Robotu besler, anahtarla açılır |
| 3,7V 18650 Li-ion pil (korumalı) | 2 | Seri bağlı toplam 7,4V |
| Erkek-dişi jumper kablo, mini breadboard | 1 | Bağlantılar |
| Siyah pipet ya da karton boru | 2 | LDR'lere siper; yan ışığı keser |
2WD araç seti engelden kaçan robot için hazırlanmıştır; kitin içeriğini ürün sayfasından kontrol edin ve içinde olan parçaları ayrıca almayın. Aynı şaseyle yapılan engelden kaçan robot projesini de inceleyebilirsiniz.
Devre nasıl bağlanır?
Her LDR, 5V ile bir analog pin arasına; 10 kΩ direnç de aynı analog pin ile GND arasına bağlanır. Sol LDR A0'a, sağ LDR A1'e gider. L298N'nin kontrol pinleri Arduino'nun D2-D7 pinlerine bağlanır.
| Parça ucu | Arduino pini | Görevi |
|---|---|---|
| Sol LDR / 10 kΩ | 5V → LDR → A0 → 10 kΩ → GND | Sol ışık ölçümü |
| Sağ LDR / 10 kΩ | 5V → LDR → A1 → 10 kΩ → GND | Sağ ışık ölçümü |
| L298N ENA / IN1 / IN2 | D5 / D2 / D3 | Sol motorun hızı ve yönü |
| L298N ENB / IN3 / IN4 | D6 / D4 / D7 | Sağ motorun hızı ve yönü |
| Pil (+), anahtardan sonra | VIN ve L298N 12V girişi | Arduino ve motor beslemesi |
| Pil (−) | GND ve L298N GND | Ortak toprak |
- Motorları ve tekerlekleri şaseye kitin talimatına göre takın.
- LDR'leri robotun ön köşelerine, aralarında 8-10 cm olacak ve hafifçe dışa bakacak şekilde yerleştirin. Her LDR'nin önüne 1-2 cm'lik siyah bir pipet geçirin; böylece her göz yalnızca kendi tarafını görür.
- Gerilim bölücüleri mini breadboard üzerinde kurun: LDR'nin bir bacağı 5V'a, diğer bacağı A0'a (sağda A1'e); 10 kΩ direnç A0 (A1) ile GND arasına.
- Sol motoru L298N'nin OUT1-OUT2, sağ motoru OUT3-OUT4 klemensine bağlayın.
- L298N üzerindeki ENA ve ENB jumper'larını çıkarın ve kontrol pinlerini tablodaki gibi bağlayın. Sürücünün ayrıntıları L298N motor sürücü yazısında.
- Pil kutusunun artısını L298N'nin 12V girişine ve Arduino'nun VIN pinine, eksisini iki GND'ye bağlayın.
- Kodu USB ile yükleyin, USB'yi çıkarın, robotu yere koyup anahtarı açın. Bir tekerlek ters dönüyorsa o motorun iki kablosunu klemenste yer değiştirin.
Robot nasıl karar verir?
Robot, iki LDR okumasının farkına bakar: fark büyükse ışığın olduğu tarafa döner, küçükse ileri gider; iki değer de düşükse ışık yok demektir ve durur. Gerilim bölücüde ışık arttıkça LDR'nin direnci düşer ve analog değer büyür.
| Durum | Koşul (0-1023) | Hareket |
|---|---|---|
| Işık yok | sol < 300 ve sağ < 300 | Durur |
| Işık solda | sol − sağ > 60 | Sol motor yavaş geri, sağ motor ileri: sola döner |
| Işık sağda | sağ − sol > 60 | Sol motor ileri, sağ motor yavaş geri: sağa döner |
| Işık önde | fark 60 ya da daha az | İki motor ileri |
Örnek hesap: LDR aydınlıkta 2 kΩ ise A0 gerilimi 5 × 10 / (2 + 10) ≈ 4,2V olur ve Arduino yaklaşık 853 okur. Karanlıkta 200 kΩ ise gerilim yaklaşık 0,24V'a, okuma 49'a düşer.
Işık takip eden robot kodu nasıl çalışır?
Kod her 20 ms'de iki LDR'yi okur, tablodaki dört durumdan hangisinin geçerli olduğuna bakar ve motor() işleviyle iki tekerleğin yönünü ve hızını ayarlar.
const byte ENA = 5, IN1 = 2, IN2 = 3; // sol motor
const byte ENB = 6, IN3 = 4, IN4 = 7; // sag motor
const int KARANLIK = 300; // ikisi de bunun altindaysa dur
const int FARK = 60; // bu kadar fark varsa don
const int HIZ = 170; // PWM, 0-255
void motor(byte en, byte a, byte b, int hiz) { // hiz: -255..255
digitalWrite(a, hiz > 0);
digitalWrite(b, hiz < 0);
analogWrite(en, abs(hiz));
}
void setup() {
for (byte p = 2; p <= 7; p++) pinMode(p, OUTPUT);
Serial.begin(9600);
}
void loop() {
int sol = analogRead(A0);
int sag = analogRead(A1);
Serial.print(sol);
Serial.print(' ');
Serial.println(sag);
if (sol < KARANLIK && sag < KARANLIK) { // isik yok
motor(ENA, IN1, IN2, 0);
motor(ENB, IN3, IN4, 0);
} else if (sol - sag > FARK) { // isik solda
motor(ENA, IN1, IN2, -HIZ / 2);
motor(ENB, IN3, IN4, HIZ);
} else if (sag - sol > FARK) { // isik sagda
motor(ENA, IN1, IN2, HIZ);
motor(ENB, IN3, IN4, -HIZ / 2);
} else { // isik onde
motor(ENA, IN1, IN2, HIZ);
motor(ENB, IN3, IN4, HIZ);
}
delay(20);
}
Eşik değerleri nasıl ayarlanır?
Robotu USB'ye bağlı tutup seri monitörü 9600 baud ile açın. Önce oda ışığında iki değeri, sonra feneri 30-50 cm'den tuttuğunuzda oluşan değerleri not edin. KARANLIK değerini oda ışığındaki okumanın biraz üstüne koyun; böylece robot yalnızca fenere tepki verir. Robot sağa sola titriyorsa FARK değerini artırın, geç dönüyorsa azaltın.
Hangi güvenlik kurallarına dikkat edilmeli?
Robot 7,4V'luk pille çalışır; 220V şebeke elektriğine hiçbir parça bağlanmaz. Şu kurallara uyun:
- Koruma devreli 18650 pil kullanın; pilleri yuvaya kutupları doğru takın, ezilmiş ya da şişmiş pili kullanmayın.
- Pilleri yalnızca uygun bir Li-ion şarj cihazıyla ve bir yetişkin gözetiminde şarj edin.
- Besleme 12V'u geçmemelidir; iki 18650 pil tam doluyken 8,4V verir.
- Kablo bağlarken anahtar kapalı olsun. Dönen tekerleklere parmak yaklaştırmayın; robotu masa kenarında çalıştırmayın.
- Feneri kimsenin gözüne tutmayın.
Ödevinizi nasıl sunarsınız?
Sunumda sınıfı karartıp robotu el feneriyle bir parkurda gezdirmek en etkili gösteridir.
- Problem: "Ayçiçeği ve güneş paneli takip sistemleri en parlak yönü nasıl bulur?"
- Ölçüm: Seri monitörden aydınlık ve karanlık değerlerini bir tabloya yazın.
- Hesap: Gerilim bölücü formülüyle iki farklı LDR direnci için A0 gerilimini hesaplayın.
- Rapor: Bağlantı şemasını, karar tablosunu ve kodun açıklamasını ekleyin.
- Geliştirme: Koddaki sol ve sağ kararları yer değiştirerek ışıktan kaçan robot yapın. Bu iki davranış, Valentino Braitenberg'in robotik düşünce deneylerindeki araçlara benzer.
Sık sorulan sorular
LDR yerine hazır ışık sensör modülü kullanılabilir mi?
Kullanılabilir. Modülün analog çıkışını (AO) A0 ya da A1'e, VCC'yi 5V'a, GND'yi GND'ye bağlayın; ayrı 10 kΩ direnç gerekmez. Bazı modüllerde ışık arttıkça okunan değer azalır. Seri monitörden kontrol edin; değer ters değişiyorsa koddaki sol ve sağ dönüş koşullarını yer değiştirin.
Robot yerinde dönüp duruyorsa ne yapmalıyım?
Önce iki LDR'nin aynı ışıkta yakın değerler okuduğunu kontrol edin. LDR'ler üretim farkı nedeniyle biraz farklı okuyabilir; fark büyükse FARK değerini artırın. Siper pipetlerinin yerinde olduğundan ve tavan lambasının bir tarafa daha çok ışık vermediğinden emin olun.
Robot gün ışığında çalışır mı?
Güçlü gün ışığında iki LDR de çok yüksek değer okur ve fener fark yaratmaz. Robot en iyi loş bir odada, el feneri ya da telefon feneriyle çalışır. Dışarıda denemek isterseniz siper borularını uzatın ve KARANLIK eşiğini yükseltin.
L298N yerine L9110 kullanılabilir mi?
Kullanılabilir, ama kod değişir. L9110 kartlarında ayrı hız (EN) pini yoktur; her motor iki girişle sürülür ve hız, girişlerden birine PWM verilerek ayarlanır. Bu durumda dört girişin de Arduino'nun PWM pinlerine (D3, D5, D6, D9, D10, D11) bağlanması gerekir.
Robota hangi pil uygundur?
İki seri 18650 Li-ion pil (7,4V) yaygın bir seçimdir. L298N üzerinde yaklaşık 2V gerilim kaybı olduğu için 4 adet AA pil (6V) motorları yavaş döndürür. Pil seçimi için 18650 Li-ion pil rehberi yazısına bakabilirsiniz.
Özet
- Işık takip eden robot, iki LDR'nin okumasını karşılaştırıp aydınlık tarafa döner.
- Bağlantı: LDR'ler 10 kΩ bölücüyle A0 ve A1'e, L298N ENA/IN1/IN2 D5/D2/D3'e, ENB/IN3/IN4 D6/D4/D7'ye.
- Karar: ikisi de 300'ün altındaysa dur, fark 60'tan büyükse dön, değilse ileri git.
- Siyah pipet siperler ve seri monitörle eşik ayarı robotun kararlı çalışmasını sağlar.
- Besleme iki 18650 pilden 7,4V'tur; 220V kullanılmaz, piller yetişkin gözetiminde şarj edilir.
