Photography macro dolly (showcase)

hi. i made a ongoing project with step-motors.
A cardboard box. Four 28byj. 3D printed wheels, and motor-holders.
Also have, Ardunio Uno. four UL2003 control-boards.
a bluetooth-module to control my dolly from my phone.
i have made some macro-photos with my Nikon 3300 System camera, and Zhongyi macro-lens.
if you thinking and do this too.. you are welcome to use this arduino-code.



i have also used Digicam control2 with cable from pc (open source camera control) to control the camera.
here are my code for moving the dolly:

//camera dolly blt contrl. controll.
//by Stein-Ove Bratthammer 23 oktober 2021
//
#define STEPPER_PIN_1 9 // motor coil 1
#define STEPPER_PIN_2 10 // motor coil 2
#define STEPPER_PIN_3 11 // motor coil 3
#define STEPPER_PIN_4 12 // motor coil 4 
String inString;// serial variable
int steppoint = 1;// stepper(pointer)
int mv = 0;// (MoVe to)
int ml = 0;// (Moved Last)
void setup() {
  Serial.begin(9600);// opens serial port for communication
  pinMode(STEPPER_PIN_1, OUTPUT);// set coil pin
  pinMode(STEPPER_PIN_2, OUTPUT);// set coil pin
  pinMode(STEPPER_PIN_3, OUTPUT);// set coli pin
  pinMode(STEPPER_PIN_4, OUTPUT);// set coil pin  
  delay(2000);
  menu();
}
// main
void loop(){
  if (Serial.available()>0){
        inString = Serial.readString();// reads buffer into inString object
        inString.remove(inString.length()-2,2);// removes lineshift and carrige return-
        if(inString == "m"){menu();}
    if (inString == "ff"){mv = mv + 2050/85;Serial.println("ff");}
    if (inString == "f10"){mv = mv + 2050/24;Serial.println("f1");}
    if (inString == "f100"){mv = mv + 2050/8;Serial.println("f2");}
    if (inString == "f1000") {mv = mv + 2050/2;Serial.println("f3");}
    //
    /* move reverse*/
    if (inString == "rr") {mv = mv - 2050/85;Serial.println("rf");}
    if (inString == "r10") {mv = mv - 2050/24;Serial.println("r1");}
    if (inString == "r100"){mv = mv - 2050/8;Serial.println("r2");}
    if (inString == "r1000"){mv = mv -2050/2;Serial.println("r3");}
    inString = "";
  }
  delay(4);
  if (mv != ml) { // if they are different, execute steps
    if (steppoint == 1) {
      digitalWrite(STEPPER_PIN_1, 1);
      digitalWrite(STEPPER_PIN_2, 0);
      digitalWrite(STEPPER_PIN_3, 0);
      digitalWrite(STEPPER_PIN_4, 0);
    }
    if (steppoint == 2) {
      digitalWrite(STEPPER_PIN_1, 0);
      digitalWrite(STEPPER_PIN_2, 1);
      digitalWrite(STEPPER_PIN_3, 0);
      digitalWrite(STEPPER_PIN_4, 0);
    }
    if (steppoint == 3) {
      digitalWrite(STEPPER_PIN_1, 0);
      digitalWrite(STEPPER_PIN_2, 0);
      digitalWrite(STEPPER_PIN_3, 1);
      digitalWrite(STEPPER_PIN_4, 0);
    }
    if (steppoint == 4) {
      digitalWrite(STEPPER_PIN_1, 0);
      digitalWrite(STEPPER_PIN_2, 0);
      digitalWrite(STEPPER_PIN_3, 0);
      digitalWrite(STEPPER_PIN_4, 1);
    }

    if (ml < mv) {
      steppoint += 1;
      ml += 1;
    }
    if (ml > mv) {
      steppoint -= 1;
      ml -= 1;
    }
  }
  if (ml == mv) {// if steppoints are met.
    ml = 0;
    mv = 0;
    delay(1000);
    digitalWrite(STEPPER_PIN_1, 0);
    digitalWrite(STEPPER_PIN_2, 0);
    digitalWrite(STEPPER_PIN_3, 0);
    digitalWrite(STEPPER_PIN_4, 0);    
  }
  if (steppoint > 4) {// over-run control
    steppoint = 1;
  }
  if (steppoint < 1) {
    steppoint = 4;
  }
}
void menu(){
  Serial.println("----------------");
  Serial.println("m This menu     ");
  Serial.println("forward         ");
  Serial.println("ff    microstep ");
  Serial.println("f10   1/10 rev  ");
  Serial.println("f100  1/4 rev   ");
  Serial.println("f1000 1/2 rev   ");
  Serial.println("reverse");
  Serial.println("rr    microstep ");
  Serial.println("f10   1/10 rev  ");
  Serial.println("f100  1/4 rev   ");
  Serial.println("f1000 1/2 rev   ");
}

very awful tech drawing but you might get the point how it is wired.
circuit.pdf (56.1 KB)

2 Likes

Nice project and pictures. The circuit drawing without labels, pin numbers etc is basically not very useful.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.