Arduino ile Robotik Kodlamaya Giriş: İlk 5 Uygulama
Dünyanın en popüler açık kaynaklı fiziksel programlama platformu olan Arduino, robotik kodlama öğrenmek isteyenlerin ilk durağıdır. Basit C++ sözdizimi, zengin kütüphane desteği ve binlerce farklı sensörle tak-çalıştır uyumu sayesinde hem ilkokul seviyesindeki bir öğrenci hem de profesyonel bir mühendis Arduino ile harikalar yaratabilir.
Bu kapsamlı rehberde; teoride boğulmadan doğrudan devre tahtası başına geçip inşa edebileceğiniz en temel 5 başlangıç uygulamasını devre şemaları, pin tabloları, çalışma prensipleri ve test edilmiş tam kaynak kodlarıyla adım adım inceliyoruz.
🖥️ Arduino'nun Anatomisi: Pinleri ve Çalışma Mantığını Tanıyalım
Projelerimize başlamadan önce kart üzerindeki pin gruplarını anlamak hayati önem taşır:
HIGH (5V - Mantıksal 1) veya LOW (0V - Mantıksal 0). LED yakma, röle tetikleme veya buton okuma gibi işlemlerde kullanılır.🛠️ 1. Uygulama: Harici LED Yakıp Söndürme (Blink Devresi)
Robotik kodlamanın "Hello World"ü LED yakıp söndürmektir. Bu uygulamada dijital çıkış mantığını, akım sınırlama direncini ve gecikme fonksiyonunu kavrıyoruz.
Gerekli Malzemeler
Devre Bağlantı Tablosu
| Bileşen Bacağı | Bağlanacak Yer | Açıklama |
|---|---|---|
| LED Anot (+ Uzun Bacak) | 220Ω Direnç üzerinden Arduino Pin 8 | Dijital kontrol sinyali |
| LED Katot (- Kısa Bacak) | Doğrudan Arduino GND Pini | Topraklama hattı |
Arduino C++ Kodu
// 1. Uygulama: Harici LED Blink
const int ledPin = 8; // LED 8. pine bağlandı
void setup() {
pinMode(ledPin, OUTPUT); // 8. pini çıkış olarak tanımla
}
void loop() {
digitalWrite(ledPin, HIGH); // LED'e 5V elektrik ver (YAK)
delay(1000); // 1000 milisaniye (1 saniye) bekle
digitalWrite(ledPin, LOW); // LED'in elektriğini kes (SÖNDÜR)
delay(1000); // 1 saniye bekle
}
Kod Satırı İncelemesi:
pinMode(ledPin, OUTPUT);: Arduino'ya 8. pinden dışarıya elektrik akımı vereceğimizi bildirir.digitalWrite(ledPin, HIGH);: 8. pinden tam 5V çıkış verir.delay(1000);: İşlemciyi 1 saniye boyunca bu durumda kilitler.🔘 2. Uygulama: Buton ile LED Kontrolü (Dijital Giriş Okuma)
Robotların kullanıcı komutlarına veya fiziksel temas anahtarlarına nasıl tepki verdiğini öğreniyoruz.
Pull-Down Direnci Neden Zorunludur?
Butona basılmadığı anlarda pin havada kalır (floating pin). Ortamdaki statik elektrik yüzünden Arduino pini rastgele 1 ve 0 okur. Pin ile GND arasına 10kΩ bir pull-down direnci bağlayarak butona basılmadığında pinin kararlı bir şekilde 0V (LOW) kalmasını garanti ederiz.
Devre Bağlantı Tablosu
| Bileşen | Bağlantı Noktası | Görev |
|---|---|---|
| Push Buton 1. Bacak | Arduino 5V | Giriş voltajı beslemesi |
| Push Buton 2. Bacak | Arduino Pin 2 + 10kΩ Dirençle GND | Pull-down dirençli sinyal hattı |
| LED Anot (+) | 220Ω Direnç üzerinden Pin 8 | Kontrol edilen lamba |
| LED Katot (-) | Arduino GND | Eksi hat |
Arduino C++ Kodu
const int buttonPin = 2;
const int ledPin = 8;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT); // Buton sinyalini okumak için INPUT
}
void loop() {
int buttonState = digitalRead(buttonPin); // Buton durumunu oku (1 veya 0)
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH); // Butona basılıyorsa LED yansın
} else {
digitalWrite(ledPin, LOW); // Basılmıyorsa sönsün
}
}
☀️ 3. Uygulama: LDR ile Otomatik Gece Lambası (Analog Giriş)
Bu uygulamada robotların ortam ışığını nasıl sayısal verilere dönüştürdüğünü öğreniyoruz.
Devre Mantığı
LDR ışık aldığında direnci düşer (yaklaşık 1kΩ), karanlıkta ise direnci megaohm seviyesine çıkar. 10kΩ dirençle kurulan gerilim bölücü devre sayesinde ışık değiştikçe A0 pinine gelen voltaj 0V ile 5V arasında değişir. Arduino bu voltajı 0 ile 1023 arasında bir sayı olarak okur.
Arduino C++ Kodu
const int ldrPin = A0;
const int ledPin = 8;
const int esikDegeri = 500; // Karanlık eşik sınırı
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // Seri monitörü başlat
}
void loop() {
int isikSeviyesi = analogRead(ldrPin); // 0 - 1023 arası değer oku
Serial.print("Işık Değeri: ");
Serial.println(isikSeviyesi);
if (isikSeviyesi < esikDegeri) {
digitalWrite(ledPin, HIGH); // Ortam karanlıksa lambayı aç
} else {
digitalWrite(ledPin, LOW); // Aydınlıksa kapat
}
delay(200);
}
🚗 4. Uygulama: HC-SR04 Ultrasonik Park Sensörü
Otomobillerdeki geri vites park sensörü sistemini ses dalgalarıyla kuruyoruz.
Ses Dalgalarıyla Mesafe Nasıl Ölçülür?
Ses havada yaklaşık 340 m/s (yani 0.0343 cm/µs) hızla yayılır. Sensörün Trig pininden 40 kHz'lik bir ses darbesi fırlatılır. Ses cisme çarpıp geri döndüğünde Echo pini HIGH olur. Sürenin yarısı (gidiş mesafesi) ses hızıyla çarpılarak santimetre bulunur.
Devre Bağlantı Tablosu
| HC-SR04 Sensör Pini | Arduino Pini |
|---|---|
| VCC | 5V |
| GND | GND |
| Trig (Tetik) | Pin 9 |
| Echo (Yankı) | Pin 10 |
| Buzzer (+) | Pin 6 |
| Buzzer (-) | GND |
Arduino C++ Kodu
const int trigPin = 9;
const int echoPin = 10;
const int buzzerPin = 6;
long sure;
int mesafe;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// 10 mikrosaniyelik ses dalgası fırlat
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Sesin geri dönüş süresini mikrosaniye cinsinden ölç
sure = pulseIn(echoPin, HIGH);
mesafe = sure * 0.034 / 2; // Santimetreye çevir
Serial.print("Mesafe: ");
Serial.print(mesafe);
Serial.println(" cm");
if (mesafe < 15 && mesafe > 0) {
digitalWrite(buzzerPin, HIGH); // Cisim 15 cm'den yakınsa uyar
delay(100);
digitalWrite(buzzerPin, LOW);
delay(100);
} else {
digitalWrite(buzzerPin, LOW);
}
delay(100);
}
🚧 5. Uygulama: SG90 Servo Motorlu Otomatik Otopark Bariyeri
Bu projede ultrasonik sensör araç algıladığında servo motor bariyer kolunu 90 derece yukarı kaldırır.
Arduino C++ Kodu
#include <Servo.h>
Servo bariyer;
const int trigPin = 9;
const int echoPin = 10;
long sure;
int mesafe;
void setup() {
bariyer.attach(3); // Servo motor 3. pine bağlandı
bariyer.write(0); // Başlangıçta bariyer kapalı (0 derece)
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
mesafe = sure * 0.034 / 2;
if (mesafe < 10 && mesafe > 0) {
bariyer.write(90); // Araç yaklaştı, bariyeri aç (90 derece)
delay(3000); // Aracın geçmesi için 3 saniye bekle
bariyer.write(0); // Bariyeri tekrar kapat
}
delay(200);
}
🔧 Sık Karşılaşılan Hatalar ve Çözüm Tablosu
| Karşılaşılan Sorun | Olası Neden | Kesin Çözüm |
|---|---|---|
| Port menüsü pasif (Port grayed out) | CH340 sürücüsü eksik | Bilgisayarınıza CH340G USB sürücüsünü kurun |
avrdude: stk500_getsync() hatası | Kart veya Port seçimi yanlış | Tools menüsünden doğru kartı ve COM portunu seçin |
| LED hiç yanmıyor | Bacaklar ters veya direnç çok yüksek | Uzun bacağı artıya bağlayın, 220Ω direnç kullanın |
| Mesafe sensörü sürekli 0 cm gösteriyor | Trig/Echo pinleri karışmış | Trig ve Echo pinlerinin doğru pinlerde olduğunu teyit edin |
| Servo motor titriyor ve reset atıyor | Arduino 5V akımı yetersiz | Servo motoru harici 5V pilden besleyip ortak GND bağlayın |
💡 Sıkça Sorulan Sorular (SSS)
Arduino'ya kod yüklerken devreyi sökmek gerekir mi?
Genellikle hayır. Ancak dijital 0 (RX) ve 1 (TX) pinlerine bağlı Bluetooth veya seri modül varsa, kod yükleme anında bilgisayarla haberleşmeyi engellediği için bu pinlerdeki kabloları yükleme bitene kadar çıkarmanız gerekir.
Kodları yükledikten sonra Arduino'yu bilgisayara bağlı tutmak zorunda mıyım?
Hayır. Kodlar Arduino'nun kalıcı EEPROM/Flash hafızasına yazılır. Bilgisayardan çıkarıp harici bir 9V adaptör veya pil taktığınızda yüklediğiniz kod otomatik olarak anında çalışmaya başlar.