Adding a programmable switch to MewPro helps us, for example, to take selfies underwater.
No one is eager to drill a hole in underwater housing. But sometimes you might dream if there were an extra switch for customizable functions in GoPro then some great photo/video of something great (or GPOY) could be shot.
In this post, a method to use a reed switch and a magnet with MewPro is addressed. No drilling into housing will be required.
Parts List
- MewPro system (GoPro Hero 3+ Black, MewPro, Arduino Pro Mini)
- reed switch
- magnet
- (bits of solder and wires)
⇧ center: reed switch (cost about 2USD), right: neodym magnet (cost less than a dime)
The reed switch will be closed when magnet field is applied. The neodym magnet has strong enough force even from the outside of housing.
Wiring is simple as the following figure:
⇧ connect D5
and GND
pins to either leads of the reed switch
WARNING: Reed switches are very fragile; contacts are sealed in a thin glass envelop. Don’t bend the leads of switch or you will easily destroy/crack the glass.
⇧ electrical wires are twisted around the straight leads before they are soldered
⇧ reed switch w/ a prototype of MewPro in GoPro housing
MewPro Software Mods
In MewPro.ino
find the lines
//********************************************************
// f_Switches: One or two mechanical switches
#undef USE_SWITCHES
and modify them to
//********************************************************
// f_Switches: One or two mechanical switches
#define USE_SWITCHES
This will enable the part of code in f_Switch.ino
:
void switchClosedCommand(int state)
{
switch (state) {
case (1 << 0): // SWITCH0_PIN
if (!ledState) {
startRecording();
} else {
stopRecording();
}
break;
case (1 << 1): // SWITCH1_PIN
startRecording();
break;
default:
break;
}
}
The statements in case (1 << 0)
are executed when SWITCH0_PIN
(= D5
as defined in MewPro.h
) becomes the GND
level, that is, when the neodym magnet gets near enough to the reed switch. The code above does simple things: start recording in video mode (or release the shutter in still camera mode) at the first time it is called, and at the second time stop recording (or no operation in still mode).
If you change the part of code anything can be accomplished. For example, modifying or adding a line of delay(10000);
before startRecording();
void switchClosedCommand(int state)
{
switch (state) {
case (1 << 0): // SWITCH0_PIN
if (!ledState) {
delay(10000);
startRecording();
} else {
stopRecording();
}
break;
case (1 << 1): // SWITCH1_PIN
startRecording();
break;
default:
break;
}
}
enables self timer of 10000 milliseconds (= 10 seconds) in still camera mode. Note this self timer mode is usable also in underwater where Wi-Fi is not available.