Ultraviolet exposure units I have known (and mostly not liked).

This is pretty rough and ready, I can confirm that this does work as an exposure unit though.


THE BASIC PLACE THIS IDEA CAME FROM.

Much of this project has come from a need for this device – In my studies in antique photography I frequently used ultraviolet exposure units for exposing 19th c. photographic processes. As I have started to look at circuit board production and prototyping technologies (and especially as I am taking an active interest in Youtube) I looked at some of my previous builds and shuddered.


An old prototype (used a CFL blacklight);

https://secretivesquirrel.wordpress.com/2011/01/25/uv-exposure-unit-n-stuff/

The version of that I did my masters degree with;

https://secretivesquirrel.wordpress.com/2011/03/10/more-stuff/

Another couple of versions;

 I made this out of a nail polish setter, it worked quite well, but it worked out quite expensive as it blew bulbs at a stupid rate.

 The underside of the one above.

This is every bit as awful as it looks, but works fairly well.


Usually these were re-purposed from the printing (and screen printing) industries, and as such they were usually either massive overkill for the task, or they were not entirely safe (usually both). I’ve built a few of these devices out of party lights, nail polish exposure units, large mercury bulbs, black light fluro’s and suchlike. They have all worked, but each has had substantial problems in one way or another.

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

This project has been a live document for quite some time, so there are a lot of build notes. I have also been building a git repo at the same time (though not pushing terribly often). I decided to leave in the reports I made as I worked.


This project is not yet complete, but it is at a stage where I am comfortable with showing it. I have not closed the case at this point as I still need to rework several things like a fan outlet and a power switch. Not to mention the fact it needs more software testing.

I still also feel that it is a live project which will go through a number of further iterations, though I will finish this version very soon and use it to build the next version. If you want to know what it looks like then look at the picture below and imagine four LED’s on the lower left of the front.


I have an update section for the final build down below.

This project has changed several times during the initial build. Firstly it was a basic lamp unit without a switch. It was switched on and off at the wall – that was used with an external timer.

.

In its second iteration it incorporated an arduino pro mini with an lcd which was tethered to a computer. This was loaded with a time from the serial connection and then switched on a relay for that amount of time.

This is the third iteration of the design, I’m using an old scanner body to house it and using an –

existing button interface on the front. I will revisit this case decision later if needed. The final version looks like this but has indicator lights and labels.

In its third and current iteration it incorporated a 3 digit 7 section led display and a rotary encoder which is used to input a number, then a button to start the timer. This change was made partly to save cost on components, but also due to the fact that the interface as described is intuitive and easy to explain. To reach this level of simplicity the design has had to become considerably more complicated internally – Even without reading the instructions most users should work out how to operate it in a minute or two.

Note, this got built again due to a faulty power plug not playing nice – the build was as the previous one, but the circuit was rebuilt to be more sensible – components have been moved, in a couple of cases the boards have been  flipped for access, and the power supply has been reworked with an LM7805.

[Deprecated comments – left in for clarity]

Right now the led display turns off during the timer countdown [no longer true]. It also does not incorporate a pause button or a temperature based interupt [no longer true] – these will be added in the next iteration but the current hardware setup functions well.  [note – code now shows time during countdown]

This was the initial wiring, it just switched on when plugged in and powered on – I have re-

designed it to use an internal timer. This is my own work/wiring and seems to work well.

 Hot end

 Cold end

 While this might not be entirely professional it is pretty easy to follow what’s happening.

I have released this code at this point due to the fact I need a UV unit now for a current project. The code will be updated shortly. [has been updated now] The Github account is at – https://github.com/secretive-squirrel/uv

The hardware layout for the 74hc595 to run the LED display is non-standard. This is a reflection of the type of stripboard/verroboard used in this board. It was intuitive for me to set up on a breadboard type if arrangement, as shown below (the circuit board is laid out in a breadboard pattern rather than simple verroboard). I then rearranged things in the code to suit myself.

