@@muhammadwaqasfarooq8321 Hello Muhammad . if you add an LCD or TFT display you will have to write new code into your arduino project telling it what you want to display on your device. there are a few interesting videos on youtube by other people where they have used displays with motorised cameras. also have you seen the videos from “Dronebot Workshop” as they have many videos about using motors and displays etc for arduino projects. best wishes
About a year ago I was thinking about getting one of those small ones of these, but they're so expensive and very small like you said. I thought about making my own, but I'm not really very good with these sort of electronics, and the guides I found weren't good enough for me to follow either, so I just forgot about it. This video makes me want to make my own again. Very well done mate.
A great project to allow photographers to make a remote programmable dolly to take shots that would otherwise need the use of very expensive bits of equipment. The video was easy to follow and is extremely intuitive. Well done.👍🏻
That is a beautiful work of art, and the fact no phone app is required to operate from a phone is all the more cool, good job Markus, can't wait for future videos, I love your channel and have been a fan for many years.
Arduino camera slider code /* stepper motor Rail Pan Tilt camera controller by Markus Fuller 2020 using 1 Arduino UNO 3x nema17 stepper motors and 3x EasyDrivers from www.schmalzhaus.com Library - AccelStepper by Mike McCauley: www.airspayce.com/mikem/arduino/AccelStepper/index.html */ #include #include #define PanX A0 // Pan X pin #define TiltY A1 // Tilt Y pin #define Rail A2 // Slider potentiometer #define inOutPot A3 // In and Out speed potentiometer #define PanStop 10 // to stop pan cable tangling #define Button 12 // Set Button #define EndStop 11 #define RedLED 8 // RGB Led Red #define GreenLED 9 // RGB Led Green #define blueLED 13 // RGB Led blue // Set stepper motor pins on Arduino as type, Step, and Direction, AccelStepper stepper1(1, 7, 6); AccelStepper stepper2(1, 5, 4); AccelStepper stepper3(1, 3, 2); MultiStepper StepperControl; long gotoposition[3]; // stores the A and B position for every stepper motor int PanPos = 0; int TiltYPos = 0; int RailPos = 0; int currentSpeed = 100; int inOutSpeed = 100; int XInPoint = 0; int YInPoint = 0; int ZInPoint = 0; int XOutPoint = 0; int YOutPoint = 0; int ZOutPoint = 0; int InandOut = 0; void setup() { stepper1.setMaxSpeed(3000); stepper1.setSpeed(300); stepper2.setMaxSpeed(1500); stepper2.setSpeed(75); stepper3.setMaxSpeed(1500); stepper3.setSpeed(75); pinMode(PanStop, INPUT_PULLUP); //faultstop to help prevent pan cable tangling pinMode(Button, INPUT_PULLUP); //setswitch which is also activate button pinMode(EndStop, INPUT_PULLUP); //endstop microswitch pinMode(RedLED, OUTPUT); //red led pinMode(GreenLED, OUTPUT); //green led pinMode(blueLED, OUTPUT); //blue led StepperControl.addStepper(stepper1); StepperControl.addStepper(stepper2); StepperControl.addStepper(stepper3); // Move the slider to the Home position when first turned on while (digitalRead(EndStop) != 0) { stepper1.setSpeed(1500); stepper1.runSpeed(); stepper1.setCurrentPosition(0); // When EndStop is activated this sets position as step 0 } delay(30); // Moves back slightly from the rail endstop while (stepper1.currentPosition() != -1500) { stepper1.setSpeed(-1500); stepper1.run(); // This section below for Pan centre control } // Moves the pan head anticlockwise until microswitch is activated while (digitalRead(PanStop) != 0) { stepper3.setSpeed(-400); stepper3.runSpeed(); stepper3.setCurrentPosition(0); // When Pan is centred set position to 0 steps } delay(30); // Moves pan clockwise untilfacing forward, this may need to be changed depending on how many teeth between stepper and pan wheel while (stepper3.currentPosition() != 1070) { stepper3.setSpeed(400); stepper3.run(); // End of section above digitalWrite(blueLED, HIGH); // blue led turns on } } void loop() { // this will cancel out the rail movement if you try and travel beyond safe limits while (digitalRead(EndStop) == 0 || stepper1.currentPosition() < -40500) {} if (digitalRead (Button) == 0) { delay(1000); // hold switch for 1 second to reset all values then LED turns Blue if (digitalRead (Button) == 0) { InandOut = 4; } switch (InandOut) { case 0: // Set the A position InandOut = 1; XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1 YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2 ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3 digitalWrite(blueLED, LOW); // MSF blue led goes out digitalWrite(RedLED, HIGH); // Light up inLed break; case 1: // Set the B position InandOut = 2; XOutPoint = stepper1.currentPosition(); // Set the B positions for steppers YOutPoint = stepper2.currentPosition(); ZOutPoint = stepper3.currentPosition(); digitalWrite(RedLED, LOW); // red Led goes off then Green Led Illuminates stating ready to run digitalWrite(GreenLED, HIGH); break; case 2: // Move to A position / go to next part case 3 InandOut = 3; inOutSpeed = analogRead(inOutPot); // Place the A position into the Array gotoposition[0] = XInPoint; gotoposition[1] = YInPoint; gotoposition[2] = ZInPoint; stepper1.setMaxSpeed(inOutSpeed); stepper2.setMaxSpeed(inOutSpeed); stepper3.setMaxSpeed(inOutSpeed); StepperControl.moveTo(gotoposition); StepperControl.runSpeedToPosition(); delay(200); break; case 3: // Move to B position and returns go back to case 2 above InandOut = 2; inOutSpeed = analogRead(inOutPot); // Place the B position into the Array gotoposition[0] = XOutPoint; gotoposition[1] = YOutPoint; gotoposition[2] = ZOutPoint; stepper1.setMaxSpeed(inOutSpeed); stepper2.setMaxSpeed(inOutSpeed); stepper3.setMaxSpeed(inOutSpeed); StepperControl.moveTo(gotoposition); StepperControl.runSpeedToPosition(); delay(200); break; case 4: // If Set button is held longer than one second go back to the beginning case 0 above InandOut = 0; digitalWrite(RedLED, LOW); digitalWrite(GreenLED, LOW); digitalWrite(blueLED, HIGH); delay(1000); break; } } // PanX - Pan movement XPos PanPos = analogRead(PanX); // if Pan Pot is moved left, move stepper 2 pan anticlockwise if (PanPos > 600) { //stepper2.setSpeed(currentSpeed); PanPos = map(PanPos, 600, 1024, 0, 200); stepper2.setSpeed(PanPos); // Increase speed } // if PanPot is moved right, move stepper 2 pan clockwise else if (PanPos < 400) { //stepper2.setSpeed(-currentSpeed); PanPos = map(PanPos, 400, 0, 0, 200); stepper2.setSpeed(-PanPos); // Increase speed } // if PanPot is centred then there is no movement else { stepper2.setSpeed(0); } //Tilt Y - Tilt movement TiltYPos = analogRead(TiltY); if (TiltYPos > 600) { //stepper3.setSpeed(currentSpeed); TiltYPos = map(TiltYPos, 600, 1024, 0, 200); stepper3.setSpeed(TiltYPos); // Increase speed } else if (TiltYPos < 400) { //stepper3.setSpeed(-currentSpeed); TiltYPos = map(TiltYPos, 400, 0, 0, 200); // Try changing this to lower value to slow tilt stepper stepper3.setSpeed(-TiltYPos); // Increase speed // If TiltPot is centred then there is no movement } else { stepper3.setSpeed(0); } // RAIL potentiometer RailPos = analogRead(Rail); // If potentiometer is turned left then the Gantry moves towards the control unit if (RailPos > 600) { RailPos = map(RailPos, 600, 1024, 0, 3000); stepper1.setSpeed(-RailPos); // Increase speed } // If potentiometer is turned right then the Gantry moves away from the control unit else if (RailPos < 400 ) { RailPos = map(RailPos, 400, 0, 0, 3000); stepper1.setSpeed(RailPos); // Increase speed // If potentiometer is centred then there is no movement } else { stepper1.setSpeed(0); } // run the camera slider stepper1.runSpeed(); stepper2.runSpeed(); stepper3.runSpeed(); }
Thanks for sharing your work in such a detail. I have read all the comments. I visited your site where I read the full documentation. But I have this question, is it possible to mount Nik....... coolpix P1000 which weighs almost 1.5 kg. Will your slider be able to handle it.
@@markusfuller Great! Yes, slip rings are an odd animal to mount. I will need to take a closer look at your setup for the pan and see if I can come up with something.
The point A to B with different amounts of steps but starting and ending at same time is somwthing im really struggling with in the code.havent looked at your code yet
I very interesting with your project but i don't know any thing about code and anduino. Can you help me to know how to code and connect these thing together as one ?
Your project is so great, i have no words. I love in it. I do the same project. Thx for the arduino code. I using in my project the lcd ST7355. On my channel will be the movie soon.
If there's an opportunity, I would really like to see closeups of how you assembled the mechanical parts from the gantry up to everything below the L brackets that do the rest of the motion. I mean how the parts of vertical shaft bearings, 60T pulley, pan stepper motor etc. are arranged and fastened. Mine is topped off with the 1/4-20 threads for a ball head to pan and that's sufficient for me. I'm trying to improve a kit I bought that is too weak in design and attachments. What I found on your website was the Arduino code but no assembly steps. Thanks.
Nicely done, 3 axis and a cool controller-design. I have made mine with separated external controllers, so I can use the pan on a tripod as a single solution... a little more flexibility, but I didn't build a tilt-function. Mhhh....
Hi Mark, Great job. Is it possible for you to put schematics of the project and PCB as well? I checked your beautiful website and couldn't find it in the section about XYZ slider.
Arduino camera slider code /* stepper motor Rail Pan Tilt camera controller by Markus Fuller 2020 using 1 Arduino UNO 3x nema17 stepper motors and 3x EasyDrivers from www.schmalzhaus.com Library - AccelStepper by Mike McCauley: www.airspayce.com/mikem/arduino/AccelStepper/index.html */ #include #include #define PanX A0 // Pan X pin #define TiltY A1 // Tilt Y pin #define Rail A2 // Slider potentiometer #define inOutPot A3 // In and Out speed potentiometer #define PanStop 10 // to stop pan cable tangling #define Button 12 // Set Button #define EndStop 11 #define RedLED 8 // RGB Led Red #define GreenLED 9 // RGB Led Green #define blueLED 13 // RGB Led blue // Set stepper motor pins on Arduino as type, Step, and Direction, AccelStepper stepper1(1, 7, 6); AccelStepper stepper2(1, 5, 4); AccelStepper stepper3(1, 3, 2); MultiStepper StepperControl; long gotoposition[3]; // stores the A and B position for every stepper motor int PanPos = 0; int TiltYPos = 0; int RailPos = 0; int currentSpeed = 100; int inOutSpeed = 100; int XInPoint = 0; int YInPoint = 0; int ZInPoint = 0; int XOutPoint = 0; int YOutPoint = 0; int ZOutPoint = 0; int InandOut = 0; void setup() { stepper1.setMaxSpeed(3000); stepper1.setSpeed(300); stepper2.setMaxSpeed(1500); stepper2.setSpeed(75); stepper3.setMaxSpeed(1500); stepper3.setSpeed(75); pinMode(PanStop, INPUT_PULLUP); //faultstop to help prevent pan cable tangling pinMode(Button, INPUT_PULLUP); //setswitch which is also activate button pinMode(EndStop, INPUT_PULLUP); //endstop microswitch pinMode(RedLED, OUTPUT); //red led pinMode(GreenLED, OUTPUT); //green led pinMode(blueLED, OUTPUT); //blue led StepperControl.addStepper(stepper1); StepperControl.addStepper(stepper2); StepperControl.addStepper(stepper3); // Move the slider to the Home position when first turned on while (digitalRead(EndStop) != 0) { stepper1.setSpeed(1500); stepper1.runSpeed(); stepper1.setCurrentPosition(0); // When EndStop is activated this sets position as step 0 } delay(30); // Moves back slightly from the rail endstop while (stepper1.currentPosition() != -1500) { stepper1.setSpeed(-1500); stepper1.run(); // This section below for Pan centre control } // Moves the pan head anticlockwise until microswitch is activated while (digitalRead(PanStop) != 0) { stepper3.setSpeed(-400); stepper3.runSpeed(); stepper3.setCurrentPosition(0); // When Pan is centred set position to 0 steps } delay(30); // Moves pan clockwise untilfacing forward, this may need to be changed depending on how many teeth between stepper and pan wheel while (stepper3.currentPosition() != 1070) { stepper3.setSpeed(400); stepper3.run(); // End of section above digitalWrite(blueLED, HIGH); // blue led turns on } } void loop() { // this will cancel out the rail movement if you try and travel beyond safe limits while (digitalRead(EndStop) == 0 || stepper1.currentPosition() < -40500) {} if (digitalRead (Button) == 0) { delay(1000); // hold switch for 1 second to reset all values then LED turns Blue if (digitalRead (Button) == 0) { InandOut = 4; } switch (InandOut) { case 0: // Set the A position InandOut = 1; XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1 YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2 ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3 digitalWrite(blueLED, LOW); // MSF blue led goes out digitalWrite(RedLED, HIGH); // Light up inLed break; case 1: // Set the B position InandOut = 2; XOutPoint = stepper1.currentPosition(); // Set the B positions for steppers YOutPoint = stepper2.currentPosition(); ZOutPoint = stepper3.currentPosition(); digitalWrite(RedLED, LOW); // red Led goes off then Green Led Illuminates stating ready to run digitalWrite(GreenLED, HIGH); break; case 2: // Move to A position / go to next part case 3 InandOut = 3; inOutSpeed = analogRead(inOutPot); // Place the A position into the Array gotoposition[0] = XInPoint; gotoposition[1] = YInPoint; gotoposition[2] = ZInPoint; stepper1.setMaxSpeed(inOutSpeed); stepper2.setMaxSpeed(inOutSpeed); stepper3.setMaxSpeed(inOutSpeed); StepperControl.moveTo(gotoposition); StepperControl.runSpeedToPosition(); delay(200); break; case 3: // Move to B position and returns go back to case 2 above InandOut = 2; inOutSpeed = analogRead(inOutPot); // Place the B position into the Array gotoposition[0] = XOutPoint; gotoposition[1] = YOutPoint; gotoposition[2] = ZOutPoint; stepper1.setMaxSpeed(inOutSpeed); stepper2.setMaxSpeed(inOutSpeed); stepper3.setMaxSpeed(inOutSpeed); StepperControl.moveTo(gotoposition); StepperControl.runSpeedToPosition(); delay(200); break; case 4: // If Set button is held longer than one second go back to the beginning case 0 above InandOut = 0; digitalWrite(RedLED, LOW); digitalWrite(GreenLED, LOW); digitalWrite(blueLED, HIGH); delay(1000); break; } } // PanX - Pan movement XPos PanPos = analogRead(PanX); // if Pan Pot is moved left, move stepper 2 pan anticlockwise if (PanPos > 600) { //stepper2.setSpeed(currentSpeed); PanPos = map(PanPos, 600, 1024, 0, 200); stepper2.setSpeed(PanPos); // Increase speed } // if PanPot is moved right, move stepper 2 pan clockwise else if (PanPos < 400) { //stepper2.setSpeed(-currentSpeed); PanPos = map(PanPos, 400, 0, 0, 200); stepper2.setSpeed(-PanPos); // Increase speed } // if PanPot is centred then there is no movement else { stepper2.setSpeed(0); } //Tilt Y - Tilt movement TiltYPos = analogRead(TiltY); if (TiltYPos > 600) { //stepper3.setSpeed(currentSpeed); TiltYPos = map(TiltYPos, 600, 1024, 0, 200); stepper3.setSpeed(TiltYPos); // Increase speed } else if (TiltYPos < 400) { //stepper3.setSpeed(-currentSpeed); TiltYPos = map(TiltYPos, 400, 0, 0, 200); // Try changing this to lower value to slow tilt stepper stepper3.setSpeed(-TiltYPos); // Increase speed // If TiltPot is centred then there is no movement } else { stepper3.setSpeed(0); } // RAIL potentiometer RailPos = analogRead(Rail); // If potentiometer is turned left then the Gantry moves towards the control unit if (RailPos > 600) { RailPos = map(RailPos, 600, 1024, 0, 3000); stepper1.setSpeed(-RailPos); // Increase speed } // If potentiometer is turned right then the Gantry moves away from the control unit else if (RailPos < 400 ) { RailPos = map(RailPos, 400, 0, 0, 3000); stepper1.setSpeed(RailPos); // Increase speed // If potentiometer is centred then there is no movement } else { stepper1.setSpeed(0); } // run the camera slider stepper1.runSpeed(); stepper2.runSpeed(); stepper3.runSpeed(); }
Hi Mark, this is wonderfully project. So I haven’t got that much idea about code but I try to make one like this. And I got little quick. Is that possible to Use WeMOs D1 board for this. ??? Thank you
Hi, this is nice project, perfectly made. Can you help me with the code? So that I can use it. Can I also get the wiring diagram for all the connections. Thanks in advance.
10 months later are you still using this? I am not new to making things but have been wanting to do a slider for a while this looks awesome and I might try it. Just wondering whether you eventually went to a smaller size? Or whether you still use it regularly
Have been searching for a system like this for years. The site for the code is no longer. Is there a way i could that arduino code? Or am I three years too late?
not there in wayback Eurorack stuff, no arduino slider code.. Perhaps it is my fault for trying to find it. I guess I'll have cancel my shooting gig with ILM tomorrow. They are going to be crushed when they find out no arduino camera slider. George is pretty good at hand held though.
Hey markus, thanks a lot for this video ! I would like to build this slider like you did. Unfortunately your website is closed and i dont think, iam able to write the sketch like you did. Is there a way that you could upload your sketch ? Thanks a lot !
Hi Denis. send me a message on my email markusfuller at hotmail dot com and I will send the sketch back to your email address. best wishes from markus.
Hi William. my workroom no longer exists as an electronics repair room as I’m retiring so a lot of equipment has been passed onto other youtube electronics videomakers . RUclips has been a great journey for me but it has cost such a lot of time and money through cameras equipment and things bought to fix etc and I just cannot make the money back that I have put into it sadly. but it has been great fun and I hope to make some music video’s in the near future with the gear I have here. Thank you for being there :-)
Hey great job.But i see some problems in your MOCO system,and i see it because i make same system a little bit different but overall design is same.So pan and tilt side is not very stable and i see a lot of vibration,the footage are smooth but shaky.And there is no acceleration and de acceleration(from start point and end point). But overall good job
Hello, Could you give me the arduino sketch needed for the following move program: Set speed to ?, Delay for ?secs, Move forward for ?secs, Pause for ?secs, Move forward to end. I dont know the language and cant do it.
Instead of using end stops/switches could you use stepper motors with rotary encoders and count the rotational pulses, mounting the stepper motor/drive units on the gantry thus (apart from the power cables) making it track length independent? (edit maybe I should watch the whole video before commenting?)
Incremental encoder feedback systems still require homing to switches. That is, unless you're proposing to use multi-turn absolute encoders, which are incredibly expensive. Rotary incremental encoders and linear incremental scales are much more affordable but because they are incremental (simple pulse or quadrature) they need to be initialized to a "hard" reference point, else how would they know where they are counting from?
@@sootikins you can mount the end switches on the gantry as well - then set the initial starting point by either manually depressing an end switch or by sliding the gantry to one (or both) track ends and recording the rotational pulses. It would be a more complex system but would allow for track length independence.
@@TheRealSasquatch I agree but I thought we were talking about eliminating the switches completely. All I was saying is that incremental feedback designs need something to tell it positively "you are here".
I'm no programmer, but I solved it by adding a toggle switch and named it "BounceOn" and some goto cases in the switch case... not popular, but it's solving my problem :-) Add the moment I'm only using the Rail-part (1 axis) for placing a Cellphone, but the bounce code should work for all 3 axis. Remember to define the input before setup: #define BounceOn 4 // On = Bounce between A and B position continuously, Off = run to next position And add this in void setup(): pinMode(BounceOn, INPUT_PULLUP); //On = Bounce between A and B position continuously, Off = run to next position The Bounce part of the code comes here: =======Start====================== case 2: // Move to A position / go to next part case 3 caseA: // Loop start, bouncing between A (In) and B (Out) positions InandOut = 3; inOutSpeed = analogRead(inOutPot); // Place the A position into the Array gotoposition[0] = XInPoint; stepper1.setMaxSpeed(inOutSpeed); StepperControl.moveTo(gotoposition); StepperControl.runSpeedToPosition(); if (digitalRead(BounceOn) != 0) { goto caseB; // Goto case B, were bouncing loop starts } else { break; } case 3: // Move to B position and returns / go back to case 2 above caseB: InandOut = 2; inOutSpeed = analogRead(inOutPot); // Place the B position into the Array gotoposition[0] = XOutPoint; stepper1.setMaxSpeed(inOutSpeed); StepperControl.moveTo(gotoposition); StepperControl.runSpeedToPosition(); if (digitalRead(BounceOn) != 0) { goto caseA; // Goto case A, were bouncing loop starts } else { break; } ==========End======================
@@electronical_matrix Arduino camera slider code /* stepper motor Rail Pan Tilt camera controller by Markus Fuller 2020 using 1 Arduino UNO 3x nema17 stepper motors and 3x EasyDrivers from www.schmalzhaus.com Library - AccelStepper by Mike McCauley: www.airspayce.com/mikem/arduino/AccelStepper/index.html */ #include #include #define PanX A0 // Pan X pin #define TiltY A1 // Tilt Y pin #define Rail A2 // Slider potentiometer #define inOutPot A3 // In and Out speed potentiometer #define PanStop 10 // to stop pan cable tangling #define Button 12 // Set Button #define EndStop 11 #define RedLED 8 // RGB Led Red #define GreenLED 9 // RGB Led Green #define blueLED 13 // RGB Led blue // Set stepper motor pins on Arduino as type, Step, and Direction, AccelStepper stepper1(1, 7, 6); AccelStepper stepper2(1, 5, 4); AccelStepper stepper3(1, 3, 2); MultiStepper StepperControl; long gotoposition[3]; // stores the A and B position for every stepper motor int PanPos = 0; int TiltYPos = 0; int RailPos = 0; int currentSpeed = 100; int inOutSpeed = 100; int XInPoint = 0; int YInPoint = 0; int ZInPoint = 0; int XOutPoint = 0; int YOutPoint = 0; int ZOutPoint = 0; int InandOut = 0; void setup() { stepper1.setMaxSpeed(3000); stepper1.setSpeed(300); stepper2.setMaxSpeed(1500); stepper2.setSpeed(75); stepper3.setMaxSpeed(1500); stepper3.setSpeed(75); pinMode(PanStop, INPUT_PULLUP); //faultstop to help prevent pan cable tangling pinMode(Button, INPUT_PULLUP); //setswitch which is also activate button pinMode(EndStop, INPUT_PULLUP); //endstop microswitch pinMode(RedLED, OUTPUT); //red led pinMode(GreenLED, OUTPUT); //green led pinMode(blueLED, OUTPUT); //blue led StepperControl.addStepper(stepper1); StepperControl.addStepper(stepper2); StepperControl.addStepper(stepper3); // Move the slider to the Home position when first turned on while (digitalRead(EndStop) != 0) { stepper1.setSpeed(1500); stepper1.runSpeed(); stepper1.setCurrentPosition(0); // When EndStop is activated this sets position as step 0 } delay(30); // Moves back slightly from the rail endstop while (stepper1.currentPosition() != -1500) { stepper1.setSpeed(-1500); stepper1.run(); // This section below for Pan centre control } // Moves the pan head anticlockwise until microswitch is activated while (digitalRead(PanStop) != 0) { stepper3.setSpeed(-400); stepper3.runSpeed(); stepper3.setCurrentPosition(0); // When Pan is centred set position to 0 steps } delay(30); // Moves pan clockwise untilfacing forward, this may need to be changed depending on how many teeth between stepper and pan wheel while (stepper3.currentPosition() != 1070) { stepper3.setSpeed(400); stepper3.run(); // End of section above digitalWrite(blueLED, HIGH); // blue led turns on } } void loop() { // this will cancel out the rail movement if you try and travel beyond safe limits while (digitalRead(EndStop) == 0 || stepper1.currentPosition() < -40500) {} if (digitalRead (Button) == 0) { delay(1000); // hold switch for 1 second to reset all values then LED turns Blue if (digitalRead (Button) == 0) { InandOut = 4; } switch (InandOut) { case 0: // Set the A position InandOut = 1; XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1 YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2 ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3 digitalWrite(blueLED, LOW); // MSF blue led goes out digitalWrite(RedLED, HIGH); // Light up inLed break; case 1: // Set the B position InandOut = 2; XOutPoint = stepper1.currentPosition(); // Set the B positions for steppers YOutPoint = stepper2.currentPosition(); ZOutPoint = stepper3.currentPosition(); digitalWrite(RedLED, LOW); // red Led goes off then Green Led Illuminates stating ready to run digitalWrite(GreenLED, HIGH); break; case 2: // Move to A position / go to next part case 3 InandOut = 3; inOutSpeed = analogRead(inOutPot); // Place the A position into the Array gotoposition[0] = XInPoint; gotoposition[1] = YInPoint; gotoposition[2] = ZInPoint; stepper1.setMaxSpeed(inOutSpeed); stepper2.setMaxSpeed(inOutSpeed); stepper3.setMaxSpeed(inOutSpeed); StepperControl.moveTo(gotoposition); StepperControl.runSpeedToPosition(); delay(200); break; case 3: // Move to B position and returns go back to case 2 above InandOut = 2; inOutSpeed = analogRead(inOutPot); // Place the B position into the Array gotoposition[0] = XOutPoint; gotoposition[1] = YOutPoint; gotoposition[2] = ZOutPoint; stepper1.setMaxSpeed(inOutSpeed); stepper2.setMaxSpeed(inOutSpeed); stepper3.setMaxSpeed(inOutSpeed); StepperControl.moveTo(gotoposition); StepperControl.runSpeedToPosition(); delay(200); break; case 4: // If Set button is held longer than one second go back to the beginning case 0 above InandOut = 0; digitalWrite(RedLED, LOW); digitalWrite(GreenLED, LOW); digitalWrite(blueLED, HIGH); delay(1000); break; } } // PanX - Pan movement XPos PanPos = analogRead(PanX); // if Pan Pot is moved left, move stepper 2 pan anticlockwise if (PanPos > 600) { //stepper2.setSpeed(currentSpeed); PanPos = map(PanPos, 600, 1024, 0, 200); stepper2.setSpeed(PanPos); // Increase speed } // if PanPot is moved right, move stepper 2 pan clockwise else if (PanPos < 400) { //stepper2.setSpeed(-currentSpeed); PanPos = map(PanPos, 400, 0, 0, 200); stepper2.setSpeed(-PanPos); // Increase speed } // if PanPot is centred then there is no movement else { stepper2.setSpeed(0); } //Tilt Y - Tilt movement TiltYPos = analogRead(TiltY); if (TiltYPos > 600) { //stepper3.setSpeed(currentSpeed); TiltYPos = map(TiltYPos, 600, 1024, 0, 200); stepper3.setSpeed(TiltYPos); // Increase speed } else if (TiltYPos < 400) { //stepper3.setSpeed(-currentSpeed); TiltYPos = map(TiltYPos, 400, 0, 0, 200); // Try changing this to lower value to slow tilt stepper stepper3.setSpeed(-TiltYPos); // Increase speed // If TiltPot is centred then there is no movement } else { stepper3.setSpeed(0); } // RAIL potentiometer RailPos = analogRead(Rail); // If potentiometer is turned left then the Gantry moves towards the control unit if (RailPos > 600) { RailPos = map(RailPos, 600, 1024, 0, 3000); stepper1.setSpeed(-RailPos); // Increase speed } // If potentiometer is turned right then the Gantry moves away from the control unit else if (RailPos < 400 ) { RailPos = map(RailPos, 400, 0, 0, 3000); stepper1.setSpeed(RailPos); // Increase speed // If potentiometer is centred then there is no movement } else { stepper1.setSpeed(0); } // run the camera slider stepper1.runSpeed(); stepper2.runSpeed(); stepper3.runSpeed(); }
Can't email you because your email isn't listed anywhere as far as I can tell. Would love to see your code. Been trying to figure out A to B with 3 motors at different speeds but starting and ending at the same time. Been difficult finding documentation that explains how to do this. @@markusfuller
@@DorfyBoi Arduino camera slider code /* stepper motor Rail Pan Tilt camera controller by Markus Fuller 2020 using 1 Arduino UNO 3x nema17 stepper motors and 3x EasyDrivers from www.schmalzhaus.com Library - AccelStepper by Mike McCauley: www.airspayce.com/mikem/arduino/AccelStepper/index.html */ #include #include #define PanX A0 // Pan X pin #define TiltY A1 // Tilt Y pin #define Rail A2 // Slider potentiometer #define inOutPot A3 // In and Out speed potentiometer #define PanStop 10 // to stop pan cable tangling #define Button 12 // Set Button #define EndStop 11 #define RedLED 8 // RGB Led Red #define GreenLED 9 // RGB Led Green #define blueLED 13 // RGB Led blue // Set stepper motor pins on Arduino as type, Step, and Direction, AccelStepper stepper1(1, 7, 6); AccelStepper stepper2(1, 5, 4); AccelStepper stepper3(1, 3, 2); MultiStepper StepperControl; long gotoposition[3]; // stores the A and B position for every stepper motor int PanPos = 0; int TiltYPos = 0; int RailPos = 0; int currentSpeed = 100; int inOutSpeed = 100; int XInPoint = 0; int YInPoint = 0; int ZInPoint = 0; int XOutPoint = 0; int YOutPoint = 0; int ZOutPoint = 0; int InandOut = 0; void setup() { stepper1.setMaxSpeed(3000); stepper1.setSpeed(300); stepper2.setMaxSpeed(1500); stepper2.setSpeed(75); stepper3.setMaxSpeed(1500); stepper3.setSpeed(75); pinMode(PanStop, INPUT_PULLUP); //faultstop to help prevent pan cable tangling pinMode(Button, INPUT_PULLUP); //setswitch which is also activate button pinMode(EndStop, INPUT_PULLUP); //endstop microswitch pinMode(RedLED, OUTPUT); //red led pinMode(GreenLED, OUTPUT); //green led pinMode(blueLED, OUTPUT); //blue led StepperControl.addStepper(stepper1); StepperControl.addStepper(stepper2); StepperControl.addStepper(stepper3); // Move the slider to the Home position when first turned on while (digitalRead(EndStop) != 0) { stepper1.setSpeed(1500); stepper1.runSpeed(); stepper1.setCurrentPosition(0); // When EndStop is activated this sets position as step 0 } delay(30); // Moves back slightly from the rail endstop while (stepper1.currentPosition() != -1500) { stepper1.setSpeed(-1500); stepper1.run(); // This section below for Pan centre control } // Moves the pan head anticlockwise until microswitch is activated while (digitalRead(PanStop) != 0) { stepper3.setSpeed(-400); stepper3.runSpeed(); stepper3.setCurrentPosition(0); // When Pan is centred set position to 0 steps } delay(30); // Moves pan clockwise untilfacing forward, this may need to be changed depending on how many teeth between stepper and pan wheel while (stepper3.currentPosition() != 1070) { stepper3.setSpeed(400); stepper3.run(); // End of section above digitalWrite(blueLED, HIGH); // blue led turns on } } void loop() { // this will cancel out the rail movement if you try and travel beyond safe limits while (digitalRead(EndStop) == 0 || stepper1.currentPosition() < -40500) {} if (digitalRead (Button) == 0) { delay(1000); // hold switch for 1 second to reset all values then LED turns Blue if (digitalRead (Button) == 0) { InandOut = 4; } switch (InandOut) { case 0: // Set the A position InandOut = 1; XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1 YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2 ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3 digitalWrite(blueLED, LOW); // MSF blue led goes out digitalWrite(RedLED, HIGH); // Light up inLed break; case 1: // Set the B position InandOut = 2; XOutPoint = stepper1.currentPosition(); // Set the B positions for steppers YOutPoint = stepper2.currentPosition(); ZOutPoint = stepper3.currentPosition(); digitalWrite(RedLED, LOW); // red Led goes off then Green Led Illuminates stating ready to run digitalWrite(GreenLED, HIGH); break; case 2: // Move to A position / go to next part case 3 InandOut = 3; inOutSpeed = analogRead(inOutPot); // Place the A position into the Array gotoposition[0] = XInPoint; gotoposition[1] = YInPoint; gotoposition[2] = ZInPoint; stepper1.setMaxSpeed(inOutSpeed); stepper2.setMaxSpeed(inOutSpeed); stepper3.setMaxSpeed(inOutSpeed); StepperControl.moveTo(gotoposition); StepperControl.runSpeedToPosition(); delay(200); break; case 3: // Move to B position and returns go back to case 2 above InandOut = 2; inOutSpeed = analogRead(inOutPot); // Place the B position into the Array gotoposition[0] = XOutPoint; gotoposition[1] = YOutPoint; gotoposition[2] = ZOutPoint; stepper1.setMaxSpeed(inOutSpeed); stepper2.setMaxSpeed(inOutSpeed); stepper3.setMaxSpeed(inOutSpeed); StepperControl.moveTo(gotoposition); StepperControl.runSpeedToPosition(); delay(200); break; case 4: // If Set button is held longer than one second go back to the beginning case 0 above InandOut = 0; digitalWrite(RedLED, LOW); digitalWrite(GreenLED, LOW); digitalWrite(blueLED, HIGH); delay(1000); break; } } // PanX - Pan movement XPos PanPos = analogRead(PanX); // if Pan Pot is moved left, move stepper 2 pan anticlockwise if (PanPos > 600) { //stepper2.setSpeed(currentSpeed); PanPos = map(PanPos, 600, 1024, 0, 200); stepper2.setSpeed(PanPos); // Increase speed } // if PanPot is moved right, move stepper 2 pan clockwise else if (PanPos < 400) { //stepper2.setSpeed(-currentSpeed); PanPos = map(PanPos, 400, 0, 0, 200); stepper2.setSpeed(-PanPos); // Increase speed } // if PanPot is centred then there is no movement else { stepper2.setSpeed(0); } //Tilt Y - Tilt movement TiltYPos = analogRead(TiltY); if (TiltYPos > 600) { //stepper3.setSpeed(currentSpeed); TiltYPos = map(TiltYPos, 600, 1024, 0, 200); stepper3.setSpeed(TiltYPos); // Increase speed } else if (TiltYPos < 400) { //stepper3.setSpeed(-currentSpeed); TiltYPos = map(TiltYPos, 400, 0, 0, 200); // Try changing this to lower value to slow tilt stepper stepper3.setSpeed(-TiltYPos); // Increase speed // If TiltPot is centred then there is no movement } else { stepper3.setSpeed(0); } // RAIL potentiometer RailPos = analogRead(Rail); // If potentiometer is turned left then the Gantry moves towards the control unit if (RailPos > 600) { RailPos = map(RailPos, 600, 1024, 0, 3000); stepper1.setSpeed(-RailPos); // Increase speed } // If potentiometer is turned right then the Gantry moves away from the control unit else if (RailPos < 400 ) { RailPos = map(RailPos, 400, 0, 0, 3000); stepper1.setSpeed(RailPos); // Increase speed // If potentiometer is centred then there is no movement } else { stepper1.setSpeed(0); } // run the camera slider stepper1.runSpeed(); stepper2.runSpeed(); stepper3.runSpeed(); }
Hey Marcus! I just discovered your channel and am bummed that you're retiring(but you definitely deserve it :p ), but saw that you had donated alot of stuff to other electronics RUclipsrs. I was wondering if you could point me towards them? I'm teaching myself everything electronics and repairing of synths and would love the referrals. Thanks for all the awesome content! Take care.
Hi Nick. theres so many great youtubers that i follow . Adamski.A has been making a great journey of designing and building a synthesizer. look mum no computer makes some really quirky and interesting synths. alex ball jas great knowledge of synths and does some great history films about certain synths. i could go on and on. theres so many.
@@markusfuller Look mum no computer is one of my faves! RUclips probably recommended me your channel based on me frequenting his channel now that I think of it, actually! I'll look into the other two you've suggested and let the algorithm steer me to others from there! Thanks for taking time to reply 😄
Uh oh... Your website is down and it looks like it's been months since you've posted. YOU OKAY SIR? Re-visiting this project and wanted the code, but now I'm worried about you!
Hi Yes I am fine thank you for asking. I still have a copy of the code if you want it. if you email me on markusfuller at hotmail dot com I will send the code over to you. best wishes.
@@mirel_lame Hi the code should be in the description under the video. I will have to try and find the schematics for you but Im not sure how to get each others email through the youtube so i can send things over.
@@markusfuller Quite jealous. I keep meaning to sell off some synths and get one since it will cover a lot of sonic ground. But I vowed to make the Forte my last purchase.
@@markusfuller It's ultimately down to if you like the sound. Personally I feel I've moved on from the "vintage" tone. But the Voyager probably wasn't the best Moog to try I guess.
hi we're a PCB manufacturer, can you pls put our video and website link on your youtube channel,we can pay you for that,if you're interested,pls leave us your email!
One of the best DIY designed 3 axis camera sliders that I have seen to date.
Thank you very much.
@@markusfuller how can i add lcd if i use arduino mega and lcd like 20x4 or something hire like tft lcd
@@muhammadwaqasfarooq8321 Hello Muhammad . if you add an LCD or TFT display you will have to write new code into your arduino project telling it what you want to display on your device. there are a few interesting videos on youtube by other people where they have used displays with motorised cameras. also have you seen the videos from “Dronebot Workshop” as they have many videos about using motors and displays etc for arduino projects. best wishes
@@muhammadwaqasfarooq8321 i do the same projekt with lcd ST7355. Observe my channel. The movie will be soon.
About a year ago I was thinking about getting one of those small ones of these, but they're so expensive and very small like you said. I thought about making my own, but I'm not really very good with these sort of electronics, and the guides I found weren't good enough for me to follow either, so I just forgot about it. This video makes me want to make my own again. Very well done mate.
You are great man, Love from India...
😊😊😊
A great project to allow photographers to make a remote programmable dolly to take shots that would otherwise need the use of very expensive bits of equipment. The video was easy to follow and is extremely intuitive. Well done.👍🏻
That is a beautiful work of art, and the fact no phone app is required to operate from a phone is all the more cool, good job Markus, can't wait for future videos, I love your channel and have been a fan for many years.
Thank you Kristian.
'All user serviceable parts inside'...
LOVE IT! 😉
nice to see ya back markus!!
Nicely done Marcus. Lots of food for thought there to adjust this to suit my potential applications for this type of unit.
Can't wait to see a teardown of that Moog One. ;-P
Love the phone gag at the end.
Brilliant and plenty of food for thought. You are very generous with your ideas. Hope to see you back with some more videos soon.
Wow, this is called a real tutorial... Most videos available they won't even explain how their code gonna work... Good job...👍👍 38:03 lol..😂
Wow home made?
That is one pro looking slider. Nice work.
Thanks Adam. all the arduino code etc is on my website if ever you want to make one.
Thanks for sharing your work in such a detail. I'm mentally preparing myself for this kind of project and this helped a lot 👍🏻
Your website isn’t up any more. Is the code on another web site?
Arduino camera slider code
/*
stepper motor Rail Pan Tilt camera controller
by Markus Fuller 2020
using 1 Arduino UNO 3x nema17 stepper motors and 3x EasyDrivers from www.schmalzhaus.com
Library - AccelStepper by Mike McCauley:
www.airspayce.com/mikem/arduino/AccelStepper/index.html
*/
#include
#include
#define PanX A0 // Pan X pin
#define TiltY A1 // Tilt Y pin
#define Rail A2 // Slider potentiometer
#define inOutPot A3 // In and Out speed potentiometer
#define PanStop 10 // to stop pan cable tangling
#define Button 12 // Set Button
#define EndStop 11
#define RedLED 8 // RGB Led Red
#define GreenLED 9 // RGB Led Green
#define blueLED 13 // RGB Led blue
// Set stepper motor pins on Arduino as type, Step, and Direction,
AccelStepper stepper1(1, 7, 6);
AccelStepper stepper2(1, 5, 4);
AccelStepper stepper3(1, 3, 2);
MultiStepper StepperControl;
long gotoposition[3]; // stores the A and B position for every stepper motor
int PanPos = 0;
int TiltYPos = 0;
int RailPos = 0;
int currentSpeed = 100;
int inOutSpeed = 100;
int XInPoint = 0;
int YInPoint = 0;
int ZInPoint = 0;
int XOutPoint = 0;
int YOutPoint = 0;
int ZOutPoint = 0;
int InandOut = 0;
void setup() {
stepper1.setMaxSpeed(3000);
stepper1.setSpeed(300);
stepper2.setMaxSpeed(1500);
stepper2.setSpeed(75);
stepper3.setMaxSpeed(1500);
stepper3.setSpeed(75);
pinMode(PanStop, INPUT_PULLUP); //faultstop to help prevent pan cable tangling
pinMode(Button, INPUT_PULLUP); //setswitch which is also activate button
pinMode(EndStop, INPUT_PULLUP); //endstop microswitch
pinMode(RedLED, OUTPUT); //red led
pinMode(GreenLED, OUTPUT); //green led
pinMode(blueLED, OUTPUT); //blue led
StepperControl.addStepper(stepper1);
StepperControl.addStepper(stepper2);
StepperControl.addStepper(stepper3);
// Move the slider to the Home position when first turned on
while (digitalRead(EndStop) != 0) {
stepper1.setSpeed(1500);
stepper1.runSpeed();
stepper1.setCurrentPosition(0); // When EndStop is activated this sets position as step 0
}
delay(30);
// Moves back slightly from the rail endstop
while (stepper1.currentPosition() != -1500) {
stepper1.setSpeed(-1500);
stepper1.run();
// This section below for Pan centre control
}
// Moves the pan head anticlockwise until microswitch is activated
while (digitalRead(PanStop) != 0) {
stepper3.setSpeed(-400);
stepper3.runSpeed();
stepper3.setCurrentPosition(0); // When Pan is centred set position to 0 steps
}
delay(30);
// Moves pan clockwise untilfacing forward, this may need to be changed depending on how many teeth between stepper and pan wheel
while (stepper3.currentPosition() != 1070) {
stepper3.setSpeed(400);
stepper3.run();
// End of section above
digitalWrite(blueLED, HIGH); // blue led turns on
}
}
void loop() {
// this will cancel out the rail movement if you try and travel beyond safe limits
while (digitalRead(EndStop) == 0 || stepper1.currentPosition() < -40500) {}
if (digitalRead (Button) == 0) {
delay(1000); // hold switch for 1 second to reset all values then LED turns Blue
if (digitalRead (Button) == 0) {
InandOut = 4;
}
switch (InandOut) {
case 0: // Set the A position
InandOut = 1;
XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1
YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2
ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3
digitalWrite(blueLED, LOW); // MSF blue led goes out
digitalWrite(RedLED, HIGH); // Light up inLed
break;
case 1: // Set the B position
InandOut = 2;
XOutPoint = stepper1.currentPosition(); // Set the B positions for steppers
YOutPoint = stepper2.currentPosition();
ZOutPoint = stepper3.currentPosition();
digitalWrite(RedLED, LOW); // red Led goes off then Green Led Illuminates stating ready to run
digitalWrite(GreenLED, HIGH);
break;
case 2: // Move to A position / go to next part case 3
InandOut = 3;
inOutSpeed = analogRead(inOutPot);
// Place the A position into the Array
gotoposition[0] = XInPoint;
gotoposition[1] = YInPoint;
gotoposition[2] = ZInPoint;
stepper1.setMaxSpeed(inOutSpeed);
stepper2.setMaxSpeed(inOutSpeed);
stepper3.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition);
StepperControl.runSpeedToPosition();
delay(200);
break;
case 3: // Move to B position and returns go back to case 2 above
InandOut = 2;
inOutSpeed = analogRead(inOutPot);
// Place the B position into the Array
gotoposition[0] = XOutPoint;
gotoposition[1] = YOutPoint;
gotoposition[2] = ZOutPoint;
stepper1.setMaxSpeed(inOutSpeed);
stepper2.setMaxSpeed(inOutSpeed);
stepper3.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition);
StepperControl.runSpeedToPosition();
delay(200);
break;
case 4: // If Set button is held longer than one second go back to the beginning case 0 above
InandOut = 0;
digitalWrite(RedLED, LOW);
digitalWrite(GreenLED, LOW);
digitalWrite(blueLED, HIGH);
delay(1000);
break;
}
}
// PanX - Pan movement XPos
PanPos = analogRead(PanX);
// if Pan Pot is moved left, move stepper 2 pan anticlockwise
if (PanPos > 600) {
//stepper2.setSpeed(currentSpeed);
PanPos = map(PanPos, 600, 1024, 0, 200);
stepper2.setSpeed(PanPos); // Increase speed
}
// if PanPot is moved right, move stepper 2 pan clockwise
else if (PanPos < 400) {
//stepper2.setSpeed(-currentSpeed);
PanPos = map(PanPos, 400, 0, 0, 200);
stepper2.setSpeed(-PanPos); // Increase speed
}
// if PanPot is centred then there is no movement
else {
stepper2.setSpeed(0);
}
//Tilt Y - Tilt movement
TiltYPos = analogRead(TiltY);
if (TiltYPos > 600) {
//stepper3.setSpeed(currentSpeed);
TiltYPos = map(TiltYPos, 600, 1024, 0, 200);
stepper3.setSpeed(TiltYPos); // Increase speed
}
else if (TiltYPos < 400) {
//stepper3.setSpeed(-currentSpeed);
TiltYPos = map(TiltYPos, 400, 0, 0, 200); // Try changing this to lower value to slow tilt stepper
stepper3.setSpeed(-TiltYPos); // Increase speed
// If TiltPot is centred then there is no movement
}
else {
stepper3.setSpeed(0);
}
// RAIL potentiometer
RailPos = analogRead(Rail);
// If potentiometer is turned left then the Gantry moves towards the control unit
if (RailPos > 600) {
RailPos = map(RailPos, 600, 1024, 0, 3000);
stepper1.setSpeed(-RailPos); // Increase speed
}
// If potentiometer is turned right then the Gantry moves away from the control unit
else if (RailPos < 400 ) {
RailPos = map(RailPos, 400, 0, 0, 3000);
stepper1.setSpeed(RailPos); // Increase speed
// If potentiometer is centred then there is no movement
}
else {
stepper1.setSpeed(0);
}
// run the camera slider
stepper1.runSpeed();
stepper2.runSpeed();
stepper3.runSpeed();
}
missed your videos Markus :) Stay safe and maybe time for a Moog one video??? :)
5:30 I see what you're getting at there.
Thanks for sharing your work in such a detail. I have read all the comments.
I visited your site where I read the full documentation. But I have this question, is it possible to mount Nik....... coolpix P1000 which weighs almost 1.5 kg. Will your slider be able to handle it.
Great job! An LCD screen would’ve been nice. Maybe for the 2.0 version!
Argh! your website has closed down...mega sad! Does anyone out there still have a copy of the Arduino code?
Nice project. I might give it a go. I would add a slip ring to the Pan so that I could get complete rotation.
Hi Michael. I was going to use one from a ptx camera but could not get it to mount very well. but a slip ring would be great for complete rotation :-)
@@markusfuller Great! Yes, slip rings are an odd animal to mount. I will need to take a closer look at your setup for the pan and see if I can come up with something.
The point A to B with different amounts of steps but starting and ending at same time is somwthing im really struggling with in the code.havent looked at your code yet
I very interesting with your project but i don't know any thing about code and anduino. Can you help me to know how to code and connect these thing together as one ?
Really great build!! :)
Your project is so great, i have no words. I love in it. I do the same project. Thx for the arduino code.
I using in my project the lcd ST7355. On my channel will be the movie soon.
@@electronical_matrix I look forward to seeing your video when you have made it. good luck. 🤞
Another great and informative video! Thanks and I wish you well and good health!
A little trick for manual sliders and video tripods is to use an elastic band to pull it. It gives you a smooth start.
Thats a good Tip Thank you
If there's an opportunity, I would really like to see closeups of how you assembled the mechanical parts from the gantry up to everything below the L brackets that do the rest of the motion. I mean how the parts of vertical shaft bearings, 60T pulley, pan stepper motor etc. are arranged and fastened. Mine is topped off with the 1/4-20 threads for a ball head to pan and that's sufficient for me. I'm trying to improve a kit I bought that is too weak in design and attachments. What I found on your website was the Arduino code but no assembly steps. Thanks.
This is awesome! I'd love to take the design and tweak it for a super long travel, and control from something like an Xbox controller.
Love it, I'm going to build one of these, thank you for the links and the information 👍
So sorry but the footage is not smooth enough (37:25 ).
Congratulations beautiful project. When will you publish the wiring diagram?
Thank you so much
This looks fantastic!
Nicely done, 3 axis and a cool controller-design. I have made mine with separated external controllers, so I can use the pan on a tripod as a single solution... a little more flexibility, but I didn't build a tilt-function. Mhhh....
seperate the pan unnit for use on a tripod. thats a nice idea. 👍
Thanks this video is going to save me lot of time and mony ¡¡¡Thanks!!!
Many thanks.
So how can we interrupt it when we accidentally started the program with really small speed and we don’t want to wait 20 minutes
your website is closed, anywhere i can get it now?
Hi Mark, Great job. Is it possible for you to put schematics of the project and PCB as well? I checked your beautiful website and couldn't find it in the section about XYZ slider.
The best video ever for this kind of projects, please send me the code and the schematic diagram, please.
Arduino camera slider code
/*
stepper motor Rail Pan Tilt camera controller
by Markus Fuller 2020
using 1 Arduino UNO 3x nema17 stepper motors and 3x EasyDrivers from www.schmalzhaus.com
Library - AccelStepper by Mike McCauley:
www.airspayce.com/mikem/arduino/AccelStepper/index.html
*/
#include
#include
#define PanX A0 // Pan X pin
#define TiltY A1 // Tilt Y pin
#define Rail A2 // Slider potentiometer
#define inOutPot A3 // In and Out speed potentiometer
#define PanStop 10 // to stop pan cable tangling
#define Button 12 // Set Button
#define EndStop 11
#define RedLED 8 // RGB Led Red
#define GreenLED 9 // RGB Led Green
#define blueLED 13 // RGB Led blue
// Set stepper motor pins on Arduino as type, Step, and Direction,
AccelStepper stepper1(1, 7, 6);
AccelStepper stepper2(1, 5, 4);
AccelStepper stepper3(1, 3, 2);
MultiStepper StepperControl;
long gotoposition[3]; // stores the A and B position for every stepper motor
int PanPos = 0;
int TiltYPos = 0;
int RailPos = 0;
int currentSpeed = 100;
int inOutSpeed = 100;
int XInPoint = 0;
int YInPoint = 0;
int ZInPoint = 0;
int XOutPoint = 0;
int YOutPoint = 0;
int ZOutPoint = 0;
int InandOut = 0;
void setup() {
stepper1.setMaxSpeed(3000);
stepper1.setSpeed(300);
stepper2.setMaxSpeed(1500);
stepper2.setSpeed(75);
stepper3.setMaxSpeed(1500);
stepper3.setSpeed(75);
pinMode(PanStop, INPUT_PULLUP); //faultstop to help prevent pan cable tangling
pinMode(Button, INPUT_PULLUP); //setswitch which is also activate button
pinMode(EndStop, INPUT_PULLUP); //endstop microswitch
pinMode(RedLED, OUTPUT); //red led
pinMode(GreenLED, OUTPUT); //green led
pinMode(blueLED, OUTPUT); //blue led
StepperControl.addStepper(stepper1);
StepperControl.addStepper(stepper2);
StepperControl.addStepper(stepper3);
// Move the slider to the Home position when first turned on
while (digitalRead(EndStop) != 0) {
stepper1.setSpeed(1500);
stepper1.runSpeed();
stepper1.setCurrentPosition(0); // When EndStop is activated this sets position as step 0
}
delay(30);
// Moves back slightly from the rail endstop
while (stepper1.currentPosition() != -1500) {
stepper1.setSpeed(-1500);
stepper1.run();
// This section below for Pan centre control
}
// Moves the pan head anticlockwise until microswitch is activated
while (digitalRead(PanStop) != 0) {
stepper3.setSpeed(-400);
stepper3.runSpeed();
stepper3.setCurrentPosition(0); // When Pan is centred set position to 0 steps
}
delay(30);
// Moves pan clockwise untilfacing forward, this may need to be changed depending on how many teeth between stepper and pan wheel
while (stepper3.currentPosition() != 1070) {
stepper3.setSpeed(400);
stepper3.run();
// End of section above
digitalWrite(blueLED, HIGH); // blue led turns on
}
}
void loop() {
// this will cancel out the rail movement if you try and travel beyond safe limits
while (digitalRead(EndStop) == 0 || stepper1.currentPosition() < -40500) {}
if (digitalRead (Button) == 0) {
delay(1000); // hold switch for 1 second to reset all values then LED turns Blue
if (digitalRead (Button) == 0) {
InandOut = 4;
}
switch (InandOut) {
case 0: // Set the A position
InandOut = 1;
XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1
YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2
ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3
digitalWrite(blueLED, LOW); // MSF blue led goes out
digitalWrite(RedLED, HIGH); // Light up inLed
break;
case 1: // Set the B position
InandOut = 2;
XOutPoint = stepper1.currentPosition(); // Set the B positions for steppers
YOutPoint = stepper2.currentPosition();
ZOutPoint = stepper3.currentPosition();
digitalWrite(RedLED, LOW); // red Led goes off then Green Led Illuminates stating ready to run
digitalWrite(GreenLED, HIGH);
break;
case 2: // Move to A position / go to next part case 3
InandOut = 3;
inOutSpeed = analogRead(inOutPot);
// Place the A position into the Array
gotoposition[0] = XInPoint;
gotoposition[1] = YInPoint;
gotoposition[2] = ZInPoint;
stepper1.setMaxSpeed(inOutSpeed);
stepper2.setMaxSpeed(inOutSpeed);
stepper3.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition);
StepperControl.runSpeedToPosition();
delay(200);
break;
case 3: // Move to B position and returns go back to case 2 above
InandOut = 2;
inOutSpeed = analogRead(inOutPot);
// Place the B position into the Array
gotoposition[0] = XOutPoint;
gotoposition[1] = YOutPoint;
gotoposition[2] = ZOutPoint;
stepper1.setMaxSpeed(inOutSpeed);
stepper2.setMaxSpeed(inOutSpeed);
stepper3.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition);
StepperControl.runSpeedToPosition();
delay(200);
break;
case 4: // If Set button is held longer than one second go back to the beginning case 0 above
InandOut = 0;
digitalWrite(RedLED, LOW);
digitalWrite(GreenLED, LOW);
digitalWrite(blueLED, HIGH);
delay(1000);
break;
}
}
// PanX - Pan movement XPos
PanPos = analogRead(PanX);
// if Pan Pot is moved left, move stepper 2 pan anticlockwise
if (PanPos > 600) {
//stepper2.setSpeed(currentSpeed);
PanPos = map(PanPos, 600, 1024, 0, 200);
stepper2.setSpeed(PanPos); // Increase speed
}
// if PanPot is moved right, move stepper 2 pan clockwise
else if (PanPos < 400) {
//stepper2.setSpeed(-currentSpeed);
PanPos = map(PanPos, 400, 0, 0, 200);
stepper2.setSpeed(-PanPos); // Increase speed
}
// if PanPot is centred then there is no movement
else {
stepper2.setSpeed(0);
}
//Tilt Y - Tilt movement
TiltYPos = analogRead(TiltY);
if (TiltYPos > 600) {
//stepper3.setSpeed(currentSpeed);
TiltYPos = map(TiltYPos, 600, 1024, 0, 200);
stepper3.setSpeed(TiltYPos); // Increase speed
}
else if (TiltYPos < 400) {
//stepper3.setSpeed(-currentSpeed);
TiltYPos = map(TiltYPos, 400, 0, 0, 200); // Try changing this to lower value to slow tilt stepper
stepper3.setSpeed(-TiltYPos); // Increase speed
// If TiltPot is centred then there is no movement
}
else {
stepper3.setSpeed(0);
}
// RAIL potentiometer
RailPos = analogRead(Rail);
// If potentiometer is turned left then the Gantry moves towards the control unit
if (RailPos > 600) {
RailPos = map(RailPos, 600, 1024, 0, 3000);
stepper1.setSpeed(-RailPos); // Increase speed
}
// If potentiometer is turned right then the Gantry moves away from the control unit
else if (RailPos < 400 ) {
RailPos = map(RailPos, 400, 0, 0, 3000);
stepper1.setSpeed(RailPos); // Increase speed
// If potentiometer is centred then there is no movement
}
else {
stepper1.setSpeed(0);
}
// run the camera slider
stepper1.runSpeed();
stepper2.runSpeed();
stepper3.runSpeed();
}
Hi Mark, this is wonderfully project. So I haven’t got that much idea about code but I try to make one like this. And I got little quick. Is that possible to Use WeMOs D1 board for this. ??? Thank you
Ace.... Curious on how you fixws the toothed belt to the gantry,,, got something similar,, but the space under the gantry is minimal ...
I used a nut and bolt with the belt wrapped around it the cable tied. but yes youare quite right there us very minimal room under there to do this.
@@markusfuller many thanks, think i'll try your method. looked at a small piece of angle, but alas no room
Oh crap I miss you Mark
Moved, have yah?
@@burprobrox9134 No I'm still in the UK. I got that nice cosy Canada hoody years ago :-)
Отличная работа! Только слайдер лишён езды по наклонной плоскости, так чтобы камера стояла по горизонтали...
Hi, this is nice project, perfectly made. Can you help me with the code? So that I can use it.
Can I also get the wiring diagram for all the connections.
Thanks in advance.
10 months later are you still using this? I am not new to making things but have been wanting to do a slider for a while this looks awesome and I might try it. Just wondering whether you eventually went to a smaller size? Or whether you still use it regularly
Have been searching for a system like this for years. The site for the code is no longer. Is there a way i could that arduino code? Or am I three years too late?
not there in wayback Eurorack stuff, no arduino slider code.. Perhaps it is my fault for trying to find it. I guess I'll have cancel my shooting gig with ILM tomorrow. They are going to be crushed when they find out no arduino camera slider. George is pretty good at hand held though.
Hi Its great but i couldn't found valu of Potentiometer
Hello Sujit. I think I used 10K potentiometers in this project.
Hey markus, thanks a lot for this video ! I would like to build this slider like you did. Unfortunately your website is closed and i dont think, iam able to write the sketch like you did. Is there a way that you could upload your sketch ? Thanks a lot !
Hi Denis. send me a message on my email markusfuller at hotmail dot com and I will send the sketch back to your email address. best wishes from markus.
Markus where are you these days. I miss your channel
Hi William. my workroom no longer exists as an electronics repair room as I’m retiring so a lot of equipment has been passed onto other youtube electronics videomakers . RUclips has been a great journey for me but it has cost such a lot of time and money through cameras equipment and things bought to fix etc and I just cannot make the money back that I have put into it sadly. but it has been great fun and I hope to make some music video’s in the near future with the gear I have here. Thank you for being there :-)
Hey great job.But i see some problems in your MOCO system,and i see it because i make same system a little bit different but overall design is same.So pan and tilt side is not very stable and i see a lot of vibration,the footage are smooth but shaky.And there is no acceleration and de acceleration(from start point and end point). But overall good job
you save my day Man...🙏👍👍
Hello, Could you give me the arduino sketch needed for the following move program:
Set speed to ?, Delay for ?secs, Move forward for ?secs, Pause for ?secs, Move forward to end.
I dont know the language and cant do it.
Hello the complete sketch is on my website under completed projects. markusfuller.com/completed-projects
Instead of using end stops/switches could you use stepper motors with rotary encoders and count the rotational pulses, mounting the stepper motor/drive units on the gantry thus (apart from the power cables) making it track length independent? (edit maybe I should watch the whole video before commenting?)
Incremental encoder feedback systems still require homing to switches. That is, unless you're proposing to use multi-turn absolute encoders, which are incredibly expensive. Rotary incremental encoders and linear incremental scales are much more affordable but because they are incremental (simple pulse or quadrature) they need to be initialized to a "hard" reference point, else how would they know where they are counting from?
@@sootikins you can mount the end switches on the gantry as well - then set the initial starting point by either manually depressing an end switch or by sliding the gantry to one (or both) track ends and recording the rotational pulses. It would be a more complex system but would allow for track length independence.
@@TheRealSasquatch I agree but I thought we were talking about eliminating the switches completely. All I was saying is that incremental feedback designs need something to tell it positively "you are here".
Absolutely. I just try to think of simple solutions.
Such a great video. Thanks
Is there a way in the code to make it continuously loop between A and B positions?
no but I think it would be easy enough to write it into the code. trouble is im still quite new to arduino programming.
I'm no programmer, but I solved it by adding a toggle switch and named it "BounceOn" and some goto cases in the switch case... not popular, but it's solving my problem :-)
Add the moment I'm only using the Rail-part (1 axis) for placing a Cellphone, but the bounce code should work for all 3 axis.
Remember to define the input before setup:
#define BounceOn 4 // On = Bounce between A and B position continuously, Off = run to next position
And add this in void setup():
pinMode(BounceOn, INPUT_PULLUP); //On = Bounce between A and B position continuously, Off = run to next position
The Bounce part of the code comes here:
=======Start======================
case 2: // Move to A position / go to next part case 3
caseA: // Loop start, bouncing between A (In) and B (Out) positions
InandOut = 3;
inOutSpeed = analogRead(inOutPot);
// Place the A position into the Array
gotoposition[0] = XInPoint;
stepper1.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition);
StepperControl.runSpeedToPosition();
if (digitalRead(BounceOn) != 0)
{
goto caseB; // Goto case B, were bouncing loop starts
}
else
{
break;
}
case 3: // Move to B position and returns / go back to case 2 above
caseB:
InandOut = 2;
inOutSpeed = analogRead(inOutPot);
// Place the B position into the Array
gotoposition[0] = XOutPoint;
stepper1.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition);
StepperControl.runSpeedToPosition();
if (digitalRead(BounceOn) != 0)
{
goto caseA; // Goto case A, were bouncing loop starts
}
else
{
break;
}
==========End======================
Hi. When is the new video coming up? I'm waiting.
6:07 - i can't see. I want to read and analyze your arduino code. Can you share me your arduino code?
@@electronical_matrix Arduino camera slider code
/*
stepper motor Rail Pan Tilt camera controller
by Markus Fuller 2020
using 1 Arduino UNO 3x nema17 stepper motors and 3x EasyDrivers from www.schmalzhaus.com
Library - AccelStepper by Mike McCauley:
www.airspayce.com/mikem/arduino/AccelStepper/index.html
*/
#include
#include
#define PanX A0 // Pan X pin
#define TiltY A1 // Tilt Y pin
#define Rail A2 // Slider potentiometer
#define inOutPot A3 // In and Out speed potentiometer
#define PanStop 10 // to stop pan cable tangling
#define Button 12 // Set Button
#define EndStop 11
#define RedLED 8 // RGB Led Red
#define GreenLED 9 // RGB Led Green
#define blueLED 13 // RGB Led blue
// Set stepper motor pins on Arduino as type, Step, and Direction,
AccelStepper stepper1(1, 7, 6);
AccelStepper stepper2(1, 5, 4);
AccelStepper stepper3(1, 3, 2);
MultiStepper StepperControl;
long gotoposition[3]; // stores the A and B position for every stepper motor
int PanPos = 0;
int TiltYPos = 0;
int RailPos = 0;
int currentSpeed = 100;
int inOutSpeed = 100;
int XInPoint = 0;
int YInPoint = 0;
int ZInPoint = 0;
int XOutPoint = 0;
int YOutPoint = 0;
int ZOutPoint = 0;
int InandOut = 0;
void setup() {
stepper1.setMaxSpeed(3000);
stepper1.setSpeed(300);
stepper2.setMaxSpeed(1500);
stepper2.setSpeed(75);
stepper3.setMaxSpeed(1500);
stepper3.setSpeed(75);
pinMode(PanStop, INPUT_PULLUP); //faultstop to help prevent pan cable tangling
pinMode(Button, INPUT_PULLUP); //setswitch which is also activate button
pinMode(EndStop, INPUT_PULLUP); //endstop microswitch
pinMode(RedLED, OUTPUT); //red led
pinMode(GreenLED, OUTPUT); //green led
pinMode(blueLED, OUTPUT); //blue led
StepperControl.addStepper(stepper1);
StepperControl.addStepper(stepper2);
StepperControl.addStepper(stepper3);
// Move the slider to the Home position when first turned on
while (digitalRead(EndStop) != 0) {
stepper1.setSpeed(1500);
stepper1.runSpeed();
stepper1.setCurrentPosition(0); // When EndStop is activated this sets position as step 0
}
delay(30);
// Moves back slightly from the rail endstop
while (stepper1.currentPosition() != -1500) {
stepper1.setSpeed(-1500);
stepper1.run();
// This section below for Pan centre control
}
// Moves the pan head anticlockwise until microswitch is activated
while (digitalRead(PanStop) != 0) {
stepper3.setSpeed(-400);
stepper3.runSpeed();
stepper3.setCurrentPosition(0); // When Pan is centred set position to 0 steps
}
delay(30);
// Moves pan clockwise untilfacing forward, this may need to be changed depending on how many teeth between stepper and pan wheel
while (stepper3.currentPosition() != 1070) {
stepper3.setSpeed(400);
stepper3.run();
// End of section above
digitalWrite(blueLED, HIGH); // blue led turns on
}
}
void loop() {
// this will cancel out the rail movement if you try and travel beyond safe limits
while (digitalRead(EndStop) == 0 || stepper1.currentPosition() < -40500) {}
if (digitalRead (Button) == 0) {
delay(1000); // hold switch for 1 second to reset all values then LED turns Blue
if (digitalRead (Button) == 0) {
InandOut = 4;
}
switch (InandOut) {
case 0: // Set the A position
InandOut = 1;
XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1
YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2
ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3
digitalWrite(blueLED, LOW); // MSF blue led goes out
digitalWrite(RedLED, HIGH); // Light up inLed
break;
case 1: // Set the B position
InandOut = 2;
XOutPoint = stepper1.currentPosition(); // Set the B positions for steppers
YOutPoint = stepper2.currentPosition();
ZOutPoint = stepper3.currentPosition();
digitalWrite(RedLED, LOW); // red Led goes off then Green Led Illuminates stating ready to run
digitalWrite(GreenLED, HIGH);
break;
case 2: // Move to A position / go to next part case 3
InandOut = 3;
inOutSpeed = analogRead(inOutPot);
// Place the A position into the Array
gotoposition[0] = XInPoint;
gotoposition[1] = YInPoint;
gotoposition[2] = ZInPoint;
stepper1.setMaxSpeed(inOutSpeed);
stepper2.setMaxSpeed(inOutSpeed);
stepper3.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition);
StepperControl.runSpeedToPosition();
delay(200);
break;
case 3: // Move to B position and returns go back to case 2 above
InandOut = 2;
inOutSpeed = analogRead(inOutPot);
// Place the B position into the Array
gotoposition[0] = XOutPoint;
gotoposition[1] = YOutPoint;
gotoposition[2] = ZOutPoint;
stepper1.setMaxSpeed(inOutSpeed);
stepper2.setMaxSpeed(inOutSpeed);
stepper3.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition);
StepperControl.runSpeedToPosition();
delay(200);
break;
case 4: // If Set button is held longer than one second go back to the beginning case 0 above
InandOut = 0;
digitalWrite(RedLED, LOW);
digitalWrite(GreenLED, LOW);
digitalWrite(blueLED, HIGH);
delay(1000);
break;
}
}
// PanX - Pan movement XPos
PanPos = analogRead(PanX);
// if Pan Pot is moved left, move stepper 2 pan anticlockwise
if (PanPos > 600) {
//stepper2.setSpeed(currentSpeed);
PanPos = map(PanPos, 600, 1024, 0, 200);
stepper2.setSpeed(PanPos); // Increase speed
}
// if PanPot is moved right, move stepper 2 pan clockwise
else if (PanPos < 400) {
//stepper2.setSpeed(-currentSpeed);
PanPos = map(PanPos, 400, 0, 0, 200);
stepper2.setSpeed(-PanPos); // Increase speed
}
// if PanPot is centred then there is no movement
else {
stepper2.setSpeed(0);
}
//Tilt Y - Tilt movement
TiltYPos = analogRead(TiltY);
if (TiltYPos > 600) {
//stepper3.setSpeed(currentSpeed);
TiltYPos = map(TiltYPos, 600, 1024, 0, 200);
stepper3.setSpeed(TiltYPos); // Increase speed
}
else if (TiltYPos < 400) {
//stepper3.setSpeed(-currentSpeed);
TiltYPos = map(TiltYPos, 400, 0, 0, 200); // Try changing this to lower value to slow tilt stepper
stepper3.setSpeed(-TiltYPos); // Increase speed
// If TiltPot is centred then there is no movement
}
else {
stepper3.setSpeed(0);
}
// RAIL potentiometer
RailPos = analogRead(Rail);
// If potentiometer is turned left then the Gantry moves towards the control unit
if (RailPos > 600) {
RailPos = map(RailPos, 600, 1024, 0, 3000);
stepper1.setSpeed(-RailPos); // Increase speed
}
// If potentiometer is turned right then the Gantry moves away from the control unit
else if (RailPos < 400 ) {
RailPos = map(RailPos, 400, 0, 0, 3000);
stepper1.setSpeed(RailPos); // Increase speed
// If potentiometer is centred then there is no movement
}
else {
stepper1.setSpeed(0);
}
// run the camera slider
stepper1.runSpeed();
stepper2.runSpeed();
stepper3.runSpeed();
}
@@markusfuller thank you so much. have you a schematics ?
Hi, where is the code? thanks
Hi ana if you can send me an email message or private message I can send you a link to the code etc. the website no longer exists.
Can't email you because your email isn't listed anywhere as far as I can tell. Would love to see your code. Been trying to figure out A to B with 3 motors at different speeds but starting and ending at the same time. Been difficult finding documentation that explains how to do this. @@markusfuller
@@DorfyBoi Arduino camera slider code
/*
stepper motor Rail Pan Tilt camera controller
by Markus Fuller 2020
using 1 Arduino UNO 3x nema17 stepper motors and 3x EasyDrivers from www.schmalzhaus.com
Library - AccelStepper by Mike McCauley:
www.airspayce.com/mikem/arduino/AccelStepper/index.html
*/
#include
#include
#define PanX A0 // Pan X pin
#define TiltY A1 // Tilt Y pin
#define Rail A2 // Slider potentiometer
#define inOutPot A3 // In and Out speed potentiometer
#define PanStop 10 // to stop pan cable tangling
#define Button 12 // Set Button
#define EndStop 11
#define RedLED 8 // RGB Led Red
#define GreenLED 9 // RGB Led Green
#define blueLED 13 // RGB Led blue
// Set stepper motor pins on Arduino as type, Step, and Direction,
AccelStepper stepper1(1, 7, 6);
AccelStepper stepper2(1, 5, 4);
AccelStepper stepper3(1, 3, 2);
MultiStepper StepperControl;
long gotoposition[3]; // stores the A and B position for every stepper motor
int PanPos = 0;
int TiltYPos = 0;
int RailPos = 0;
int currentSpeed = 100;
int inOutSpeed = 100;
int XInPoint = 0;
int YInPoint = 0;
int ZInPoint = 0;
int XOutPoint = 0;
int YOutPoint = 0;
int ZOutPoint = 0;
int InandOut = 0;
void setup() {
stepper1.setMaxSpeed(3000);
stepper1.setSpeed(300);
stepper2.setMaxSpeed(1500);
stepper2.setSpeed(75);
stepper3.setMaxSpeed(1500);
stepper3.setSpeed(75);
pinMode(PanStop, INPUT_PULLUP); //faultstop to help prevent pan cable tangling
pinMode(Button, INPUT_PULLUP); //setswitch which is also activate button
pinMode(EndStop, INPUT_PULLUP); //endstop microswitch
pinMode(RedLED, OUTPUT); //red led
pinMode(GreenLED, OUTPUT); //green led
pinMode(blueLED, OUTPUT); //blue led
StepperControl.addStepper(stepper1);
StepperControl.addStepper(stepper2);
StepperControl.addStepper(stepper3);
// Move the slider to the Home position when first turned on
while (digitalRead(EndStop) != 0) {
stepper1.setSpeed(1500);
stepper1.runSpeed();
stepper1.setCurrentPosition(0); // When EndStop is activated this sets position as step 0
}
delay(30);
// Moves back slightly from the rail endstop
while (stepper1.currentPosition() != -1500) {
stepper1.setSpeed(-1500);
stepper1.run();
// This section below for Pan centre control
}
// Moves the pan head anticlockwise until microswitch is activated
while (digitalRead(PanStop) != 0) {
stepper3.setSpeed(-400);
stepper3.runSpeed();
stepper3.setCurrentPosition(0); // When Pan is centred set position to 0 steps
}
delay(30);
// Moves pan clockwise untilfacing forward, this may need to be changed depending on how many teeth between stepper and pan wheel
while (stepper3.currentPosition() != 1070) {
stepper3.setSpeed(400);
stepper3.run();
// End of section above
digitalWrite(blueLED, HIGH); // blue led turns on
}
}
void loop() {
// this will cancel out the rail movement if you try and travel beyond safe limits
while (digitalRead(EndStop) == 0 || stepper1.currentPosition() < -40500) {}
if (digitalRead (Button) == 0) {
delay(1000); // hold switch for 1 second to reset all values then LED turns Blue
if (digitalRead (Button) == 0) {
InandOut = 4;
}
switch (InandOut) {
case 0: // Set the A position
InandOut = 1;
XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1
YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2
ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3
digitalWrite(blueLED, LOW); // MSF blue led goes out
digitalWrite(RedLED, HIGH); // Light up inLed
break;
case 1: // Set the B position
InandOut = 2;
XOutPoint = stepper1.currentPosition(); // Set the B positions for steppers
YOutPoint = stepper2.currentPosition();
ZOutPoint = stepper3.currentPosition();
digitalWrite(RedLED, LOW); // red Led goes off then Green Led Illuminates stating ready to run
digitalWrite(GreenLED, HIGH);
break;
case 2: // Move to A position / go to next part case 3
InandOut = 3;
inOutSpeed = analogRead(inOutPot);
// Place the A position into the Array
gotoposition[0] = XInPoint;
gotoposition[1] = YInPoint;
gotoposition[2] = ZInPoint;
stepper1.setMaxSpeed(inOutSpeed);
stepper2.setMaxSpeed(inOutSpeed);
stepper3.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition);
StepperControl.runSpeedToPosition();
delay(200);
break;
case 3: // Move to B position and returns go back to case 2 above
InandOut = 2;
inOutSpeed = analogRead(inOutPot);
// Place the B position into the Array
gotoposition[0] = XOutPoint;
gotoposition[1] = YOutPoint;
gotoposition[2] = ZOutPoint;
stepper1.setMaxSpeed(inOutSpeed);
stepper2.setMaxSpeed(inOutSpeed);
stepper3.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition);
StepperControl.runSpeedToPosition();
delay(200);
break;
case 4: // If Set button is held longer than one second go back to the beginning case 0 above
InandOut = 0;
digitalWrite(RedLED, LOW);
digitalWrite(GreenLED, LOW);
digitalWrite(blueLED, HIGH);
delay(1000);
break;
}
}
// PanX - Pan movement XPos
PanPos = analogRead(PanX);
// if Pan Pot is moved left, move stepper 2 pan anticlockwise
if (PanPos > 600) {
//stepper2.setSpeed(currentSpeed);
PanPos = map(PanPos, 600, 1024, 0, 200);
stepper2.setSpeed(PanPos); // Increase speed
}
// if PanPot is moved right, move stepper 2 pan clockwise
else if (PanPos < 400) {
//stepper2.setSpeed(-currentSpeed);
PanPos = map(PanPos, 400, 0, 0, 200);
stepper2.setSpeed(-PanPos); // Increase speed
}
// if PanPot is centred then there is no movement
else {
stepper2.setSpeed(0);
}
//Tilt Y - Tilt movement
TiltYPos = analogRead(TiltY);
if (TiltYPos > 600) {
//stepper3.setSpeed(currentSpeed);
TiltYPos = map(TiltYPos, 600, 1024, 0, 200);
stepper3.setSpeed(TiltYPos); // Increase speed
}
else if (TiltYPos < 400) {
//stepper3.setSpeed(-currentSpeed);
TiltYPos = map(TiltYPos, 400, 0, 0, 200); // Try changing this to lower value to slow tilt stepper
stepper3.setSpeed(-TiltYPos); // Increase speed
// If TiltPot is centred then there is no movement
}
else {
stepper3.setSpeed(0);
}
// RAIL potentiometer
RailPos = analogRead(Rail);
// If potentiometer is turned left then the Gantry moves towards the control unit
if (RailPos > 600) {
RailPos = map(RailPos, 600, 1024, 0, 3000);
stepper1.setSpeed(-RailPos); // Increase speed
}
// If potentiometer is turned right then the Gantry moves away from the control unit
else if (RailPos < 400 ) {
RailPos = map(RailPos, 400, 0, 0, 3000);
stepper1.setSpeed(RailPos); // Increase speed
// If potentiometer is centred then there is no movement
}
else {
stepper1.setSpeed(0);
}
// run the camera slider
stepper1.runSpeed();
stepper2.runSpeed();
stepper3.runSpeed();
}
Anyone else have the issue of all lights/switches working as expected but the motors just don't fire up?
....and he has a Quantum haphazzardly sitting against the wall like a Casio bahahahaha - fantastic!
Hey Marcus! I just discovered your channel and am bummed that you're retiring(but you definitely deserve it :p ), but saw that you had donated alot of stuff to other electronics RUclipsrs. I was wondering if you could point me towards them? I'm teaching myself everything electronics and repairing of synths and would love the referrals. Thanks for all the awesome content! Take care.
Hi Nick. theres so many great youtubers that i follow . Adamski.A has been making a great journey of designing and building a synthesizer. look mum no computer makes some really quirky and interesting synths. alex ball jas great knowledge of synths and does some great history films about certain synths. i could go on and on. theres so many.
@@markusfuller Look mum no computer is one of my faves! RUclips probably recommended me your channel based on me frequenting his channel now that I think of it, actually! I'll look into the other two you've suggested and let the algorithm steer me to others from there! Thanks for taking time to reply 😄
I looked at your website, but I didn't find the code..:-(
Not really sure where too look
markusfuller.com/completed-projects
Hanzhen harmonic drive gear ,
strain wave reducer,
robot joint, over 30 years experience
Nice Fantom!
hello, awesome channel, i have been watching for 3 hours straight! subbed as i would also like the code to build too please. thanks, great concept
All good. All good?
you missed the code
Uh oh...
Your website is down and it looks like it's been months since you've posted.
YOU OKAY SIR?
Re-visiting this project and wanted the code, but now I'm worried about you!
Hi Yes I am fine thank you for asking. I still have a copy of the code if you want it. if you email me on markusfuller at hotmail dot com I will send the code over to you. best wishes.
Great! Thank you!
Can I retchrospectivly us the Amazon affiliate link. I f a pricey speaker last night. Would like you get the splash back 😉 i mean cash back
Hi! Can I have the code & schematics, plz?
@@mirel_lame Hi the code should be in the description under the video. I will have to try and find the schematics for you but Im not sure how to get each others email through the youtube so i can send things over.
Pretty neat :) is the code for this available somewhere?
Hi yes its on my website markusfuller.com nest wishes :-)
you have a funny accent for a Canadian
very nice
Very very cool! Also, you got a moog one?!
Looks more like a Waldorf Quantum to me? the synth leaning up against the wall. Ah there is it later in the video :)
Yes I sold off a lot of my gear to buy that moog one. not sure I did the right thing but I have more room in the house now.
@@6581punk The Quantum is just on loan
@@markusfuller Quite jealous. I keep meaning to sell off some synths and get one since it will cover a lot of sonic ground. But I vowed to make the Forte my last purchase.
@@markusfuller It's ultimately down to if you like the sound. Personally I feel I've moved on from the "vintage" tone. But the Voyager probably wasn't the best Moog to try I guess.
Standard camera fitting is 1/4 inch whitworth.
Standard camera fitting is 1/4 inch UNC.
Whitworth is 55 degrees thread angle, UNC is 60, a Whitworth will usually fit, but it's a UNC thread.
1.5 meters in English money is surprisingly 1.5meters
Waldorf Quantum standing up in the corner heretic!
QaQ Qap
hi we're a PCB manufacturer, can you pls put our video and website link on your youtube channel,we can pay you for that,if you're interested,pls leave us your email!