PiXPi dslr camera controller

Modular and programmable DSLR camera trigger

Similar projects worth following
Hello, Today I want to share my "PiXPi" project, which currently is about building open-source, programmable DSLR camera's trigger(and hopefully even more in future).
I started this project about 2 and a half year ago as I was interested in photography technique which is called "high-speed photography", this technique aims for making perfectly frozen photos of fast-moving things, like bullets, cracking glass, popping balloons, droplets collisions and... creativity should be the only limit here
but I realize that for some photographers there can be also so technical difficulties, so this is the first goal of this project: making "high-speed photography" as easy as possible, but without limiting those with more technical knowledge
also I currently working on adding the possibility to control some motorized devices like timelapse/macro sliders.
check out:

What's that about:

So first goal of this project was creating controller which will help or even make possible to create some nice photos of things that are happening really fast i made first experiments about 4 year ago I was inspired by video which i found on YouTube, check it out:

It was about hooking sound sensor, camera and arduino together aand it worked, but there was some issues with it, first it was not handy to reprogram arduino every time I wanted to change something(i needed to take my laptop to basement :p ), also I wanted to make something which can be used by photographer which are not really into programming.

                                        one of first attempts, about two and half year ago

And now i on stage of creating board which is equipped with interface to camera, flashes and three modules which can be sensor or some action module, it's easy to add new modules as interface for modules is quite simple(GND, +12v and signal but will describe it in details later).

some protyping was needed, but i need to update this photo as it's dated about year ago, this stash is bigger now ;)                                                                                 

How it works:

Controller board is powered by VoCore2, it's opensource and awesome take a look at:

it's running under Linux(OpenWrt) control, on top of it is a Python application which is responsible for receiving, executing and controlling scripts created and sent by user.

Scripts are basically strings of python code.

Those scripts are sent from android application using Wifi->http->rest protocols.

 Scripts are responsible for orchestrating photo shoot sequence, so camera shutter, flash and modules interfacing

Android App utilise Google's Blockly library for making creating of those scripts/sequences simple as possible. So in effect you can create them using graphical programming interface, using blocks instead of writing any code, no knowledge of Python programming is required for, user do not see Python code at all, he/she will just see blocks .

Those Blocks with help of blockly library are then under the hood translated into python code and script is ready to be sent to controller board and and executed on it... 

And if you did it right, you will get some nice photos, it can sound quite complex at beginning but it's not so hard ;). 

last week i also created simple video, which show some example use and I hope will help understand topic a little bit ;) :

*but be aware that for filming purpose above video was took in full light using high shutter speeds on camera, it's little different from "classic" high speed photography method, read chapter "Freezing motion with high speed photography method" for more details on high-speed photography.

                              so how to catch things that are happening very fast?

Simplifying what you need to do is trigger camera(or just flash, but will come to it later) when glass is cracking or droplets are colliding, so just...

