見出し画像

写真引き伸ばし機のRGBカラーLED改造

カラー暗室を作ろう!

 モノクロ引き伸ばしLPL 7700の光源をRGBカラーLEDに改造することで、カラー写真の引き伸ばしに挑戦します。

画像9

 モノクロ引き伸ばし機でカラープリントをする場合、一般にCMYのカラープリントフィルターフィルターを入れてカラーバランスを調整します。フィルターは昔ビックカメラで売っていたような気がしますが、今ではなかなか手に入らないのではないでしょうか。そこで、モノクロ用引き伸ばし機をRGBフルカラーLED光源に改造してカラープリントを行いました。

 改造の元になるモノクロ引き伸ばし機はLPL 7700 PROです。

画像9

・LED 光源RGBの出力調整
・タイマ機能
この二つの機能はArduinoで実現します。

 Arduinoというのは電子工作で使われるマイコンボードのことです。

画像9

設計を考える

RGB_NOTE_ブレッドボード

 LEDをPWM対応LEDドライバで駆動します。
 RGB値と時間はロータリエンコーダで入力し、その値をLCDに表示します。
 ロッカスイッチでモード切替(タイマー⇔フォーカス)を行います。

必要な部品は?

 主要な部品は秋月電子通商で揃います。

【部品】
・モノクロ引き伸ばし機 LPL 7700 PRO
Arduino UNO R3
放熱基板付6WフルカラーRGBLED OSTCXBEAC1S
PWM調光機能付き定電流LEDドライバ NJW4617DL3 ×3個
TO-252-5 SIP変換基板 ×3個
ロータリーエンコーダ ×4個
カラーつまみ(ノブ) 13 mm(赤青緑黄)
LCDモジュール 16×2行 白色バックライト付 白文字 黒背景 AQM1602Y-NLW-FBW
Arduino用ユニバーサル プロトシールド基板 ガラスコンポジット 金フラッシュ基板 または ブレッドボードBB-801
・ピンヘッダ
・ユニバーサル基板
・ACアダプタ 5V2A [秋葉原エレクトリックパーツ]
・DCジャック [山本無線 電材店]
・抵抗 0.56 Ω, 3 Ω, 12 Ω [千石電商]
・抵抗 10 kΩ, 220 Ω
・コンデンサ 0.1 μF, 0.01 μF
・リード線
・押しボタンスイッチ
・ロッカスイッチ
・ヒートシンク
・シリコングリス, 熱伝導シート
・六角スペーサ [西川電子部品]
・乳半アクリル板 [萩原電材株式会社]
・ケース [100円ショップ]
【工具】
・穴あけドリル
・ハンダ
・半田ごて
・ねじ切りタップ
・アクリルカッタ, ホットカッタ

回路図

RGB4_回路図

 LEDやロータリエンコーダについているデカップリングコンデンサは無くても動きました。

プログラムを書く

 Arduinoのスケッチはこんなふうにしました。まだまだ改善の余地はありそう・・・。

#include <Wire.h>

#include <ST7032.h>                           // LCD
ST7032 lcd;

// ロータリーエンコーダー

#include <Encoder.h>
Encoder myEncR(A0, A1);                       // A0, A1ピンからRを入力
Encoder myEncG(A2, A3);                       // A2, A3ピンからGを入力
Encoder myEncB(0, 1);                         // 0, 1ピンからBを入力(SDA/SCL・A4/A5ピンは繋がっています、だからSDA/SCLでI2Cをして、A4/A5でアナログはダメ)
Encoder myEncS(2, 3);                         // 2, 3ピンからTimeを入力

int SWfocus = 7;                              // 7ピンをフォーカススイッチに

// タイマー

#include <MsTimer2.h>                         // タイマー割り込みを利用する為に必要なヘッダファイル MsTimer2を使うとtone( )関数が利用できません、また3番ピンと11番ピンからのPWM出力(analogWrite( )関数)もできません。
#define LED_R 6                               // LED_Rと記述されている部分がすべて6という値に置き換えられる
#define LED_G 9                               // analogWrite(pin, value)ピン5と6のPWM出力はデューティ比が高めになります(?)。
#define LED_B 10
int SWtime = 4;                               // 4ピンをタイマースイッチに

int x = 1;                                    // フォーカススイッチスイッチoffでLEDを消灯してしまうのを防ぐ 1/5

void led() {                                  // MsTimer2で割り込み時に処理される関数
 analogWrite(LED_R, LOW);                     // LED_Rを消灯
 analogWrite(LED_G, LOW);                     // LED_Gを消灯
 analogWrite(LED_B, LOW);                     // LED_Bを消灯
 x = 1;                                       // フォーカススイッチスイッチoffでLEDを消灯してしまうのを防ぐ 2/5
}

// ヘッダここまで