I haven’t used any non-standard libraries in this build – part of this was so that i could learn to understand how things actually worked and part of it was because I used a few components in slightly non-standard ways, which wouldn’t have been possible, or at least convenient if I was using libraries to abstract the difficult stuff.

I actually didn’t find much that was useful in terms of understanding the shift register, thus I had to start from the datasheet and hook up led’s to it and go from there to get to this point – I’m sure there is an easier way, but I do now understand how this thing works at least. I’d also note that I didn’t even get a part number, let alone a datasheet when I brought the LED displays, I had to figure out how they work with a multi-meter.

 (that is quite a tidy verro-board layout I’ve hooked up, I’m quietly proud of that

or at least I was until I blew it up).

To be blunt, in the next iteration I’ll use a max7219 or similar multiplexing chip – much simpler, this became quite complicated to route the connections as it stands.

This required 12 wires going to the front of the enclosure even after using a shift register, also 5 or so at the back of the enclosure (that’s just the arduino, I’m ignoring most of the wiring with that statement), I still have several pins free, but it has become somewhat complicated at this point, with a fair bit of consideration given to cable management and the ground circuit. I will re-consider the locations of the various parts when I rebuild. Also I will probably look at making custom circuit boards to minimize parts.

Front and back of the module I put together. the plug is one way oriented due to shape, also held together with hot glue as that works well and was handy.

In the reverse view you can see the breadboard style layout.

One thing which is very important in this design is the fact that it does not reset the timer after exposure, this repeatability is critical when using a device like this, both for production line repeatability and for creating test strips – pretty much every photographic timer I’ve ever used retains its time after exposure – resetting it every time would be a massive PITA if you were using it in production – interestingly every diy unit I’ve found on the web deliberately resets to zero after exposure.

Right now it is a working prototype, the LED display actually has a lens made of smoothed out hot glue (which worked surprisingly well), and is generally hot glued together, I’d revisit several things for a production model, but before that I still need to integrate a pause function, as well as a thermal cutout function – it is critical for both of these to retain the time left to run.

The MCU actually has a thermistor built in and connected to the analog pins – this can be seen as a thin white line in parallel to the LED strips in the left top third of the first image in this post. This has not yet been connected to the logic – its for future proofing the hardware right now. I do intend to set this up before the weather warms ip, its actually using a fair bit of energy, it runs on 12v at 2A, and will consistently reset the MCU upon the relay activating the 12v circuit if only fed 1A (That took several very frustrating hours to work out).

And then…

UPDATE TOWARDS FINAL PROJECT.

XXXXXXX  FAILURE!  XXXXXXX

I have managed to completely fry the project – I have absolutely no idea why as I added some hardware (actually the final configuration), I checked the connections, diode tested, then set the pins, registers and so forth, all worked OK – and then upon creating a pause function it initially worked, and then when i moved the button check (interrupt action) to the end of the function (the display dimmed initially so i wanted to background the interrupt), the thing basically went up in smoke – I am not speaking figuratively here – literal smoke, actual fire – It literally burned a hole in the Atmega chip and blew out the whole display circuit (it didn’t kill my PC despite being plugged in with 25 Watts running at 12v, so that’s a thing to be thankful for — 25 Watts can make a really good fire in the worst case).

You can see the hole burned in the chip at pin5 – lower right.

I’m guessing there was a short between the oscillator and ground?

I have no idea what caused the failure at all. I may have had a shorted connection, there’s a remote chance i did something really spectacular using code (I doubt that) or I may have just done something really dumb – I’ve only ever had that happen when I’ve done something really dumb like putting an amp chip in backwards. The failure of at least 3 components makes it hard to check (microcontroller, 74hc595, & 7 seg display all died).

I now suspect that it was a faulty power socket as I received a mild shock soon after writing this.

