Following the Educational Trail

Recently we had equinox and as we are living on the northern hemisphere it was spring equinox. Traditionally this is the time when we go out and shoot a panorama for the World Wide Panorama (WWP). An event where we regularly contribute since 2005. The theme of the event was “paths”. Thinking about “paths” I finally thought of educational trails (Lehrpfad in German literally translates to educational path) which are very common in Germany. I did a search on educational trails in Frankfurt and found an educational trail of the faculty of geosciences/geography at the University of Frankfurt/M.

As I followed the trail I did several sphericals. The one I finally chose for the event shows a lovely spot near the old village center of Niederursel a district of Frankfurt/M.

“Gustav-​Adolf” ​church in Niederursel
“Gustav- Adolf” church in Niederursel

You can view the panorama “Following the Educational Trail” on the pages of the World Wide Panorama (WWP).
Geotag Icon Show on map

SLR Magic 35/f1.7 on Sony NEX 5

The SLR Magic 35mm/F1.7 is a manual lens and is available with an E-Mount, that fits on the Sony NEX camera series.
To be able to use it, you have to make sure you tweak some settings in your camera:

  1. Make sure you enable the shooting without a lens: Menu → Setup → Release w/o lens → Enable
  2. Before you continue make sure you have Firmware ≥ Ver. 04 installed! Check this using Menu → Setup → Version. When you have an older version installed download the latest version from the Sony support site here.
  3. Enable the MF Assist function using Menu → Setup → MF Assist → 2 Sec
    You can choose between No Limit — 2 Sec — 5 Sec.
  4. Enable the Peaking Level using Menu → Setup → Peaking Level → Mid
    You can choose between Low — Mid — High.
  5. Choose your Peaking Color using Menu → Setup → Peaking Color → Red
    You can choose between YellowRed — White.

Switch your camera to A- Mode (aperture priority) and use the MF Assist button to get a perfectly sharp picture even when shooting the lens wide open with f/1.7!

You find some example shots in this post.

See a very detailed review of the lens here.

SLR Magic 35/f1.7
SLR Magic 35/f1.7
SLR Magic 35/f1.7 on Sony NEX 5
SLR Magic 35/f1.7 on Sony NEX 5

Schäfflertanz at Marienplatz

Every seven years the Schäfflertanz is performed during the carnival. Schäfflertanz translates to “Dance of the coopers”. It is said that in the year 1571 the coopers started dancing on the streets to bring the inhabitants of Munich back onto the streets after a pest epidemic. Nowadays this habit is performed all over Upper Bavaria.

