Skip to content
Can Eroğlu. |
Geri dön

Can's Slash Analyzer v.0.1

Güncellendi:

Can’s Slash Analyzer v.0.1

Kılıcı sallarsın. Hava yarılır. İçinden “kusursuz kestim” dersin. Yalan söylüyorsun. Kendine de, kılıca da.


1. Kamera Kaydı Ameleliği ve 600 Yıllık Kusur

Bir süredir Tenshin Shōden Katori Shintō-ryū (Kenjutsu) çalışıyorum. Japon kılıç sanatının en eski, en affetmez okullarından biri. Bu işin şakası yok: kılıcı öyle anime karakteri gibi savuramazsın. Katananın bir kesim düzlemi (Hasuji - 刃筋) vardır. Eğer o düzlemden 3-4 derece bile saparsan, gerçek bir kılıç hedefe vurduğu an ya kırılır, ya bükülür ya da hedefin üstünden sekip seni rezil eder.

Eskiden ne yapıyordum? Tripodu kur, telefonu aç, yüzlerce suburi (kesiş tekrarı) yaparken kendini 60 FPS videoya kaydet. Sonra otur masanın başına, video editöründe kare kare ileri geri sar. (Evet, ara sıra yapıyordum.😶)

Tam bir amelelik. Biraz kılıç salladıktan sonra oturup dakikalarca kendi vasat kesişlerimi izlemekten kusma noktasına geldim. İnsan beyni zaten kusuru rasyonalize etmeye bayılır: “Yok ya, kamera açısı eğri duruyor mk, bence fena kesmedim.”

Hassiktir ordan.

Bir gece antrenmandan sonra düşündüm: Neden oturup video izleyeyim ki amk? Ben sistemlerle uğraşan biriyim. Masamda havya var, kodumda Rust var. Bırakın fiziğin kendisi, milisaniyelik telemetriyle yüzüme vursun ne kadar kötü kestiğimi.

Ve böylece Can’s Slash Analyzer v.0.1 doğdu.

Bokken ve Tsukaya Monte Edilmiş Analiz Kiti

2. Kashira’ya Matkapla Girmek: Mekanik Mukavemet ve Kütle Merkezi Savaşları

Fikir basitti: Bokkenin (tahta kılıç) arkasına bir mikromekanik IMU (ataletsel ölçüm birimi) ve MCU tak, savurma fiziğini kaydet.

Ama gerçek hayat devre simülatörlerine benzemez.

Bir kılıcı son gücünle savurduğunda ve hareketin sonunda aniden kilitlediğinde (Tenouchi), kabzada onlarca G’lik şok dalgası ve merkezkaç kuvveti oluşur. Devreyi kabzaya öyle cırt cırtla, bantla ya da silikonla yapıştıramazsın — ilk sert kesişte devre kopup karşı duvara saplanır.

Sağlam olmak zorundaydı. Ama aynı zamanda modüler olmak zorundaydı; yarın bir gün sensörü değiştirmek veya devreyi sökmek istediğimde bokkene zarar vermemeliydim.(Tahtadan yapılma bokkenlerin fiyatları çok abartı.)

Kashira M3 Pirinç Soket Noktaları

İran Yapıştırıcısı ve Pirinç M3 Yuvalar

  1. Bokkenin kashira (kabzanın dip ucu) kısmını sabitledim.
  2. Matkapla simetrik iki adet delik açtım.
  3. İçine kılavuz yuvaları çakıp üzerini İran yapıştırıcısıyla (çift bileşenli epoksi) doldurdum.
  4. İki adet pirinç M3 dişi standoff’u (vida yuvası) deliklerin içine gömdüm.
  5. İki gün boyunca güneşin altında kemikleşene kadar kuruttum.

Sonuç? Kaya gibi. Artık bokkenin arkasında standart M3 vida yuvalarım var. İster telemetri modülü tak, ister kılıcın arkasına ağırlık bağla. Modülerlik dedikleri şey tam olarak bu.

Güç Çilesi: Ölü Traş Makinesinden Kurtarılan 18650’ye