Read more »

  • Macrorig driven from app

    krzysztof krzeslak8 hours ago 0 comments


    As i wrote in previous update lately I was working on adding possibility to control macrorig/stepper driver from android app, and just wanted to share some effects of it:

     Generally it works, it's simple and there are some fine tweaks still needed, but it will come in future, what was currently added on app side is:

    Added "step" mode in ports configuration screen:

                                                              "Step" mode can be set on each port

                After setting port into "step" mode following block will become available:

    With these block you can move steppers forward and backward and set desired travel, currently smallest possible move for macrorig is 0,005mm(1 step).

  • it's alive! stepper driver with macro-slider

    krzysztof krzeslak2 days ago 0 comments

    Hello, today I was finally able to make macro-slider, so I wanted to show off a bit, below is a small demo:

    Currently utilizing of this feature needs to be imlemented on Android app side, but for controller testing i just sent http request from laptop, so next step we be adding blocks for driving this from Android app.

                                          I also designed and 3-d printed some holders for driver board

    As i mentioned in one of logs i decided to use "pulse" like interface for driving stepper boards, it's really simple and work like that:

     pulses below 2ms time will make stepper move in one direction

     pulses above 2ms will make it's moving in opposite direction

     and till now it works pretty well. 

    As currently i've used 1mm/rev trapezoidal screw and stepper motor has standard 200steps per revolution so theoretically it should have 5-microns resolution.

    Currently i already had some ideas about new driver board as I think it will be handy to have there some buttons to "manually" move slider.

    So watch for updates... :)

  • New black robe and few words about cases

    krzysztof krzeslak3 days ago 0 comments

                                                            Controller in anodised black casing

    Hello, Today I wanted share photo of controller in "a new robe" which is anodised black case I bought those black cases some time ago, but not really used till this time, now as previous case got little dirty I thought that maybe it's a good moment to test this variant. 

    By the way I also realised that in log about board design i skipped somehow case selection topic, it necessarily should be there as case selection was one of first thing which I did when started this project, so board dimensions was designed to fit this cases(to be precise first prototype was intended for 100mm version[1455b1002], but after moving to esp then to vocore I switched to smaller 80mm version[1455b1002] ).

                   I really like this cases as they look very nice and are surprisingly cheap(less than 10 dolars),
                                          they're manufactured by Hammond manufacturing.

                       After removing front panel board can be slidden in/out, as it's held by those ribs on sides

    generally I can't make my decision which color version I like more, this one or old one(natural aluminium), so some opinions are appreciated :)

  • Modules under the hood

    krzysztof krzeslak08/13/2019 at 18:50 0 comments

    Hello, today i wanted share some detailed overview of modules, how they built and more importantly how they communicate with main controller, it's significant as standarized communication interface is something which make possible to easily extend capabilities through adding new module, so I put some thoughts behind design of modules interface.

    So on controller there are 3 modules ports:

    - Port red

    - Port green 

    - Port blue

    Each port consist of 3 pins:

    COMMON: configurable 3,3V input or output (additionally as 1-wire in case of port red)

    12V supply(currently always on, but in future I plan to add "power drive" feature)


                                                                           simplified port circuit
       Actual port driving circuit, there are some port's protections added and mosfet is actually driving low side

    For driving Sensor modules following configuration of port will be used:

    Com pin direction set to input, when sensor is not detecting anything it should give 3,3V after signal is detected it should pull COM pin to GND potential.

    Supply for sensor is provided by two remaining ping - 12V and GND. 

    For driving Action modules

    Com port set to output, when "action" is to be triggered, com port will go to High state out-putting 3.3V, but also reversed logic could be used here with no problems as default state can be configured as "HIGH" state.

    For driving Motorised modules:

    Currently I've implemented 1-wire communication(Over uart, so port red have additionally uart to 1-wire interface circuit)  for bi-directional communication over single pin with motorised modules, thought behind it was that 1-wire interface can serve multiple slaves, so using one port there will be be possible to communicate with multiple nodes, this could be useful for example for some multi axis sliders, but now I come to conclusions that maybe i over-killed it a bit and think about changing this approach to "servo-like" interface, so first I want to try driving motorised module using soft-pwm this will not have possibility of driving mutliple nodes with one port, but then not only port red will be capable to drive motorised module, but each of port, so still it should be fine, anyway I will keep uart/1-wire interface circuit on port red, as this can be useful in future, and interface circuit in quite simple. 

                                                           uart to 1wire circuit specific for port red,
                            based on

                   Ports function are configurable from app, function refer to COMMON pin function:

    (just note that "Com" is communication function of port, it's different thing from "Common" port)

    In case of output's(port blue on this screen), default state can be configured, module selection is not used at all now, but thought behind adding it was to name port driving blocks with corresponding name's , for example not just "wait for port red", but "wait for noise" in case of selecting sound sensor on port red.

             After setting port(red in this case) to input mode, such blocks will be available in program editor

    Read more »

  • Light sensor as laser barrier, part 2: usage

    krzysztof krzeslak08/11/2019 at 07:37 0 comments


    Today I wanted to share with effect of usage light sensor with laser which I shared in previous log.

                                                                                Final effect

    Program/script which was used for taking this photo.This time I used high speed photography method, so photo was done in dark room, using high speed flash illumination, camera shutter was set to bulb mode. Program explanation: "trigger shutter" opens camera shutter(it's like pressing and holding shutter button on camera), then it waits for 300ms to make sure that shutter is open and still, then "wait for (!) port red" waits for negated signal on port red(so laser beam interrupt by falling strawberry in this case), after signal is detected there's delay which can be adjusted from control panel, after set amount of time flash(connected to port 1) is triggered , so actual photo is taken and shutter is released ending sequence
                                                 setup which was used, few attempts was needed ;)

  • Light sensor as laser barrier: part 1

    krzysztof krzeslak08/09/2019 at 18:12 0 comments


    Some time ago I had an idea that light sensor can be also used as light/laser barrier, as I had some laser module laying around, which i bought some time ago on Ebay so I decided to give a try l, it's still to be tested in action, but it's a good opportunity to share some photos from workshop ;)

                                                                                     final effect
                                                                        "clamp" 3d printing
                             for tripod mounts i use 3d printed "clamp" with pressed 1/8inch poliamide nut
                                                                    complete setup with light sensor
                      inside is just battery holder, (glued)switch and laser module, so it's really simple contruction
    machining step, case which i'm using for this and also for all sensors is "PP23" bought from distributor which i got near my living place (
                                                      stickers designed in gimp, to make it look nice ;)

    In future days I will try to make a some tests for it, generally use case is almost same as for reflection sensor, but sometimes I think it can be handier to use such laser barrier and I wanted to make use of those modules which i got lying around ;)

  • Extreme macro rig as first motorised module attempt

    krzysztof krzeslak08/07/2019 at 18:15 0 comments

    Hello this time I wanted to share some example of motorised module example which I assembled some time ago

    It's suppose to be something which is sometime called "extreme macro rig" and it's used for extreme macro photography.

    Currently i'm working on driver electronics for it i made simple prototype already, but i got some problems with communications with pixpi controller. 

    Initially I my plans was to drive it through 1-wire interface which i implemented on pixpi(as master) as well on stepper driver board(slave), but there are some problems with it as arduino(slave) liked to stuck a lot during operation, i'm get feeling like i'm compicated it too much, so now i'm trying other approach, with using "servo like" interface, so using timed pulses for driving motor. I already implemented it on pixpi side, but still need to implement this on driver/arduino side.

    I spent some time on designing it, but i'm happy that I found complete dslr mount on aliexpress, so it made it's looot easier:

                        Material which i choose is POM(poliacetal) as it's easy in machining and looks nice
                                      later i decided to go with aluminium for this lowe(long one)element

  • controller goals, design and prototyping

    krzysztof krzeslak08/04/2019 at 08:12 0 comments


    Hello in this log I wanted to talk a bit about initial goals which I had for controller, design process, prototyping and also I will try to explain what was rationals behind each taken design decision.

    As i mentioned in project description I started working on this controller after gaining some experience with high speed photography using arduino and it seemed like a fun project:

                                            White walls days :p 2 years, 6 months and 16 days ago
                                                  Photo from that day/s, not perfect, but it was fun ;)

    After this experiments i already had some ideas what I can be improved, generally ... a lot 

    but for ex. it will be good to had possibility to easily tweak delays in program, electrical connections wasn't reliable at all, as well using optical sensor for detecting droplets also wasn't guarantee of good timing and repeatable results, so I had something to work on.

    Then I came with idea of using RaspberryPi on which I could run some web interface which will be accessed with smartphone browser. From web interface [python]script was run, this script through RPi gpio`s and Mosfet shield will drive solenoid valve to make some droplets. At this time I already knew that utilising solenoid valve is right way, as I dig a little in internet and it seemed common solution for such use case, but I didn't saw anyone using RPi nor Python for it which can be understood, as it can be described as "taking sledgehammer to crack a nut", but I wanted to use it it as i could put some web-interface on it quite easily ...and i had a RaspberryPi lying on shelve which i wanted to use for something :p

                                                                 2 February 2017, some initial test
    Web interface which i used back then, time for quick lesson of polish :D Skrypt=Script, Uruchom=run, also it was lacking any configuration, just run selected script, so in effect I ended up hooking laptop with ethernet cable and direct script editing.

                                                But at least results was quite decent with this setup

    After this experiments I started thinking about creating some dedicated controller which I would like to use... and after some time I really started working on it ;)

    I set some initial goals for controller:

    1. Can be quickly and easily set-up

    2.Can be reconfigured using smartphone, without need of use computer.

    3.Can be used without knowledge in programming nor electronics.

    4.At the same time will not limit those with some technical knowledge, so let's say to be hacker friendly and possible to extend in much as possible ways.

    Withing above goals I came to some design decisions:

    1. Single controller board which will have possibility to connect modules, provide supply for them and (of course) basic control signals.

    2. Controller board need to be equipped with Bluetooth or Wi-Fi connectivity, so it can be controlled from smartphone Application.

     3. Smartphone application need to utilise some graphical configuration/programming interface to make it easy to use, so I dig a little and when typed "graphical programming library" in Google search I discovered Blockly library(by the way, also created by Google) , also this affected final choice of programming language which I will need to run on controller board, as it will be hard to compile code on smartphone I needed language which will have possibility...

    Read more »

  • meanwhile... quick test ;)

    krzysztof krzeslak07/30/2019 at 23:20 0 comments

    Hello i'm just working on little documentation of this project 

    ...but meanwhile, I just got little distracted and just made a quick video on which i tested some standard relay module which you can get from ebay, also example of app usage can be seen there ;)

    sorry for not so good focusing I defnitelly need improve on video making skills ;)

    above link to such module:

View all 9 project logs

Enjoy this project?



Tyler Gerritsen wrote 07/31/2019 at 14:44 point

What an awesome design!  I haven't looked through all your documentation yet, but the 'Program Editor' really stands out.  Everything looks professional. 

When I go to your site and click 'Documentation', it doesn't take me anywhere.  Are you sharing the plans to build one?  

Do you plan to manufacture and sell?  You definitely could compete with the current market!

  Are you sure? yes | no

krzysztof krzeslak wrote 07/31/2019 at 22:44 point

Thanks a lot, it's always nice to hear such words! :) 

I'm also happy with this editor as i initially wasn't sure how it will perform, but it turned out that it works quite nice :) 

Regardind documentation, yeees good observation it's my weak point, it's always a little challenge for me to write documentation which also will be understandable, but currently working on this, also on placing all sources in Github, so soon it will be available, at least in some initial form. Currently just finished something which can be called "architecture diagram"(it can be found in updated project details) because I had feeling that it's not so easy for all to understand how all part of this project cooperate together, so I hope with diagram will be a bit easier and it's a good starting point for documentation;)

Regarding manufacturing and selling, i'm not felling confident about hitting commercial market, but i had such thoughts in my mind, but currently i'm just enjoying working on this as hobby project as there's a lot of thing which can be improved ;)

  Are you sure? yes | no

Tyler Gerritsen wrote 6 days ago point

I see you've been busy!  It's awesome to see your development continuing.  I just happen to have a home-built macro slider similar to what you've built, but my controller is very basic.  The idea of an open-source platform to control my macro slider AND high-speed flash is very appealing.

I think that it would be great to have all the documentation available online.  Keep it up!

Since you built a 'laser barrier' system, could I make a suggestion?  Can you set up two lasers so that the PixPi can calculate the speed and delay time?  Then you could give it a distance (maybe for the strawberry, distance from the second laser to the water).  Just an idea!

Keep it up!

  Are you sure? yes | no

krzysztof krzeslak wrote 6 days ago point

Hello Tyler, yeaah i'm trying to do both simultaneously add some project logs and also to keep project development going further, it's not so easy, but I was able to create some more detailed description of modules, check it out in project logs ,generally I plan to re-use this project logs as base for documentation, so It will be easier then.

Regarding slider driving modules, it's just what I've set priority now you can also read what is current status in this log which i mentioning goal is that with just using controller and stepper-driver module you should be able to run every slider powered with stepper easily, so it's should be definitely possible to drive your slider with it.

Now this is possible to catch "right moment" without knowing speed of bullet, just to sense passing bullet(or actually shoot with pneumatic gun module) and then with "trial and error method" adjust flash/photo delay using "VAR delay" block you can change it from control panel, so this is approach from "another side of equation" .

I considered such possibility in past, but i came to conclusion that it will be not exactly in "assumptions for project" way, which was to keep modules simple as possible... but back then i thought about doing it with single module and after you mentioned it I thought that maybe with using two sensor modules and then doing calculations on controller side... there will be just need to add new block for, I will keep it in mind as this can be interesting feature, thanks for hints ;)

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates