2026年9月8日火曜日

OpenPnP:Blinds Feederの設定について

調整途中なのでバリや糸引きが残ってますが……

Reference Stripe Feederは光学処理でカットテープを認識してくれますが、フィーダーそのものについてはユーザーが用意しなくてはいけません。いろいろ試して代替の部品はうまく認識できるようになりました。ただ、0603以下、特に0402以下はちょっとした振動で飛んだりひっくり返ったり無くなったりします。

もうつかれました。

ということで、再度Blinds Feederに戻ってまいりました。

Blinds Feederの特徴

  • テープ幅などを数値設定するとOpenSCADがSTL/PDFを吐いてくれる
  • 土台とフタが出力される
  • 土台にはスプロケットがぴったりハマる突起が出ているのでテープずれない
  • 土台には4つのFiducialsがあり座標を自動光学認識してくれる。一つの土台をグループとして登録しておけば、個々のテープの位置を登録しなくてもあとは四隅との相対座標で自動的に補正される!
  • フタには穴が空いていて、部品をその穴からピックアップする
  • フタを半ピッチずらすと部品が見えなくなり紛失の恐れも減る!
  • SOT23など部品が密集している場合はただのフタだけど保管中に部品が消えることがなくなる!
  • フタはノズルの動きで自動開閉可能!(ノズル変形が怖いので私は手動一択)
  • PDF/DXFでラベルを吐いてくれる。ラベルはOCRまたはQRコード、3Dプリントとは別に出力して貼り付けるとvision pipelineが自動認識してくれる!(らしい……未テスト)

という感じです。特にグループ登録は素晴らしいですね。テープごとに高さと座標をセットするのは煩雑(特に高さ調整は老眼にはきつい)なのですが、グループとして保存しておけばあとは周辺座標合わせるだけ!というのはとても楽です。楽すぎます。

OpenSCADへのデータ(一例です……というか私のための解説)

0603

tape0603 = TapeDefinition(
    tape_width=8,
    tape_thickness=1.1,    // メーカーごとシリーズごとに異なるので毎回計測推奨
    pocket_pitch=4,
    pocket_width=2.5,
    tape_play=-0.0,
    cover_play=0.05);

SOT-23など

SOT23-3/-5などはテープに隙間無く入っていてフタをズラして窓を開く余地がないので、フタは保存時の紛失防止みたいな感じです。使用する時全開して使うのが前提となります。

tapeSOT3 = TapeDefinition(
    tape_width=8,    //    テープ幅、誤差は含めない。なお以下もwidthはテープの幅方向
    tape_thickness=0.4,    // テープの厚さ:スプロケの高さ
    pocket_portrusion=1.6,    // プラスチックパッケージの裏のでっぱり深さ
    pocket_pitch=4,    // 部品の間隔
    pocket_width=4,    // 部品の幅
    tape_play=0.05,    // テープの遊び
    cover_play=0.05,    // カバーの遊び
    blinds=false);      // true : フタに穴が開く

ESP32など

でかい部品はテープ幅広すぎて、縁にひっかからず落ちます。そういう部品は土台の穴に一つずつ部品を投げ込む仕組みになります。めんどくさい?でもLoose Parts Feederで光学認識が思うように動かないと泣き崩れるよりも楽です。

なお、遊びについては数値に含めずplayで調整してくれと公式に書いてありますが、これはテープとカバーと本体との隙間にかんする話で、部品を納めるポケットの話ではないようで……チップの仕様書あるいは実測値そのままだと部品入りません。これは出力を繰り返して調整するしかないでしょうね。

trayESP32C3 = TapeDefinition(

    tape_width=28,        // 部品幅20 + 隙間 + 側壁余裕 → 4mmの倍数で28
    tape_thickness=3.2,   // くぼみの壁の高さ = 部品の高さ
    pocket_pitch=24,      // ポケット長18.5 + 仕切り壁0.9 + 余裕 → 4mmの倍数で24
    pocket_width=20.5,    // テープ幅方向(20mm辺)+0.5の遊び
    pocket_length=18.5,   // テープ長さ方向(18mm辺)+0.5の遊び
    tape_play=0.1,
    cover_play=0.05,
    blinds=false,    // フタに窓不要
    sprocket_thorns=0);    // スプロケを差し込む突起の間隔。1は4mm、0は突起なし

3Dプリントについて

デフォルトは層厚layer_height=0.2に設定されていて、「うちのP1Sなら0.08mmでイケるだろ」と思ったのですが、スライサーのデフォルト値とぶつかったりでうまくいきません。たとえばBumbu Studioだと定着層が0.2mmでその上の端数が切り捨てられて1層しか出力されなかったりします。ので結局0.2に戻しました。

ともあれ、最初はデフォルトで出力してみることをオススメします。

と書いておいてなんですが、底板の厚さについて。

デフォルトだと底板の厚さは2層ですが、うすすぎてゴム磁石で固定しずらいので少し厚くして使いたいと思います。その場合には、BlindsFeeder-Library.scadのfloor_thicknessにミリ単位の値を設定します。この時、積層厚の整数倍にすると良です。

ただし、それでも低すぎてノズルが届かいので、なにか台を使うか、フィラメントの消費は気にしないで底板を厚くするか迷ってます(P1Sの場合10mm程度の厚さが必要)。公式ではslateに貼れって書いてますね。PSE-3000は基盤が鉄板なので、磁石なら簡単に固定できるのですが、簡単で使いまわしができて設定も楽という天国を求めております。

フィラメントの色

公式ではフィラメントは鮮やかな緑色を使ってクロマキーのようにスパッと抜く設定が入っています。ただ、何故かいま、Bambu Labは緑色フィラメントがないので、手元の青色で試してみました。

手順としては、3DプリントしたフィーダーをPSE-3000に固定して、top visionの画像を表示します。その画像を切り取ってClaudeに投げて、「上限値255のHSVを調べて」とお長居します。そうすると色相・彩度・明度を解析してくれますので、edit pipelineから入力して切り取り具合(3Dプリントした部分が黒、それ以外は白になればOKです)を調整し、Save Pipelineします。なるべく広域で影になっているところなんかも写った状態でClaudeさんに分析してもらうと楽です。

こうしてできたのが以下のMaskHsv設定です。hue(色相)がだいぶ狭くできました。

なかなか一発では行かないと思いますので、光源を変えたり向きを変えたり、直接数字をいじって黒い範囲が出たり消えたりするのを確認しながら進めましょう。地味な作業ではありますが、Claudeさんに解析丸投げできてだいぶ楽でした。

まぁ青だと例えばKOAの厚膜抵抗の上面が水色なのでそれと被らないか心配ではあるのですが……その場合はオレンジ色で出力してみます。