Mekanik halloldu, sıra güçteydi.

Dedim ki, “Elimde 5 yıllık eski bir traş makinesinden söktüğüm 14500 Li-ion pil var, küçük ve hafif, onu takayım.” Lehimledim, çalıştırdım. Beşinci dakikada MCU pat diye brownout verdi ve kapandı. Pil beş yıl boyunca çekmecede yata yata kimyasal olarak ölmüş meğer amk. İç direnci o kadar yükselmiş ki, ESP32 anlık akım çektiğinde voltaj 2.8V’un altına çakılıyor.

Çekmeceleri tekrar karıştırdım. Hurdaya çıkmış bir masaüstü USB fanının içinden çıkan sağlam bir 18650 Li-ion batarya buldum. Yanına da internetten 10-15 liraya aldığım korumalı TP4056 USB-C şarj/BMS modülünü çaktım. (Modülün kendisi (14 TL) plastik parçası pil yuvasından daha ucuz (18 TL) 😂 - welcome to arz talep babyy - )

18650 Batarya Sandviç Katmanı

Kütle Merkezi (Center of Gravity) Fiziği

Burada ölümcül bir mühendislik problemi vardı: Ağırlık dengesi.

Bir kılıcın kütle merkezi (CoG), tsuba’nın (el siperliği) birkaç parmak ilerisinde olmalıdır. Eğer kabzanın arkasına rastgele bir ağırlık eklerseniz, kılıcın pivot noktası bozulur. Kılıç savururken eliniz saçma sapan bir torka alışır ve biyomekaniğiniz çöker. Alt kata 18650 bataryayı ve şarj modülünü, üst kata ise ESP32-C3, OLED ekran ve sensör devresini koydum.

Toplam ağırlık M3 civatalarla biraz arttı (kabul), ancak tüm bu kütleyi kissaki (kılıcın ucu) doğrultusuyla tam dikey aynı hizada tuttum. X ekseninde sıfır sapma. Ağırlık merkezi sadece kabzaya doğru birkaç santim geriledi — yani bileğe binen yalpalama momenti sıfır.


3. Kılıç Fiziği: Hasuji, Tenouchi ve Sensör Verisi

Gelelim projenin asıl meselesine: Bir kılıç kesişini kodla nasıl yakalarsın?

Can's Slash Analyzer v.0.1 Çalışır Durumda

Sensör olarak Türkiye piyasasındaki en mantıklı f/p tercihi olan LSM6DS serisini kullandım. Hardware FIFO’su var, gürültü eşiği düşük, örnekleme hızı fazlasıyla yeterli.

Kılıç savrulurken MCU üç temel metriği kovalıyor:

  1. Hasuji (Kesim Düzlemi Tutarlılığı): Kılıç tek bir 2D düzlemde mi aktı, yoksa savurma sırasında sağa sola yalpalamalar ve bilek burkulmaları (twist/wobble) oldu mu?
  2. Tenouchi (Kime / Kilitleme): Kesiş bittiği anda kılıç jilet gibi kilitlendi mi, yoksa gevşek bir bilekle ileri geri mi salındı?
  3. Kissaki Çizgisel Hızı (vtipv_{\text{tip}}): Kılıcın ucu kaç km/h hızla indi?

Hasuji Hesabı: AI’ın Çıkardığı Matematik ve Arka Plandaki Mantık

Dürüst olayım: Buradaki lineer cebir modelini oturup tek başıma kağıt kalemde sıfırdan türetmedim. AI’ın (Claude) önüne kılıç hareketinin dinamiğini ve IMU kısıtlarını koydum; birkaç deneme-yanılma ve iterasyondan sonra ortaya bu yapı çıktı.

Formüllere bakınca 3x3 tensörler, özvektörler falan havalı duruyor ama arkadaki mantık aslında gayet sezgisel:

Kılıcı savururken aldığımız her jiroskop örneğini bir dönme enerjisi matrisinde (MM) biriktiriyoruz:

M=i=1NωiωiT=[gx2gxgygxgzgxgygy2gygzgxgzgygzgz2]M = \sum_{i=1}^{N} \vec{\omega}_i \vec{\omega}_i^T = \begin{bmatrix} \sum g_{x}^2 & \sum g_x g_y & \sum g_x g_z \\ \sum g_x g_y & \sum g_y^2 & \sum g_y g_z \\ \sum g_x g_z & \sum g_y g_z & \sum g_z^2 \end{bmatrix}

Kesim tamamlandığında sistem şunu anlamaya çalışıyor: “Bu adam kılıcı savururken harcadığı enerjinin ne kadarını tek bir ana kesim çizgisine verdi, ne kadarını sağa sola yalpalamayla piç etti?”

Bunun için matris üzerinde 4 adımlık ufak bir Power Iteration (PCA) çalıştırıp dominant dönme eksenini (u\vec{u}) buluyoruz:

uk+1=MukMuk\vec{u}_{k+1} = \frac{M \vec{u}_k}{\|M \vec{u}_k\|}

Ana eksene oturan enerji Edominant=uTMuE_{\text{dominant}} = \vec{u}^T M \vec{u}. Toplam enerjiden bunu çıkardığımızda eksen dışına kaçan kaçak enerji oranını (roffr_{\text{off}}) ve buradan da etkin sapma açısını hesaplıyoruz:

θsapma=arcsin(roff)×180π\theta_{\text{sapma}} = \arcsin\left(\sqrt{r_{\text{off}}}\right) \times \frac{180^\circ}{\pi}

Sonra bunu insan biyomekaniğine göre skora döküyoruz:

Tenouchi: Kime ve Frenleme Süresi

Kılıç sanatında savurmak kadar hedefte çakılıp durabilmek de esastır. Hareketi bitirdiğinde bileğin gevşek kalmaması, anında kilitlenmesi gerekir.

Firmware, tepe açısal hızdan (DPSpeakDPS_{\text{peak}}) itibaren durma eşiğine (DPS80DPS \le 80) kadar geçen frenleme süresini (Δtfren\Delta t_{\text{fren}}) ölçüyor:

Bu hesap hala bir miktar sıkıntılı, fakat en azından iş görür noktada.

Uç Hızı

Bokkenin etkin dönme yarıçapı R0.90 mR \approx 0.90\text{ m} kabul edildiğinde, açısal hızdan kılıç ucunun çizgisel hızını çıkarıyoruz:

vtip=ωpeak×(π180)×0.90×3.6[km/h]v_{\text{tip}} = \omega_{\text{peak}} \times \left(\frac{\pi}{180}\right) \times 0.90 \times 3.6 \quad [\text{km/h}]

Kabzada 1200 dps (derece/saniye) çevirdiğinizde kılıcın ucu havada ~68 km/saat hızla yırtıyor.


4. Yazılım & AI ile Savaş: Rust no_std, Embassy ve Sınırlar

Firmware tarafında tabii ki Rust var.

ESP32-C3 (RISC-V) üzerinde no_std ve Embassy asenkron mimarisi kullandım (esp-hal + esp-rtos).

// analyzer/hasuji.rs'den bir kesit:
for _ in 0..4 {
    let next_x = self.sum_gx_sq * ux + self.sum_gxgy * uy + self.sum_gxgz * uz;
    let next_y = self.sum_gxgy * ux + self.sum_gy_sq * uy + self.sum_gygz * uz;
    let next_z = self.sum_gxgz * ux + self.sum_gygz * uy + self.sum_gz_sq * uz;

    let mag = libm::sqrtf(next_x * next_x + next_y * next_y + next_z * next_z);
    if mag > 1e-6 {
        ux = next_x / mag;
        uy = next_y / mag;
        uz = next_z / mag;
    }
}

AI ile Kod Yazma Bug

