2022年11月7日月曜日

Nintendo Switch プロコン レバー交換

Nintendo Switch プロコン レバー交換

Nintendo Switch プロコン レバー交換

ドリフトというと、1方向にレバーが入りっぱなしになったような状態だったが、直進してる最中に小刻みに左右にジグザグに進むような症状が出てきた。 これまで抵抗体の掃除でごまかしてきたが、劣化の段階が進んだように感じ、部品の交換をしてみることにした。 部品は色々なものが売られていて、どれが使えるものかよくわからない状態なので、アルプス製であることがはっきりしていて値段も他より安く済みそうなので秋月で購入した。

ただ、そのままでは使えないようなので、抵抗体の部分だけAliexpressで使えそうなものを買ってみた。

レバー部品

RKJXV122400R

仕様.pdf

商品名はサムポインタというらしい。作業が終わってから見たが、はんだ付け温度が書いてある。 取りはずしは340度+盛り半田鉛入り+吸引器(コテの温度目盛で、低めの温度から初めてハンダが溶けるまで少しづつ温度を上げていって。)、取り付けは少し低めでやってた。だいたい制限内に収まっていたようだ。

動作寿命が200万cyclesとなっている。cyclesがなにを指しているかわからないが、6分につき100回として、1時間で1000回。1000時間で100万回だとすると、2000時間で寿命。

ぱっと見、形はプロコンのものと同じに見える(購入時期によって違うかもしれない)。取り付けたあとの厚み(基盤+部品)も同じ(12.9mm)。

一応、抵抗値を計ってみた。 下のウィキに書いてある値と比べると、動作可能な範囲にあるように思えた。しかし、改めて見るとレバー小の抵抗値が大きいので全然範囲外だ。スティック小の値と勘違いしていたようだ。

スティックデバイス【検証】 - スマブラSPECIAL 検証wiki - atwiki(アットウィキ)

RKJXV122400Rを測定した値
全抵抗
9.54
9.76

抵抗体1
レバー小 中心 レバー大
1.34 5.66 9.65
1.23   9.75
1.45 5.59  
1.5   10.0

抵抗体2
レバー小 中心 レバー大
1.25 5.82 10.35
1.21 5.9 9.92
1.32 5.6 10.0

左側だけ交換後、switchのスティック補正で確認。 上側と右側が円の外周に到達せず。補正も効かないので使用不可だった(最小抵抗値が大きすぎるため?)。 はんだ付けで傾いたかと思い、浮いてるかもしれない部分を指で掴みながら溶かし直してみたが変わらず。

片方の振動モーターの線が切れてしまった。本体に貼り付いてるフレキが剥がれてるのに気づかず、ブラブラしてるうちに切れてしまったようだ。

左だけ交換した基盤

ali で買った抵抗体に交換してみる。 10個セットのうち1個、若干爪が歪んでる感じ。他は異常なさそう。

抵抗体だけハンダを吸って取り外し。 交換する時、差し込みがきつかったが、棒で爪の部分を押さえながら部品を押しこんだらはめ込めた。 見た目、位置合わせのピンが太かったのでそのせいかと思い焦ったが、斜めにはめ込んでるせいできつかっただけみたいだ。見比べてみたら、穴の大きさは同じように見える。

交換後スティック補正。中心位置が若干左に寄っているが、外周は+マークになるところまで動く。補正でOK。普通に遊べるようになった。交換前の裏側、なんか汚い

ついでにボタンの掃除

プロコンのLRボタンZLZRボタンの分解修理方法を解説!! | コントローラー 修理家のブログ

連続してイカロールをやろうとしたら入力具合がおかしくなることが多かったので(押しっぱなしなのに、イカ潜伏がすぐにキャンセルされ、またすぐ潜ろうとするがキャンセルされてバタバタしてるような状態)。

軸を外したらZLのゴムにアクセスできる。とりあえずZLだけ掃除してみた。 かなり汚れてた。拭いても拭いても汚れ落ちが変わらないので、ディグリーサー(ミニ4駆用)でゴムが溶けるかなんかしてるんじゃないかと思い、乾拭きで何もついてこないくらいまでやって適当に終わりにした。綿棒7本。 元々入力は出来てたので違いはよくわからないが、バタバタすることはなくなった。

リンク

2022年10月29日土曜日

CatMemoNoteにfill region的なコマンド追加 : AutoHotkey

CatMemoNoteにfill region的なコマンド追加 : AutoHotkey

CatMemoNoteにfill region的なコマンド追加 : AutoHotkey

