Python ile Robotik Kodlama: Temel Komutlar ve Uygulamalar
Yapay zeka, makine öğrenimi ve veri biliminin tartışmasız lider dili olan Python, modern robotik dünyasında da çığır açmaktadır. Geçmişte mikrodenetleyici programlama neredeyse tamamen C ve C++ dillerinin tekelindeyken; işlemcilerin güçlenmesi, tek kartlı mini bilgisayarların (Raspberry Pi) yaygınlaşması ve MicroPython / CircuitPython projelerinin olgunlaşması sayesinde Python fiziksel bilişimin kalbine yerleşmiştir.
NASA'nın Mars gezginlerinden Tesla'nın otonom sürüş algoritmalarına, insansı robotlardan akıllı fabrika kollarında çalışan ROS (Robot Operating System) mimarilerine kadar üst düzey robotik sistemlerin tamamında Python ana omurgayı oluşturur.
Bu kapsamlı rehberde; Python dilinin robotikteki yerini, donanım kontrol kütüphanelerini, temel GPIO komutlarını, çoklu iş parçacığı (multithreading) yönetimini ve çalışan örnek uygulamaları adım adım keşfedeceksiniz.
⚖️ Robotikte C++ mı Python mı? Karşılaştırma Tablosu
| Değerlendirme Kriteri | C / C++ (Arduino Standardı) | Python (Raspberry Pi & MicroPython) |
|---|---|---|
| Çalışma Hızı & Bellek | Çok hızlı, derlenen (Compiled) makine kodu, düşük RAM kullanımı | Yorumlanan (Interpreted) dil, C++'a göre daha yavaş fakat işlemciler için yeterli |
| Öğrenme Kolaylığı | Noktalı virgüller, parantezler, katı veri tipleri (Öğrenmesi zor) | Temiz, okunabilir, girintilere (indentation) dayalı sade sözdizimi |
| Yapay Zeka & Görüntü İşleme | Kütüphaneler karmaşık ve entegrasyonu zordur | OpenCV, TensorFlow, PyTorch ve MediaPipe ile kusursuz uyum |
| Kullanım Alanı | Düşük seviyeli motor PWM sürücüleri, anlık mikrosaniye sensör okumaları | Yüksek seviyeli karar algoritmaları, kamera takibi, web arayüzleri, otonom rota planlama |
| En İyi Kombinasyon | Hibrit Model: Motorları ve sensörleri Arduino (C++) yönetir; kararları ve kamerayı Raspberry Pi (Python) yönetir. |
🛠️ Python ile Donanım Kontrol Kütüphaneleri
Python'un fiziksel dünyayla konuşmasını sağlayan standart kütüphaneler:
gpiozero (En Kolay Raspberry Pi Kütüphanesi): LED, buton, motor ve mesafe sensörünü nesne yönelimli olarak tek satırda tanımlamanızı sağlar.RPi.GPIO: Geleneksel Raspberry Pi pin kontrol kütüphanesidir.machine (MicroPython Kartları İçin): Raspberry Pi Pico ve ESP32 kartlarında pin, PWM, ADC ve I2C hatlarını doğrudan mikrodenetleyici üzerinde çalıştırmak için kullanılır.time: Gecikme (sleep) ve zaman ölçümü için standart kütüphanedir.cv2 (OpenCV): Kameradan gelen canlı video karelerini işleyerek renk, yüz ve nesne takibi yapmayı sağlar.pyserial: Arduino ile Raspberry Pi arasında USB seri port üzerinden iki yönlü veri haberleşmesi kurar.💻 1. Uygulama: Python ile LED Yakıp Söndürme (Blink)
Raspberry Pi (Python 3 & gpiozero)
from gpiozero import LED
from time import sleep
# GPIO 17 pinine bağlı LED'i tanımla
led = LED(17)
print("Robotik LED döngüsü başlatıldı. Durdurmak için Ctrl+C yapın.")
try:
while True:
led.on() # 3.3V elektrik ver (YAK)
sleep(1.0) # 1 saniye bekle
led.off() # Elektriği kes (SÖNDÜR)
sleep(1.0) # 1 saniye bekle
except KeyboardInterrupt:
print("Program kullanıcı tarafından durduruldu.")
MicroPython (Raspberry Pi Pico / ESP32)
from machine import Pin
import time
# Kart üzerindeki 25. pindeki LED'i çıkış olarak ayarla
led = Pin(25, Pin.OUT)
while True:
led.toggle() # Durumu tersine çevir (Açıksa kapat, kapalıysa aç)
time.sleep(0.5) # Yarım saniye bekle
🔘 2. Uygulama: Buton ile Olay Güdümlü Kontrol
Geleneksel dillerde butonun basılıp basılmadığını anlamak için sürekli bir while döngüsünde sorgu yapmak gerekir. Python'un gpiozero kütüphanesi ise arka planda kesme (interrupt) kullanarak işlemciyi yormadan çalışır:
from gpiozero import Button, LED
from signal import pause
led = LED(17)
buton = Button(2) # GPIO 2'ye bağlı buton
# Olay dinleyicileri (Event Listeners)
buton.when_pressed = led.on # Butona basıldığı an LED yansın
buton.when_released = led.off # Buton bırakıldığı an sönsün
print("Sistem hazır. Butona basılmasını bekliyor...")
pause() # Programın kapanmasını önle ve dinlemede kal
🚗 3. Uygulama: DC Motor Sürücü ve PWM Hız Kontrolü
L298N motor sürücüsüyle 2 tekerlekli bir robot arabayı Python ile ileri, geri ve viraj döndürme:
from gpiozero import Motor
from time import sleep
# Sol motor pinleri: İleri pini, Geri pini, PWM hız pini
sol_motor = Motor(forward=24, backward=23, enable=25)
# Sağ motor pinleri
sag_motor = Motor(forward=22, backward=27, enable=18)
def ileri(hiz=0.8):
sol_motor.forward(hiz)
sag_motor.forward(hiz)
def dur():
sol_motor.stop()
sag_motor.stop()
def saga_don(hiz=0.6):
sol_motor.forward(hiz)
sag_motor.backward(hiz)
# Test sürüşü
print("Robot 2 saniye ileri gidiyor...")
ileri(0.8)
sleep(2)
print("Sağa dönüş yapılıyor...")
saga_don(0.7)
sleep(1)
dur()
print("Robot durdu.")
👁️ 4. İleri Seviye: OpenCV ile Renk Takip Eden Kamera Algoritması
Bir robotun önüne takılan USB kamera veya Raspberry Pi Kamera Modülü ile ortamdaki sarı bir tenis topunu algılayıp takip etme mantığı:
import cv2
import numpy as np
# Kamerayı başlat (0 = Dahili / USB web cam)
kamera = cv2.VideoCapture(0)
# Takip edilecek rengin HSV formatındaki alt ve üst sınırları (Sarı renk)
sari_alt = np.array([20, 100, 100])
sari_ust = np.array([30, 255, 255])
while True:
ret, kare = kamera.read()
if not ret:
break
# Görüntüyü BGR'dan HSV renk uzayına çevir
hsv = cv2.cvtColor(kare, cv2.COLOR_BGR2HSV)
# Sarı rengi filtrele (Sarı yerler beyaz, diğer yerler siyah maske olur)
maske = cv2.inRange(hsv, sari_alt, sari_ust)
# Konturları (nesne sınırlarını) bul
konturlar, _ = cv2.findContours(maske, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
if konturlar:
en_buyuk_kontur = max(konturlar, key=cv2.contourArea)
alan = cv2.contourArea(en_buyuk_kontur)
if alan > 500: # Gürültüleri engelle
x, y, w, h = cv2.boundingRect(en_buyuk_kontur)
merkez_x = x + w // 2
# Ekran genişliği 640 pikseldir. Merkez 320'dir.
if merkez_x < 280:
print("Nesne solda -> Robota SOLA DÖN komutu gönder")
elif merkez_x > 360:
print("Nesne sağda -> Robota SAĞA DÖN komutu gönder")
else:
print("Nesne ortalandı -> Robota İLERİ GİT komutu gönder")
if cv2.waitKey(1) & 0xFF == ord('q'):
break
kamera.release()
cv2.destroyAllWindows()
🌐 5. Uygulama: Flask ile Web Arayüzünden Kontrol Edilen Robot
Python'un mikro web framework'ü Flask sayesinde yalnızca 15 satır kodla robotunuz için cep telefonunuzdan yönetilebilen bir web paneli oluşturabilirsiniz:
from flask import Flask
from gpiozero import Motor
app = Flask(__name__)
motorlar = Motor(forward=24, backward=23)
@app.route('/ileri')
def ileri_git():
motorlar.forward(0.8)
return "Robot İleri Gidiyor"
@app.route('/dur')
def robot_dur():
motorlar.stop()
return "Robot Durdu"
if __name__ == '__main__':
# Robotun IP adresi üzerinden 5000 portunda yayına başla
app.run(host='0.0.0.0', port=5000)
💡 Python ile Robot Geliştirirken 3 Hayati Kural
sudo halt veya sudo shutdown now komutuyla kapatın.❓ Sıkça Sorulan Sorular (SSS)
Arduino üzerinde doğrudan Python çalıştırılabilir mi?
Standart Arduino Uno'nun hafızası (32 KB Flash, 2 KB RAM) bir Python yorumlayıcısını çalıştırmak için çok düşüktür. Ancak Arduino ile bilgisayar seri port üzerinden haberleştirilerek (PySerial kütüphanesi) Python komutları Arduino'ya gönderilebilir. Doğrudan kart üzerinde Python çalıştırmak için Raspberry Pi Pico, ESP32 veya BBC micro:bit tercih edilmelidir.
Raspberry Pi olmadan MicroPython öğrenebilir miyim?
Evet. Yalnızca 4-5 dolar fiyatındaki Raspberry Pi Pico veya ESP32 kartını bilgisayarınıza takarak Thonny IDE üzerinden saniyeler içinde MicroPython ile donanım kodlamaya başlayabilirsiniz.