My Korona 8×20 camera is heavy but it is still possible to hand carry it by the leather handle for short walking distance. Carrying it bare will expose it to scratches and knocks as it is easy to bump this big camera into walls and such.
So I went to buy a $5 foam camping mat, some Velcro straps with tape and went off to work on a DIY protective case. As seen in the video, I have the map trimmed to the required size including the corners and then add in the Velcro straps at the places where the different ends meet. The Velcro straps came with tape where I simply taped it to the foam. It may not last so I have sew a few of them in place instead. The foam is not to the best material to sew but I will monitor and see how well they stand up to the frequent opening and closing.
While this is for a ULF camera, it can be easily modified for a smaller camera.
In my previous post about the DIY Rotary Film Processor that I use to process my 8×20 film for my 8×20 camera, I did not go into details about the Arduino code that controls the rotation and timings. This post will explain more about the Arduino portion.
I am not a programmer so what I did was to piece the different sample codes for the different shields in order to achieve what I need.
This is a Rotary Film Processing controller . It simply rotates a motor for 4.5 seconds in one direction before rotating back in the reverse direction for another 4.5 seconds and stop for a sec. This is considered as one cycle. Therefore 6 cycles of it will constitute 1 min.
When it is powers on, you will need to press a button (connect to the RIGHT button of the LCD shield) to start the development process. When the first step (ed Prewash for 3 mins) is completed , the buzzer will sound off and you will need to press the same button to continue to the next cycle (of course after pouring out the first and in the next chemical)
Currently, it is coded for my FOMA 200 developing needs. You will probably need to modify the code to your needs.
/* Rotary Film Processing * ------------------ * This is a Rotary Film Processing controller . It simply rotates a motor for 4.5 seconds in one direction before rotating back in the reverse direction for another 4.5 seconds and stop for a sec * . This is considered as one cycle. Therefore 6 cycles of it will constitute 1 min.// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pinsLiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// define some values used by the panel and buttonsint lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
int buttonPin=2;
int buttonState=0;
int buttonCount=0;
int EN1 = 6;
int EN2 = 5; //Roboduino Motor shield uses Pin 9int IN1 = 7;
int IN2 = 4; //Latest version use pin 4 instead of pin 8int BUZZ=3;
void Motor2(int pwm, boolean reverse)
{
analogWrite(EN1,pwm); //set pwm control, 0 for stop, and 255 for maximum speedif(reverse)
{
digitalWrite(IN1,HIGH);
}
else
{
digitalWrite(IN1,LOW);
}
}
void Motorprocess(int stepno, int noMins)
{
int counter;
int noRepeats;
noRepeats=noMins * 6; //6 cycles is one minute, so to repeat for the required no of minutesfor(counter=0;counter<noRepeats;counter++)
{ Motor2(255,true);
delay(4500); //turn for 4.5secs
Motor2(255,false);
delay(4500); //reverse and turn for another 4.5 secs
Motor2(0,false); //stop for 1 secsdelay(1000);
}
lcd.setCursor(0,1);
lcd.print("Step "); //write to LCD that the step is completed
lcd.print(stepno);
lcd.print(" Done");
Motor2(0,false);
digitalWrite(BUZZ, HIGH); //sound the buzzer for a seconddelay(1000);
digitalWrite(BUZZ, LOW);
}
// read the buttonsint read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the sensor // my buttons when read are centered at these valies: 0, 144, 329, 504, 741// we add approx 50 to those values and check to see if we are closeif (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result// For V1.1 us this thresholdif (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 450) return btnDOWN;
if (adc_key_in < 650) return btnLEFT;
if (adc_key_in < 850) return btnSELECT;
return btnNONE; // when all others fail, return this...
}
int val = 0; // variable for reading the pin statusvoidsetup() {
pinMode(BUZZ,OUTPUT);
int i;
for(i=4;i<=7;i++) //For Arduino Motor ShieldpinMode(i, OUTPUT); //set pin 4,5,6,7 to output modeanalogWrite (10, 10);
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("FOMA 200 Process ");
lcd.setCursor(0, 1);
lcd.print("Press R to start");
}
voidloop(){
Motor2(0,false);
int counter;
// buttonState= digitalRead(buttonPin);
buttonState = read_LCD_buttons(); // read the buttonsif (buttonState==btnRIGHT)//change here
{buttonCount = buttonCount+1;
//if (newState==0 && buttoncount>0)switch(buttonCount)
{
case 1 : //prewash 3 mins
lcd.clear();
lcd.print("1. Prewash ");
Motorprocess(1, 3);
break;
case 2 : //develop 7mins
lcd.clear();
lcd.print("2. Develop ");
Motorprocess(2, 7);
break;
case 3 : //Stop Bath 1 Min
lcd.clear();
lcd.print("3. Stop Bath ");
Motorprocess(3, 1);
break;
case 4 : // fixer 4 min
lcd.clear();
lcd.print("4. Fixer ");
Motorprocess(4, 4);
break;
case 5 : //Wash 1 min
lcd.clear();
lcd.print("5. Wash ");
Motorprocess(5, 2);
break;
default :
buttonCount=0;
}//end for switch
}
}