[pano file=”https://www.panotwins.de/wp-content/panos/MMatern_20120211_1369_SchaefflerTanzSamstag.xml” preview=”https://www.panotwins.de/wp-content/panos/MMatern_20120211_1369_SchaefflerTanzSamstag.jpg”]
Geotag Icon Show on map

Reprojected view of Monument Valley near Cly Butte

This image shows a reprojected image of the view of Monument Valley near Cly Butte. The projection is “stereographic down”.

Reprojected view of Monument Valley near Cly Butte
Reprojected view of Monument Valley near Cly Butte. The projection is “stereographic down”.
Geotag Icon Show on map

24h Snowing and Raining (timelapse video)

I was searching for a first project I wanted to shoot with my new gadget. The remote trigger for the Sony NEX 5 I presented in the previous post. I decided to shoot a timelapse video. As I did not have my time lapse trigger with me but a laptop I applied some changes to the code and the time lapse function for the Ultimate Trigger was born.

I programmed a fixed interval of 10 minutes between each shot, set the camera to aperture priority mode, set the focus to manual and started shooting for 24 hours. Every now and then I checked the progress and had some minor problems:

  1. After the first two hours the servo had moved and did not trigger any more.
  2. After the first six hours the Ultimate Trigger battery has been drained, however I noticed this after about the time, when more than four hours of shots were missing.
  3. After half the shooting time the Sony NEX battery was about half empty. As I did not have a spare one with me I recharged it several times for 9 minute intervals between the 10 minute shooting intervals.

Apart from these minor flaws I am satisfied with the result you can see here:

24h Snowing and Raining

24 hours of snow and rain captured using a Sony NEX 5 and the Ultimate Trigger.

Remote Trigger with Arduino, a Shield in a Box

After the prototype remote trigger I presented in my previous post has been tested succesfully I decided to make my own shield for the arduino and put the whole system in a box, that I could take with me for shooting panoramas. What you see in the following pictures is my attempt to make a portable system for all types of remote triggering my NEX 5. I called this project The Ultimate Trigger V1.

Creative Commons License The Ultimate Trigger V1 is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

I tried to make the shield somehow modular in design. This means I can attach different types of servos, I can attach a different IR receiver and I can change the attached wireless RF receiver without using a soldering iron.

This image shows the guts of the whole system. On the left side from top to bottom:
The arduino board with the attached shield. Several items are connected via cables to the shield: The IR remote receiver with its red-black-blue cable going to the upper lid of the box on the right. The IR receiver itself is glued to the lid with instant adhesive. The servo can be connected via the red-black-green cable going towards the outside of the lid. The third party wireless RF remote receiver (dismantled compared to my last post) sits in the bottom right part of the left lid and is attached to the shild also via a cable. Last but not least you see the 9V battery powering the arduino and the shield. The wireless RF receiver has its own battery.

Ultimate Trigger V1 - Box Open
Ultimate Trigger V1 - Box Open

When the box is closed you see on the upper side (which is in my definition the side next to the camera and thus close to the servo) the three pins, where a servo can be attached. Furthermore you see on the side facing the operator the three LEDs showing the status of the device.

Ultimate Trigger V1 - Box Top
Ultimate Trigger V1 - Box Top

On the bottom side you see from left to right: The IR receiver, the arduino USB port and the arduino power port.

Ultimate Trigger V1 - Box Bottom
Ultimate Trigger V1 - Box Bottom

Like the image before this one shows the bottom part of the box (from left to right): The IR receiver, the arduino USB port and the arduino power port.

Ultimate Trigger V1 - Box Bottom Details
Ultimate Trigger V1 - Box Bottom Details

The following images show the system without the box. First the shield connected to the arduino. The battery, servo, RF receiver and IR receiver are all disconnected.

Ultimate Trigger V1 - Shield On Arduino
Ultimate Trigger V1 - Shield On Arduino

This image shows the top view of the plain shield.

Ultimate Trigger V1 - Shield Top
Ultimate Trigger V1 - Shield Top

This image shows the bottom view of the plain shield.

Ultimate Trigger V1 - Shield Bottom
Ultimate Trigger V1 - Shield Bottom

Remote Trigger with Arduino

One problem with the Sony NEX 5 camara series is the lack of a decent remote shutter mode. You are able to switch it to IR mode and use the IR remote control to take a picture. However you can’t combine any of the other available trigger modes like bracketing or high speed trigger with the IR remote control. I wanted to change this and started this project described here: The ultimate remote trigger for the Sony NEX 5 using a servo and an arduino board. I called this project The Ultimate Trigger V1.

Creative Commons License The Ultimate Trigger V1 is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

The remote control has four different possibilities for taking a picture:

  • Software – Via code running on a host computer sending commands to the COM port where the arduino is attached
  • Arduino – Via code running on the arduino itself (not implemented at the moment)
  • IR remote – Via an arbitrary IR remote control
  • Cable – Via an attached remote release cable

The following image shows the finished breadboard version. You see the arduino board in blue on the left above the yellow 9V battery. Between the arduino board and the battery is the attached wireless remote receiver. In the middle you find the white breadboard with the necessary electronics. On the NEX you see the servo attached via a cable strap and a rubber band. On the right you see the wireless remote transmitter and the IR remote transmitter.

Ultimate Trigger V1 - Overview
Ultimate Trigger V1 - Overview

This image shows the breadboard in detail: On the breadboard you find from top to bottom:

  1. The attached servo (a JR type model with brown, red and orange cables)
  2. The attached wireless receiver. This could also be any other type of Minolta, Konica-Minolta or Sony remote cable release. The receiver is a third party RF wireless type.
  3. The IR receiver able to receive most types of consumer IR remote controls.
  4. Three status LEDs with the necessary series resistors.
Ultimate Trigger V1 - Details
Ultimate Trigger V1 - Details

This image shows the breadboard design in detail. It has been made with Fritzing.

Ultimate Trigger V1 - Breadboard
Ultimate Trigger V1 - Breadboard

This image shows the schematics of the electronics (also made with Fritzing).

Ultimate Trigger V1 - Schematic
Ultimate Trigger V1 - Schematic

The following code for the arduino sketch makes use of two libraries: Servo (included in the arduino IDE) and IRremote!

/*
 * Ultimate Trigger V1
 * by Markus Matern aka PanoTwin Markus
 * 
 * Release: 20120107
 * 
 * This code is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
 * To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/
 * or send a letter to:
 * Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
 */
 
#include <Servo.h>
#include <IRremote.h>
 
// Servo configuration
const int servoPin = 11;
const int minimumAngle = 0;
const int maximumAngle = 179;
const int zeroAngle = 100;
const int wakeUpAngle = 107;
const int shootAngle = 110;
Servo myservo;
 
// Wireless remote configuration
const int triggerWhite = 10;
const int triggerBlue = 9;
int whiteVal = LOW;
int blueVal = LOW;
 
// IR receiver configuration
int RECV_PIN = 8;
IRrecv irrecv(RECV_PIN);
decode_results results;
 
// Diagonstic configuration
const int ledStatus = 7;
const int ledTrigger = 6;
const int ledError = 5;
 
void setup() {
  // Diagnostic setup
  pinMode(ledStatus, OUTPUT);
  digitalWrite(ledStatus, HIGH);
  pinMode(ledTrigger, OUTPUT);
  digitalWrite(ledTrigger, LOW);
  pinMode(ledError, OUTPUT);
  digitalWrite(ledError, LOW);
 
  // Servo setup
  myservo.attach(servoPin);
  myservo.write(zeroAngle);
 
  // Wireless setup
  pinMode(triggerWhite, INPUT);
  // make sure the input pin is not undefined
  digitalWrite(triggerWhite, HIGH);
  pinMode(triggerBlue, INPUT);
  // make sure the input pin is not undefined
  digitalWrite(triggerBlue, HIGH);
 
  // IR receiver setup
  irrecv.enableIRIn(); // Start the receiver
 
  // Serial setup
  Serial.begin(9600);
}
 
void shoot(){
  StatusTrigger(1);
  myservo.write(wakeUpAngle);
  delay(1000);
  myservo.write(shootAngle);
  delay(1000);
  myservo.write(zeroAngle);
  StatusTrigger(0);
  delay(1000);
}
 
void wakeUp(){
  StatusTrigger(1);
  myservo.write(wakeUpAngle);
  delay(1000);
  myservo.write(zeroAngle);
  StatusTrigger(0);
  delay(1000);
}
 
void minAngle(){
  StatusTrigger(1);
  myservo.write(minimumAngle);
  delay(1000);
  myservo.write(zeroAngle);
  delay(1000);
  StatusTrigger(0);
}
 
void maxAngle(){
  StatusTrigger(1);
  myservo.write(maximumAngle);
  delay(1000);
  myservo.write(zeroAngle);
  delay(1000);
  StatusTrigger(0);
}
 
void Blink(int blinkLed,
           int milliseconds,
           int blinkCount)
{
  for(int i = 0; i < blinkCount; i++)   {
      Status(blinkLed, 1);
      delay(milliseconds/blinkCount/2);
      Status(blinkLed, 0);
      delay(milliseconds/blinkCount/2);
    }
  }
  void BlinkBeforeTrigger(int milliseconds) {
    Blink(ledTrigger, milliseconds, 3);
  }
  void StatusTrigger(int newStatus) {
    Status(ledTrigger, newStatus);
  }
  void StatusError(int newStatus) {
    Status(ledError, newStatus);
  }
  void Status(int pin, int newStatus) {
    if(newStatus){
      digitalWrite(pin, HIGH);
    } else {
      digitalWrite(pin, LOW);
    }
  }
  void loop() {
    // remote control via serial communication
    if (Serial.available() > 0) {
    int b = Serial.read();
    switch(b) {
      case 't':
        shoot();
        break;
      case 'w':
        wakeUp();
        break;
      case '0':
        minAngle();
        break;
      case '8':
        maxAngle();
        break;
      default:
        Blink(ledError, 600, 3);
        break;
    }
    Serial.flush();
  } else if (irrecv.decode(&results)) {
    switch(results.value)
    {
      // Sony Shutter (2 Sec)
      case 0xECB8F:
        StatusTrigger(1);
        Blink(ledTrigger, 2000, 4);
      // Note: No break here!
      // fall through to shoot!
      // Sony Shutter
      case 0xB4B8F:
        shoot();
        break;
      case 0:
        break;
      default:
        StatusError(1);
        Serial.println(results.value, HEX);
        Blink(ledError, 600, 3);
        StatusError(0);
        break;
    }
    // Receive the next value
    irrecv.resume();
  } else {
    // Check the wireless remote trigger
    int newWhiteVal = digitalRead(triggerWhite);
    int newBlueVal = digitalRead(triggerBlue);
 
    if (newWhiteVal != whiteVal) {
      if (newWhiteVal == HIGH) {
        //Serial.println("White High");
        myservo.write(zeroAngle);
        StatusTrigger(0);
      } else {
        //Serial.println("White Low");
        StatusTrigger(1);
        StatusError(0);
        myservo.write(wakeUpAngle);
      }
      whiteVal = newWhiteVal;
    }
    if (newBlueVal != blueVal) {
      if (newBlueVal == HIGH) {
        //Serial.println("Blue High");
        StatusError(0);
      } else {
        //Serial.println("Blue Low");
        myservo.write(shootAngle);
        StatusTrigger(1);
        StatusError(1);
      }
      blueVal = newBlueVal;
    }
  }
}
QR Code Business Card