Zarplotter 4-motor drawing machine

Home Forum Everything Else Zarplotter 4-motor drawing machine

Tagged: 

This topic contains 114 replies, has 14 voices, and was last updated by Avatar cpcoe 5 months ago.

Viewing 25 posts - 26 through 50 (of 115 total)
  • Author
    Posts
  • #13973
    Avatar
    Anonymous

    Hello Dan, I tried applying D1 L1.27323954 command first:

    > adjustPulleyDiameter dia=1.27
    cir=4.00
    SPT=6400.00
    tps*1000=0.63

    But the system is behaving the same way.

    When Sending several times:
    G0 X0
    G0 X1
    G0 X0
    G0 X1

    V stepper releases always the cable and L Stepper doesn’t move. Let’s wait for Rumba board to arrive to see if it works on RUMBA.

    Could the problem be because I’m not using the servo and somehow the code is misusing the steppers?

    Can you send me your configuration files and the firmware config to check all your parameters like board size, etc..? I’m not sure how to define the limits.

    Thanks.

    #13977
    Avatar
    Anonymous

    Hello Dan,

    I received the RUMBA Board and started to test. I have also strange behaviour. V motor always reels out when I send G0 X0 or G0 X5 movement

    #13978
    Dan
    Dan
    Keymaster

    Did my previous suggestion about M102 and M101 help? I don’t remember seeing a reply.

    #13980
    Dan
    Dan
    Keymaster

    Can you send me your configuration files and the firmware config to check all your parameters like board size, etc..? I’m not sure how to define the limits.

    Everything I have is checked into github:

    https://github.com/MarginallyClever/Makelangelo-firmware/tree/dev
    https://github.com/MarginallyClever/Makelangelo-software/tree/dev

    #13981
    Dan
    Dan
    Keymaster

    Have you tried to invert a motor in software (M101) and then jogging it (D1)? I want to check if it reverses direction.

    #13998
    Dan
    Dan
    Keymaster

    I set up my zarplotter with a RAMPs board this morning and ran some tests. I can confirm that the current firmware appears to have a bug that makes one motor turn only in one direction. Thank you, @kukomiguel, for the report.

    I have updated the makelangelo-firmware to clean up the confusion that allowed D0 to work but not G0. now they are the same so that if one doesn’t work, they are both broken.

    I’ve also removed all the firmware inversions. If you want a motor to run the other way, change the physical wiring. This will run faster and use less code that could break.

    Please let me know if that helps.

    #14001
    Avatar
    Anonymous

    Hello Dan, I was not able to test, I fried my RUMBA board when changing the drivers from drv8825 to drv4988 (wrong direction), and when I tried to test it on the RAMPS board, I get a compilation error when configuring the code for RAMPS.

    This is the config:
    ——-
    // machine styles supported
    //#define POLARGRAPH 1 // uncomment this line if you use a polargraph like the Makelangelo 3 or 5
    //#define TRADITIONALXY 3 // uncomment this line if you use a traditional XY setup.
    //#define COREXY 2 // uncomment this line if you use a CoreXY setup.
    #define ZARPLOTTER 4 // uncomment this line if you use a 4 motor Zarplotter

    #define MACHINE_STYLE ZARPLOTTER // change this

    #include “robot_polargraph.h”
    #include “robot_traditionalxy.h”
    #include “robot_corexy.h”
    #include “robot_zarplotter.h”

    // Boards supported
    #define BOARD_RUMBA 1
    #define BOARD_RAMPS 2
    #define BOARD_SANGUINOLULU 3
    #define BOARD_TEENSYLU 4

    #define MOTHERBOARD BOARD_RAMPS // change this
    ———-

    and this is the compilation error:

    /Users/Miguel/Downloads/Makelangelo-firmware-dev/makelangeloFirmwareRumba/makelangeloFirmwareRumba.ino: In function ‘void setup()’:
    makelangeloFirmwareRumba:921: error: ‘PEN_UP_ANGLE’ was not declared in this scope
    setPenAngle(PEN_UP_ANGLE);
    ^
    /Users/Miguel/Downloads/Makelangelo-firmware-dev/makelangeloFirmwareRumba/motor.ino: In function ‘void setPenAngle(int)’:
    motor:241: error: ‘PEN_DOWN_ANGLE’ was not declared in this scope
    if(posz<PEN_DOWN_ANGLE) posz=PEN_DOWN_ANGLE;
    ^
    motor:242: error: ‘PEN_UP_ANGLE’ was not declared in this scope
    if(posz>PEN_UP_ANGLE ) posz=PEN_UP_ANGLE;
    ^
    /Users/Miguel/Downloads/Makelangelo-firmware-dev/makelangeloFirmwareRumba/robot_zarplotter.ino: In function ‘void IK(float, float, float, long int*)’:
    robot_zarplotter:20: error: ‘threadPerStep’ was not declared in this scope
    dy = abs(y – limit_ymax)-ZARPLOTTER_COMPENSATION; dx = abs(x – limit_xmin)-ZARPLOTTER_COMPENSATION; L = sqrt(dx*dx+dy*dy); motorStepArray[0] = lround( L / threadPerStep ); // M0 (top left)
    ^
    /Users/Miguel/Downloads/Makelangelo-firmware-dev/makelangeloFirmwareRumba/robot_zarplotter.ino: In function ‘void FK(long int*, float&, float&)’:
    robot_zarplotter:45: error: ‘threadPerStep’ was not declared in this scope
    float a = (float)motorStepArray[0] * threadPerStep;
    ^
    exit status 1
    ‘PEN_UP_ANGLE’ was not declared in this scope

    #14003
    Dan
    Dan
    Keymaster

    Oh no, the drivers! :O

    I’ve retested for all the machines styles and for RAMPs. Should be better now. Sorry for not testing every option more thoroughly. I got hung up on a polargraph issue and when I was done I thought “that’s it! Ship it!” Never make a major commit on a friday afternoon, they warned me…

    #14006
    Avatar
    Anonymous

    It worked!! I was able to run the motor on RAMPS and move correcly the plotter.

    A few small issues though:

    1. It seems X and Y coordinates are inverted.
    My config is:
    L motor – Northwest – X on RAMPS
    R motor – Northest – Y on RAMPS
    U motor – Southwest – Z on RAMPS
    V motor – Southeast – E0 on RAMPS

    When I send G0 X50 I was expecting the robot to move to the west, but is moving to the north, towards L and R motors.
    When I send G0 Y50 I was expecting the robot to move to the north, but is moving to the west, towards L and U motor.

    2. The movement is bellow the board limits.
    My board size is 150cm (east-west) and 75cm (South-Nort), so I configured the limits as:
    ——-
    // plotter limits, relative to the center of the plotter.
    float limit_ymax = 45; // distance to top of drawing area.
    float limit_ymin = -45; // Distance to bottom of drawing area.
    float limit_xmax = 75; // Distance to right of drawing area.
    float limit_xmin = -75; // Distance to left of drawing area.
    —–
    The fist issue is that the robot doesn’t seem to pick the values, I had to send the command “M101 T45 B-45 R75 L-75” to do it.
    The second issue is that I’m not able to move the plotter to the corner by sending command G0 X-75 Y-45, the movement is a lot shorter, to move it to the corner I have to put higher values like G0 X-150 Y-200 (those are not the exact ones, but what I mean is that I need to send a coordinate that is a lot higher than the board size.

    #14043
    Dan
    Dan
    Keymaster

    BTW:

    M101 let’s you adjust the size of the machine by setting the top, bottom, left, and right from the origin. It works the same as the Makelangelo.

    M101 TH B-H L-W RW

    Where W is width/2 and H is height/2.
    Width and height should be measured from the edge of the motor mounts where they touch the edge of the board.

    #14223
    Avatar
    madcowswe
    Participant

    Hi Dan,

    I make an open source controller for precision (encoder feedback) control of ~1000W hobby brushless motors. The aim is to make industrial power/precision robotics available to the maker. You can check it here: https://odriverobotics.com.

    One of the projects I’ve been wanting to do with it is exactly a 4-point parallel cable robot, which is the same kinematics as your skycam. The thing is, I don’t really have the time right now to build this myself, but I’d love to see one come into existence.

    If you are interested in collaborating to make a prototype using ODrive (instead of slow steppers), I’d be happy to send you some gear.
    If so, feel free to follow up by email: oskar.weigl@odriverobotics.com

    Cheers,
    Oskar

    #14346
    Avatar
    disneytoy
    Participant

    Gang,

    I’ve just started following this. Very cool. Also very interesting seeing the inner workings how this project is getting fleshed-out and debugged. I’m learning a lot from this:-)

    Max

    #14612
    Avatar
    Anonymous

    Hello Dan,

    I noticed that in latest version 7.15, you removed the plotter limits from the firmware file (// plotter limits, relative to the center of the plotter) where should we define the board size now?

    Also would be possible to include the following changes.
    1. The ZARPLOTTER_PLOTTER_SIZE (6.0f) to be a rectangle (xsize and ysize) instead of a square.
    2. The size of the board to have a different shape than a square, for this we would need to define the relative position of each of the steppers.

    Thanks.

    #14620
    Dan
    Dan
    Keymaster

    Hi @kukomiguel,

    In 7.15 the top, bottom, left, and right limits are relative to the origin (0,0). They can be adjusted so that the machine is a rectangle.

    For skycams the Z limit would also have to be adjusted. I assume that the origin is on same plane as the four motors. The motors are assumed to all be at the same height, in a rectangle, above the floor.

    I agree that fine-tuning motor positions would create a more accurate model and might create better movement.

    Edit: Apparently I left this answer open for two days and failed to hit ‘send’ 😛

    #15003
    Avatar
    Vladimir
    Participant

    Hello, to all from Russia (St. Petersburg).

    Some time I used Polargraph Sandy Noble, very inspiring, but I prefer Zarplotter or it is necessary to build a machine with rectangular axes according to the CNC principle.
    I want to build Zarplotter …
    I bought a table and firmware. ))
    I have Arduino Mega 2560 R3 + Ramps1.4 + 4 stepper motor 17HS4401 + 2004 LCD Smart Controller with memory card
    Problem in compiling the firmware!
    in configure.h
    I replaced in rows
    33
    #define MACHINE_STYLE ZARPLOTTER
    57
    #define MOTHERBOARD BOARD_RAMPS
    79-86
    #define MICROSTEPS (16.0) // change this. microstepping on this microcontroller
    #define DEGREES_PER_STEP (1.8) // change this. as advertised by the stepper motor maker

    #define NORMAL_MOTOR_STEPS (200.0 / DEGREES_PER_STEP) // 360 / 0.9 = 400. 360 / 1.8 = 200.
    #define STEPS_PER_TURN (NORMAL_MOTOR_STEPS * MICROSTEPS) // default number of steps per turn * microsteps
    #define PULLEY_PITCH (2 * 20.0) // 2mm per tooth, 20 teeth.
    #define THREAD_PER_STEP (PULLEY_PITCH / STEPS_PER_TURN)
    #define MICROSTEP_PER_DEGREE (STEPS_PER_TURN / 360.0)

    I get a compilation error:
    //////////////////
    Arduino: 1.6.7 (Windows 10), Плата:”Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

    In file included from sketch\Makelangelo-firmware.ino.cpp:1:0:

    C:\Users\kio\Documents\Arduino\Makelangelo-firmware-new\Makelangelo-firmware\robot_zarplotter.ino: In function ‘void IK(float*, long int*)’:

    C:\Users\kio\Documents\Arduino\Makelangelo-firmware-new\Makelangelo-firmware\robot_zarplotter.ino:23:16: error: ‘limit_ymax’ was not declared in this scope

    dy = abs(y – limit_ymax)-ZARPLOTTER_COMPENSATION; dx = abs(x – limit_xmin)-ZARPLOTTER_COMPENSATION; L = sqrt(dx*dx+dy*dy); motorStepArray[0] = lround( L / THREAD_PER_STEP ); // M0 (top left)

    ^

    C:\Users\kio\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.20\cores\arduino/Arduino.h:94:18: note: in definition of macro ‘abs’

    #define abs(x) ((x)>0?(x):-(x))

    ^

    C:\Users\kio\Documents\Arduino\Makelangelo-firmware-new\Makelangelo-firmware\robot_zarplotter.ino:23:67: error: ‘limit_xmin’ was not declared in this scope

    dy = abs(y – limit_ymax)-ZARPLOTTER_COMPENSATION; dx = abs(x – limit_xmin)-ZARPLOTTER_COMPENSATION; L = sqrt(dx*dx+dy*dy); motorStepArray[0] = lround( L / THREAD_PER_STEP ); // M0 (top left)

    ^

    C:\Users\kio\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.20\cores\arduino/Arduino.h:94:18: note: in definition of macro ‘abs’

    #define abs(x) ((x)>0?(x):-(x))

    ^

    C:\Users\kio\Documents\Arduino\Makelangelo-firmware-new\Makelangelo-firmware\robot_zarplotter.ino:24:67: error: ‘limit_xmax’ was not declared in this scope

    dy = abs(y – limit_ymax)-ZARPLOTTER_COMPENSATION; dx = abs(x – limit_xmax)-ZARPLOTTER_COMPENSATION; R = sqrt(dx*dx+dy*dy); motorStepArray[1] = lround( R / THREAD_PER_STEP ); // M1 (top right)

    ^

    C:\Users\kio\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.20\cores\arduino/Arduino.h:94:18: note: in definition of macro ‘abs’

    #define abs(x) ((x)>0?(x):-(x))

    ^

    C:\Users\kio\Documents\Arduino\Makelangelo-firmware-new\Makelangelo-firmware\robot_zarplotter.ino:25:16: error: ‘limit_ymin’ was not declared in this scope

    dy = abs(y – limit_ymin)-ZARPLOTTER_COMPENSATION; dx = abs(x – limit_xmin)-ZARPLOTTER_COMPENSATION; U = sqrt(dx*dx+dy*dy); motorStepArray[2] = lround( U / THREAD_PER_STEP ); // M2 (bottom left)

    ^

    C:\Users\kio\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.20\cores\arduino/Arduino.h:94:18: note: in definition of macro ‘abs’

    #define abs(x) ((x)>0?(x):-(x))

    ^

    C:\Users\kio\Documents\Arduino\Makelangelo-firmware-new\Makelangelo-firmware\robot_zarplotter.ino: In function ‘int FK(long int*, float*)’:

    C:\Users\kio\Documents\Arduino\Makelangelo-firmware-new\Makelangelo-firmware\robot_zarplotter.ino:49:14: error: ‘limit_xmax’ was not declared in this scope

    float b = (limit_xmax-limit_xmin);

    ^

    C:\Users\kio\Documents\Arduino\Makelangelo-firmware-new\Makelangelo-firmware\robot_zarplotter.ino:49:25: error: ‘limit_xmin’ was not declared in this scope

    float b = (limit_xmax-limit_xmin);

    ^

    C:\Users\kio\Documents\Arduino\Makelangelo-firmware-new\Makelangelo-firmware\robot_zarplotter.ino:64:14: error: ‘limit_ymax’ was not declared in this scope

    axies[1] = limit_ymax – (sqrt( 1.0 – theta * theta ) * a);

    ^

    exit status 1
    ////////////////////

    What am I doing wrong or what have I not done !?

    #15005
    Dan
    Dan
    Keymaster

    I have submitted an update on the development branch of the code that should fix your compile errors. you’ll have to poke configure.h again.

    https://github.com/marginallyclever/makelangelo-firmware/tree/dev

    #15006
    Avatar
    Vladimir
    Participant

    with the new configure.h file
    First there was an error due to a lack of the robot_arm6.h file
    when I added the missing robot_arm6.h file
    again error:
    Arduino: 1.6.7 (Windows 10), Fee: “Arduino / Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

    C: \ Users \ kio \ Documents \ Arduino \ Makelangelo-firmware-zarplotter \ Macelangelo-firmware \ motor.ino: In function ‘void motor_setup ()’:

    motor: 157: error: ‘struct motor’ has no member named ‘limit_switch_state’

         motors [i] .limit_switch_state = HIGH;

                   ^

    In file included from sketch \ Makelangelo-firmware.ino.cpp: 1: 0:

    C: \ Users \ kio \ Documents \ Arduino \ Makelangelo-firmware-zarplotter \ Makelangelo-firmware \ robot_zarplotter.ino: In function ‘void IK (float *, long int *)’:

    robot_zarplotter: 23: error: ‘limit_ymax’ was not declared in this scope

       dy = abs (y – limit_ymax) -ZARPLOTTER_COMPENSATION; dx = abs (x – limit_xmin) -ZARPLOTTER_COMPENSATION; L = sqrt (dx * dx + dy * dy); motorStepArray [0] = lround (L / THREAD_PER_STEP); // M0 (top left)

                    ^

    C: \ Users \ kio \ AppData \ Local \ Arduino15 \ packages \ arduino \ hardware \ avr \ 1.6.20 \ cores \ arduino / Arduino.h: 94: 18: note: in definition of macro ‘abs’

     #define abs (x) ((x)> 0? (x) 🙁 x))

                      ^

    robot_zarplotter: 23: error: ‘limit_xmin’ was not declared in this scope

       dy = abs (y – limit_ymax) -ZARPLOTTER_COMPENSATION; dx = abs (x – limit_xmin) -ZARPLOTTER_COMPENSATION; L = sqrt (dx * dx + dy * dy); motorStepArray [0] = lround (L / THREAD_PER_STEP); // M0 (top left)

                                                                       ^

    C: \ Users \ kio \ AppData \ Local \ Arduino15 \ packages \ arduino \ hardware \ avr \ 1.6.20 \ cores \ arduino / Arduino.h: 94: 18: note: in definition of macro ‘abs’

     #define abs (x) ((x)> 0? (x) 🙁 x))

                      ^

    robot_zarplotter: 24: error: ‘limit_xmax’ was not declared in this scope

       dy = abs (y – limit_ymax) -ZARPLOTTER_COMPENSATION; dx = abs (x – limit_xmax) -ZARPLOTTER_COMPENSATION; R = sqrt (dx * dx + dy * dy); motorStepArray [1] = lround (R / THREAD_PER_STEP); // M1 (top right)

                                                                       ^

    C: \ Users \ kio \ AppData \ Local \ Arduino15 \ packages \ arduino \ hardware \ avr \ 1.6.20 \ cores \ arduino / Arduino.h: 94: 18: note: in definition of macro ‘abs’

     #define abs (x) ((x)> 0? (x) 🙁 x))

                      ^

    robot_zarplotter: 25: error: ‘limit_ymin’ was not declared in this scope

       dy = abs (y – limit_ymin) -ZARPLOTTER_COMPENSATION; dx = abs (x – limit_xmin) -ZARPLOTTER_COMPENSATION; U = sqrt (dx * dx + dy * dy); motorStepArray [2] = lround (U / THREAD_PER_STEP); // M2 (bottom left)

                    ^

    C: \ Users \ kio \ AppData \ Local \ Arduino15 \ packages \ arduino \ hardware \ avr \ 1.6.20 \ cores \ arduino / Arduino.h: 94: 18: note: in definition of macro ‘abs’

     #define abs (x) ((x)> 0? (x) 🙁 x))

                      ^

    C: \ Users \ kio \ Documents \ Arduino \ Makelangelo-firmware-zarplotter \ Makelangelo-firmware \ robot_zarplotter.ino: In function ‘int FK (long int *, float *)’:

    robot_zarplotter: 49: error: ‘limit_xmax’ was not declared in this scope

       float b = (limit_xmax-limit_xmin);

                  ^

    robot_zarplotter: 49: error: ‘limit_xmin’ was not declared in this scope

       float b = (limit_xmax-limit_xmin);

                             ^

    robot_zarplotter: 64: error: ‘limit_ymax’ was not declared in this scope

       axies [1] = limit_ymax – (sqrt (1.0 – theta * theta) * a);

                  ^

    exit status 1
    ‘struct Motor’ has no member named ‘limit_switch_state’

      This message will contain more information than
      “Display output at compile time”
      is included in the File> Settings

    #15009
    Dan
    Dan
    Keymaster

    I believe you are missing some files from the repository. I get none of these errors when compiling the code here.

    #15011
    Avatar
    Vladimir
    Participant

    Thank you. I copied all the files. I compiled and loaded the firmware without errors. Now the start button and home in the Meakelangelo software window are not activated. I’ll continue in the morning, we are far past midnight …))

    #15012
    Dan
    Dan
    Keymaster

    When you connect to the robot it displays a message in the log.
    In the bottom left corner of the makelangelo app are two small arrows. click them to expand the log window. the log is also saved to log.html. Please show me the contents of the log file when you can.

    #15017
    Avatar
    Vladimir
    Participant

    INFO дек 19,2017 13:43
    INFO дек 19,2017 13:43

    INFO дек 19,2017 13:43 HELLO WORLD! I AM ZARPLOTTER #-1
    INFO дек 19,2017 13:43 Firmware v8
    INFO дек 19,2017 13:43 == https://www.marginallyclever.com/ ==
    INFO дек 19,2017 13:43 M100 – display this message
    INFO дек 19,2017 13:43 M101 [Tx.xx] [Bx.xx] [Rx.xx] [Lx.xx]
    INFO дек 19,2017 13:43 – display/update board dimensions.
    INFO дек 19,2017 13:43 As well as the following G-codes (http://en.wikipedia.org/wiki/G-code):
    INFO дек 19,2017 13:43 G00,G01,G02,G03,G04,G28,G90,G91,G92,M18,M114
    INFO дек 19,2017 13:43

    INFO дек 19,2017 13:43 Converter=Sandy Noble Style
    INFO дек 19,2017 13:43 Converting gcode5041968477280912431.ngc
    INFO дек 19,2017 13:43 Completed

    But the buttons in the section
    Manual Driving
    Popular Driving Commands
    and
    Animation control
    not active

    #15191
    Avatar
    Vladimir
    Participant

    Hello, Dan. Could not fix the error?

    #15197
    Dan
    Dan
    Keymaster

    Please try the latest version (7.15.2), it should support zarplotter better. if it still does not work let me know and I will run more tests. I apologize for the slowness, I am getting a lot of tricky customer support questions right now.

    #15201
    Avatar
    Vladimir
    Participant

    we all really appreciate your work. Thank you !!!

    #15312
    Avatar
    Vladimir
    Participant

    firmware 5.17.3
    if in configure.h specifies zarplotter, the LCD panel does not work
    if in configure.h specifies polargraph, the LCD panel is work

Viewing 25 posts - 26 through 50 (of 115 total)

You must be logged in to reply to this topic.