Download:
XYZPrinting puts out a nice printer “DaVinci” with an enclosed build platform (helps immensely with build quality). Unfortunately the software that comes with it is abusive to the end-user, but we can put in our own stack! Caveat: the ABS spools that the company sells (high-quality product, by the way) cause the machine to destroy itself if you run the machine past the end of the spool… which wouldn’t happen if one just used their software. So long as you don’t run the machine while you sleep, I’ve run out two spools without too many problems.
The DaVinci is designed to plug in via USB so the user can send their files over for printing. The software that ships with the printer also uses this interface to update the firmware of the printer, which may or may not be in the user’s interest. Since we’re going to use our own software stack, we’ll just ignore the USB interface.
Pictured: Signal to users that this printer should never be plugged in by USB.
This printer is basically a reprap clone, and will run slightly modified gcode that standard tools (such as Slic3r [settings file]) can produce. If the factory-installed firmware is old enough, you can remove the SD card from the control board, overwrite one of the three demo prints, and use the “Build Sample” interface from the menu on the front of the machine to make arbitrary prints.
Pictured: A coping saw removes a small amount of plastic from the hinge.
Pictured: The stock SD Card is accessible after removing all screws (Torx T10) from the control board.
Pictured: An “SD Card extender” is installed to make the SD Card easier to acccess.
I printed a few cubes using this method, and found the printer would slightly over or underprint dimensions fairly consistently. I tried scaling a few objects by my observed dimensions, and have been super satisfied with the results so far! I either apply them directly when modeling, or by loading an .stl into OpenSCAD and applying global scaling:
sx = 15.92/16.0; sy = 16.30/16.0; sz = 14.88/16.0 * 93.0/88.0; scale([sx, sy, sz]) { import("file.stl", convexity=3); }
Pictured: The ABS juice method was used to keep the object adhered to the bed.
Pictured: A post-calibration, perfectly dimensioned cube!
After testing the method, it was time to get down to business and write some tools to help me go from an .stl to a printed object! First up was a script that took standard Slic3r gcode and made it palatable for the DaVinci:
FILE=$1 OUTPUT="/home/matti/SAMPLE01.gcode" HEADER='; filename = composition.3w ; machine = daVinciF10 ; material = abs ; layer_height = 0.3 ; total_layers = 173 ; total_filament = 0.00 ; extruder = 1 G21 ; set units to millimeters M107 M190 S85 ; wait for bed temperature to be reached M104 S225 ; set temperature M109 S225 ; wait for temperature to be reached G90 ; use absolute coordinates G92 E0 M82 ; use absolute distances for extrusion G1 F1800.000 E-1.00000 G92 E0 G1 Z0.600 F3600.000' echo "$HEADER" > "$OUTPUT" sed -e '1,/G1 Z0.600 F3600.000/ d' "$FILE" >> "$OUTPUT"
Next, I swapped out the stock SD card for one of Toshiba’s “FlashAir” wireless-enabled SD cards and wrote up a tool to upload files to it:
import argparse import requests # pip install requests parser = argparse.ArgumentParser() parser.add_argument('filename', help='basename of output file') parser.add_argument('url', help='basename of output file') args = parser.parse_args() with open(args.filename, 'rb') as f: r = requests.post(args.url, files={'file': f})
Then, I tied everything together with a VM I named ‘davinci’ to hold all of my tools and wrote a script to upload an .stl from any computer:
set -e # immediately exit if any child command returns nonzero function echo_stderr { echo "$1" 1>&2 } if [ $# -lt 1 ]; then echo_stderr "usage: $0 model.stl" exit 1 fi if [ ! -f "$1" ]; then echo_stderr "$1 not a file!" exit 1 fi NAME=$(basename "$1") CHECKSERVER='ping -c 1 davinci' echo_stderr "$CHECKSERVER" $CHECKSERVER CHECKPRINTER='ssh davinci ping -c 1 printer' echo_stderr "$CHECKPRINTER" $CHECKPRINTER SCP='scp ' SCP+="$1" SCP+=' davinci:/tmp/' echo_stderr "$SCP" $SCP SLICE='ssh davinci slic3r /tmp/' SLICE+="$NAME" SLICE+=' --load /etc/slic3r.ini --output /tmp/' SLICE+="$NAME" SLICE+='.gcode' echo_stderr "$SLICE" $SLICE CONVERT='ssh davinci /usr/local/bin/convert-gcode /tmp/' CONVERT+="$NAME" CONVERT+='.gcode' echo_stderr "$CONVERT" $CONVERT UPLOAD='ssh davinci python /usr/local/bin/upload-file.py /home/matti/SAMPLE01.gcode' UPLOAD+=' http://printer/upload.cgi' echo_stderr "$UPLOAD" $UPLOAD
Send me an email, then I'll place our discussion on this page (with your permission).