大判カメラ自作

1. プロジェクト概要
RP2040マイコン2台による分散制御とCoreXY機構を用い、単画素センサを物理的に移動させて6インチ角の画像を生成するボクセルスキャンカメラ。
2. 機械・光学設計仕様
2.1 撮像・フォーカス機構
- XY軸(撮像面): CoreXY方式。GT2ベルト(2mmピッチ)採用。プーリ歯数 32T(径約20.4mm)または 40T(径約25.5mm)を推奨。撮像有効面積 6インチ角。
- Z軸(フォーカス): モータ2基によるダブルヘリカル・ラック&ピニオン駆動。左右独立駆動。
- バックラッシュ対策:
- XY軸: Y軸を地面に対して鉛直(垂直)に配置。自重によりスライダの重みがベルトを介してモータギアの遊びを常に片側に寄せることで解消。
- Z軸: ソフトウェアによる「一方向位置決め」を徹底。逆方向へ動かす際は必ず目標値をオーバーシュート(追い越し)してから戻す。
- ストローク: フォーカス動作距離 180mm~200mm。紫外線の結像距離やレンズの焦点距離の測定誤差を考慮し、無限遠を超えて動かせる「オーバーインフ」設計。
- 製造: ベアリング以外の全パーツを3Dプリンタ(A1mini)で造形。精度が必要な部品は0.2mmノズルを使用。
- 目標精度: 定格有効動作精度 0.1mm。
2.2 光学系
- レンズ: ジャンク望遠レンズ前玉(f=90mm, φ50mm)。
- 絞り: ウォーターハウス絞り(手動差込板式)。
- 解像度戦略: 収差の少ない中央部は高密度スキャン、収差の大きい周辺部は低密度スキャン(可変解像度モード)を行う。
- ピクセル解像
3. 電子回路・電源設計
3.1 構成部品
- センサ: カラーセンサ(S9706)、紫外線センサ(ML8511) + 外付けADC(MCP3425)。
- モータ: 28byj-48(1/64減速機内蔵) + ULN2003 × 4軸。
- 小型ファン 長時間連続可動するCoreXY用のステッピングモータを冷却するために使用する トグルスイッチでONOFFを制御。
- マイコン: RP2040搭載互換機(USB-C搭載)× 3基(H, A, B)。
- 親機: Raspberry Pi Zero W (Z)。DietPI導入。Wi-Fiオフ、BLEシリアル通信メイン。
3.2 電源・安定化
- 入力: USB 2系統(マイコン用 / モータ用)。モータ側はPDトリガーモジュール(5V)を使用。
- モータ側安定化: 各ULN2003近傍に16V 100μF電解コンデンサ + 0.1μF積セラを配置。
- マイコン側安定化: RUN-GND間に0.1μF、VBUS-GND間に100μFを配置。
- 共通仕様: 全体のグランド(GND)を共通化。
- ファンのインダクタンスからモバイルバッテリの昇圧電源系を保護するためにES1Jをフライバックダイオードとして使用
3.3 モバイルバッテリー・スリープ防止
- 目的: BLE通信のみで消費電流が低下し、モバイルバッテリーが自動オフになるのを防ぐ。
- 対策1: 3台のマイコンのRGB LED (WS2812B) を活用し、常に点灯/点滅させて負荷を維持。
- 対策2: 4つのモータに対して交互に微小な保持電流を流す。
4. 物理レイアウトと配線設計
4.1 ユニット配置
- 固定ユニット (Base Unit): マイコンH(ホスト)、電源入力部、Pi Zero Z。筐体に固定。
- 可動撮像ユニット (Scanning Z-Stage): マイコンA(センサ)、マイコンB(スレーブ)、モータドライバ群、CoreXY機構一式、センサ類。Z軸により前後移動する。
4.2 配線
- 配線構成 (計12〜14本想定):
- 電源ライン: 5V, GND。
- 通信ライン (A-B間): UART TX, RX。
- 同期ライン (B-A間): M1_CLK, M2_CLK, Z_CLK, EOL。
- センサ通信ライン (A-センサ間): I2C (SDA, SCL), デジタル信号線 (Gate, Range等)。
5. ソフトウェア・制御アーキテクチャ
- 開発言語: Pico SDKのC++でベアメタル動作とする エディタはVSC
5.1 マイコン役割分担
- マイコンH(ホスト):
- Core 0: 物理スイッチのホスト
- Core 1: RaspberryPiとの情報通信橋渡し
- マイコンA(センサ):
- Core 0: G-Codeパース、撮像計画、Bへの命令送信、データ外部出力。
- Core 1: 3軸CLKパルス監視、内部座標更新、センサ積算開始/停止、データ読み取り。
- マイコンB(スレーブ):
- Core 0: バイナリ命令受信、16行リングバッファ管理、リミットスイッチ(マトリクス)監視、スリープ防止制御。
- Core 1: 台形加減速アルゴリズムに基づくステップパルス生成、同期信号出力。
- PIO: ハードウェアによる精密パルス出力および同期CLK信号生成。
5.2 通信プロトコル
- A → B (バイナリ): 24バイト固定長
[0xAA 0x55][ID][Len][Payload][CRC8]。
- B → A (物理同期信号 3+1): 物理ステップを $N=4$ で分周したクロック。移動完了時にEOLを送信。
6. 撮像・解析ロジック
6.1 センサ駆動
- 可視光 (S9706): 「区間積算サンプリング(積分型)」。中心座標 $X_n$ に対し区間 $[X_n - D/2, X_n + D/2]$ でGateをHIGHにする。感度モード(3x3/9x9)をGCodeで切替。
- 紫外線 (ML8511 + MCP3425): 「ワンショット・サンプリング(ADC変換型)」。中心座標 $X_n$ 到達時に変換を開始し、完了後にデジタル値を読み取る。
6.2 3次元ボクセル・スキャン
- 概念: 空間を(X, Y, Z)のボクセル格子として定義。Z軸も解像度を持つ次元として扱う。
- 非平面スキャン:
- Zをずらしながら全域プロファイリングを行い3Dボリュームデータを取得。
- オフライン解析で各(X, Y)の合焦Zを特定し、レンズ曲面モデル $Z = f(X, Y)$ を作成。
- モデルに基づき、(X, Y, Z)を同時制御し理想曲面をトレースする。
6.3 運用・エラー処理
- プリスキャン(砂時計型): 「X字」と「十字」の軌跡で輝度分布を高速サンプリング。中央と四隅の光量を計測し、積算時間と絞りを決定。
- 再試行ロジック: EOL不達時、最後に成功した行まで戻る。脱調の懸念がある場合は一度G28(原点復帰)を経て再スキャン。
- バッファ管理: 16行のリングバッファとルックアヘッドにより、移動命令を滑らかに連結し振動を抑制する。
7. 拡張 G-Code 仕様
- G0/G1 X Y Z F: 移動(G0:最高速, G1:撮像定速)。
- M3 P0 T D S: 可視光設定(T:積算ms, D:ピッチmm, S:感度0=3x3, 1=9x9)。
- M3 P1 D R G: 紫外線設定(D:ピッチmm, R:ADC分解能ビット数, G:PGA利得[1,2,4,8])。
- M900 K: モータ保持電力インターバル設定。
- M400: すべての動作完了待ち。