Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login
    1. Home
    2. mrehorstdmd
    3. Posts
    • Profile
    • Following 0
    • Followers 3
    • Topics 53
    • Posts 1,457
    • Best 333
    • Controversial 2
    • Groups 0

    Posts made by mrehorstdmd

    • RE: Linear motors: Day Dreaming about future printers.

      @Visionary said in Linear motors: Day Dreaming about future printers.:

      I've had (Chinese) ball screws on my Z-axes and they are ok, but they still have slight Z-wobble and they do have noticeable amount of backlash. Using linear motors also on Z-axis would definitely be expensive, but I'm curious if there would be better in every other way (speed, noise, precision, no moving parts, no grease). Preventing bed from dropping hard when unpowered is an issue too.

      A linear motor powering the Z axis doesn't fix anything. It would have to remain energized to stop the bed from falling. When power is cut, the bed will drop.

      I don't know how ball screws in the Z axis could have backlash unless there's an alignment problem (screws not parallel to guide rails, guide rails not parallel, maybe both). Belts don't wobble, and a simple worm gear drive will prevent bed motion when power is cut. I use a 30:1 worm reducer in my printer with a 695 mm belt lifted Z axis. The motor is driven directly by the Duet2 Wifi board, and I don't need any special config for brakes, etc. It uses two linear guides and two belts tied to a common 8mm drive shaft. The two belts are just simple loops. There's no backlash. Full step distance is 20 um and maximum speed is about 15 mm/sec. It just works, every time.

      posted in General Discussion
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @o_lampe Here's my PERL script for dual speed operation. I used a LOT of notes to make it easy for me to modify or fix because I don't do a lot of programming and have to relearn it for each project.

      This is how it is invoked:

      E:\Downloads>perl -w dual_speedify_v2.pl
      
      Warning- there's no error trapping, so be careful when you answer
      the questions that will follow. Use at your own risk!
      
      Type the name of the sandify pattern file:
      250519_01.gcode
      Enter the drawing speed in mm/sec
      150
      Enter the edge speed in mm/sec
      1000
      Enter the minimum X value of the pattern.
      0
      Enter the maximum X value of the pattern.
      590
      Enter the minimum Y value of the pattern.
      0
      Enter the maximum Y value of the pattern.
      980
      Enter the home position X ordinate.
      590
      Enter the home position Y ordinate.
      0
      
      Processing is complete.
      
      The dual speed output file is called 250519_01_9000_60000.gcode
      
      Check the output file to make sure it does what you think it will.
      
      

      And the attached file is the result. 250519_01_9000_60000.gcode ]

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @o_lampe What do you plan to use to generate the drawing and erase pattern files? Maybe the keepout areas can be defined there.

      You can do all sorts of stuff with post processors. I use a PERL post processor to set the speed of moves on my table. It steps through the pattern file and determines whether each line of gcode draws on the table or moves the ball along the edges. If it's edge motion, it executes it at high speed (usually 1000 mm/sec), and if it's drawing on the table it executes at a lower speed (to preserve detail in the drawing).

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @dc42 That's it! Thanks!

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @dc42 I have drawing files in /gcodes/draw/ and wipe files in /gcodes/wipe/ folders. All files are renamed with numeric names and gcode extension, like "16.gcode".

      I have tried about 50 variations on:

      M98 P{/gcodes/draw/random(214)^".gcode"}
      and get various error messages, mostly about expecting a string at one column or another.

      How do I specify the folder to find the target files? Is this syntax documented somewhere?

      Thanks!

      m98 P"/gcodes/draw/^{random(22)}^.gcode"
      Warning: Macro file /gcodes/draw/^{random(22)}^.gcode not found
      ok
      M98 P"/gcodes/draw/{random(55)^".gcode"}
      Warning: Macro file /gcodes/draw/{random(55)^ not found
      Error: Bad command: gcode"}
      ok
      M98 P{/gcodes/draw/{andom(55)^".gcode"}
      Error:  at column 7: M98: expected an expression
      ok
      M98 P{/gcodes/draw/{random(55)^".gcode"}
      Error:  at column 7: M98: expected an expression
      ok
      M98 P{/gcodes/draw/random(55)^".gcode"}
      Error:  at column 7: M98: expected an expression
      ok
      M98 P "/gcodes/draw/{random(55)^".gcode"}
      Error:  at column 6: M98: expected a string expression
      Error: Bad command: gcode"}
      ok
      M98 P "/gcodes/draw/{random(55)^.gcode"}
      Error:  at column 6: M98: expected a string expression
      ok
      M98 P {/gcodes/draw/random(55)^.gcode"}
      Error:  at column 6: M98: expected a string expression
      ok
      M98 P{random(55)^".gcode"}
      Warning: Macro file 39.gcode not found
      ok
      M98 P /gcodes/draw/{random(55)^".gcode"}
      Error:  at column 6: M98: expected a string expression
      Error: Bad command: gcodes/draw/{random(55)^".gcode"}
      ok
      M98 P "/gcodes/draw/{random(55)^".gcode"}"
      Error:  at column 6: M98: expected a string expression
      Error: Bad command: gcode"}"
      ok
      M98 P "/gcodes/draw/{random(55)^".gcode"
      Error:  at column 6: M98: expected a string expression
      Error: Bad command: gcode"
      ok
      M98 P "/gcodes/draw/{random(55)^".gcode"}
      Error:  at column 6: M98: expected a string expression
      Error: Bad command: gcode"}
      ok
      M98 P /gcodes/draw/{random(55)^".gcode"}
      Error:  at column 6: M98: expected a string expression
      Error: Bad command: gcodes/draw/{random(55)^".gcode"}
      ok
      M98 P "/gcodes/draw/{random(55)^".gcode"}"
      Error:  at column 6: M98: expected a string expression
      Error: Bad command: gcode"}"
      ok
      M98 P "/gcodes/draw/"^{random(55)^".gcode"}"
      Error:  at column 6: M98: expected a string expression
      ok
      M98 P /gcodes/draw/^{random(55)^".gcode"}
      Error:  at column 6: M98: expected a string expression
      Error: Bad command: gcodes/draw/^{random(55)^".gcode"}
      ok
      M98 P {/gcodes/draw/random(55)^".gcode"}
      Error:  at column 6: M98: expected a string expression
      ok
      M98 P {0:/gcodes/draw/random(55)^".gcode"}
      Error:  at column 6: M98: expected a string expression
      ok
      M98 P "0:/gcodes/draw/"^{random(55)^".gcode"}
      Error:  at column 6: M98: expected a string expression
      ok
      M98 P "0:/gcodes/draw/"{random(55)^".gcode"}
      Error:  at column 6: M98: expected a string expression
      ok
      M98 P"0:/gcodes/draw/"{random(55)^".gcode"}
      Warning: Macro file 0:/gcodes/draw/ not found
      ok
      M98 P{0:/gcodes/draw/random(55)^".gcode"}
      Error:  at column 8: M98: expected '}'
      ok
      M98 P"{0:/gcodes/draw/random(55)"^".gcode"}
      Warning: Macro file {0:/gcodes/draw/random(55) not found
      ok
      M98 P"0:/gcodes/draw/{random(55)"^".gcode"}
      Warning: Macro file 0:/gcodes/draw/{random(55) not found
      ok
      M98 P"0:/gcodes/draw/{random(55)}"^".gcode"}
      Warning: Macro file 0:/gcodes/draw/{random(55)} not found
      ok
      M98 P"0:/gcodes/draw/{random(55)}"^".gcode"
      Warning: Macro file 0:/gcodes/draw/{random(55)} not found
      ok
      M98 P"0:/gcodes/draw/"{random(55)}"^".gcode"
      Warning: Macro file 0:/gcodes/draw/ not found
      Error: Bad command: gcode"
      ok
      M98 P"0:/gcodes/draw/"^{random(55)}"^".gcode"
      Warning: Macro file 0:/gcodes/draw/ not found
      Error: Bad command: gcode"
      ok
      M98 P"0:/gcodes/draw/"^{random(55)}^".gcode"
      Warning: Macro file 0:/gcodes/draw/ not found
      ok
      M98 P"0:/gcodes/draw/"^{random(55)^".gcode"}
      Warning: Macro file 0:/gcodes/draw/ not found
      ok
      M98 P"0:/gcodes/draw/"^"{random(55)^".gcode"}
      Warning: Macro file 0:/gcodes/draw/ not found
      Error: Bad command: gcode"}
      ok
      M98 P"0:/gcodes/draw/^"{random(55)^".gcode"}
      Warning: Macro file 0:/gcodes/draw/^ not found
      ok
      
      
      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @o_lampe Thanks. All the files are tested, so not an issue. I'll be able to access the machine this afternoon and will try out the random selection. I'm not too sure about the syntax. I've been testing the syntax via the console on my 3D printer and it doesn't look promising. If I enter M98 p"{random(55)}^.gcode" it returns {random(55)}^.gcode not found. It isn't converting the expression to a random number, or even treating it as an expression, just a string of characters. I've tried a few variations on the syntax and none have worked so far.

      When I run echo random(416) on the console, it returns a random number (sometimes 3 digits), so I know random is working the way it should. Maybe I need to set a variable to a random value, and use that variable in the M98 command.

      Renaming the files is pretty easy- I used Bulk Rename Utility. It takes just a couple seconds to set it up.

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @dc42 I'm having some trouble figuring out how to randomly select a file from the /gcodes/ folder. Do I have to put the files names in that folder in an array, or is there a way to declare the contents of the /gcodes/ folder as an array? I currently have about 200 gcode files stored in the /gcodes/ folder, and I add more files to it as I generate them.

      I typically run a macro at the end of the config.g file, like this:

      M98 P"/macros/macro01"
      

      And that macro file looks like this (though much longer):

      ; file name: macro01
      M98 P"/gcodes/wipe_03.gcode"
      M98 P"/gcodes/file_04.gcode"
      G04 S60
      M98 P"/gcodes/wipe_01.gcode"
      M98 P"/gcodes/file_02.gcode"
      G04 S60
      M98 P"/gcodes/wipe_02.gcode"
      M98 P"/gcodes/file_06.gcode"
      .
      .
      .
      

      Should macro01 file look like this:

      ; file name: macro01
      var myfile = {"file_01", "file_02", "file_03", "file_04", "file_05", "file_06"}
      M98 P"/gcodes/^myfile[random 6]^.gcode"
      G04 S60
      M98 P"/gcodes/^myfile[random 6]^.gcode"
      .
      .
      .
      
      

      It seems like I'll quickly run out of line length if I try to put all 200 file names in the variable declaration.

      Another idea- rename all the files in the gcodes folder with simple numeric names:
      1.gcode, 2.gcode.... 212.gcode

      Then in the macro file, select a random pattern file like this:

      M98 P"/gcodes/^{random(212)}^.gcode"
      

      Sorry if this stuff is too basic. I've been away from programming for a looooong time.

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @dc42 Thanks! I will try it out and see if I can get it working.

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @dc42 Will it work with the Duet2 Wifi board? I typically set up the controller to run a macro containing a sequence of patterns to run at power up. That way I don't need to have a UI or even to connect to the machine.

      I am not familiar with the way tick counter works. If I use the random function to select files to run instead of a macro that contains a specific sequence, will it give me the same sequence each time I power up the board, or is there some variability in the power up timing that will result in a different seed when I use the random function after each power up? Thanks!

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @o_lampe I don't know that you gain much drawing area using a delta mechanism. I don't think you can draw any further than the towers, so you'll still have a wide, undrawn perimeter like what you get with a corexy or other rectangular mechanism. A lot of people make SCARA mechanism sand tables. With those the magnet is on the end of an arm that can reach very close to the edges of the table. The mechanism is located at the center of the table, so there's plenty of room for people's legs/feet if they are sitting around the table.

      See: https://robdobson.com/2018/08/a-new-sandbot/

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @dc42 The controller has no RTC, so what seeds the random function? If I set up a macro to randomly select and run gcode files from a list, will it give me a different file/sequence each time the controller is powered up, or will it give me the same pseudo random sequence of files each time? Thanks!

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @o_lampe AFAIK, the Duet firmware doesn't have any provision for random number generation. I use macros, painstakingly composed, to play sequences of patterns. I'm thinking of writing a spreadsheet or maybe Perl script to create macro files by randomly selecting from a list of pattern files and a list of erase files.

      Infinity tables only work when you can see the mirror at the bottom of the table. In a sand table, it's going to be covered by the sand, unless you limit the sand drawings to an area at the center of the table.

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Ringing in Y axis (Linear guide system, coreXY design)

      @JayT Have you tried tweaking the motor currents?

      posted in General Discussion
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @o_lampe Maybe you can build in a magnetic comb that sits between the glass sheets and move it with magnets from the top side when needed, and leave it along an unlit edge when it isn't needed.

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @o_lampe RGB light strips can do color combinations like that without going to the trouble and extra expense of using addressable LEDs. I use something similar to this. It has two outputs for RGB LED strips wired in parallel - i.e. same color.
      The 4 wire connections to the LEDs are R,G,B, and common. If you swap any two of the RGB wires on one of the connectors, you'll always have two different colors on the LED strips, unless you select white on the remote control- then all the LEDs in both strips light up and you get sort of white light. If you want the light show you can put the controller into a switching or fading mode and it will shift the colors of the LED strips.

      One of the things that happens on the table is the sand gets pushed toward the edges as the table runs and you periodically have to push it back toward the center of the table. That's going to be very difficult if the two pieces of glass are glued together and only a few mm apart. Also, as the ball rolls over an area multiple times, the surface it's rolling on becomes visible. In your case, it's glass so it will become transparent and you'll see through the bottom of the table.

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @o_lampe Are you planning to put the sand and ball between the two glass sheets? That's going to be a problem for spreading the sand. Also with narrow spacing, you can expect some of the sand to stick to the top glass from static charges. You really want to be able to clean the top glass, by lifting it up or removing it completely. Also, if you put LED strips in a narrow space at the level of the ball/sand, the sand will end up blocking the light. I think you really want to have 50 mm or so between the two sheets of glass, and the LED strips should sit about 10-20 mm above the level of the bottom glass.

      A steel ball rolling on glass is surprisingly noisy. I used a fake leather white vinyl cloth to cover the bottom of the table to reduce the noise, and to always leave the bottom of the grooves drawn in the sand white. I also use an air gap between the magnet and the bottom glass to prevent noise from the magnet dragging on the glass.

      I use RGB LED strips that allow color changes, and typically operate with two different colors because I like the contrast, but white all around also looks pretty good and long as the illumination angle is low so the ridges in the sand cast shadows. A lot of people use addressable LEDs and create all sorts of light shows, but I find I want to watch the ball drawing in the sand and flashing lights quickly become hard to look at.

      Humidity isn't usually a problem with baking soda. I find that if I don't run the table for a couple weeks, small lumps will start to form, but they crumble to dust the instant the ball runs again.

      I'm probably going to end up building a new coffee table because I don't think my brother is going to give me the old one back. I will buy a glass top table at a thrift store, and then either modify the table or throw the table away and use the top for the top glass on the sand table. I'm going to try using dibond material for the bottom of the table- it's a lot lighter and cheaper than glass (custom sized glass), it's rigid, and I can cut it to the size I need. I'm not sure if it will create drag because of eddy currents generated in the aluminum by the moving magnet- it shouldn't matter at low speeds, but high speeds?

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @o_lampe I would build the machine and alter the sandify patterns using a post processor, to press the spinning abrasive down and lift it up again at specified or calculated distances as it follows the pattern. But, it might also be create an interesting finish to drag it around while it is spinning against the metal.

      There are abrasive "sticks" made for engine turning operations that wear away as they are used. They provide a consistent scratch size by controlling the diameter of the diamonds or other abrasive stones embedded in the stick. See: https://www.cratex.com/engine-turning-sticks

      Are you going to use servomotors or steppers?

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @o_lampe I've been thinking about building a machine that uses the sandify generated patterns to move a spinning abrasive head to do fancy engine-turning on metals.

      alt text

      You can export the sandify patterns in different formats:

      d5e79a46-4999-46c9-b6dc-00c51436e5df-image.png

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @o_lampe What are you actually trying to do? Are you planning to mill groves into wood or plastic?

      Sandify gives a preview of what the pattern will look like, but not the way the sand piles up- just the path the ball follows:

      73b28bb6-e3d0-47ac-92f6-eb9f4e38fd56-image.png

      That might give a better idea of what a groove carved into wood or plastic would look like. The pattern starts at the green dot and ends at the red dot. You can sort of control the placement of the start and finish points with the Sandify UI, but can also edit the gcode to move them as needed, within certain limitations.

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd
    • RE: Spirograph emulator with Duet2

      @o_lampe I built a corexy sand table that draws patterns in baking soda "sand". Patterns are generated with Sandify. Sandify produces g-code files. My table uses a Duet2 WiFi board with an expansion board to drive two Chinese servomotors (but steppers work fine if going slow is acceptable). The servos can move the ball up to 2000 mm/sec the way I built it, but could go even faster with small changes. Many patterns have a lot of motion along the edges of the drawing space, so I use a Perl post processor that makes the Sandify pattern files run at two speeds, a relatively low speed for the actual drawing, and a high speed for the edge motion.

      Arrakis video

      Sandify can also generate patterns for round tables that use rho/theta coordinates.

      09.jpg

      01.jpg

      06.jpg

      posted in CNC
      mrehorstdmdundefined
      mrehorstdmd