Zarplotter 4-motor drawing machine
Shop › Forum › Everything Else › Zarplotter 4-motor drawing machine
Tagged: zarplotter
- This topic has 114 replies, 14 voices, and was last updated 5 years, 6 months ago by cpcoe.
-
AuthorPosts
-
2017-09-05 at 04:29 #13973AnonymousInactive
Hello Dan, I tried applying D1 L1.27323954 command first:
> adjustPulleyDiameter dia=1.27
cir=4.00
SPT=6400.00
tps*1000=0.63But the system is behaving the same way.
When Sending several times:
G0 X0
G0 X1
G0 X0
G0 X1V 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.
2017-09-05 at 11:37 #13977AnonymousInactiveHello 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
2017-09-05 at 13:01 #13978DanKeymasterDid my previous suggestion about M102 and M101 help? I don’t remember seeing a reply.
2017-09-05 at 14:54 #13980DanKeymasterCan 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/dev2017-09-05 at 14:56 #13981DanKeymasterHave you tried to invert a motor in software (M101) and then jogging it (D1)? I want to check if it reverses direction.
2017-09-08 at 13:51 #13998DanKeymasterI 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.
2017-09-10 at 03:57 #14001AnonymousInactiveHello 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 scope2017-09-10 at 09:05 #14003DanKeymasterOh 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…
2017-09-11 at 00:33 #14006AnonymousInactiveIt 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 RAMPSWhen 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.2017-09-14 at 14:10 #14043DanKeymasterBTW:
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.2017-10-15 at 22:21 #14223madcowsweParticipantHi 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: [email protected]Cheers,
Oskar2017-10-20 at 19:33 #14346disneytoyParticipantGang,
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
2017-11-16 at 14:19 #14612AnonymousInactiveHello 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.
2017-11-17 at 12:57 #14620DanKeymasterHi @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’ 😛
2017-12-18 at 07:11 #15003VladimirParticipantHello, 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 !?
2017-12-18 at 09:44 #15005DanKeymasterI 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
2017-12-18 at 10:13 #15006VladimirParticipantwith 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> Settings2017-12-18 at 15:05 #15009DanKeymasterI believe you are missing some files from the repository. I get none of these errors when compiling the code here.
2017-12-18 at 15:14 #15011VladimirParticipantThank 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 …))
2017-12-18 at 15:24 #15012DanKeymasterWhen 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.2017-12-19 at 03:27 #15017VladimirParticipantINFO дек 19,2017 13:43
INFO дек 19,2017 13:43INFO дек 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:43INFO дек 19,2017 13:43 Converter=Sandy Noble Style
INFO дек 19,2017 13:43 Converting gcode5041968477280912431.ngc
INFO дек 19,2017 13:43 CompletedBut the buttons in the section
Manual Driving
Popular Driving Commands
and
Animation control
not active2018-01-04 at 08:03 #15191VladimirParticipantHello, Dan. Could not fix the error?
2018-01-05 at 10:09 #15197DanKeymasterPlease 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.
2018-01-05 at 13:36 #15201VladimirParticipantwe all really appreciate your work. Thank you !!!
2018-01-15 at 07:41 #15312VladimirParticipantfirmware 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
https://www.youtube.com/watch?v=BWlODvBQmwE -
AuthorPosts
- You must be logged in to reply to this topic.