便利に使っているメモソフトCatMemoNoteだが、メール用のテキスト編集に使う時、一定の文字数で改行を入れたい。emacsのfill regionのような機能が使えたらと思ったのでAutoHotkeyで作ってみた。

  • 選択範囲がある状態で alt+g を押すと、70文字で改行する。
  • 行頭に '>' または "\" が付いている場合は適当に字下げも行う。

#IfWinActive ahk_class CatMemoNoteMainFrame

; まずは単純な選択範囲の折返し
!g:: folding( cFillColumn := 70 )

;選択範囲なしで発動すると、カーソルが行頭にあった場合その行をコピー、
;なかった場合、カーソル位置以降をコピーとなる(catmemonote)

;処理された文字列がカーソル位置にペーストされ、行末に改行があるので
;元あった文字列の後半が次の行になる。

;○○○_○○○○
;   ↓
;○○○_●●●●●●●\r\n
;○○○○


;範囲選択がない場合
+!g::
  Send, {Home}+{Down}
  folding( cFillColumn := 70 )

;=========================

folding( cFillColumn )
{
  Send, ^c
  ClipWait
  vString := Clipboard
  Clipboard := ""
  If ( !ErrorLevel )
  {
    ;改行、行頭行末スペースtab、削除
    ;このファイルの文字コードがUTF-8 with BOMじゃないと" "にマッチしない
    vString := RegExReplace( vString,  "m)^[ ,\s]+" )
    vString := RegExReplace( vString,  "m)[ ,\s]+$" )
    StringReplace, vString, vString, `r`n, , All

    if( RegExMatch(vString,  "^>" ) )
    {
      vHead := " "
    }
    else if( RegExMatch(vString,  "^`\`\" ) )
    {
      vHead := "  "
    }
    else
    {
      vHead := ""
    }

    Loop, Parse, vString
    {
      vCurrentStr := vCurrentStr . A_LoopField
      wchar := A_LoopField
      ;全角か半角か
      ;次の範囲をUnicodeの半角文字とみなします。
      ;U+0000~U+007F,U+FF61~U+FFDC,U+FFE8~U+FFEE
;      if(wchar <= U+007F || (wchar >= U+FF61 && wchar <= U+FFDC) || (wchar >= U+FFE8 && wchar <= U+FFEE) )
      if( RegExMatch(wchar,  "[\x{0000}-\x{007F}]" ) || RegExMatch(wchar,  "[\x{FF61}-\x{FFDC}]" ) || RegExMatch(wchar,  "[\x{FFE8}-\x{FFEE}]" ))
      {
        cLen += 1  ;hankaku
;        MsgBox, %wchar% . "半角"
      }
      else
      {
        cLen += 2  ;zenkaku
;        MsgBox, %wchar% . "全角"
      }


      if( cLen >= cFillColumn - 1 )
      {
        ;行末に改行
        vCurrentStr := vCurrentStr . "`r`n"
        ;行頭にスペース 0 | 1 | 2 個
        vCurrentStr := vHead . vCurrentStr
        Clipboard := Clipboard . vCurrentStr
        vCurrentStr := ""
        cLen := 0
      }
    }
        ;最後の行 ここ空なら飛ばす?
        vCurrentStr := vCurrentStr . "`r`n"
        ;行頭にスペース 0 | 1 | 2 個
        vCurrentStr := vHead . vCurrentStr
        Clipboard := Clipboard . vCurrentStr
        vCurrentStr := ""
        cLen := 0
        ;余計な1行目行頭スペース除去
        StringTrimLeft, Clipboard, Clipboard, StrLen(vHead)

    Send, ^v
;MsgBox, cLen=%cLen% cFillColumn=%cFillColumn%

  }
  Return
}


/* ; 範囲選択を自動でやる版を作ろうとしたけど、遅くて不安定なのでボツとした
selectParagraph(wchar){
  Send, {Home}
  Loop  ;段落頭探し
  {
    if( RegExMatch(wchar, "\r\n" ))
    {
      ;行頭改行
      Send, {Up}
    }
    else
    {
      Send, {Up}
      wchar := CurrentChar()
      if( RegExMatch(wchar, "\r\n" ))
      {
        break
      }
    }
    wchar := CurrentChar()
  }

  Send, {Down}
  Loop  ;段落尻探し、選択
{
  wchar := CurrentChar()
  if( RegExMatch(wchar, "\r\n" ))
  {
    break
  }
  else
  {
    i++
    Send, {Down}
  }
}
Loop , %i%
{
    Send, +{Up}
}
  Return
}

 CurrentChar()
{
  Send, {Home}+{Right}
  Send, ^c
  ClipWait
  Send, {Left}
  Return  Clipboard
}
*/