İlk taslaklarda AI her şeyi klasik Euler açıları ve raw jiroskop integraliyle çözmeye kalkıştı. (Bu AI’ler her boku en karmaşık ve zorlama haliyle yapma tandanslarına sahip. ilginç.👾) AI’ı zorlayıp lineer cebir ve bilinen rust kütüphanelerini kullandırdığımda daha da düzeldi her şey. AI hala tek başına bırakılacak kadar ilerlemiş değil.

Mevcut Açık: Lineer Projeksiyon

Yine de mevcut algoritmada bilerek bıraktığım bir basitleştirme var: Hasuji hesabı hareketi lineer bir düzlem projeksiyonu olarak ele alıyor. Oysa insan kolu omuz, dirsek ve bilekten oluşan üçlü birleşik bir sarkaç gibi hareket eder; kesim yayında doğal dinamik eğrilikler olur.

İleride bu yalpalamaları daha hassas modellemek için sayısal optimizasyonlar yapacağım (Belki de yapmam çünkü şu an yeterli. over engineering kaçmasın); fakat şu anki haliyle bile antrenmanda doğruyu yanlışı ayırt etmeye fazlasıyla yetiyor.


5. Arayüz ve Egzersiz Bağımlılığı (0.91” OLED & Buzzer)

Cihazın üzerinde minicik bir 0.91” 128x32 OLED ekran ve bir aktif buzzer var. Arayüz üç farklı modda çalışıyor (butonlarla geçiş yapılıyor):

  1. CANLI KESİM MODU (Live Training):
    • Kamae Al: Duruşunu alırsın.
    • Geri Sayım: Buzzer “bip… bip…” der (2 saniye).
    • KES!: Tiz bir “BİİİP!” çalar — kılıcı savurursun.
    • 5s İnceleme: Ekrana anında sonuç basılır: #42 HASUJI:%94[A+] HIZ:1120dps 63km/h TENOUCHI:NET
  2. SEANS İSTATİSTİKLERİ: Toplam suburi sayısı, ortalama Hasuji yüzdesi, seans hız rekoru.
  3. KAMAE MONİTÖRÜ: Canlı pitch/roll açıları ve duruş denge yüzdesi (EGIM:-10d YATIS:-113d HAZIR! KES!).

Dürüst olmak gerekirse: Böyle bir etki beklemiyordum.

Amacım sadece kesiş doğruluğunu ölçmekti. Ama o minik OLED ekranda skoru görmek, buzzer’ın komutuyla kesmek ve ekranda %98 A+ çıktığında gelen o tatmin hissi antrenmanı tam bir bağımlılığa dönüştürdü. Eskiden “10-20 yarı spor amaçlı kılıç sallayıp bırakayım” derken, şimdi o bip sesi ve skor merakı yüzünden daha çok sallıyorsun. (ewqjewjsda)

Yani teknolojiyi iyi kullanırsan seni olumlu taraftan hackleyebiliyor.


6. Test & Demo Videoları

Aletin gerçekte nasıl tepki verdiğini, arayüz akışını ve canlı savurma testler aşağıda. Kamerayı sabitleyebilecek düzgün bir yer bulamadım.

Arayüz ve Menü Akışı

Canlı Savurma ve Pratik Demosu

Gelecek

Klasöre meraklısı için bir fotoğraf daha iliştirdim (ESP32-S3 ile tabanca gövdesine entegre CSI duvar arkası hareket radarı). Ama o aylar sonra.

CSI Radar

Son Söz

Görünüşü biraz mad-max, biraz cyberpunk. Ama kılıcın kashirasında dururken bana 600 yıllık bir geleneğin fiziğini söylemesi hoş bir his.

Bu hayatta zaman ne yazık ki kısıtlı. Donanım sadece benim için bir medium’dan ibaret. Sosyal yaşam ve iş güçten arta kalan bu ufak zamanlarda, bu ara sanatla daha fazla ilgilenmek istiyorum. Şu anki gerçek ve nihai odağım başka. 🤔

EOF.


Firmware repo (Rust, Embassy, no_std): github.com/caneroglu/slash-analyzer


Bu makaleyi paylaş:

Sonraki Makale
Kırık. Onarılmış. Eskisinden daha güzel. Bir yalan.