2024年2月3日土曜日

2024年のヤマザキ春のパンまつり

パンまつりが始まったので点数計算アプリの更新を行いました。 

去年はシールの種類が0.5から2.5点の5種類でしたが、今年は3点シールが復活して6種類です。
(3点シールはダブルソフト専用?)

画像認識に使用するサンプルを購入、プログラムを修正、公開できました。 

気が向いたらアプリで遊んでみてください。


食べきれないパンは冷凍保存しました。

2023年6月17日土曜日

Inkscapeで出力したSVGデータが欠けている

 Inkscapeで出力したSVGデータをblenderで読み込むと、一部が欠けていたりなど
正常に処理されていない場合です

具体的には


欠けている、割れている、一部が表示されない状態です
点などは残っているのでblender上で根性修復は可能ですがやりたくありません

このSVGデータはブラウザなどでは正常に表示されます
他ソフトで再変換などを行っても改善されなかったのですが、単純に少しだけ回転させたら治りました

15度回転させます、90度や180度、水平や拡大等では効果が無い場合がありました
blender上で角度を治すと思うので分かり易い角度が良いと思います

正常に取り込めました





3Dプリンターでプリント基板自作の覚え書き 蛇足

余計な書き込み
前回の 3Dプリンターでプリント基板自作の覚え書き のおまけです


Inkscapeでbmp作成時にdpiが十分でない場合


96 dpiでラスター化するとボケます

この画像をベクター化すると味のある線になります


dpiを高くすれば精度が上がります
本編の1200dpi(下画像)はモノクロ印刷で使用される解像度を何となく指定しています
普段使用しているのは2400dpiです




KiCadで出力したPDF(ベクターデータ)をラスター化して再度ベクター化する理由

PDFを何もせずにSVG変換してblenderに放り込むとこうなります

 

  • 大量のカーブで構成されます
  • ライン(ワイヤー)の太さがありません
  • ビア(穴)周囲のランド(銅箔部)に穴がないので、boolean等の処理が必要になります

ここから修正する場合、数が多いと処理が大変です
inkscapeでパスの統合などを駆使すれば、より少ないアンカーポイントで完璧なデータができるとは思うけど、パスを選択するのが面倒

inkscapeのレイヤーからパスや画像の移動が面倒

移動したい対象の上でメニュー
Move to Layer(他のレイヤーへ移動)を選択
自分のレイヤーを選べばリスト先頭に移動、もしくは適当なレイヤーへ移動させる



2023年6月16日金曜日

3Dプリンターでプリント基板自作の覚え書き

はじめに

ちょっとした基板の作成はレーザープリンターを使用していたのですが、プリンターの劣化かトナーののりが悪かったので3Dプリンターをプロッターとして使用する方法を試した時のメモ書きです

ちなみにレーザープリンターのほうが手間がかからず、完成品もきれいです(個人的見解)


手順

  1. 基板デザイン
  2. SVG作成
  3. STL作成
  4. gcode作成

国土地理院謹製のblind_mapなら、画像からSTLを出力できます

基板デザイン

画像出力か、印刷できるソフトで回路を書きます

今回KiCadを使用しています
サンプルとして、ブレッドボード用の某ゲームコントローラー風のボタンを作成しました
生基板の切れ端(16ミリ×30ミリ)を使用する予定なので詰め込み気味です
(印刷時には更に詰め込みました)


表面(F.Cu)を出力



印刷はPDF形式で出力



SVG作成

3Dモデリングソフトが取り込める形式としてSVGを作成します
PDF形式もSVG同様にベクターデータを扱いますが、単一のパスレイヤーに変換した方が便利なのでその処理も行います

InkscapeにPDFファイルをインポート
背後にある背景用の白矩形パスを削除(見やすくなる)


パスデータを元にbmpを作成するのですが、デフォルト設定(96dpi)ではぼやけてしまうので解像度を変更
Preferences(shift+ctrl+p,環境設定)のImported Images(インポートした画像)のResolution for Create Bitmap Copy(作成するビットマップコピーの解像度)のdpiを十分に大きな値にする


パスを全選択(ctrl+a)した状態でMake a Bitmap Copy(alt+b,ビットマップのコピーを作成)
イメージ(bmp)選択状態でTrace Bitmap(shift+alt+b,ビットマップのトレース)でパス化
黒い部分のパスが作成されます

