
Projenin Tanıtımı
Bu projede, Raspberry Pi kullanarak OpenCV ile top takibi yapan ve servo motorlar aracılığıyla kalecilik yapan bir düzenek oluşturuyoruz. Bu proje, hem görüntü işleme hem de robotik kontrolü birleştirerek teknolojiyi pratik bir şekilde kullanmanıza olanak tanır. Maker’lar ve robotik tutkunları için harika bir örnek proje!
Malzeme Listesi
Malzeme | Adet | Açıklama |
---|---|---|
Raspberry Pi (3/4) | 1 | Ana kontrol kartı |
Raspberry Pi Kamera | 1 | Görüntü yakalamak için |
Servo Motor (MG90S) | 2 | Kaleciyi hareket ettirmek için |
PCA9685 Motor Sürücü | 1 | PWM kontrolü için |
5V Adaptör | 1 | Harici servo motor güç kaynağı |
Jumper Kabloları | Birkaç | Bağlantılar için |
Breadboard | 1 | Prototipleme için |
3D Yazıcı Malzemesi | Ops. | Kaleci mekanizması için (isteğe bağlı) |
Devre Bağlantısı
Aşağıdaki adımlar, Raspberry Pi, PCA9685 ve servo motorlar arasındaki bağlantıyı tanımlar:
PCA9685’in Raspberry Pi’ye Bağlanması:
SDA (GPIO 2) → PCA9685 SDA pinine.
SCL (GPIO 3) → PCA9685 SCL pinine.
GND → PCA9685 GND pinine.
3.3V → PCA9685 VCC pinine.
Servo Motor Bağlantısı:
Servo sinyal pini → PCA9685 PWM pinlerine (PWM 0 ve PWM 1 kullanılabilir).
Servo GND ve VCC pinleri → Harici güç kaynağına.
Güç Bağlantısı:
PCA9685’in V+ girişine harici 5V adaptör bağlanır.
Raspberry Pi ve PCA9685 GND pinleri birleştirilir.
Yazılım Gereksinimleri
Aşağıdaki yazılımlar ve kütüphaneler gereklidir:
Python 3
OpenCV: Görüntü işleme.
Adafruit_PCA9685: Servo motor kontrolü.
Kütüphanelerin Kurulumu:
sudo apt-get install python3-opencv
pip install adafruit-circuitpython-pca9685
Kodlar
1. Top Algılama ve Takip:
import cv2
import numpy as np
def detect_ball(frame):
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_color = np.array([0, 120, 70])
upper_color = np.array([10, 255, 255])
mask = cv2.inRange(hsv, lower_color, upper_color)
contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
if contours:
largest_contour = max(contours, key=cv2.contourArea)
if cv2.contourArea(largest_contour) > 500:
(x, y), radius = cv2.minEnclosingCircle(largest_contour)
return int(x), int(y), int(radius)
return None
2. Servo Motor Kontrolü:
from adafruit_pca9685 import PCA9685
from board import SCL, SDA
import busio
# I2C ve PCA9685 kurulumu
i2c = busio.I2C(SCL, SDA)
pca = PCA9685(i2c)
pca.frequency = 50
servo_channel = pca.channels[0] # Kaleci sol servo
def set_servo_angle(channel, angle):
pulse_width = 1000 + (angle / 180) * 1000
duty_cycle = int((pulse_width / 20000) * 65535)
channel.duty_cycle = duty_cycle
3. Entegrasyon:
cap = cv2.VideoCapture(0)
frame_width = 640 # Kamera genişliği
while True:
ret, frame = cap.read()
if not ret:
break
result = detect_ball(frame)
if result:
x, y, radius = result
normalized_x = x / frame_width
angle = normalized_x * 180
set_servo_angle(servo_channel, angle)
cv2.circle(frame, (x, y), radius, (0, 255, 0), 2)
cv2.imshow(“Kaleci”, frame)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
cap.release()
cv2.destroyAllWindows()
pca.deinit()
Projenin Genişletilmesi
Yapay Zeka Entegrasyonu: Hareket tahmini yaparak daha çok top yakalama başarısı.
Motor Performansı: Daha hızlı servo motorlarla geliştirilebilir.
Web Arayüzü: Kamera ve motor kontrolünü web tarayıcısından yapma.
