Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login
    1. Home
    2. mwolter
    • Profile
    • Following 0
    • Followers 1
    • Topics 18
    • Posts 173
    • Best 33
    • Controversial 0
    • Groups 0

    mwolter

    @mwolter

    45
    Reputation
    10
    Profile views
    173
    Posts
    1
    Followers
    0
    Following
    Joined Last Online

    mwolter Unfollow Follow

    Best posts made by mwolter

    • Duet integration with NodeRed (Home Automation / Print Farms)

      Sharing this in case anyone is interested in integrating their Duet based printer with other systems via NodeRed. Here is an overview of NodeRed in case you are not familiar. Basically it's a cross-platform flow-based programming interface used to integrate disparate systems and hardware and is heavily used in DIY home automation systems. It's based on javascript and has very low overhead, so it runs well on a raspberry pi.

      For example, you could use NodeRed to send text, email or push notifications on the printer's status, print time remaining or printer faults on your phone or computer. NodeRed is extremely flexible and also includes a web-based dashboard interface that can be used to display the received info without requiring any other software.

      In my case, NodeRed queries the Duet, parses the received JSON message and transmits it via MQTT to my home automation system (HomeSeer). HomeSeer then presents the printer status on tablets throughout my house. This could be easily expanded to several dozen or hundred printers to provide an overview of an entire print farm.

      This flow screenshot below provides a basic overview of how I'm integrating NodeRed with a Duet. At this point, I am only using NodeRed to provide printer status. NodeRed does not control the printer, although it could very easily.

      Screen Shot 2020-03-24 at 3.19.03 PM.jpg

      posted in Third-party software
      mwolterundefined
      mwolter
    • RE: Automatic Bed Leveling with Conditional Gcode Iterations

      @Kolbi

      Since you're delving into conditional gcode you could look at something like this which only continues probing if necessary. Apologize for the length of this post but I included all sub macros for completeness. homexy.g also uses a virtual tool to indicate homing is in progress to avoid unnecessary Z axis movement. In case you're wondering, the sub macros are used to reduce duplicate code and unnecessarily updating several macros.

      if !move.axes[0].homed || !move.axes[1].homed	; If the printer hasn't been homed, home it
       M98 P"0:/sys/homeyx.g"	; home y and x
      ;
      M98 P"0:/sys/homez.g"			; always home z
      ;
      M561					; clear any bed transform
      M558 P9 H5 F120 T24000			; increase dive height incase bed is severely out of alignment
      M98 P"bed_threeScrews.g"		; perform bed tramming
      echo "Bed Tramming Cycle: 1 - Difference was " ^ move.calibration.initial.deviation ^ "mm"
      ;
      M98 P"0:/macros/Utilities/Config/bltouch_config"	; Apply default BLTouch config
      ;
      while move.calibration.initial.deviation >= 0.01	; perform additional tramming if previous deviation was over 0.01mm
       if iterations = 5
        abort "Too many auto tramming attempts"
       M98 P"bed_threeScrews.g"				; perform bed tramming
       echo "Bed Tramming Cycle: " ^ iterations + 2 ^ " - Difference was " ^ move.calibration.initial.deviation ^ "mm"
       continue
      ;
      G28 Z							; home z
      

      bltouch_config

      M558 P9 C"^io7.in" H2 F120 T24000 	; set Z probe type to bltouch and the dive height + speeds
      ;
      M98 P"0:/macros/Utilities/Config/bltouch_offset_config"
      

      bltouch_offset_config

      ;
      ; G31 - +Z Nozzle closer to bed, -Z Nozzle further from bed
      ;
      G31 X0 Y-20.23 Z2.1 P500		; 200710 mosquito liquid
      

      bed_threeScrews.g

      G30 P0 X10 Y18 Z-99999			; probe near a front left leadscrew
      G30 P1 X10 Y300 Z-99999			; probe near a back left leadscrew
      G30 P2 X320 Y166 Z-99999 S3		; probe near a right leadscrew and level
      

      homexy.g

      ; homeyx.g
      ; called to home x and y axes
      ;
      ; Warning: do not home individual axes by calling G28 X or G28 Y. It will cause errors. Instead run the macro file directly. IE M98 P"0:/sys/homex.g"
      ;
      M563 P9 S"HomeAll"		; create tool 9 to indicate homeall is in progress
      ;
      G91              		; relative positioning
      G1 Z5 F6000 H2   		; lift Z relative to current position
      M98 P"0:/sys/homey.g"		; home y
      M98 P"0:/sys/homex.g"		; home x
      G90             		; absolute positioning
      ;
      M563 P9 D-1 H-1			; delete tool 9 to indicate homeall is done
      

      homex.g

      if #tools != 10	; not homeall?
        G91              ; relative positioning
        G1 Z5 F6000 H2   ; lift Z relative to current position
      ;
      G1 H1 X357 F6000 ; move quickly to X axis endstop and stop there (first pass)
      G1 X-5 F3600     ; go back a few mm
      G1 H1 X357 F360  ; move slowly to X axis endstop once more (second pass)
      ;
      if #tools != 10	; not homeall?
        G1 Z-5 F6000 H2  ; lower Z again
        G90              ; absolute positioning
      

      homez.g

      if #tools != 10	; not homeall?
        G91			; relative positioning
        G1 Z5 F6000 H2	; lift Z relative to current position
        G90			; absolute positioning
      ;
      ; Home Z - inline with autolevel axis
      G1 X165 Y193 F24000	; go to middle of the bed probe point and home Z. BLTouch on right
      M558 F1200		; Set probing at faster feed rate
      G30			; quickly home Z by probing the bed
      M400			; clear buffer
      M98 P"0:/macros/Utilities/Config/bltouch_config"	; Return bltouch to defaults
      G30			; slowly home Z by probing the bed
      M400			; clear buffer
      
      posted in Gcode meta commands
      mwolterundefined
      mwolter
    • RE: Cura Script to Automatically Probe Only Printed Area

      Thought it would be a fun project to learn Python and modified CCS86's script to work with Simplify3D. It was created with Python 3.8.1 on a Mac running Catalina and S3D 4.1.2 and tested with a 6mb gcode file. It will not work with Python2.

      All you should need to do is copy the script to your computer (removing the .txt), make sure your starting script contains probing grid definition (ie M557 X30:300 Y30:300 S13.5) and add the following to the post processing.

      python3 <full path to folder>/meshgrid.py "[output_filepath]" (quotes around [output_filepath] are manditory)

      The script will read the first layer to obtain the print boundaries, verify it fits within the bed size specified in S3D, find the existing M557 and rewrite the min and max X Y coordinates. It might need some fine-tuning if used on a printer with 0,0 in the center of the bed.

      Enjoy!

      Edit: The forum server is not allowing the upload of txt files. Paste the code below into a text editor and save it as meshgrid.py .

      #!/usr/bin/env python3
      """Simplify3D post-processing script for RepRap firmware printers which dynamically defines the mesh grid dimensions (M557) based on the print dimensions. 
      
      Usage:
      
          Within Simplify3D > Process Settings > Scripts > Post Processing > add the following command:
              python3 <script_location>/meshgrid.py "[output_filepath]"
          
          Starting script must contain M557 Command (ie M557 X30:300 Y30:300 P20).
      
      Args:
      
          Path: Complete path to the gcode file created by Simplify 3d.
      
      Requirements:
      
          Tested using Python 3.8.1.
      
      Credit:
      
          Adapted from code originally posted by CCS86 on https://forum.duet3d.com/topic/15302/cura-script-to-automatically-probe-only-printed-area?_=1587348242875.
      
      """
      import sys
      import re
      import math
      
      def main(filename):
          
          try:
              _s3dFile = open(filename, encoding='utf-8')
      
          except TypeError:
              try:
                  _s3dFile = open(filename)
                  
              except:
                  print("Open file exception. Exiting meshgrid.py.")
                  sys.exit()
          
          except FileNotFoundError:
              print('File not found. Exiting meshgrid.py.')
              sys.exit()
          
          lines = _s3dFile.readlines()
          _s3dFile.close()
      
          linesNew = calcBed(lines)
      
          _s3dFileNew = open(filename, "r+")
          _s3dFileNew.seek(0)                       
          _s3dFileNew.truncate()
          for element in linesNew:
              _s3dFileNew.write(element)
          _s3dFileNew.close()
      
          return
      
      
      def calcBed(lines):
      
          bounds = findBounds(lines)
          bed = findBed(lines)
      
          for axis in bounds:
              if bounds[axis]['max'] - bounds[axis]['min'] < bed[axis]:
                  print(f'Success: {axis} mesh is smaller than bed')
                  
              else:
                  print('Error: Mesh is larger than bed. Exiting meshgrid.py.')
                  sys.exit()
      
              for limit in bounds[axis]:
                  if limit == 'min':
                      if (bed[axis] / 2) - bounds[axis][limit] > 0: 
                          print (f'Success: {axis} {limit} coordinate is on the bed.')
                      else:
                          print (f'Error: {axis} {limit} coordinate is off the bed. Exiting meshgrid.py.')
                          sys.exit()
      
                  if limit == 'max':
                      if (bed[axis]) - bounds[axis][limit] > 0: 
                          print (f'Success: {axis} {limit} coordinate is on the bed.')
                      else:
                          print (f'Error: {axis} {limit} coordinate is off the bed. Exiting meshgrid.py.')
                          sys.exit()
      
          return fillGrid(bounds, lines)
      
          
      def findBed(lines):
          bed = {
              'X': 0,
              'Y': 0,
              }
      
          for line in lines:
              if line.startswith(';   strokeXoverride,'):
                  bed['X'] = int(re.search(r'\d.+\S', line).group())
              elif line.startswith(';   strokeYoverride,'):
                  bed['Y'] = int(re.search(r'\d.+', line).group())
                  break
                  
          return bed
      
      
      def findBounds(lines):
          bounds = {
              'X': {'min': 9999, 'max': 0},
              'Y': {'min': 9999, 'max': 0},
              }
          parsing = False
          for line in lines:
              if line.startswith('; layer 1,'):
                  parsing = True
                  continue
              elif line.startswith('; layer 2,'):
                  break
      
              if parsing:
                  # Get coordinates on this line
                  for match in re.findall(r'([YX])([\d.]+)\s', line):
                      # Get axis letter
                      axis = match[0]
      
                      # Skip axes we don't care about
                      if axis not in bounds:
                          continue
      
                      # Parse parameter value
                      value = float(match[1])
      
                      # Update bounds
                      bounds[axis]['min'] = math.floor(min(bounds[axis]['min'], value))
                      bounds[axis]['max'] = math.ceil(max(bounds[axis]['max'], value))
      
          return bounds
      
      
      def fillGrid(bounds, lines):
          # Fill in the level command template
          gridNew = 'M557 X%d:%d Y%d:%d' % (
              bounds['X']['min'], bounds['X']['max'],
              bounds['Y']['min'], bounds['Y']['max'],
          )
      
          # Replace M557 command in GCODE
          linesNew = []
          for line in lines:
              if line.startswith('M557'):
                  linesNew.append(re.sub(r'^M557 X\d+:\d+ Y\d+:\d+', gridNew, line, flags=re.MULTILINE))
              else:
                  linesNew.append(line)
          return linesNew
      
      
      if __name__ == '__main__':
          if sys.argv[1]:
              main(filename = sys.argv[1])
          else:
              print('Error: Proper s3d post processing command is python3 <script_location>/meshgrid.py "[output_filepath]". Exiting meshgrid.py.')
              sys.exit()
      
      posted in General Discussion
      mwolterundefined
      mwolter
    • RE: Hotend modes "off", "standby", "active"

      @Plohish Here are the GCode commands you’re looking for:

      Tool Status Commands

      Standby: 
       	 T-1
       	 or select a tool other than the current tool
      	
      Off: 
       	 G10 P0 S-273.15 R-273.15
      
      Active: 
       	 T0
       	 or select the tool you wish to be active
      
      posted in Tuning and tweaking
      mwolterundefined
      mwolter
    • RE: Tips to mitigate vertical artifacting Duet 2 Wifi

      @brotherchris Interesting results with the extrusion width test and it might indicate an issue with the extruder gears. Would be easier to see the diagonal artifacts change if you can try multiple extrusion widths in a single, single-walled print. Simplify3d can do this easily, not sure if the others can. I find it particularly useful to isolate an extrusion issue by printing a cylinder with no top or bottom since there are no retractions or start-stop points.

      posted in Tuning and tweaking
      mwolterundefined
      mwolter
    • RE: XYZ-cube with a pre-shadow?

      ABS not needing cooling is actually a common misconception. It does need part cooling for small prints with layer times that do not allow the print to cool enough before starting the next layer. It's also often necessary on overhangs and bridges.

      A simple resolution to increase the later time is to add a second or third item to be printed. This helps quite a bit with the issue at Z seam, but this will not help with overhangs.

      The only option I am aware of to resolve both the Z seam and overhang issue is to increase the ambient temperature of the build area (by using an enclosure) and use a cooling fan. It can be as simple as placing a cardboard box over the entire printer while printing. Please be careful with this since cardboard is flammable. Another good option for an enclosure is a small photo cube to enclose the printer. Here is an example.

      posted in Tuning and tweaking
      mwolterundefined
      mwolter
    • RE: Bad command & Missing characters in Gcode since firmware upgrade

      How are you uploading the gcode to the Duet? I have seen the gcode change if you are uploading directly from the slicer. Possibly try uploading directly from DWC and download it again to see if it has changed.

      posted in General Discussion
      mwolterundefined
      mwolter
    • RE: PanelDue Improvement Tips

      @zapta said in PanelDue Improvement Tips:

      @wesc said in PanelDue Improvement Tips:

      My #1 feature request is an option to sort the gcode filenames by date. 99% of the time I want to print the file I just uploaded.

      Same here. I care mostly about the recent files.

      Having a Repeat Last Print button would be nice.

      As for the Home X, Y, Z, buttons, I never use them, just the HomeAll button.

      Can also save real estate by eliminating the time left line (we don't need 3 different estimation) and having a single one, e.g. below the Baby Step button.

      I think that the thing that Panel Due needs the most is a simple firmware upgrade process that is sone automatically when installing a new RRF firmware. That way it will be improved and flourish.

      Agree with everything here.

      posted in PanelDue
      mwolterundefined
      mwolter
    • RE: Bed Heater no Longer Visible after Updating to 3.01-rc12

      Do you have the following right after the M950 defining the bed heater?

      M140 H0
      
      posted in Beta Firmware
      mwolterundefined
      mwolter
    • RE: Hotend modes "off", "standby", "active"

      @Plohish

      Bed Status Commands

      Standby: 
      	M144
      	
      Off: 
      	M140 S-273.15
      
      Active: 
      	M140 S110 ; set bed active and to 100c
      
      posted in Tuning and tweaking
      mwolterundefined
      mwolter

    Latest posts made by mwolter

    • RE: Remote Filament Storage Box tubes give too much friction

      @gallaghersart Ran into the same issue and switched to 3mm ID 4mm OD PTFE tube and it was resolved. Found this eBay listing which was a better value and the seller will combine orders for longer lengths.

      https://www.ebay.com/itm/2M-PTFE-Teflon-Tubing-for-Bowden-Tube-3mm-ID-4mm-OD-3mm-3D-printer-Extruder/353092711873

      The next step is to add a feeder extruder to the filament box but not sure it's necessary.

      posted in 3D Printing General Chat
      mwolterundefined
      mwolter
    • RE: Fixing eccentric drive pulleys?

      I've found the pullies can be easily deformed by over-tightening the grub screws. If you have a new pulley, try installing it while paying close attention to the amount of force on the grub screws.

      posted in Tuning and tweaking
      mwolterundefined
      mwolter
    • RE: XYZ-cube with a pre-shadow?

      @strips Looks much better. Glad I could help.

      posted in Tuning and tweaking
      mwolterundefined
      mwolter
    • RE: Fine tuning the Magnetic Filament Monitor

      @T3P3Tony
      Thank you, that worked. I believe the issue was that no magnet was detected. Mounted the board in it's proper location (next to the magnet) and it reported v3. With it just plugged and hanging in it reported v1. This is a Duet3 no SBC on v3.1.1. Thanks again.

      posted in Filament Monitor
      mwolterundefined
      mwolter
    • RE: Fine tuning the Magnetic Filament Monitor

      @T3P3Tony Not sure if you saw the last post but would like to get this machine running again. Thanks!

      posted in Filament Monitor
      mwolterundefined
      mwolter
    • RE: XYZ-cube with a pre-shadow?

      ABS not needing cooling is actually a common misconception. It does need part cooling for small prints with layer times that do not allow the print to cool enough before starting the next layer. It's also often necessary on overhangs and bridges.

      A simple resolution to increase the later time is to add a second or third item to be printed. This helps quite a bit with the issue at Z seam, but this will not help with overhangs.

      The only option I am aware of to resolve both the Z seam and overhang issue is to increase the ambient temperature of the build area (by using an enclosure) and use a cooling fan. It can be as simple as placing a cardboard box over the entire printer while printing. Please be careful with this since cardboard is flammable. Another good option for an enclosure is a small photo cube to enclose the printer. Here is an example.

      posted in Tuning and tweaking
      mwolterundefined
      mwolter
    • RE: Fine tuning the Magnetic Filament Monitor

      @T3P3Tony
      I have three and they all were purchased late 2019. This particular one was purchased November 16, 2019 from Filastruder. They all say 1.7 but I believe they are 1.7a.

      IMG_3176.jpg IMG_3175.jpg

      posted in Filament Monitor
      mwolterundefined
      mwolter
    • RE: XYZ-cube with a pre-shadow?

      @strips
      To me, it looks like your filament does like higher temperatures but is in desperate need of part cooling. 240 and 245 look good and would be correct if the filament is true ABS.

      There are some concerns such as over extrusion and burnt filament at the layer change. Would recommend increasing your retraction distance and or trying negative restart for retraction. ABS tends to need a little more retraction since it oozes and flows out the hotend a little easier.

      posted in Tuning and tweaking
      mwolterundefined
      mwolter
    • RE: Fine tuning the Magnetic Filament Monitor

      @T3P3Tony
      Thank you for the reply. Unfortunately that firmware file also reports as v1. Not sure if this makes a difference or not but Release 44a and the file you uploaded are both 32,204 bytes.

      posted in Filament Monitor
      mwolterundefined
      mwolter
    • RE: XYZ-cube with a pre-shadow?

      Looks a lot better!

      There are still overhang issues and the Z face still shows signs of over extrusion above and below the Z.

      Looks like you have an ABS blend that does not require higher temperatures or your extruder temperature might not be accurate. Would recommend trying to lower the temp a little more. Try printing a cube at 215 and another at 210 to see how the overhangs and over extrusion looks.

      PS In my experience, having to use coasting is a sign of over extrusion.

      posted in Tuning and tweaking
      mwolterundefined
      mwolter