MODÜL 08 DERS 3 / 5 · 60 DK

Yapım Sprinti: Robotu Birleştir ve Test Et

Neden acele eden geç kalır? (9 dk)

🎬 VİDEO · kanca · 45 sn · iki takım yarışıyor; test etmeden başlayan takım bozuk parçayı bulamayıp takılıyor, her parçayı tek tek test eden takım önce bitiriyor

İki takım aynı görevi kuruyor. Bir takım heyecanla bütün parçaları takıyor, kodu yüklüyor ve doğrudan göreve başlıyor. Ama robot ortada takılıyor: bir tekerlek dönmüyor, mekanizma kımıldamıyor. Şimdi sorun nerede? Sürüşte mi, mekanizmada mı, kabloda mı, kodda mı? Hepsi aynı anda çalıştığı için hangisinin bozuk olduğunu bulmak çok zor.

Öteki takım daha yavaş başlıyor. Önce sadece tekerlekleri deniyor. Sonra sadece mekanizmayı. Sonra sadece ekranı. Her parçanın tek başına çalıştığından emin olduktan sonra hepsini birleştiriyor. Bu takım daha geç başladı ama önce bitirdi.

Bugün senin işin bu ikinci takımın yaptığı şey: göreve başlamadan önce robotunu hazır hale getirmek. Bu derste yeni bir komut yok. Bildiğin her parçayı tek bir robotta toplayacak ve her birinin gerçekten çalıştığını kanıtlayacaksın.

Takımınla tartış: Bir şey bozulduğunda, "her şeyi aynı anda mı denemek" yoksa "parçaları tek tek mi denemek" sorunu daha çabuk bulur? Neden?

Sprint hazırlığı: kontrol listesiyle çalış (20 dk)

Bir sprint, kısa ve yoğun bir yapım turudur. Bu turda amacın robotun fiziksel olarak hazır olması. Aşağıdaki iki kontrol listesini takımınla sırayla işaretle. Bir maddeyi kanıtlamadan bir sonrakine geçme; kanıtlamak demek "gözümle gördüm, elimle denedim" demektir.

Mekanik kontrol listesi

Elektronik kontrol listesi

📷 Görsel alanı · öğrenci elinde kalemle robotun yanında kontrol listesini madde madde işaretliyor

Sonra: her alt sistemi TEK BAŞINA test et

Kontrol listesi robotun bağlantısını doğrular. Şimdi hareketin doğru olduğunu kanıtlayacaksın. Kural şu: bir alt sistemi denerken yalnız onu dene. Robotu tekerlekleri havada kalacak şekilde bir kutuya koy, böylece kaçmaz.

Her alt sistemin kendi test yöntemi zaten önceki modüllerde öğretildi. Şimdi o testleri arka arkaya bir kez daha yap:

Alt sistemNasıl test edilirNereden hatırla
SürüşÇubuğu ileri it, iki teker de ileri dönmeli; sağa çevir, robot sağa dönmeye çalışmalıSürüş modülü test bölümü
MekanizmaRB'ye bas, mekanizma bir yöne dönmeli; LB'ye bas, ters yöne; bırak, dursunM04 test protokolü
Gripper (varsa)A'ya bas kapansın, B'ye bas açılsın; uçta zorlanan servonun sesini dinleM05 kalibrasyon ve test
TelemetriEkranda değerlerin akmasını izle; çubuğu oynat, sayılar değişsinM06 telemetriyle teşhis

Bir teker ters dönüyorsa çözümü biliyorsun: o motorun RPWM ve LPWM sabitlerini kodda yer değiştir. Mekanizmayı test ederken uçta zorlama; motor inler, akımı artar, sigorta atabilir. Servoyu test ederken zorlanma sesi duyarsan açıyı geri al.

Her satırı kanıtladıkça yanına onay koy. Bir alt sistem geçmiyorsa onu tek başına düzelt; öteki parçalara karışma.

Alt sistem ve izolasyon testi (7 dk)

Şimdi az önce yaptığın şeyin adını koyalım. Robotun her işi yapan bir parçasına alt sistem denir: sürüş bir alt sistem, mekanizma bir alt sistem, telemetri bir alt sistem. Robotun tamamı bu alt sistemlerin bir araya gelmesidir.

Bir alt sistemi ötekilerden ayırıp yalnız başına denemeye izolasyon testi denir. "İzole etmek" bir şeyi tek başına, gerisinden ayrı tutmak demektir. Neden tek tek? Çünkü bir şey bozulduğunda aranacak yer küçük olsun diye. Yalnız sürüşü denerken robot durursa, sorun kesinlikle sürüştedir; mekanizmaya, ekrana bakmana gerek kalmaz. Ama her şeyi aynı anda açarsan, sorun dört ayrı yerden herhangi biri olabilir.

Gerçek mühendisler tam da böyle çalışır: bir uçağın, bir arabanın her parçası, hepsi birleşmeden önce tek tek test edilir. Sen de bugün aynısını yaptın. Birleştirmeden önce test etmek, sonradan saatlerce hata aramaktan kurtarır.

Hepsini tek koda topla (15 dk)

