3'ü 1 Arada Çok Fonksiyonlu Robot Araba Kiti, aynı şasi üzerinde üç projeyi birleştirir: Bluetooth ile telefondan kontrol, IR kumandayla kontrol ve ultrasonik sensörle engelden kaçma. Bu yazıda tek bağlantı şeması ve üç modu da içeren tek bir kod paylaşıyoruz.
Bağlantı Şeması
L298N: IN1→D5, IN2→D6, IN3→D9, IN4→D10. HC-06: TXD→D0, RXD→D1 (kod yüklerken çıkarın). IR alıcı OUT→D11. HC-SR04: TRIG→A0, ECHO→A1. Servo sinyal→D3. Modüller Arduino 5V'tan, Arduino pilden VIN ile beslenir; GND'ler ortak.
Standart set (4'lü AA pil kutusu, 6V):

18650 pil yuvalı set (2x18650, 7,4V):

Mod Seçimi Nasıl Çalışır?
- Telefon (Bluetooth): F/B/L/R/S karakterleri robotu sürer; A karakteri otonom modu açar, M kapatır.
- Kumanda (IR): yön tuşları robotu sürer; OK tuşu otonom modu açar/kapatır.
- Otonom: HC-SR04 ile mesafe ölçülür, engel görününce servo sağa-sola bakıp boş tarafa döner.
Arduino Kodu
Önce Arduino IDE'de Kütüphane Yöneticisi'nden "IRremote" kütüphanesini kurun (kod, kütüphanenin güncel 4.x sürümüne göre yazıldı). Tuş kodları kitteki 17 tuşlu kumandaya göredir; farklı bir kumanda kullanıyorsanız Seri Monitör'de (9600 baud) görünen "IR komut" değerlerini KOD_* satırlarına yazın.
// 3'ü 1 Arada Robot - Bluetooth + IR + Engelden Kaçma
// Atölye Elektronik - IRremote 4.x sürümü için
#include <IRremote.hpp>
#include <Servo.h>
#define IN1 5
#define IN2 6
#define IN3 9
#define IN4 10
#define IR_PIN 11
#define TRIG A0
#define ECHO A1
#define SERVO_PIN 3
// Kitteki 17 tuşlu kumandanın komut kodları
#define KOD_ILERI 0x18 // yukarı ok
#define KOD_GERI 0x52 // aşağı ok
#define KOD_SOL 0x08 // sol ok
#define KOD_SAG 0x5A // sağ ok
#define KOD_DUR 0x1C // OK tuşu: otonom aç/kapat
Servo kafa;
bool otonom = false;
void ileri() { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); }
void geri() { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); }
void sola() { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); }
void saga() { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); }
void dur() { digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); }
long mesafe() {
digitalWrite(TRIG, LOW); delayMicroseconds(2);
digitalWrite(TRIG, HIGH); delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long sure = pulseIn(ECHO, HIGH, 30000);
return sure == 0 ? 400 : sure * 0.034 / 2;
}
void komut(char c) {
switch (c) {
case 'F': ileri(); break;
case 'B': geri(); break;
case 'L': sola(); break;
case 'R': saga(); break;
case 'S': dur(); break;
case 'A': otonom = true; break;
case 'M': otonom = false; dur(); break;
}
}
void setup() {
Serial.begin(9600);
pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
pinMode(TRIG, OUTPUT); pinMode(ECHO, INPUT);
IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK);
kafa.attach(SERVO_PIN); kafa.write(90);
dur();
}
void loop() {
if (Serial.available()) komut(Serial.read());
if (IrReceiver.decode()) {
uint8_t kod = IrReceiver.decodedIRData.command;
// Tuşu basılı tutunca gelen tekrar sinyalinde OK tuşu modu tekrar değiştirmesin
bool tekrar = IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT;
Serial.print("IR komut: 0x");
Serial.println(kod, HEX);
switch (kod) {
case KOD_ILERI: otonom = false; ileri(); break;
case KOD_GERI: otonom = false; geri(); break;
case KOD_SOL: otonom = false; sola(); break;
case KOD_SAG: otonom = false; saga(); break;
case KOD_DUR: if (!tekrar) { otonom = !otonom; dur(); } break;
}
IrReceiver.resume();
}
if (otonom) {
if (mesafe() > 25) { ileri(); return; }
dur(); delay(150); geri(); delay(300); dur();
kafa.write(150); delay(350); long sol = mesafe();
kafa.write(30); delay(350); long sag = mesafe();
kafa.write(90); delay(250);
if (sol > sag) sola(); else saga();
delay(400); dur();
}
}
İpuçları ve Sorun Giderme
- HC-06 D0/D1'e bağlıyken kod yüklenmez — önce kabloları çıkarın, yükleyin, sonra takın.
- Derlerken "decode_results" veya "IRrecv" hatası: Yazının eski kodunu kullanıyorsunuz; yukarıdaki güncel kodu yükleyin.
-
Kumanda tepki vermiyor: Seri Monitör'de "IR komut" satırı görünmüyorsa IR alıcı bağlantısını (OUT→D11, VCC→5V) kontrol edin; görünüyor ama robot hareket etmiyorsa görünen değerleri
KOD_*satırlarına yazın. - IR alıcı doğrudan güneş ışığında yanıltıcı sinyal alabilir; iç mekanda deneyin.
- Motor ters dönerse ilgili OUT uçlarını yer değiştirin.
Kitin içinde 2WD gövde, Arduino Uno, L298N, HC-06, IR kumanda seti, HC-SR04, SG90 servo, pil yuvası ve jumper kablolar dahil. Satın almak için 3'ü 1 Arada Robot Araba Kiti veya 18650 Pil Yuvalı versiyonu sayfasına göz atın.