So I am basically rebuilding the project again from scratch – In fact I’m taking the opportunity to revisit the layout entirely… I did get to the final ‘logical’ configuration which seems fine, and is using almost every pin even after using a serial multiplexing – I think I have two spare pins total – its way more complicated than what I’d ever willingly put into the Arduino IDE again and is becoming rather complicated now),

By moving some components around I have reduced the plugged components down to eight pins which need to be plugged (as opposed to hard soldered – there’s stacks of solder joints). I did have about 16 or so plugged components (pins) between the top and the bottom of the case – I have now moved the micro-controller into the display area (upper case), and am running several sensors in more logical places. I’m not totally keen on plugging 12v @ 2A through a DuPont connector, but I have it braced quite firmly and my fingers crossed (it should be fine given that its drawing about 1 Watt tops for the MCU) – I would not release this as a hardware option in real life. As a plus I now have 12v/0v and 5v 0v running through those 8 plugs, so only 4 of the 8 are data – and those four remaining data pins are digital (ie, on/off).

As I have said, I have revisited the component layout, so that has become more logical – and the upshot of this is that I have been forced into considering a custom board layout as a product – I am about 90% of the way to having completely visualized how I can make the whole circuit into a single 8x12cm double sided circuit board – Frankly though – that is now outside of the scope of this project, given the time frame and is not a thing I consider to be a part of this stage of prototyping (it’ll just be easier when I get to it).

I had planned to use the exposure unit to create a new circuit board in order to bootstrap the device recursively. Given that I have lost several days (which I did not really have to spare) to re-starting the project from scratch, this is now off the table.

On the upside, I am still well inside being able to deploy to an AMEGA8 for the final release – my resource usage (while not ASM tidy, is acceptable) – I’ll have no issues staying under 8k & 1k even when I add the remaining functionality.

“Sketch uses 2162 bytes (7%) of program storage space. Maximum is 30720 bytes.

Global variables use 32 bytes (1%) of dynamic memory, leaving 2016 bytes for local variables. Maximum is 2048 bytes.”


And a schematic…

sorry about the roughness of this – I intend to remake the timer circuit as a stand alone unit.

 



The final video…


<<<<<<<<<<<<<< FINAL  BUILD NOTES >>>>>>>>>>>>>>>

So after the wee drama of having everything fail I rebuilt it in about three days, During the course of that build I changed a couple of things in the power supply including putting an LM7805 into the circuit in order to safely siphon off five volts from the 12v supply. I had been previously using the on board converter which did get hot. I now have the LM7805 on a 50x50mm heat sink which seems to be about right (it gets warm, but not hot after being plugged in for several hours).


It now has all parts active – that is the MCU obviously, the 74hc595 shift register which is feeding the three digit LED display, the rotary encoder, the relay (and UV LEDs), fan (and associated driver), the thermistor and the indicator LED’s all are doing what they’re told.

 

The next iteration of this will be mostly a single board design with the display, control buttons, the headers for the MCU and the display logic all in one place. With a few labeled plugs for things like sensors, relays and so forth – It will be designed so that it could be used for different purposes requiring timers and relays (as a standardized unit). It will also have a four digit display and will probably use a Max chip for multiplexing.

I have the magnet for the reed switch taped to the case right now as the reed does work and needs to have a bit of steel wire soldered in to line up with the lid. It’s not a safety feature I’m obsessed with.I have cut a hole in the back of the case for the fan to vent and drilled a few holes in the case for airflow.

Time entered ready to go.

With the magnet not lined up with the reed the blue light comes on & it won’t start – I’m just using tape here. I haven’t implimented code to pause it if the lid is opened during exposure, but just using the ‘pause()’ function would work.

This is during exposure, 

And this is paused during exposure – all indicator lights come on and the display shows 888.

I forgot to mention in my other post that the big chunky 3d printed dial is a rudimentary form of debouncing – you can’t easily turn the dial fast enough to cause errors with this size of dial – it was part of my work around to avoid libraries.