下画面の右側がレイヤー情報です

  • path1260がビットマップから作成されたパス
  • image1257が作成されたビットマップ
  • Page 1がインポートした最初のパス群

path1260以外を削除

Plain SVGでエクスポート

STL作成

blenderにSVGをインポート
SVGデータはカーブデータとして扱われるのでメッシュに変更
x,yを938倍します(何故このサイズになってしまうのか分かりません)
モディファイアのデシメートで平面を纏め(ポリゴン数の削減)
押し出して立体化
選択したオブジェクトをSTLで出力(export SelectionOnly)


gcode作成

STLファイルを使い慣れたスライサーに取り込んでください

PrusaSlicerを使用しています
ポリ数が多いと読み込めない
retract before travelを0ミリにしないとエクストルーダーを持ち上げない場合があるので注意


おまけ

印刷などは個人の環境に依存する部分なので流します、以下は参考程度に

片面銅張基板はエクール(の切れ端)を使用(銅箔厚み35μm)
トンボ付けたりして実際に印刷したデータと上の記事中のスクリーンショットは異なる
噂通りマッキー青が優秀なレジストペンだった
ベタ塗りや太線はインクの薄い部分ができてしまう
下写真はワイヤー幅1ミリ
ワイヤー幅0.5ミリでも問題なさそう(コーナトンボの線幅が0.5ミリ)
下段の写真の銅箔表面がテラテラしてるのはコーティング剤



実際の印刷は3Dプリンターで適当なペンホルダーを作ります

例えばpen plotterやdrawerやholderで見つかるかと
Pen Holder for Ender 3 / Ender 3 pro/CR 10/Ender 5
Ender 3 Pen holder for plotter
3D printer multi-function/ Imprimante 3d Multi-fonction 

設定は

  • フィラメントを抜く、または押出させない
  • ノズル温度 first_layer_temperature と temperature を0度
  • ベッド温度 first_layer_bed_temperature と bed_temperature を0度
  • 必要ならノズル用のファンの停止(ペンが乾く)
  • リフトZ(filament_retract_lift)を設定(travel時にエクストルーダーを持ち上げる)
  • ノズル径をペンの太さに
  • retract_before_travelを0ミリ(値以下のtravel時にエクストルーダーを持ち上げない)
  • first_layer_heightの調整 

他にも色々調整したけど主要なのはこれくらい




2023年5月29日月曜日

Logicool M325 の戻ると進むボタン

はじめに

LogitechがiFixitと提携という話があったりしますが、たまにはブログを更新しようと思ったので分解と修理ネタです

ロジクールのワイヤレスマウスM325のチルトというのかな、戻ると進むが動かなくなりました
他のPCに接続しても同じ症状なので、ハード側の問題だと判断しました 

この機種の修理記事はたくさんあるので、私が適当に書いても影響ないので安心して駄文が書けます

注意

修理はケガや火災等の危険があり、メーカー保証も無くなりますので、個人の修理を推奨しません
新品を買い直したほうが安全ですし、メーカーさんもお店も喜びます
この記事は、修理慣れした方には隠しネジやツメの確認用、そうでない方は無駄知識用です

分解と修理

電池ボックスのシールの下のどこかに小ネジが隠れているので外します
シールを剥がすのが面倒なので破っています

 マウス内部のボタン側に差し込むような爪があるので、後方を持ち上げてから斜めに引き抜きます

ホイールのマウンターを外します
次に電池ボックスからプラス端子を抜き、左ボタンのマイクロスイッチ傍の爪(矢印)を開きながらマイナス端子と基板を取り外します

マウンターの下には進むボタン、戻るボタン、その後ろにミドルボタン用のタクトスイッチがあります

写真では判り難いですが、タクトスイッチの金属が沈み高さが変わったためボタンが押せなくなったようです
よく中ボタンも壊すので、3Dモデルの視点を動かす時など押下が強すぎるのかもしれません

タクトスイッチは一般的な6mm角のスルーホールで、1個10円くらいで入手できます
ストックがいっぱいあるので交換します

上はスイッチを取り外した基板を裏から見たものです

