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の厚膜抵抗の上面が水色なのでそれと被らないか心配ではあるのですが……その場合はオレンジ色で出力してみます。

2026年8月14日金曜日

ステンシルプリンター3代目の調整方法(自分用メモ)

アリエクスプレスでステンシルプリンター買いました。これで3台目(代目)です。初代のはフレーム前提のごっっついやつ、二台目は厚さ調節のないオモチャでしたが、3台目は初代のような微動機構はないもののXYZの調整ができて十分実用になるものでした。

デスクトップSMTスクリーン印刷機

注意しなければならないのは、ステンシルのY軸方向の最低サイズが100mm、できれば120mm以上必要、ということでしょうか。これ以上せまいと基板を固定するのが難しくなります(指が入らないのでネジを回せない)。

なお安価なので仕方ないですが、微動機構がないので調整にはわりと職人技が要求されます。

なんどかステンシルと基板をセットしてみて、これならいけるかな?というのが以下の手順です。

  1. まず基板を水平垂直に注意しながら扱いやすい位置にセットしてネジを締める。手前~奥の方向については自由度が高いのですが、基板の左右方向を決めるツメには制約があるので先に基板の左右方向の位置を確定しないとあとで泣きます。
  2. ステンシルの位置決め。
    1. 奥のプレートに挟み、基板にあわせて左右の位置決めをしてネジを締めて固定する
    2. 奥のステンシル固定バーで前後方向・回転方向の位置決めをしてからバーの左右のネジを締める
    3. ステンシルを手前のプレートに差し込みステンシルを挟むネジを締め、バネでテンションをかける
    4. 奥と手前のバーの左右にある厚さ調節ネジで基板とステンシルが平行になるように調節する。ステンシルを固定しているアクリルのプレートはバネで下から押さえられていて、左右のネジで基板から上下方向に移動できるようになっています。
    5. ずれていたら2.1.から繰り返す

以上のように調整すれば、それほど時間をかけずに±0.05mmぐらいまで追い込めます。プリンタの奥の方にある蝶番はガタツキが少ないですし、手前側にはいい感じのピンと穴があってしっくりと基板側とステンシル側を固定できるようになっています。

今まで使ってきたステンシルプリンタで一番良い、と思うぐらい、しっくり止まります^ ^

なお厚さ調節ネジは基板の厚さが変わらなければ一度調整するだけで良いです。

2026年7月11日土曜日

OpenPnP:ノズルAuto Changer再挑戦ークラッシュはあったけど元気です

やっぱり自動チェンジがないと不便っす。

少しはPSE-3000 / OpenPnPに慣れてきたので、手動交換をすてて自動交換の道へ踏み出しました。

まず動画をみながら設定していくのですが……どうも設定してApplyを押し忘れてしまいがちです。今どきのコンシューマー用アプリだと「Apply押してないぞ」って指導してくれるのですが、硬派のOpenPnPはそんな風にユーザーを甘やかしてくれません。