Şimdiye kadar sürüşü, mekanizmayı ve telemetriyi çoğunlukla ayrı kodlarda çalıştırdın. Görev robotunun tek bir koda ihtiyacı var: kumandayı her oynattığında hem sürsün, hem mekanizmayı yönetsin, hem de ne yaptığını ekrana yazsın.

İyi haber şu: bunların hepsi aynı teleopLoop içinde yan yana durabilir. Aşağıdaki kod, bildiğin parçaları tek yerde birleştirir. Yeni bir komut yok; her satırı daha önce gördün.

#define PROBOT_WIFI_AP_SSID     "GorevRobotu"
#define PROBOT_WIFI_AP_PASSWORD "sifre1234"
#define PROBOT_WIFI_AP_CHANNEL  1
#include <probot.h>

const int SOL_RPWM = 16, SOL_LPWM = 17;   // sol surus motoru
const int SAG_RPWM = 18, SAG_LPWM = 19;   // sag surus motoru
const int MEK_RPWM = 21, MEK_LPWM = 22;   // mekanizma motoru

// hazir kalip: motoru hizina gore surer (-1 geri, 0 dur, +1 ileri)
void surMotor(int rpwm, int lpwm, float hiz) {
  hiz = constrain(hiz, -1.0f, 1.0f);
  if (hiz > 0) { analogWrite(rpwm, (int)(hiz * 255));  analogWrite(lpwm, 0); }
  else         { analogWrite(rpwm, 0);  analogWrite(lpwm, (int)(-hiz * 255)); }
}
// hazir kalip: sasiyi ileri/donus ile surer
void surSasi(float ileri, float donus) {
  surMotor(SOL_RPWM, SOL_LPWM, ileri + donus);
  surMotor(SAG_RPWM, SAG_LPWM, ileri - donus);
}

void robotInit() {
  pinMode(SOL_RPWM, OUTPUT); pinMode(SOL_LPWM, OUTPUT);
  pinMode(SAG_RPWM, OUTPUT); pinMode(SAG_LPWM, OUTPUT);
  pinMode(MEK_RPWM, OUTPUT); pinMode(MEK_LPWM, OUTPUT);
}
void robotEnd() {
  surSasi(0.0f, 0.0f);
  surMotor(MEK_RPWM, MEK_LPWM, 0.0f);
}
void teleopInit() {}
void teleopLoop() {
  auto js = probot::io::joystick_api::makeDefault();

  float ileri = js.getLeftY();      // sol cubuk yukari/asagi
  float donus  = js.getRightX();    // sag cubuk saga/sola
  surSasi(ileri, donus);

  if (js.getRB())      surMotor(MEK_RPWM, MEK_LPWM, 0.6f);   // basiliyken bir yone
  else if (js.getLB()) surMotor(MEK_RPWM, MEK_LPWM, -0.6f);  // basiliyken ters yone
  else                 surMotor(MEK_RPWM, MEK_LPWM, 0.0f);   // birakinca dur

  probot::clearTelemetry();
  probot::printf("ileri: %.2f\n", ileri);
  probot::printf("donus: %.2f\n", donus);

  delay(20);
}
void autonomousInit() {}
void autonomousLoop() { delay(20); }

Kendi robotuna uyarla:

Kodu yükle, bağlan (telefonu robotun ağına, tarayıcıda http://192.168.4.1, kumandayı telefona bağla, bir tuşa bas, Init, Start) ve birleşik testi yap: şimdi hem sür, hem RB/LB ile mekanizmayı çalıştır, hem de ekranda değerlerin aktığını gör. Tek tek çalışan parçalar bir arada da çalışıyor mu? İşte kanıtlaman gereken bu.

Sprint sonu durum raporu (7 dk)

Sprintin sonunda takımın nerede olduğunu tek bakışta gösteren bir durum raporu çıkar. Aşağıdaki tabloyu doldur. Her alt sistem için iki soru var: tek başına çalışıyor mu, birleşince de çalışıyor mu? Yalnızca gerçekten gördüğün şeyi işaretle.

Alt sistemTek başına testBirleşik testDurum
Sürüşçalışıyor / sorunlu / yok
Mekanizma ya da gripperçalışıyor / sorunlu / yok
Telemetriçalışıyor / sorunlu / yok

Kendini yokla:

  1. "İzolasyon testi" ne demek ve neden birleştirmeden önce yapılır?
  2. Robot birleşik testte tek yöne kaçıyor ama tek başına sürüş testinde düzgündü. İlk nereye bakarsın?
  3. Mekanizmayı test ederken uçta niçin zorlamamalısın?

Günlük hayat bağı: Bir bisikleti tamir ederken de böyle yaparsın; önce frene bak, ayrı dene; sonra vitese bak, ayrı dene. Hepsini aynı anda kurcalarsan hangi ayarın işe yaradığını asla bilemezsin. "Önce ayrı test et, sonra birleştir" kuralı robotlarda da, gerçek hayatta da işe yarar.

Durum raporunda "sorunlu" ya da "yok" yazan her satır, bir sonraki dersin görev listesidir. Hepsi "çalışıyor" olduğunda robotun göreve hazır demektir.

Erken bitirene ek görev