複数の足を持つ部品を取り外す技術か道具が必要です
ランド(銅箔部分)を破損すると面倒になります

逆の手順で組みなおせば修理完了です

基板を戻す際に電源スイッチのキャップ(?)を忘れないように
スライドスイッチが外側の時にoffです

おまけ写真 


白色の タクトスイッチに交換しました
ミドルボタンの不調の時も同様に直せます

ピンボケしてますが、金属部分が沈んだタクトスイッチです

この製品はフォトインタラプタを使用しているので、ホイールのスクロールが飛ぶ、カクつく場合はホイールの格子を掃除すれば改善することがあります
別機種のM235はグリスっぽいもので格子の穴が塞がることがありました


2023年2月5日日曜日

2023年のヤマザキ春のパンまつりに3点シールがないみたいです

今年は合計30点ですね。

色々なパンを購入して画像認識に使用するのですが、3点シールが見つからない。
店員さん曰く「今年はないみたいだよ~」との事で、アプリが認識するシールは0.5~2.5点の5種類になりました。

去年初めて食べた超芳醇ゴールド(とても美味しい)は3点→2.5点みたいです。
尚、くるみゴールド(1.5点)は好きなので2袋購入。

存在しないみたいですが3点も修正時に選択できるようにしてあります、念のため。

2022年4月4日月曜日

TextViewの幅に合わせたテキスト表示

注意

私はjava初心者です、Android Studioも初心者です、はじめて2週間くらいです。拙いメモ書きと思ってください。


先週、TextViewの幅いっぱいに文字列を表示する必要がありまして、急いでいたのでとりあえず検索しました。

setAutoSizeTextTypeWithDefaults(int autoSizeTextType);

とか

<TextView
    ︰
    android:autosizetexttype="uniform">
等で解決するのは、リリース後に知りました(Android 8.0以降)

さて、検索でよく見かけたのが、

PaintのmeasureTextで表示幅を計算、もし大きかったらsetTextSizeのサイズを-1して目標の幅に収まるまで繰り返す。

という方法。

たぶんジワジワと這い寄るのには深い理由がある筈(適当
もしくは文字の最大・最小spやTextViewの幅なんて気にしないロックな設定が必要だからです。
(単純に方法の説明には十分っていうのが最有力説)

当時、流石に-1ずつはコストが高いので類似品を作りました。
尚、ロックな仕様に手直ししてあります。検索汚染になるなら削除します。

float calcTextSize(float widthPixels, String str) {
    if (widthPixels < 1f || str == null || str.length() == 0) return 0f;

    float textSize = 16f;    //適当
    Paint paint = new Paint();
    //paint.setTypeface(Typeface.SERIF);

    //表示幅を超える文字の大きさを求める
    while(true) {
        paint.setTextSize(textSize);
        if ( paint.measureText(str) > widthPixels ) break;
        textSize *= 2f;
    }

    //目標の幅に近づける
    for (float adjust = textSize * 0.5f ; adjust > 0.25f ; adjust *= 0.5f) {
        paint.setTextSize(textSize);
        textSize += paint.measureText(str) > widthPixels ? -adjust : adjust;
    }
    
    return (float)Math.floor(textSize);
}

表示幅と文字列を与えると、テキストサイズとして0f以上を返します。

float f = calcTextSize(1000f, "hogehoge");
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, f);

ユーザーがフォントサイズを変更した場合でもCOMPLEX_UNIT_PXなら固定表示です。

もっとシンプルになら、こうでしょうか?

float calcTextSize(float widthPixels, String str) {
    float textSize = 128f;
    Paint paint = new Paint();

    for (float adjust = textSize * 0.5f ; adjust > 0.25f ; adjust *= 0.5f) {
        paint.setTextSize(textSize);
        textSize += paint.measureText(str) > widthPixels ? -adjust : adjust;
    }

    return (float)Math.floor(textSize);
}

2024年のヤマザキ春のパンまつり

パンまつりが始まったので点数計算 アプリ の更新を行いました。  去年はシールの種類が0.5から2.5点の5種類でしたが、今年は3点シールが復活して6種類です。 (3点シールはダブルソフト専用?) 画像認識に使用するサンプルを購入、プログラムを修正、公開できました。  気が向い...