Translate

Sunday, June 22, 2025

Raspberry Pi Cluster versus Arduino Swarm

Raspberry Pi Cluster Nedir?

Raspberry Pi Cluster, birden fazla Raspberry Pi cihazını birlikte çalışacak şekilde birbirine bağlayarak oluşturulan küçük bir bilgisayar ağıdır. Amaç, bu küçük cihazların işlem gücünü birleştirerek yüksek hesaplama gücü, yük dengeleme, dağıtılmış işlem, veya öğrenme ve deneme için bir platform oluşturmaktır.

Bu tür sistemler genellikle şu amaçlarla kullanılır:
Dağıtık sistemler üzerine eğitim ve deneyler (Hadoop, Kubernetes, Docker Swarm)
Mini veri merkezi (web hosting, veri işleme)
Paralel işlem (render, simülasyon)
IoT Gateway veya kenar bilişim projeleri
Kendi bulut sistemini kurmak (Nextcloud, OpenStack gibi sistemlerle)

Raspberry Pi Cluster Nasıl Yapılır?

1. Gerekli Malzemeler:
2 veya daha fazla Raspberry Pi (en az Pi 3, tercihen Pi 4 veya 5)

Her biri için:
microSD kart (16 GB veya daha büyük)
USB-C veya microUSB güç adaptörü

Gigabit Ethernet Switch

Ethernet kabloları
Soğutma (fan, heatsink önerilir)
Kasa (katmanlı cluster kasaları tercih edilebilir)
(Opsiyonel) USB güç dağıtıcısı (birden fazla Pi için merkezi güç)

2. İşletim Sistemini Kurma:

Her Pi’ye Raspberry Pi OS Lite (veya Ubuntu Server) kur.
SD kartlara OS imajı yaz: Raspberry Pi Imager
SSH’yi etkinleştir (ssh adlı boş bir dosya oluştur /boot içine)
Her Pi’ye sabit bir IP adresi ver (statik IP veya DHCP rezervasyonu)

3. Ağ Kurulumu:

Tüm Pi’leri Ethernet switch’e bağla.
Switch’i internete bağla (ana Pi, internet erişimi için kullanılabilir).
hostname’leri ayarla: örneğin pi-master, pi-node1, pi-node2 gibi.

4. Cluster Yazılımı:
İhtiyacına göre bir platform seçebilirsin:

A. Docker Swarm / Kubernetes ile Dağıtılmış Uygulama:

Master node’da Docker ve Swarm/Kubernetes kur.
Diğer Pi’leri node olarak ekle.
Uygulamaları dağıtarak çalıştırabilirsin.

B. MPI (Message Passing Interface):

Paralel hesaplama için bilimsel işler (simülasyon, analiz).
mpich veya openmpi kur.
SSH üzerinden diğer Pi’lere şifresiz erişim kur.
Komutlar tüm nodlara gönderilir.

C. Hadoop / Spark:
Veri işleme (büyük veri simülasyonu)
Java, Hadoop, Spark kurup veri kümeleri işleyebilirsin.

Basit Örnek: 3 Pi ile Docker Swarm Cluster

1. Tüm Pi'lerde Docker kur:
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker pi

2. Master Pi’de:
docker swarm init --advertise-addr <MASTER_IP>
3. Diğer Pi’lerde (join komutunu master’dan al)
docker swarm join --token <TOKEN> <MASTER_IP>:2377
4. Master’dan node’ları kontrol:

docker node 
Avantajlar ve Kullanım Alanları:
Ucuz ve taşınabilir laboratuvar
Öğrenim için mükemmel platform
Gerçek dünyada ölçeklenebilirlik testleri
Edge/IoT sistemlerinin simülasyonu
Kendi mikro veri merkezini kurma imkânı

Arduino Swarm
"Arduino cluster" terimi klasik anlamda bir "bilgisayar kümesi (cluster)" gibi çoklu işlemci sistemleri için pek uygun değildir, çünkü Arduino kartları genellikle sınırlı işlem gücüne ve belleğe sahiptir. Ancak belirli görevlerde birlikte çalışmaları sağlanabilir. Bu tür yapılara bazen "distributed Arduino system" veya "Arduino swarm" denir.

Arduino Cluster Yapılabilir mi?
Evet, sınırlı bir ölçekte yapılabilir ama şu amaçlarla:

1. Paralel İş Bölümü (Task Distribution)

Birden fazla Arduino, farklı sensör verilerini toplar ve merkezi bir Arduino veya Raspberry Pi’ye gönderir.

2. I²C veya SPI ile Master-Slave Ağları
Bir Arduino ana kontrolcü (master), diğerlerini (slave) kontrol eder:
I²C ile 127'ye kadar cihaz bağlanabilir (kablo uzunluğu sınırlı).
SPI ile daha hızlı veri iletimi sağlanır ama cihaz sayısı daha düşüktür.

3. Seri İletişim (UART, SoftwareSerial)
UART üzerinden birden fazla Arduino birbirine bağlanarak mesajlaşabilir.

4. Kablosuz Dağıtık Sistem
NRF24L01 veya LoRa modülleriyle her Arduino'ya görev verilir.
Kablosuz ağ oluşturarak basit bir mesh veya yıldız topolojisi yapılabilir.

Arduino Cluster Örneği
Arduino Görevi İletişim
Uno #1 Sıcaklık sensörü I²C Slave
Uno #2 Nem ölçer I²C Slave
Uno #3 Motor kontrolü I²C Slave
Mega Ana kontrol (Master) I²C Master

Ne Zaman Raspberry Pi Cluster Kullanmalı?
Eğer paralel işlem, veri analiz, Linux hizmetleri gerekiyorsa:
Raspberry Pi daha uygun.
Arduino, doğrudan donanım kontrolü için.

Sonuç
Evet, Arduino’larla bir tür "cluster" yapılabilir ama bu daha çok dağıtılmış görev sistemi olur.
Gerçek anlamda işlem gücü gerektiren kümeleme için Raspberry Pi veya benzeri cihazlar tercih edilmeli.

Bir "Arduino cluster" için temel kod yapısı, genellikle Master-Slave mimarisi ile kurulur. Burada örnek olarak:
Master Arduino: Görevleri dağıtır ve veri toplar.
Slave Arduino’lar: Sensör okuyup Master’a bildirir.

🧠 Kod Senaryosu: I²C ile Arduino Cluster

🎯 Amaç:
Master: Slave’lerden sıcaklık ve nem verisi alır.
Slave 1: Sıcaklık sensörü okur.
Slave 2: Nem sensörü okur.

1️⃣ Master Arduino Kodu (Wire.h ile)

#include <Wire.h>
void setup() {
  Wire.begin(); // Master başlat
  Serial.begin(9600);
}
void loop() {
  // Sıcaklık al (Slave adres: 8)
  Wire.requestFrom(8, 2); // 2 byte bekleniyor
  while (Wire.available()) {
    int temp = Wire.read();
    Serial.print("Sıcaklık: ");
    Serial.println(temp);
  }
  // Nem al (Slave adres: 9)
  Wire.requestFrom(9, 2);
  while (Wire.available()) {
    int hum = Wire.read();
    Serial.print("Nem: ");
    Serial.println(hum);
  }
  delay(2000);
}

2️⃣ Slave 1 – Sıcaklık Sensörü

#include <Wire.h>
void setup() {
  Wire.begin(8); // Slave adres: 8
  Wire.onRequest(sendTemperature);
}
void loop() {
  delay(100);
}
void sendTemperature() {
  int temp = 25; // Buraya gerçek sensör verisi de yazılabilir
  Wire.write(temp);
}

3️⃣ Slave 2 – Nem Sensörü

#include <Wire.h>
void setup() {
  Wire.begin(9); // Slave adres: 9
  Wire.onRequest(sendHumidity);
}
void loop() {
  delay(100);
}
void sendHumidity() {
  int hum = 60; // Buraya sensörden gelen veri
  Wire.write(hum);
}

🛠 Donanım Bağlantısı
Arduino A4 (SDA) A5 (SCL) GND Bağlantısı
Tüm kartlar Ortak Ortak Ortak GND
I²C tüm cihazlarda aynı veri hatlarını paylaşır.

✅ Genişletme Fikirleri:

4+ Arduino için daha fazla slave eklenebilir.
NRF24L01 ile kablosuz cluster kurulabilir.
İş yüküne göre LED kontrol, motor komutları, veri kaydı gibi görevler bölüştürülebilir.