<<<<<<<<<<<<<<  CODE >>>>>>>>>>>>>>>

https://github.com/secretive-squirrel/uv

/**

   ULTRAVIOLET EXPOSURE UNIT FIRMWARE – E DAVIDSON MAY 2018

   Uses relay to switch on 12v led strips

   input rotary encoder

   input thermistor for safety

  This is not yet a completed project, I’m just putting a pin in it for now.

   three pins out to 74HC595 for common-anode seven-segment display

   three pins out to control individual digits and three pins


*/


//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

//xxxxxxxxxxxxxxxx – PAUSE FUNCTIONS START


int sensorTemp = 0;

int go_Button = A4;


const int LEDOrange = A5;

const int LEDRed = A2;

const int LEDGreen = A3;

const int LEDBlue = 10;


const int relay = 9;

const int fan = 4;

int reed = A0;

int therm = A1;


//This leaves A6 and A7 which are compulsory Analog inputs


unsigned int counter = 0;

int temperature = 0;


//xxxxxxxxxxxxxxxx – PAUSE FUNCTIONS END

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

//xxxxxxxxxxxxxxxx – 7 SEGMENT DISPLAY CODE – BEGIN


const int bit_clock_pin = 7;  // pin 11 of 74HC595 (SHCP)

const int digit_clock_pin = 6;  // pin 12 of 74HC595 (STCP)

const int data_pin = 5; // pin 14 of 74HC595 (DS)


const int LED_ONES = 13;  //positions of digits – these got mixed up

const int LED_TENS = 11;

const int LED_HUND = 12;


const byte digit_pattern[11] =  // digit pattern – 7-seg disp

{

  B01111110,  // 0

  B01001000,  // 1

  B10111010,  // 2

  B11101010,  // 3

  B11001100,  // 4

  B11100110,  // 5

  B11110110,  // 6

  B01001010,  // 7

  B11111110,  // 8

  B11001110,  // 9

  B10010110,  // F

};


//xxxxxxxxxxxxxxxx – 7 SEGMENT DISPLAY CODE – END

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

//xxxxxxxxxxxxxxxx – ROTARY ENCODER CODE – BEGIN



const int  encoderPinA = 3;   // right (labeled DT on our decoder, yellow wire)

const int encoderPinB = 2;   // left (labeled CLK on our decoder, green wire)

const int clearButton = 8;    // switch (labeled SW on our decoder, orange wire)


volatile unsigned int encoderPos = 0;  // a counter for the dial

unsigned int lastReportedPos = 1;   // change management

static boolean rotating = false;    // debounce management



boolean A_set = false;  // interrupt service routine vars

boolean B_set = false;


//xxxxxxxxxxxxxxxx – ROTARY ENCODER CODE – END

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx



//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

void setup()  //  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

{

  //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

  //xxxxxxxxxxxxxxxx – 7 SEGMENT DISPLAY CODE – BEGIN


  pinMode(data_pin, OUTPUT);

  pinMode(bit_clock_pin, OUTPUT);

  pinMode(digit_clock_pin, OUTPUT);

  pinMode(LED_ONES, OUTPUT); //ones

  pinMode(LED_TENS, OUTPUT); //tens

  pinMode(LED_HUND, OUTPUT); //hundreds


  //xxxxxxxxxxxxxxxx – 7 SEGMENT DISPLAY CODE – END

  //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

  //xxxxxxxxxxxxxxxx – ROTARY ENCODER CODE – BEGIN


  digitalWrite(encoderPinA, HIGH);

  digitalWrite(encoderPinB, HIGH);

  digitalWrite(clearButton, HIGH);


  // encoder pin on interrupt 0 (pin 2)

  attachInterrupt(0, doEncoderA, CHANGE);

  // encoder pin on interrupt 1 (pin 3)

  attachInterrupt(1, doEncoderB, CHANGE);


  //xxxxxxxxxxxxxxxx – ROTARY ENCODER CODE – END

  //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

  //xxxxxxxxxxxxxxxx – PAUSE FUNCTIONS START

  pinMode(go_Button, INPUT_PULLUP);


  pinMode(relay, OUTPUT); //relay


  pinMode(therm, INPUT); //thermistor


  pinMode(reed, INPUT); //thermistor

  digitalWrite(reed, HIGH);


  pinMode(fan, OUTPUT);


  pinMode(LEDOrange, OUTPUT);

  pinMode(LEDRed, OUTPUT);

  pinMode(LEDGreen, OUTPUT);

  pinMode(LEDBlue, OUTPUT);





  //xxxxxxxxxxxxxxxx – PAUSE FUNCTIONS END


  //  Serial.begin(9600); // initialize serial comms @ 9600-BPS

}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

