This story started about 2 weeks ago when I received an e-mail from a gentleman having issues with USB Host shield made by DFrobot – a well-known cloner. The shield itself is a mix of my and Sparkfun’s designs and mine has been released “for non-commercial use”. As usual, DFrobot haven’t added any value to the mix, even schematic they used to present as theirs is a verbatim copy of mine, including copyright and license. The gentleman bought his shield at Jameco Electronics – a reputable US retailer.
I looked at the product page and quickly realized that the page was carefully crafted from several elements from my site. First, the title picture was taken from the following blog post, and it shows my shield, not DFRobot’s. Under it, they used the product description from my product page, almost verbatim – the notion about soldering headers is especially funny since DFrobot’s shield comes with pre-soldered headers. Under the product description they posted a bunch of links, again, to my site, showing people how to use my shield.
From my e-mail exchange with a gentleman I learned an e-mail of Gil Orozco, V.P. of Product Management at Jameco, and immediately contacted this no doubt important and powerful official explaining my worries. I was quickly assured that the issue will be investigated and fixed in “a day or two”. I waited for about a week and checked again – nothing happened. I contacted her/him again and had been given a deadline “by 9am tomorrow”. I checked again this evening and found out that nothing really changed – the picture is still there, the product description is still there and the link to my non-commercial schematic is still there. To my disappointment, V.P.s are not really that helpful. For Jameco, maybe, for a small maker company like yours truly, not a whole lot. Clearly, I needed a different approach.
The fix was surprisingly easy. By inspecting the web page (see screenshot below, click on it to make it larger) I found out that Jameco didn’t even bother to copy the image but merely embedded it in their product page. They decided to keep displaying my shield on their product page even after I specifically asked them to remove it. Continue reading Using your content for fun and profit
On my cameras, I use USB port a lot. At home I use various shooting aids (jigs?) and on the road I prefer offloading pictures to the laptop via USB rather than packing a card reader. Out of many cameras I have had over the years, Canon DSLRs have the weakest USB port. I broke it a few times; my 5DM2 was in the repair service twice in one year. When it arrived from the service today, in the box I found a nice Christmas present from Canon (or maybe they are just tired of fixing the same thing over and over again) – a USB protector designed to strengthen the camera’s USB port. The protector installed into terminal area is shown on the title picture (click on it to make it larger) and more details are given below.
The protector is a piece of rather soft plastic made to fit into the terminal well holding on the walls and two other connectors. When installed, A/V and HDMI connectors can’t be accessed. At the same time, the USB connector is supported very well – I’m not expecting it to ever break again. However, since the best protection is achieved when the thing is permanently attached to the camera I need to learn to live without HDMI.
Now, if you ask me where to get one, I don’t have an answer. The following picture shows product label. Google queries of ‘canon cap cable’ and ‘cy3-1673-000’ returned nothing. It seems that the only way to get this protector is to break a USB port (ask me how) and send a camera to Canon for repair around Christmas. I’m going to check that – I have a Rebel XSi with broken USB port which is going to Canon service on Monday :-). Stay tuned,
Last week my friend Hans and I spent some time in my lab exploring which features of his Nikon D300 are available via PTP protocol. Hans is working on extended range HDR-capable intervalometer and he needed to find out a way to switch his camera into bulb mode using Arduino board and USB Host shield. After we finished I realized that while bulb mode is not tricky to activate, it is not obvious either and no hints exist in the code and examples showing how to do this. This short article is intended to fill the void.
In PTP, shooting parameters, such as shutter speed, aperture, ISO, etc. are changed by setting certain device property. For each parameter there exists a list of allowed values of this property, each property value corresponding to a parameter value. For some parameters, property and parameter value lists are dynamic. For example, starting and ending aperture values are different for different lenses; additionally, the aperture step can be changed in camera settings. Stepping can also be changed for shutter speed and exposure compensation and this can also happen during PTP session if a photographer decides to switch modes – in this case a property may become unavailable, like shutter speed in aperture priority mode. Therefore, before changing a property value for one of these parameters it is necessary to somehow retrieve a list of available property values.
The property value list retrieval mechanism is slightly different for different cameras. On Canon DSLRs, a special event is generated by the camera and sent back to PTP host at the beginning of the session and also each time camera mode was changed, lens were swapped and so on. The application needs to track those events and constantly maintain current value list for each property. On Nikon DSLR, it is possible to simply get value list for a property any time it is needed. To save memory, the list is not stored but simply requested from the camera each time a property needs changing. It is combined with actual property change in two templates – StepUp and StepDown. If you need to increase, for example, shutter speed – call StepUp. If you need to decrease it, call StepDown.
If you “step up” shutter speed on Nikon DSLR manually, the last 2 values will be 30 seconds and bulb. If you step up shutter speed using StepUp method using Nkremote sketch it will stop at 30 seconds. This happens because bulb mode is not included in the list of available property values for shutter speed but simply defined as 0xffffffff. As a result, StepUp doesn’t know that another value is available. It is still possible, however, to set the property directly and I will show you how to do it. Continue reading PTP 2.0 library function turns on Bulb mode on Nikon DSLR camera via USB
Today I want to show a simple USB Host Shield 2.0 modification which allows controlling power to USB peripheral. I learned this technique from Camille’s comment to one of digital camera USB control articles. In short, the idea was to cut VBUS connection between USB host and peripheral, simulating disconnect state. P-channel MOSFET, inserted into VBUS, worked as a switch. I designed this capability into USB Host Shield 2.0 but never needed the functionality therefore this useful feature was left undocumented. Recently I started working with very interesting Nikon P&S camera which can be turned on and off with VBUS power so I finally made this modification. It is very simple.
Take a look at the title picture (click on it to make it larger). The modification uses existing VBUS power select pads of the shield. Out of the box, the one labeled 5V is shorted with solder bridge. First step is to remove this bridge with a solder wick so both pads are clean.
It can be seen that a MOSFET in SOT-23 package fits nicely on those pads (I’m using FDN306P). Drain and source pins are soldered to VBUS and 5V, respectively, and gate, which hangs in the air, is routed to an unused digital pin via an 1M resistor. When digital pin is low the MOSFET conducts. When digital pin goes high the MOSFET switches off disconnecting VBUS from the peripheral.
If you are going to drive high-power peripherals, like digital cameras or phones, it is a good idea to add some capacitance to 5V. I’m using 220uF low-ESR organic polymer tantalum cap in 1210 package which fits nicely on 0.1″ spaced 5V and GND pins of the shield; an ordinary leaded 100-200uF aluminum capacitor will work as well.
After spending a week with focus stacking assistant I realized that I need more units. I’d like to have one unit dedicated for studio work, another to carry in camera bag and yet another one to control my Nikon (code for which I’m hoping to finish soon). Full-size Arduinos are big and expensive and I wanted this controller to be cheap and portable so I built my next controller using Arduino Pro Mini 3.3V, USB Host Mini, and a small home made PCB with buttons and LED. Finished mini-assistant can be seen on title picture and uses the same code as its big brother. What follows is a build log of mini-controller. It follows traditional layout, used, for example, here – a sandwich where Arduino Pro Mini sits on top of USB Host Mini. In addition to that, I needed to add another board on top of the sandwich to carry control and indication bits.
One of my favorite shooting techniques is focus stacking. Many pictures on Circuits@Home site are made using this technique. I use Helicon Focus for post processing and even though this program has camera control built-in, it obviously requires a computer close to the object of shooting. In order to be able to control my camera in the field, I wanted to replace a laptop with simple lightweight controller able to move focus of camera lens and take pictures between steps. In this article, I will show how to build one from Arduino, USB Host Shield and several small parts.
Finished circuit can be seen on the title picture. As you may already have guessed, the sequence of shots used to produce the picture has been made with the very unit depicted on it. Focus stacking assistant is controlled by 3 buttons: first moves focus towards the camera, second moves focus away from the camera, third button starts shooting sequence. Long press on focus move button sets “near” of “far” points, after both points are set shooting sequence can be run – it always starts from “near” point. The sequence can be stopped at any time by pressing on any of focus move buttons. It is important to understand that after a point is set, subsequent focus moves must be performed with focus move buttons only.
The controller can also be set to “free run” mode. Long press on third button starts shooting sequence from current lens position (which in this case can be set by hand using lens’ focusing ring) towards infinity and will run indefinitely. It can be stopped at any moment by pressing on a focus move button.
A single LED shows states of the controller. Short blink once a second indicates “idle” state – controller is connected to the camera, PTP session is open. Continuous frequent blinking means some kind of an error – most likely, controller not being able to initialize the camera or open PTP session. 3 short blinks act as a feedback to long press, focus move, etc. Additionally, more detailed diagnostic is output to Arduino serial console.
Even while connected to the camera, Focus Stacking Assistant allows camera buttons to function as usual. For example, camera LCD can be turned on and zoom area can be moved to the area of interest and then zoomed in to help focusing. Shooting mode, as well as aperture/shutter speed/ISO can be changed. It is also possible to access or erase images on the card and perform other manipulations as necessary. Continue reading Focus stacking assistant for EOS cameras
Here is another exciting camera control project – an improvement of Yanis controller which I covered some time ago. The author – Ziggy from Crisp Concept used Yanis hardware as-is but developed his own control code for both Arduino and Android. Several additional commands has been implemented, most notably video recording and LiveView zoom control.
The project is hosted on Google Code. The source code of Arduino sketch is posted there and can be used for learning how to use commands not covered in PTP library examples. It should be noted that Ziggy uses modified versions of old PTP and USB Host libraries – you’d need to use them instead of standard ones in order for sketch to compile.
I’m hoping parallel development will be beneficial for Manishi’s and Ziggy’s projects. I’m following both with great interest and will be posting updates here. Stay tuned!
In this article I’ll show how to build Wireless EOS Controller designed by Manishi Barosee. I’m building it for my Canons and if I like it, I’ll see if it’s possible to modify it for other camera systems. My controller is built around full-size USB Host Shield instead of Mini which Manishi used – I’m going to do some debuggung and need space to connect probes. Also, full-size shield is much easier to work with.
The design of Yanis is simple yet elegant. It consists of Arduino board, USB Host Shield and serial Bluetooth module. An Arduino sketch reads the serial port, generates camera control commands and sends them to the camera over USB. The Android application acts as a UI for the controller and sends control data over Bluetooth. Here is very basic schematic drawing of Arduino part of the controller showing necessary connections. USB Host connections are described in hardware manual and Bluetooth module connections are shown in detail below.
I’d like to start with radio link. The Bluetooth module used in this build is RN-42 from Roving networks. It is 3.3V device and its pins are not specified as 5V tolerant which means that Tx pin of standard 5V Arduino can’t be connected directly to Rx pin of [my] RN-42. Fortunately, the 5V to 3.3V level shifter on USB Host shield has 2 extra gates and I will be using one of them to “condition” the Tx. To do this, I need to cut ground trace going to pin 9 of D6 (marked ‘HCT’ on the PCB), connect it to Arduino pin 1 and then connect pin 8 of D6 to Rx of RN-42.
Digital camera control code AKA PTP (Picture Transfer Protocol) compatible with USB Host Shield rev.2.0 Arduino library has been released and posted to GitHub. New code has all functionality of original camera control library and adds new elements, namely ability to control several cameras simultaneously and (finally!) support for Nikon DSLRs.
The code comes with numerous examples demonstrating various aspects of digital camera control. All examples were compiled using Arduino IDE rev.0022 with USB Host Shield 2.0 and PTP 2.0 libraries installed as usual (by copying the whole library directory in %arduino%/libraries) and tested on Arduino UNO equipped with USB Host Shield. There are also several examples which require Quantum Platform state machine framework, they can be recognized by qp_port.h header included in the text of the sketch. If you want to try one of those, install QP Development Kit for Arduino and then replace qp_port.cpp with this file.
More detailed explanation of library examples will follow soon. In the mean time, play with the library and try the examples. Stay tuned for the updates!
This is another excellent project which uses USB Host Shield and digital camera control library. Manishi Barosee created Bluetooth interface between Canon EOS camera and Android phone. Current revision of the code allows for manual control of aperture, shutter speed, ISO, white balance, focus, LiveView, and of course, capture. Planned features include video mode control, rack focusing, as well as intervalometer/timer/HDR services.
Watch the video and if you’d like to build the circuit, visit Manishi’s blog to see what’s involved. I am very impressed with design of this controller and plan to build one myself to control my DSLRs. Also, please take a look at Arduino code – an easy to understand sketch, which can be modified for other camera systems without touching the Android part of the controller.