オートチェンジャーのノズルホルダーの設定にはFirst〜4thまでの座標設定があるのですが、手順はこんな感じでしょうか。

  1. primary camera / N1, N2 nozzle calibrationを確認しておきます。
  2. まずノズルを全部はずしてホルダーからも外してしまう。
  3. 2つのヘッドについて、手動から自動に設定を変えてApplyする。くれぐれも1つごとにApplyするのを忘れないこと!
  4. Homeボタンを押して座標値を確実に設定します←大事
  5. Machine Setup -> Nozzlesで設定したいノズルを選ぶ
  6. 当該ノズルの真上にカメラを移動して、3rdのカメラ座標設定ボタンを押す
  7. 3rdのz軸値を-8.5にしてApply、ツールへの移動ボタンを押す。ヘッドがノズルの真上で止まります。
  8. 写真の赤の部分の隙間がなくなるまでJogで少しずつノズルをさげていきます。写真の状態だとあと1mmぐらいでしょうか。



    1. ヘッドを0.1mmずつ下げていくと、ノズルホルダーのスリットの間で写真の黄色の部分が下がっていきますので、ノズルの緑の鍔がスリットの中間付近に来るように調整します。
    2. あるいは8のあと0.1mmずつノズルをさげていくと3-5回ぐらいでノズルから「カタ」というスイッチが押されたような音がかすかに聞こえます。そこから0.2mmあげるといい感じに棚の中央に来ます。
    3. 【1と2の解説】ノズルはホルダー内のスリットのようなところに格納されています。ノズルの緑色の鍔と上下方向に0.5mmぐらい隙間があって、ヘッドがいないときには当然下に降りています(重力)。が、ヘッドが近づくとノズルとヘッドが磁石で吸い付いてスリットの上に張り付きます。ノズルとヘッドの隙間がなくなるまで下げて、さらにそこから0.2mm下げると鍔が中間に浮く、という仕掛けです。また、「カタ」と音がするのはスリットの下端に着いたという音なので、そこから0.2mm上げるといい感じに浮く、ということでもあります。説明下手ですまん。
  9. ノズル位置記録のボタンを押してからApplyを押します。
  10. カメラ位置移動ボタン、ノズル位置移動ボタンを押して、スムーズに動作することを確認します。
  11. 3rdのところに、ヘッドとノズルがぴったりフィットする座標がセットされました。
    1. Xの座標値を残りの3つにコピーします。
    2. Yの座標値を2ndにコピーします。1stと4thは初期値のままで良いようです。
    3. Zの座標値を4thにコピーします。1stと2ndは-8.5のままで良いようです。
    4. 忘れずApplyを押します。
  12. 1-4thの意味ですが
    1. 1st = ホルダー手前の上空
    2. 2nd = ノズルの真上。装着時は1stから2ndまで平行移動します。
    3. 3rd = ヘッドとノズルがいい感じにくっついた状態。ホルダーの中で少し浮いた状態になっているので、出入りの時にホルダーと激突しないように調整を繰り返すと不穏な音がしなくなります(真顔
    4. 4th = 3rdで吸着したノズルを手前に引っ張ってくる座標。
    5. つまり、装着時は空のヘッドが1→2→3→4と移動し、外す時には逆です。
  13. ともかく3rdに「ノズルがヘッドに吸着していて少しホルダの中で浮いている状態」になるのがすごく重要です。
  14. 操作していてクラッシュしちゃったかな?と思ったら、いさぎよくhomeボタンを押しましょう。XY座標が狂うことはほぼないですが、Z軸は結構ずれます。なので、ぶつかったらhomeでcalibrationして過ちを償う必要があるのだ。

という感じです。まぁ慣れてしまえば簡単ですけども……最初は英語の動画をみながら必死でございました。Applyを押し忘れる等の誤操作して「あっ!」と思ったときにはもうクラッシュしてるんですよね……。

過去にやらかしたクラッシュの影響で3Dプリント製のノズルホルダーが少し傾いていて再調整は苦労しましたが、現状、どのホルダーもひっかかったり異音を発することもなく、スムーズに脱着できるようになりました。

記念の動画がこちらです。


よかったよかった。なお、運用のコツなどNotebookLMにOpenPnPのフォーラムをぶち込んでさらってもらったら、「手動でノズルいじるな(そりゃそうだ)」「電源切ったりする前にノズルはホルダーに戻しておけ」という注意書きがありました。

機械が届いて約3か月。ま壊れる操作と回避する方法、調整しなおすために必要な作業……などが見えてきました。やっと初心者レベルに達しました、かね。

……と少し前に書いていた気もしますが……

2026年7月10日金曜日

OpenPnP:ノズルが部品の一部と認識されてしまう件


以前にも書きましたが、OpenPnPはOpenCVパイプラインで画像処理をおこない、ピックアップした部品の底面がフットプリントと一致しているか照合する、なんて処理を行ってくれます。素晴らしいです。

が、なぜかうちではノズルの緑色を部品の一部と認識してしまいます。

NotebookLMに聞いても、カメラをいじれとかスライダーでスレッショルドと最小サイズを調整しろというばかり。やってます、そんなこと。

が、ちょっと愚痴で「ノズルの緑色がうまく認識されていないみたいだ」と言ったらば……ノズルキャリブレーションの機能として、位置合わせだけでなく色合わせもやってくれるのだという情報が!

早く言ってよ……いや、私の聴き方が悪かった。症状を正確に伝えていなかった。

で、その方法ですが、

  • まず設定したいノズルをロード
  • Machine Setup -> Nozzle Tips -> ノズルをクリック -> Calibrationタブ -> 下の方にスクロールしていくとBackground Calibrationというパートが出てきます。色環も出てきます。
  • ここにMethodというプルダウンがありますが、「Brightness And KeyColor」に設定し、Applyします。
  • これで上の方にスクロールして戻り、キャリブレーションボタンをクリックし、また一番下に戻ると……おお!めでたく色相環(環じゃないな、なんて言うんでしたっけ)の緑色がアクティブに!!

これでノズルの緑色が見事に除外されます。

ついでにまた一番上までスクロールして、Auto Recalibrationの設定を「NozzleTipChange」にするとノズルを交換するたびに自動的に色彩と位置を較正してくれるので、部屋の照明が変わったりしても大丈夫です。

よかったよかった。

ついでにTips

ときどきチップ抵抗を吸い上げると横倒しに吸っていることがあります。ノズルが降りる時に押しつぶしているかそれとも密着が足りないのかと高さを微調整して直ったこともあったのですが今日は頑固に直りませんでした。

試行錯誤の結果、一段階太いノズルをつかうことで解決しました。

たとえば、ノズルを売っているお店などでは503ノズルは0402/0603、504は0603/0805/1206……等と書いてあるのですが、0603は504で吸う方が安定します。

まぁあまりノズルが大きすぎると中に吸い込まれちゃいますので限度はありますけども(それを懸念して細いノズルを選んでいました)。

試行錯誤の一つとして頭の片隅においといていただければ。

2026年7月9日木曜日

最近中華で売っている小さなステンシルプリターが届いた

少し悪意のある写真w

以前業務用ステンシルプリンターを使っていました。業務用といっても手動式、位置決めネジがたくさんついたガリ版印刷機、みたいなやつです。

ガリ版って死語だな……。

ただPCB Aが安価に使えるようになって自宅リフローの必要性が薄れ、かつ巨大なフレーム付きステンシルをつかうため送料が高いというのが主な理由です。しっかりして位置合わせの自由度も高くて良いのですが譲渡しました。

しかし、最近また自宅リフローを始めました。中華PCB Aの納期が遅くなることが多く、費用(特に部品代)も高騰気味だからです。

実装機導入関連

3Dプリントした台、もしくは余り基板を下敷きに3枚張り合わせる昔ながらの方法でスキージングしていましたが……アリエクスプレスやJLCPCBで小さいサイズのステンシルプリンタを見かけるようになり、生産性向上のために買ってみました

SMT Stencil Printing - Suitable for 100x100mm Stencils

結論から言うと、生産性は上がらないですね。あと厚さも1.6mm専用でそれ以外だと隙間ができます。広告にはその機構らしきもの(Dial lift mechanism)があるのですが、実機には見当たりませんでした。


縦方向の位置合わせは慣れは必要なもののちゃんと機能します。

問題は横方向で……土台に磁石でくっつく20mmほどのピンで動かないようにする、だけです。磁石なので微調整しても浮いたり動いたりしてズレます。2012ぐらいならいいと思いますが1005やQFNとなると毎回顕微鏡で見ながら横からコンコンして合わせる始末ですw 

せめて最初の1回苦労しても2回め以降はスムーズ、ならステンシルプリンタの意味があるのですが。

昔使っていた業務用ステンシルプリンターと比べるとガタが少ないですし、何より小さいので顕微鏡下で微調整できるのはメリットです。しかし、微動機構が一切ないのは辛いですね。購入を勧めるかといえば微妙です。

これを買ってメリットがあるのはどういう人だろう?というのが疑問。

以下、一応、昔使ってたステンシルプリンタでの経験も踏まえて、使い方です(左利きの方は適宜読み替えてください)。

  1. 上フレームのバネのところのネジを緩めて、バネ押さえを一番奥に動かしておく
  2. 上フレームの手前2本のネジを緩めてステンシルを挟む。
  3. 上フレームの奥3本のネジを緩めてステンシルを挟む。この際、3本のネジを緩めすぎるとボルトが中におっこちて面倒なので気をつける
  4. 上フレーム左右のバネをいい感じに圧縮してネジで抑える。
    • この機能がステンシルプリンタをつかう最大のメリットかもしれません。ステンシルがぴーんと貼るので、基板との間に隙間ができにくいんです。うまく調整すれば、の話ですが。
  5. 上フレーム手前の下側に白い足がついているので、ステンシルと基板がぴったり密着しつつ足と土台がツライチになるように調整する。
    • 悲しいことにこの足のネジには固定機構がないので、ときどき調整・確認する必要があります。我が家ではどうせ1.6mm専用機なのでロックタイトで固めてしまおうかと思ってます。
  6. 下フレーム、奥の横バーの左右2本のネジを適宜緩める
  7. 下フレーム、手前のバーを押さえているバネの金具のネジを緩める
  8. 下フレームの奥と手前のバーの間に基板をはさんで、いい感じにステンシルの下に動かしてほぼぴったりの位置に移動する
  9. 下フレーム奥のバーの左側のネジを7割ぐらいしめる(勝手に動かないけど動かそうとすれば動く程度)。ステンシルとズレていないことを確認しながら右側も7割締める。
  10. 黒いバーのついた磁石を基板の左側に密着させる←重要
  11. ステンシルとのズレを確認しつつネジを少しずつ締めていく。
  12. 決まった!と思ったら下フレーム手前バーのバネをほどよく奥に押し上げてネジ締める。

まぁこんな感じです。業務用ステンシルプリンターは微動機能があちこちにあって、前後・左右・上下・基板厚・回転が可能でした。まぁそれ全部やれとはいわないですけども……小さくて微調整が可能でずれない、というものがあればいいんですけどね。

その前に、VOLTERAみたいにはんだペースト塗れればいいんですが(あれは低温ハンダ用だったりいろいろ制約があるんですよね……個人的に一番の制約はテクノアルファという代理店ですが)。

2026年7月4日土曜日

OpenPnP:Reference Auto Feederで4mmピッチ以外の部品を使う方法

Reference Auto Feederは穴間隔=部品間隔=4mmという前提で作られているので、そのままでは部品間隔2mmの0402には対応できません。PSE-3000の動画に説明がありました。


動画を送りながら設定するのは煩雑なので、メモとしてまとめました。

  • フィーダーのIDはxxxとします。実際の番号で置き換えてください。
  • Machine Setting→Heads→Actuator、ReferenceActuatorを追加し、追加したactiatorをクリック
    • DriverはCH、IDとして「feeder id xxx」を入力、
    • Machine CoordinationをWaitfor, none, noneに変更、Apply
  • Machine Setting→Drivers→USB SERIAL CH341を選ぶ
    • Gcodeタブ
      • Head Moutable : 上で登録した「feeder id xxx」を選ぶ
      • Setting:ACTUATE_BOOLEAN_COMMANDを選ぶ
      • Gcodeとして「M600 Nxxx F1 T」を入力、Apply
  • Feeders
    • ReferencePushPullFeederを追加、当該feederをクリック
      • configurationタブ
        • Partを選ぶ
        • カメラで下から2番めの部品をPick Locationのカメラ座標として指定
        • ノズル先端を部品にくっつけて保存、ノズルを動かさずにそのままAutoSetupを実行。正しいところに移動するか確認
          • ※ノズルクラッシュで散々痛い目にあってきたので「P」に戻してから操作したいのですが、Zを「P」で戻してからAutoSetupを押すとZ座標がキャンセルされてしまう症状に頭を抱えました……
      • push pull motionタブ
        • Feeder idとしてfeeder id xxxを選び、ほかは触らずApply
  • 動作確認
    • feederでピックアップ→partのbottom visionで確認……を3回繰り返して問題なければOK
    • ※3回繰り返すのはfeed動作も含めて確認するため

 という感じです。自分のメモですが、わからないところがあれば聞いてください。

2026年7月3日金曜日

GreenPAK : CNT/DLYについて

 もうすでにブログ等で書いておられる方も多いのですが、いじって失敗しないと覚えないタイプなので、基礎的なところから再履修しております。

CNT / DLYの動作です。条件は固定しました。

  • 入力(緑色)はHigh 1sec + Low 4secの繰り返し
  • CNT / DLYの設定
    • クロック入力 : CLK0 / 64 = 32Hz
    • Edge Mode Select : Rising
    • あとはデフォルト
  • 出力は青色です

では、見ていきます。

One Shot

これは非常に素直ですね、Edgeで設定した幅のパルスが出ます。

Delay

立ち上がりのパルスから計時開始、設定した時間が経過したところでパルスが立ち上がります。750mSecにすると立ち上がりから250mSec後に出力が立ち上がり、入力パルスがLowに下がると出力もLowに。

ただ、設定したDelay幅よりも入力幅が短いと何も出ません。以下は1500mSec設定です。

Frequency Detect(Rising)

基本的に入力するパルスの周期 <= 設定した周期 ならば出力Highになります。ただ、<のときと=の時では、最初にHighになるタイミングが一つズレます。

上の通り5秒未満に設定すると何も出ません。

5秒だと10秒のところでHIGHになります。

5秒以上に設定すると5秒からHIGHになります。たぶん「設定した秒数よりも短い間隔でパルスが来ればHighになる」というのが本来の機能なのだと思いますが、起動後はPORなどでうまくカウントがスタートしないんでしょうね。

Frequency Detect(Both)

上記はEdgeをRisingにしていましたが、Bothにすると↑↓の1秒と↓↑の4秒にそれぞれ反応します。

1秒


4秒未満


4秒


4秒より大きい


Reset Conter

Edge(この場合はRising)が来ると設定した間隔でパルスを出し始め、次のEdgeが来るとまたパルスを出し始めます。

Edge Detect

名前の通り、Edge(例によってriging)が来ると短いパルスを出します。他のCNT系はクロック幅のパルスを出すのですが、ここは短いのが出ます。Counter値を変えても特に何も起こりません。

Delayed Edge Detect

前記Delayとは違ってパルスを出します。ただ、Delay同様に入力信号のパルス幅よりも長いdelayを設定すると出力なんもでません。

まず500mSec。Edge(Rising)の500mSecあとに細いパルス出ていますね。

1Sec以上に設定するとパルス出ません。

まとめ

Delay / Delayed Edge Detectは、ちょっと試したときに意図した動作をしなかったので、放置していたのですが、Delayed Edge Detectのような機能を実装するのにCNTを2つとLUT一つ使っていたので、とても助かりますw

やっぱ基礎大事っす……細かく動作確認しないと駄目ですわね。

FSMも「アップダウンカウンターっすか?」とか言ってないで、ちゃんと調べないといけないな……

2026年7月2日木曜日

XIAO MG24のD1とD3に気をつけて

D0 - D3にロータリーディップSWをつないで使用しました。

症状:特定の数値の時にハングしたりLED点灯しっぱなしになったり。

原因:D1(PC1)とD3(PC3)がブート時に特殊機能を持つピンだった。

  • D1(PC1) = DEEP_SLEEP_ESCAPE_PIN:
    • ArduinoLowPower.cppの escape_hatch() が setup() より前に実行される
    • D1がLOW → LED_BUILTIN点灯 + 無限ループ (ユーザーコードに到達しない)
  • D3(PC3) = GeckoブートローダーGPIOアクティベーションピン:
    • Geckoブートローダーが escape_hatch() よりさらに前に実行される
    • D3がLOW → ブートローダーがUART XMODEM待機モードに入りアプリ未起動

ということだそうです……(白目

D1とD3は、出力ピンとして使いましょうね。

まぁXIAO ESP32 C3も使えないピンがたくさんあって苦労しましたが、Seeed JPの方のブログに救われました。XIAO MG24についてはwikiに特に警告ないので、何も考えずにピンアサインしたのですが……いやはや。

まぁClaude Opusさんに救われました。症状が出た時に「動かないのは気のせいだろ」「起動しない場合はパスコンを追加するといいですよ」とか言われたんですが(意訳)、「ブートモードにでもハマってるのではございませんか? 他のピンに変えたいけど、安全なピンをお探しくだせえ」とヒントを投げたら、ドキュメントやソースコードを深く深く掘り下げて原因を見つけ出してくれました。

私だったらあんな山のようなドキュメントやソース読む気力ないから、D0-D3全部入れ替えちゃえ!って無駄な苦労をしてたでしょうね(笑)。

2026年6月28日日曜日

OpenPnP : Stripe Feederもどき

PSE-3000にセットしたStripe Feederもどき

OpenPnP実装機には部品をセットするためのfeederが何種類も用意されています。その一つにStripe Feederというものがあって、これはカットテープをセットして使います。

SMDテープのフィード穴と部品の位置は規格で決まっていて、OpenPnPはフィード穴を光学的に認識して、そのデータをもとに部品の位置決めをしてくれるらしいです。

OpenPnPプロジェクトで公開されているfeederはテープを挟み込んだり、スライドすると部品のところだけ窓があくようになっていたりと凝っているのですが、私は単なる直方体(写真緑色のやつ)に両面テープ(ナイスタック02の5mm幅……最初01を試しましたが弱すぎて駄目でした)で固定しています。

緑の板の下面にはゴムシート磁石を貼りPSE-3000に固定しています。

黄色いマスキングテープは、一部だけ剥がしたカバーテープを抑えるためのものです。調整が終わるまで光学認識などに最低限必要な箇所だけ見えるようにしておきます。

弊社実装機部門では、ある程度共有できる部品とプロジェクト固有の部品はstripe feeder、100nFや10kΩなど汎用性の高い部品はAuto Feeder、という使い分けをするつもりです。

余談ですが、今回初めてPolymakerのPolylite PETGを使ってみました。今まで「PLAは臭いけど、PETGはとっても臭い」というイメージだったのですが、このPETGあんまり臭くないんですよね……いつものBambu labのPLAマットよりも臭くないぐらいで。まぁ匂いがしないから害がないとは言わないですが、やっぱり臭くないほうが使いやすいです。

ただ……お値段がBambu PLAの2倍ぐらいするので、ちょっとつらいですw

2026年6月20日土曜日

GreenPAKの開発ツール

ソフトはGo Configureで1本化されているので問題なし。GreenPAKに対してはI2Cでマイコン等から書き込めるとはいえ、Go Configureとのやり取りには開発キットが必要です。

当初秋月でも売ってたDIP Development Kitは、liteに近い機能があったけどdeprecatedっぽい。安くて便利だったのに残念。

DIPの次はSerial Debugger使ってくれってことだけど、DIPは外部にピンを引き出したりすることができたのにSerial DebuggerはI2Cでの読み書き専用です。

開発ボードとして何を買って良いのかどう組み合わせるべきなのか等の網羅的な資料を探しても見つからないので調べて簡単にまとめてみました。

表記揺れ大文字・小文字ミス、認識誤り等ご指摘いただければ幸いです。

DIP Development Platform

読み書き、ピンを外に引き出して外部回路とつないだ状態でのテストができたけど現在はdeprecated。

Serial Debugger

I2Cでの読み書き用。

Lite

各ピンをON/OFFしたり外に引っ張って信号を入れるような使い方ができる。DIPの後継機・上位機種? 秋月で売ってるDIP化GreenPAK SLG46826もそのまま挿せるし、オプションのソケットアダプター(TSSOPなどのチップをそのままZIFにはさんでテスト書き込みができる)も使える

Intro-kit

LiteにDIP版のサンプルGreenPAKを何個か付けたもの。お買い得。

Advanced

さらに上位機種で信号波形やタイミングを定義して実際の信号としてチップに入力できる。

Go Configureで電圧源・信号源として各種デジタル信号パターン / アナログ信号波形などを設定してエミュレーションできるようになっていますが、あれが実チップに対して行えるという素晴らしい世界。

Go Configure Development Board(GCDB)

さらに上位機種としてForgeFPGAも使える予定(なおGreenPAK / ForgeFPGAのためのExtention Boardは未発売なので2026年5月現在何にもできない)
  • GCDB
  • +GreenPAK / ForgeFPGA Extension Board
  • +チップ(パッケージ)ごとのアダプタ
という構成が必要。20ピンDIPもDIPアダプタを追加すれば使えるっぽい。

……というまとめであってます?