void loop()  //  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

{

  //All this stuff is to get the rotary encoder read

  rotating = true;  // reset the debouncer


  if (lastReportedPos != encoderPos) {

    //   Serial.print(“Index:”);

    //   Serial.println(encoderPos, DEC);

    lastReportedPos = encoderPos;

  }

  if (digitalRead(clearButton) == LOW )  {

    encoderPos = 0;

  }


  if (encoderPos >= 599 && encoderPos <= 800)

  {

    encoderPos = 999;

  }

  else if (encoderPos >= 801)

  {

    encoderPos = 0;

  }


  // And show the results

  disp_3_digit(encoderPos);


  //then trigger go button


  if (digitalRead(reed) == LOW) //if lid shut

  {

    digitalWrite(LEDBlue, LOW); //safety light off

    if (digitalRead(go_Button) == LOW)

    {

      go_Pause();

    }

  }

  else if (digitalRead(reed) == HIGH)

  {

    digitalWrite(LEDBlue, HIGH);

  }

}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

//++++++++++++++++++ – FUNCTIONS – ++++++++++++++++++++++

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++


//xxxxxxxxxxxxxxxx – 7 SEGMENT DISPLAY CODE – BEGIN


void update_one_digit(int data)

// DO ONE DIGIT – THIS METHOD IS CALLED BY THE

{

  int i;

  byte pattern;

  pattern = digit_pattern[data];// get binary for number

  digitalWrite(digit_clock_pin, LOW);  // turn off 74HC595 output

  shiftOut(data_pin, bit_clock_pin, MSBFIRST, ~pattern); // update 74HC595

  digitalWrite(digit_clock_pin, HIGH); // turn on 74HC595

}

// THREE DIGIT DISPLAY METHOD BELOW

void disp_3_digit(int numb) // DO THREE DIGITS

// THIS WILL DO THE FULL DISPLAY WRITE BY BREAKING DOWN THE NUMBER

// AND THEN CALLING THE SINGLE DIGIT METHOOD FOR EACH DIGIT

{

  int ones = numb % 10;     //break number out to individual digits

  int tens = (numb % 100) / 10;

  int hund = numb / 100;

  //

  digitalWrite(LED_HUND, HIGH); //output each digit

  update_one_digit(ones);

  digitalWrite(LED_HUND, LOW);

  //

  digitalWrite(LED_TENS, HIGH);

  update_one_digit(tens);

  digitalWrite(LED_TENS, LOW);

  //

  digitalWrite(LED_ONES, HIGH);

  update_one_digit(hund);

  digitalWrite(LED_ONES, LOW);

}


//xxxxxxxxxxxxxxxx – 7 SEGMENT DISPLAY CODE – END

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

//xxxxxxxxxxxxxxxx – ROTARY ENCODER CODE – begin


// Interrupt on A changing state

void doEncoderA() {

  // debounce

  if ( rotating ) delay (5);  // wait a little until the bouncing is done


  // Test transition, did things change?

  if ( digitalRead(encoderPinA) != A_set ) { // debounce once more

    A_set = !A_set;


    // adjust counter + if A leads B

    if ( A_set && !B_set )

      encoderPos ++;


    rotating = false;  // no more debouncing until loop() hits again

  }

}


