工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

のこぎりの刃を交換

概要


のこぎりの刃を交換し、切れ味が復活した。



背景と目的


手持ちののこぎりの刃がかなり古くなってきたので、交換する。


詳細


1.対象

対象ののこぎりは、岡田金属工業所のゼットソー。 こののこぎりを買ったのは、ずいぶん前になるが、VIC's DIYという日曜大工サイトをよく見ていたときにおすすめされていたから。初めに買ったのは、ゼットソー265というもので、そのあと一度交換して、今ついているのは、8寸目。かなり、使ったせいで傷ついている。 さすがに、刃こぼれはしていないが。

f:id:dekuo-03:20201101214739j:plain

2.刃の調達と交換

刃は、モノタロウで900円程度。以下のような感じで、新品がついた。

f:id:dekuo-03:20201101214954j:plain

3.試し切り

まず、古い刃で切ったもの。断面に、のこぎりの切り傷が見える。

f:id:dekuo-03:20201101215024j:plain

次に、新しい刃で切ったもの。

f:id:dekuo-03:20201101215010j:plain

明らかに、新しい刃のほうが断面がきれい。切り傷はほとんどない。 また、さくさく切れるおかげで、余計な力が入らず結果的に直線性、直角度もよくなった気がする。


まとめと今後の課題


ここのところ、木工の機会があまりないので、騙し騙し使い続けてきてしまっていたが、やっぱり刃が古くなりすぎていたと反省。もっと早く変えればよかった。


PlayStation4(PS4)の純正コントローラを分解する

概要


PlayStation4(PS4)の純正コントローラを分解し、L2/R2ボタン、アナログスティックの構造の確認と、外部から乗っ取って制御する方法を試した。



背景と目的


PlayStation4(PS4)のコントローラを外部から乗っ取って制御してみたいため、中身の構造を確認してできそうかどうか、やってみたくなった。ひとまず、L2/R2ボタンと右ジョイスティックだけ。


詳細


1. 入手

手持ち品は分解したくないため、4000円の中古品をAmazonマーケットプレイスで注文。動作確認済みだが分解痕ありと注意書きがあったので同じようなことをやった人が売り払ったものだろう。たしかに、側面の表蓋と裏蓋の隙間に分解痕があるが、動かしてみたところ正常にゲームができた。問題なし。


2. 分解

2.1 裏蓋、裏蓋を外す

裏蓋には、4つのネジがある。#00のプラスドライバーが合う。ネジを外したらすぐに蓋は取れた。よく見たら爪が折れていた。元の持ち主が分解時に折ったのだろう。まあ、分解自体は楽でいい。

以下が、外した時の外観。USB充電と裏側の光る部分への信号/給電用フレキシブルケーブルが表蓋とつながっている。これを外せば表と裏は取れた。

バッテリーを外し、裏に隠れているネジを外し、さらに、茶色いフレキシブルケーブルを外すと、表蓋と、電子基板が分離できた。


2.2 L2/R2ボタン

ボタンの樹脂部品を外すと、以下のような部分が出てきた。ボタンを押したときに導電性のゴムが、プラスチック製の基板側にある端子同士を導通させる仕組みだ。

2.3 アナログスティック

2軸ジョイスティックと呼ばれる部品のようだ。そのものではないが、以下のような部品。

akizukidenshi.com

縦横それぞれに可変抵抗がついていて、倒した角度に応じて抵抗が変化するので分圧された電圧を読み取れば、操作量がわかるだろう。


3. 制御する

3.1 L2/R2ボタン

これは、導電性のゴムの代わりに、外から導通させてあげればよいので、基板側から2本線を出し、この線同士を接触させてみたところ、実際に操作することができた。ただし、少しチャタリングが気になるので何らかの対策はした方がいいかも?(線を直接触れさせただけなので不安定だっただけかも)


3.2 アナログスティック

操作量に応じて、可変抵抗の分圧点の電圧が変化して、マイコンで読み取られていると思われる。

  • 奥側全倒しのとき 約0.3V
  • 中立(操作なし)のとき 約1.46V
  • 手前側全倒しのとき 約2.7V

だった。なので、分圧点に与えてみたところ、確かに操作できた。というわけで、外からアナログの電圧を与えられるように、線を付けた。


まとめと今後の課題


L2/R2ボタン、アナログスティックを外部から乗っ取って制御する方法が試せた。


boto3でLambda関数を呼び出すinvokeメソッドの引数ClientContextを使い方を確認

概要


boto3でLambda.client.invokeの引数ClientContextを使い方を確認してメモした。



背景と目的


boto3でLambdaを呼び出す際、呼び出し先関数へ渡すペイロードの仕様を変えずに、追加でパラメータを与えたいと思ってboto3のドキュメントを調べたら、invokeの引数ClientContextというものが使えそうだった

boto3.amazonaws.com

なので、使い方を調べてメモする。


詳細


呼び出し側

こちらが参考になった。必要なところだけかいつまんで書く。

  • custom、envというキーを持つJSON化可能な辞書を用意
    • それぞれのキーの値には任意のデータ(あくまでJSON化可能)
  • 辞書をJSON文字列化、バイト列化、base64エンコード、文字列に戻す
  • invokeの引数に渡す

という感じ。例えば、以下。

import boto3
import json
import base64

Lambda = boto3.client("lambda")

# JSON化可能なデータ
ctx = {
    "custom": {
        "param1": "value1"
    },
    "env": "env_value"
}
# JSON文字列化とバイト列化
b = json.dumps(ctx).encode("utf-8")
# base64化して文字列に戻す
ClientContext = base64.b64encode(b).decode("utf-8")

# 引数に渡して呼び出し
resp = Lambda.invoke(
    FunctionName=FunctionName,
    Payload=json.dumps(Payload),
    ClientContext=ClientContext
)

呼び出される側

呼び出される側は、引数contextから取り出す。client_contextプロパティの下に、custom、envがそれぞれついている。customは、辞書を入れたので辞書、envは文字列を入れたので文字列と、与えたものがそのまま出てくる。

def lambda_handler(event, context):
    print(context.client_context.custom)
    print(context.client_context.env)

ペイロードの仕様を変えず、contextを使って追加のデータを送ることができた。


まとめと今後の課題


boto3でLambda.client.invokeメソッドの引数ClientContextを使い方を確認してメモした。