Raspberry Pi ve OpenCV ile Akıllı Kaleci Projesi

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

MalzemeAdetAçıklama
Raspberry Pi (3/4)1Ana kontrol kartı
Raspberry Pi Kamera1Görüntü yakalamak için
Servo Motor (MG90S)2Kaleciyi hareket ettirmek için
PCA9685 Motor Sürücü1PWM kontrolü için
5V Adaptör1Harici servo motor güç kaynağı
Jumper KablolarıBirkaçBağlantılar için
Breadboard1Prototipleme için
3D Yazıcı MalzemesiOps.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:

  1. 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.

  2. 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.

  3. 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.

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Main Menu