// Interrupt on B changing state, same as A above

void doEncoderB() {

  if ( rotating ) delay (5);

  if ( digitalRead(encoderPinB) != B_set ) {

    B_set = !B_set;

    //  adjust counter – 1 if B leads A

    if ( B_set && !A_set )

      encoderPos –;


    rotating = false;

  }

}

//xxxxxxxxxxxxxxxx –  ROTARY ENCODER CODE – END

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

//xxxxxxxxxxxxxxxx – PAUSE FUNCTIONS START XXXXXXXXXXXXXXX


void go_Pause()   // – [GO/PAUSE BUTTON] – GO FUNCTION

{


  if (encoderPos > 0)

  {

    delay(1000);

    counter = (encoderPos);

    digitalWrite(LEDGreen, HIGH);

    digitalWrite(relay, HIGH);



    while (counter > 0) //Seconds Display Loop

    {

      int i = 97;

      while (i > 0) // 99 loops each second

      {

        disp_3_digit(counter);  //display

        delay(10);              //wait 10ms

        // Now check stuff – every 12ms is fine

        if (analogRead(therm) > 600)

        {

          disp_3_digit(888);  //I decided to to the heat checking inline during the exposure

          digitalWrite(LEDOrange, LOW);  //as this is when the uv lights are on

          digitalWrite(LEDRed, HIGH);  // it seemed logical to do it this way.

          digitalWrite(relay, LOW);   //turn off UV light

          digitalWrite(fan, HIGH);

          delay(10000);              // wait for 10 seconds

        }

        else if (analogRead(therm) > 500)   //getting warm, turn on fan

        {

          digitalWrite(LEDOrange, HIGH); //signal warm

          digitalWrite(LEDRed, LOW);     //tidy up

          digitalWrite(LEDGreen, HIGH);

          digitalWrite(relay, HIGH);   //turn on UV light

          digitalWrite(fan, HIGH);   //turn on fan

        }

        else

        {

          digitalWrite(LEDOrange, LOW);

          digitalWrite(LEDRed, LOW);     //tidy up

          digitalWrite(LEDGreen, HIGH);

          digitalWrite(LEDBlue, LOW);

          digitalWrite(relay, HIGH);   //turn on UV light

          digitalWrite(fan, LOW);   //turn off fan

        }



        if (digitalRead(go_Button) == LOW)

        {

          Pause(); // CALL FUNCTION BELOW IF

        }         // GO/PAUSE BUTTON PRESSED

        else;

        i -= 1;

      }

      counter -= 1;

    }

    digitalWrite(relay, LOW);

    digitalWrite(LEDGreen, LOW);

  }

}

//XXXXXXXXXXXXX FUNCTION FOR PAUSING THE EXPOSURE XXXXXXXXXXXXXX


void Pause()   // – [GO/PAUSE BUTTON] – PAUSE FUNCTION

{

  int keep = 0; //keep track of light flashing


  digitalWrite(LEDOrange, HIGH);

  digitalWrite(LEDRed, HIGH);

  digitalWrite(LEDGreen, HIGH);

  digitalWrite(LEDBlue, HIGH);


  digitalWrite(relay, LOW);   //turn off UV light

  delay(1000); //force minimum one second pause for debounce


  //  structural stuff – turn stuff off — pause – then…


  // MAKE LOOP WHAT HAPPENS IF BUTTON NOT PRESSED


  if (digitalRead(go_Button) != LOW) //check pause button

  {

    // FIRST INDICATOR LEDS



    //  digitalWrite(fan, HIGH);

    //  delay (3000);

    //  digitalWrite(fan, LOW);

    //  delay (3000);

    // END OF INDICATOR –  carry on


    // TIME KILLING LOOP

    for (int i = 0; i = 25; i++)


    {

      if (digitalRead(go_Button) == LOW)

      {

        //IF BROKEN OUT OF LOOP RETURN TO GO LOOP

        delay(1000); //force minimum one second pause for debounce

        digitalWrite(relay, HIGH);

        //digitalWrite(LEDGreen, HIGH);

        digitalWrite(LEDOrange, LOW);

        digitalWrite(LEDRed, LOW);

        digitalWrite(LEDBlue, LOW);

        break; //i=25; // Just break out if button pressed

      }

      else

      {

        delay(20);  //wait a bit

        disp_3_digit(888);

      }

    }

    //LOOP BACK TO CHECK STATE OF PAUSE BUTTON

  }

}

