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)