Hi,
I am working on my art installation, which is driven by two steppers and an arduino uno.
As well there is a button and a switch for homing the motors.
The construction controls a magnetwheel, which moves downwards and upwards.
Attached you will find a picture, the final code and the schematic with the electronics.
I think there I produced a mistake.
Now the problem is, that there is no more electricity at all on the steppers. I think I connected these wrong on the breadboard or with the arduino. Also I destroyed 4 tmc2208 drivers, I think with to much electrictiy from the power supply.
Could anybody help me to solve this problem and maby writing the code a bit more effective.
Thanks in Advance
Chris
#include "AccelStepper.h"
#include <ezButton.h>
ezButton button(10); // create ezButton object that attach to pin 7;
// AccelStepper Setup
AccelStepper stepper1(1, 2, 5);
AccelStepper stepper2(1, 3, 6);
// Define the Pins used
#define home_switch 9 // Pin 9 connected to Home Switch (MicroSwitch)
// Stepper Travel Variables
long TravelX; // Used to store the X value entered in the Serial Monitor
int move_finished=1; // Used to check if move is completed
long initial_homing=-1; // Used to Home Stepper at startup
void setup() {
button.setDebounceTime(50); // set debounce time to 50 milliseconds
Serial.begin(9600); // Start the Serial monitor with speed of 9600 Bauds
pinMode(home_switch, INPUT_PULLUP);
delay(5); // Wait for EasyDriver wake up
// Set Max Speed and Acceleration of each Steppers at startup for homing
stepper1.setMaxSpeed(200.0); // Set Max Speed of Stepper (Slower to get better accuracy)
stepper1.setAcceleration(200.0); // Set Acceleration of Stepper
stepper2.setMaxSpeed(200.0);
stepper2.setAcceleration(200.0);
// Start Homing procedure of Stepper Motor at startup
Serial.print("Stepper is Homing . . . . . . . . . . . ");
while (digitalRead(home_switch)) { // Make the Stepper move CCW until the switch is activated
stepper1.moveTo(initial_homing); // Set the position to move to
stepper2.moveTo(initial_homing);
initial_homing--; // Decrease by 1 for next move if needed
stepper1.run();
stepper2.run(); // Start moving the stepper
delay(5);
}
stepper1.setCurrentPosition(0); // Set the current position as zero for now
stepper1.setMaxSpeed(200.0); // Set Max Speed of Stepper (Slower to get better accuracy)
stepper1.setAcceleration(200.0); // Set Acceleration of Stepper
initial_homing=1;
stepper2.setCurrentPosition(0); // Set the current position as zero for now
stepper2.setMaxSpeed(200.0); // Set Max Speed of Stepper (Slower to get better accuracy)
stepper2.setAcceleration(200.0); // Set Acceleration of Stepper
initial_homing=1;
while (!digitalRead(home_switch)) { // Make the Stepper move CW until the switch is deactivated
stepper1.moveTo(initial_homing);
stepper2.moveTo(initial_homing);
stepper1.run();
stepper2.run();
initial_homing++;
delay(5);
}
stepper1.setCurrentPosition(0);
stepper2.setCurrentPosition(0);
Serial.println("Homing Completed");
Serial.println("");
// Print out Instructions on the Serial Monitor at Start
Serial.println("Enter Travel distance (Positive for CW / Negative for CCW and Zero for back to Home): ");
}
void loop() {
button.loop();
if (button.isPressed()) {action();}
}
void action() {
stepper1.setMaxSpeed(1100); // Set maximum speed value for the stepper //Start mit langsamer Geschwindigkeitserhöhung
stepper1.setAcceleration(700); // Set acceleration value for the stepper
stepper1.setCurrentPosition(0); // Set the current position to 0 steps
stepper2.setMaxSpeed(1100);
stepper2.setAcceleration(700);
stepper2.setCurrentPosition(0);
stepper1.moveTo(10000); // Set desired move: 800 steps (in quater-step resolution that's one rotation)
// Moves the motor to target position w/ acceleration/ deceleration and it blocks until is in position
stepper2.moveTo(10000);
while (stepper1.currentPosition() != 10000 || stepper2.currentPosition() != 10000) {
stepper1.run(); // Move or step the motor implementing accelerations and decelerations to achieve the target position. Non-blocking function
stepper2.run();
//
//
}
delay (2000); // Stop vor erstem Kontakt mit Figur
stepper1.setMaxSpeed(1100); // Set maximum speed value for the stepper //Start mit langsamer Geschwindigkeitserhöhung
stepper1.setAcceleration(8000); // Set acceleration value for the stepper
stepper2.setMaxSpeed(1100);
stepper2.setAcceleration(8000);
stepper1.moveTo(22200); // andocken an das Magnet
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (1000);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23000);
stepper2.moveTo(23000);
while (stepper1.currentPosition() != 23000 || stepper2.currentPosition() != 23000) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23000);
stepper2.moveTo(23000);
while (stepper1.currentPosition() != 23000 || stepper2.currentPosition() != 23000) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23000);
stepper2.moveTo(23000);
while (stepper1.currentPosition() != 23000 || stepper2.currentPosition() != 23000) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23000);
stepper2.moveTo(23000);
while (stepper1.currentPosition() != 23000 || stepper2.currentPosition() != 23000) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23000);
stepper2.moveTo(23000);
while (stepper1.currentPosition() != 23000 || stepper2.currentPosition() != 23000) {
stepper1.run();
stepper2.run();
//
//
}
delay (500);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23000);
stepper2.moveTo(23000);
while (stepper1.currentPosition() != 23000 || stepper2.currentPosition() != 23000) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23000);
stepper2.moveTo(23000);
while (stepper1.currentPosition() != 23000 || stepper2.currentPosition() != 23000) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23000);
stepper2.moveTo(23000);
while (stepper1.currentPosition() != 23000 || stepper2.currentPosition() != 23000) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23000);
stepper2.moveTo(23000);
while (stepper1.currentPosition() != 23000 || stepper2.currentPosition() != 23000) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
// Wechsel auf 2. Magnet
delay (2000);
stepper1.setMaxSpeed(1300); // Set maximum speed value for the stepper //Start mit langsamer Geschwindigkeitserhöhung
stepper1.setAcceleration(10000); // Set acceleration value for the stepper
stepper2.setMaxSpeed(1300);
stepper2.setAcceleration(10000);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22600);
stepper2.moveTo(22600);
while (stepper1.currentPosition() != 22600 || stepper2.currentPosition() != 22600) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22600);
stepper2.moveTo(22600);
while (stepper1.currentPosition() != 22600 || stepper2.currentPosition() != 22600) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22600);
stepper2.moveTo(22600);
while (stepper1.currentPosition() != 22600 || stepper2.currentPosition() != 22600) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22600);
stepper2.moveTo(22600);
while (stepper1.currentPosition() != 22600 || stepper2.currentPosition() != 22600) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22600);
stepper2.moveTo(22600);
while (stepper1.currentPosition() != 22600 || stepper2.currentPosition() != 22600) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22600);
stepper2.moveTo(22600);
while (stepper1.currentPosition() != 22600 || stepper2.currentPosition() != 22600) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22600);
stepper2.moveTo(22600);
while (stepper1.currentPosition() != 22600 || stepper2.currentPosition() != 22600) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(18000);
stepper2.moveTo(18000);
while (stepper1.currentPosition() != 18000 || stepper2.currentPosition() != 18000) {
stepper1.run();
stepper2.run();
//
//
}
delay (2000); //Pause in der Mitte
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (800);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (800);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (800);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (800);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (800);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (600);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (600);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (600);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (600);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (400);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (400);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (400);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (400);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.setMaxSpeed(1400); // Set maximum speed value for the stepper //Start mit langsamer Geschwindigkeitserhöhung
stepper1.setAcceleration(8000); // Set acceleration value for the stepper
stepper2.setMaxSpeed(1400);
stepper2.setAcceleration(8000);
delay (200);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (200);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (200);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (200);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (100);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (50);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (50);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (50);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (50);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (50);
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
delay (50);
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.setMaxSpeed(1500); // Set maximum speed value for the stepper //Start mit langsamer Geschwindigkeitserhöhung
stepper1.setAcceleration(8000); // Set acceleration value for the stepper
stepper2.setMaxSpeed(1500);
stepper2.setAcceleration(8000);
// Ohne Delay
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(22200);
stepper2.moveTo(22200);
while (stepper1.currentPosition() != 22200 || stepper2.currentPosition() != 22200) {
stepper1.run();
stepper2.run();
//
//
}
stepper1.moveTo(23500);
stepper2.moveTo(23500);
while (stepper1.currentPosition() != 23500 || stepper2.currentPosition() != 23500) {
stepper1.run();
stepper2.run();
//
//
}
delay (2000);
stepper1.setMaxSpeed(1000); // Set maximum speed value for the stepper //Start mit langsamer Geschwindigkeitserhöhung
stepper1.setAcceleration(8000); // Set acceleration value for the stepper
stepper2.setMaxSpeed(1000);
stepper2.setAcceleration(8000);
stepper1.moveTo(10000);
stepper2.moveTo(10000);
while (stepper1.currentPosition() != 10000 || stepper2.currentPosition() != 10000) {
stepper1.run();
stepper2.run();
//
//
}
delay (2000);
stepper1.moveTo(0);
stepper2.moveTo(0);
while (stepper1.currentPosition() != 0 || stepper2.currentPosition() != 0) {
stepper1.run(); // Move or step the motor implementing accelerations and decelerations to achieve the target position. Non-blocking function
stepper2.run();
//
//
}
}
Schema_Magnerat.pdf (391,3 KB)