Advertisements

Planes

How close you are to the glass makes a difference, its not just angle, your distance from the glass is what balances the exposures. 

Its multiple exposure photography, just you have to work it all out on the spot by moving your body 🙂

Simplicity

Despite the crazy complicated reflection photos I’m posting right now I really do have a thing for really simple images.

Trying to do too much with an image usually leads to a mess. On the other hand I don’t think I’ve ever heard anybody say that an image is too simple.

Chaff n’ wheat n’ pearls n’ swine n’ mixed metaphors n’ whatnot. AKA Editing

This isn’t really that attractive a topic to many people, but I really enjoy the process of editing. It could be because I have a gathering methodology of just wandering about and snaffling up whatever takes my fancy – I take a lot of really shite photos, every so often I stumble over a good one. Editing is also a bit like that, it’s an exploration.

crowsign

Ominous signpost with a crow – it’s a metaphor… Actually if you look carefully it’s a sign for the loo – must photoshop that some time.

So after a year or three I have some reason to go through a set of my files – So I’ll let you in on a little secret, I take a lot of different photos… No really, I shoot everything from Ultra large format through to micro formats, Digital, film, plastic cameras, infrared, scanners, I’d love to get my hands on a thermal camera. But in this case I’ll talk about mobile phone pics. I take a lot of these, it’s probably the camera type I use most often. I have a particular penchant for an app called Vignette – it’s a bit like having a holga in your pocket (I’m sure there’s a joke in that somewhere).

IMG_0071

It’s not always the ideal tool, but I pretty much always have my phone handy – the helicopter was shaking water off the cherries so as they could be picked and to stop the skins from splitting. Serious business. Cellphone shots of things in the distance often don’t work.

IMG_0074

Big things in the distance on the other hand. Havelock in the Marlborough Sounds in New Zealand – it’s acceptably pretty I guess.

IMG_0294

Random Raptors.

IMG_20130131_171340

And things which probably only amuse me – I love this sign Smile

Anyhow – Editing…

422

I’m aware that these are film…

423

and I was talking about cellphones…

424

and there’s no segue from cellphones to film, but this is where my methodology comes from. I like to see prints.

425

And clunk, back to cellphones – those ‘contact sheets’ on the wall go round three walls by the way & and you can see a second select on the floor where I can walk around on them and kick them about into different patterns – I need to move things and see patterns.

I also use video for the same thing – I make a video from stills and play it at five frames a second – which is just enough for me to gain an impression, but not long enough to ‘look’. It’s interesting how peoples brains work – these methods will be great for a few people, but for many more people they will not work at all, each person is different – you have to try things till something resonates.

Through these methods of selecting, and kicking things around into different patterns I make selections and suchlike – it’s a process of exploration as much as elimination – the irony is that the stand alone images which I really like seldom make it through this stage, they might be nice images, but the don’t play nice with others.

One day I’ll find a use for this image… My favorite chippie in the west end of Brisbane. (Georges).

 

Depth of field or boke

This is something I see commented upon a great deal – Many people refer to boke, or bokeh, boʊkɛ… Whatever.

The Japanese word boke (ボケ) means something along the lines of blur/haze/fuzz – but it’s the quality of the blur which is being commented upon, not the fact that it’s there. All lenses do boke. Well, any lens which you can focus at any rate, with a few disclaimers.