// 電源起動時とリセットの時だけのみ処理される関数(初期化と設定処理)
void setup() {

 lcd.begin(16, 2);                            // LCD表示領域設定(16桁, 2行)
 lcd.setContrast(10);                         // コントラスト設定(0〜63)

 //LCD表示(1桁,1行目)
 lcd.setCursor(0, 0);
 lcd.print("R/c G/m B/y s");

 //LCD表示(R1桁,2行目)
 lcd.setCursor(0, 1);
 lcd.print("0");

 //LCD表示(G4桁,2行目)
 lcd.setCursor(4, 1);
 lcd.print("0");

 //LCD表示(B8桁,2行目)
 lcd.setCursor(8, 1);
 lcd.print("0");

 //LCD表示(s12桁,2行目)
 lcd.setCursor(12, 1);
 lcd.print("00.0");

  //ロータリーエンコーダー
 pinMode(A0, INPUT_PULLUP);                   // A0ピンを入力に設定.プルアップ抵抗を有効
 pinMode(A1, INPUT_PULLUP);
 pinMode(A2, INPUT_PULLUP);
 pinMode(A3, INPUT_PULLUP);
 pinMode(0, INPUT_PULLUP);
 pinMode(1, INPUT_PULLUP);
 pinMode(2, INPUT_PULLUP);
 pinMode(3, INPUT_PULLUP);

  // フォーカス
 pinMode(SWfocus, INPUT_PULLUP);              // スイッチピンを入力に設定.プルアップ抵抗を有効

  // タイマー
 pinMode(LED_R, OUTPUT);                      // 9番ピンを出力に設定(9番ピンにLEDが接続されている為)
 pinMode(LED_G, OUTPUT);
 pinMode(LED_B, OUTPUT);
 pinMode(SWtime, INPUT_PULLUP);               // スイッチピンを入力に設定.プルアップ抵抗を有効
 
 }
// setupここまで

long oldPositionR  = -999;                    // ロータリーエンコーダー初期値
long oldPositionG  = -999; 
long oldPositionB  = -999; 
long oldPositionS  = -999; 

// 繰り返し実行される処理の関数(メインの処理)
void loop() {
    //ロータリーエンコーダーRGBs
  long newPositionR = myEncR.read();
  if (newPositionR != oldPositionR) {         // !は否定を意味する
   oldPositionR = newPositionR;
  }
  long newPositionG = myEncG.read();
  if (newPositionG != oldPositionG) {
   oldPositionG = newPositionG;
  }
  long newPositionB = myEncB.read();
  if (newPositionB != oldPositionB) {
   oldPositionB = newPositionB;
  }
  long newPositionS = myEncS.read();
  if (newPositionS != oldPositionS) {
   oldPositionS = newPositionS;
  }

    // LCD表示(R0桁,2行目)
 char s[16];
 byte valR = newPositionR;
 dtostrf(valR, 3, 0, s);                      // 右詰
 lcd.setCursor(0, 1);
 lcd.print(s);
    // LCD表示(G4桁,2行目)
 byte valG = newPositionG;
 dtostrf(valG, 3, 0, s);                      // 右詰
 lcd.setCursor(4, 1);
 lcd.print(s);
    // LCD表示(B8桁,2行目)
 byte valB = newPositionB;
 dtostrf(valB, 3, 0, s);                      // 右詰
 lcd.setCursor(8, 1);
 lcd.print(s);
    // LCD表示(s12桁,2行目)
 word valS = newPositionS;
 dtostrf(valS, 2, 1, s);       
 lcd.setCursor(12, 1);
 lcd.print((float)valS/10);

     // フォーカススイッチonのとき
 if (digitalRead(SWfocus) == LOW){ 
  analogWrite(LED_R, valR);                   // LED_RをvalRに減光して点灯
  analogWrite(LED_G, valG);
  analogWrite(LED_B, valB);
  }
  
    // タイマー
 else if (digitalRead(SWtime) == LOW){        // タイマースイッチonのとき
  MsTimer2::set(valS*100, led);               // newPositionSミリ秒毎にled( )割込み関数を呼び出す様に設定
  while (digitalRead(SWtime) == LOW){}        // スイッチが離れるのを待つ
  x = 0;                                      // フォーカススイッチスイッチoffでLEDを消灯してしまうのを防ぐ 3/5
  MsTimer2::start();                          // タイマー割り込み開始
  do {
  analogWrite(LED_R, valR);                  // LED_RをvalRtに減光して点灯
  analogWrite(LED_G, valG);
  analogWrite(LED_B, valB);
  } while (x == 0);                           // do {実行される文} while (条件式); x == 0の間は{}中をループ。フォーカススイッチスイッチoffでLEDを消灯してしまうのを防ぐ 4/5
  }

     // フォーカススイッチスイッチoffでLEDを消灯してしまうのを防ぐ 5/5
  if (digitalRead(SWfocus) == HIGH){
  analogWrite(LED_R, 0);                      // LED_Rを消灯
  analogWrite(LED_G, 0);
  analogWrite(LED_B, 0);
  }
}

LEDを取り付ける

画像9

 ヒートシンクにねじを切って固定しています。熱がこもるようならファンを付けようと思います。

コントローラ

画像9

 プラスチックケースはチープだけど加工しやすいです。

プリント

 プリントできました!

画像9

film:FUJIFILM フジカラー SUPERIA PREMIUM 400
paper:FUJIFILM フジカラープロフェッショナルペーパー Pro-L

モノクロ多諧調印画紙

 もちろんモノクロプリントもできます。
 多諧調印画紙を使用する場合、Gを小さくすると硬調になり、Bを小さくすると軟調になります。Rには感光しません。

画像9

film:efke KB100
paper:ORIENTAL イーグル VCRP-R