Heres a few tips;

1. The larger the sensor the more pronounced the out of focus blur will be

2. The longer the lens the more pronounced the out of focus blur will be

3. The converse to both of the above statements is true

4. None of this will automatically dictate the quality of the boke – or what the blur feels like – that’s more of a judgement call and a matter of finding out what a camera is good for (that is to say – it’s a matter of taste and highly personal).

air

I love Holga’s for this – I tend to drill out the aperture plate to about f6 and modify the lens to focus closer 50cm so as I can get shots like this. The joys of 6x6cm frames, even fairly moderate apertures give nice depth of field on larger format cameras when you get nice and close.

IMGP2385

This is a shot which would have been vastly improved by my limiting my depth of field – This was at 55mm and 5.6, which I had no choice about, it was a reaction shot – the magpie just popped in to ask me if I had any spare food going to waste – it didn’t stick around too long – At f11 the buildings in the background would have been sharp, which would be even more distracting – at 2.8 they would have been blurry and disappeared to a greater extent – At 5.6 they’re not too intrusive.

As an aside, for some reason a lot of magpies in Australia really seemed to like me, I don’t know if it was because I sat still or what – they’d just drop what they were doing and come and visit me, they’d go through my pockets if I let them – They wouldn’t go near other people, even if offered food, Crows seemed to be fascinated by me too (the fascination was mutual). I thank my lucky stars it wasn’t hornets.

brisblur

coclo

Those two shots I just focused on something close and then recomposed – the first one is with a K10d (Brisbane city just after sunset – same view as the magpie shot above) – the second is with a mobile phone (no idea where) (and rather noisy now I look at it large)

 

IMGP0614

IMGP0619

These two (obviously taken at the same time) were taken in my mums lounge, the paint on the wall is a warm mint sort of colour (quite a nice colour actually) – one had shadow behind hence the change in background colour.

ir

You can use a supplementary lens to achieve this sort of effect – this is a wide adapter for a mobile phone shoehorned onto a point n shoot which has been modified to see infrared. It’s kinda boke… Sorta.

IMAG0302

Pro tip – hold a bit of plastic in front of the lens to get interesting lens flare – Sorta boke, infrared with a really nasty lens – nothing was actually in focus, so it’s hard to judge the ‘out of focus quality’.

propeller

Pinhole photos have infinite depth of field, but they’re typically blurry, it’s just physics, sometimes it works, sometimes it don’t. As an aside, I just now finally saw the rabbit that people commented on years ago (10 years now I think of it – I wonder what they’re up to).

Slide52

Digi infrared, a poked lens, and taking a snap out of a car window at 100kph – Technically awful, but I do like this shot.

IMG_0056

This has blur as an integral part of the shot, but it’s not properly a boke shot as such – In the background is a row of trees and a park, but all I wanted was a nice mid tone to make the spider web on the window 30cm away pop. Taken with a Canon 760d with an 18-135 kit lens at 135mm & 5.6.

P1010200

Classic boke shot – even got the cherry blossoms. Panasonic GX1 with a 25mm 1.4 cctv lens, probably at something more like f2 to control the backlighting, the boke is a bit squirrely, but that’s not a bad thing Smile – the branch is at about 30cm and the tree is maybe 1.5m away.

alice_mordor

The opposite – smaller aperture for depth of field – I wanted depth of field here so I stopped down and focused out a bit. This is taken just out of Alice Springs in central Australia on a rare rainy day. It’s normally a very very arid landscape. Pentax K10d 18mm f6.3

IMGP1761

Big head little car – Small aperture, large depth of field. – Oh, that’s Richmond in QLD Australia – Dinosaur capital of Australia – they have fantastic dino head rubbish bins and a waterskiing lake (which is pretty odd given it’s the Aussie outback and thus dry as f^*k).