Topic: XYZprinting Da Vinci 1.0 Hacking
Hello,
The thread in "The Latest in 3D Printing" section was getting longer and more detailed, so here's a new thread specifically to discuss the XYZprinting Da Vinci 1.0 3D printer and information on getting extra functionality out of it.
Original thread: http://www.soliforum.com/topic/5140/
DISCLAIMER: I am not responsible for any claim, damages, injury, or other liability resulting from use of the information provided below.
Generating gcode for this printer
Here's a Slic3r config that works for me and results in prints comparable to those sliced from XYZware, although I have not at all tried optimizing the parameters for it. Credits to harrypottar for posting a base configuration that I based this off of.
https://github.com/jasongao/DaVinci1.0/ … config.ini
I have also tried configuring Cura, but it always starts printing in the air a bit above the bed, and I haven't looked into it further. Here it is in case anyone wants to take a crack at fixing it, probably just needs a Z offset adjustment.
https://github.com/jasongao/DaVinci1.0/ … config.ini
Bed size is 200x200x200 mm, and the center of the bed is 100, 100.
There seems to be some confusion over what the real nozzle diameter is, but I'm using 0.4mm and it seems to work fine.
Setting your own extruder and bed temperatures in the gcode DOES work; the values in the filament cartridge only specify the initial temperatures to bring the bed and extruder up to while the printer is preparing to build. After it reaches those temperatures, the gcode takes over and can set the extruder and heated bed temperatures as normal.
Loading gcode into XYZware
You need to add the headers / information that the printer expects to the very top of your gcode file. Here's what the start of your gcode file should look like:
; filename = composition.3w
; machine = daVinciF10
; material = abs
; layer_height = 0.2
; total_layers = 173
; total_filament = 0.00
; extruder = 1
G21 ; set units to millimeters
M107
M190 S100 ; wait for bed temperature to be reached
M104 S230 ; set temperature
M109 S230 ; 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.300 F7800.000
G1 X81.765 Y82.676 F7800.000
G1 E1.00000 F1800.000
G1 X82.795 Y81.666 E1.10023 F540.000
G1 X83.405 Y81.116 E1.15730
blah blah blah more gcode blah blah blah
Here's an example gcode file that is ready to open in XYZware and print:
https://github.com/jasongao/DaVinci1.0/ … ware.gcode
XYZware for Mac can open gcode in plaintext as long as you add the headers above, no base64 encoding necessary.
On XYZware for Windows, you can base64 encode the gcode file after adding the headers, and rename the extension to .3w. (I have not tested if it works without base64 encoding)
Loading gcode onto the printer's SD card
landsharkmine has a nice post on how to load gcode files directly onto the SD card in the back of the printer:
http://www.soliforum.com/post/53662/#p53662
For me, using the DEMO prints on the latest firmware versions still counts down the filament usage, so I prefer to set total_filament = 0.00 in the gcode files that I load through XYZware instead.
Electronics
Here's a picture of the main board:
https://github.com/jasongao/DaVinci1.0/ … iboard.jpg
The main MCU is an ATSAM3X8E, with A4988 stepper drivers on separate carrier PCBs. You can see the SD card as well. The ATSAM3X8E is the same as in the Arduino DUE, so it may even be possible to use the existing board and run "RepRap Firmware", which is being developed for the DUET 3d printer board.
Using your own filament / Resetting the filament cartridge
If you use your own filament, you will probably want to reset the filament cartridge at some point. The printer comes with 300g (120m) of filament in a starter cartridge, and Oliver Fueckert over at Voltivo has an excellent blog post on how to reset the Microchip 11LC010 1K EEPROM in the cartridge, which is used to hold information about filament remaining, filament original capacity, initial bed temperature, initial extruder temperature, and perhaps other unknown variables.
http://voltivo.com/blog/da-vinci-reset-eeprom
The filament reset Arduino sketch only works with the Arduino Uno (and probably other ATmega168/328-based variations). It did not work with my Arduino Leonardo, and there are reports it does not work with the Mega, Pro Mini, or Micro either, probably due to the NanodeUNIO library only working with the ATmega168/328 chips.
I had some problems with very poor quality prints that were coming apart and delaminating after I reset my cartridge, but it was fixed after I downgraded the firmware from version 1.1.I back to 1.1.G. I don't know if it was fixed because the firmware loading process also reloads information onto the EEPROM, or if firmware version 1.1.I has extra checks in it to detect modified filament cartridges.
Downgrading / loading a different printer firmware
You can downgrade / reload your printer firmware using the Windows version of XYZware by disconnecting from the internet and attempting a firmware upgrade inside XYZware:
(This only works on Windows as of now, Mac version of XYZware doesn't pop up a file chooser.)
1. Disconnect from the internet
2. Try to upgrade firmware using the button in the About / Help dialog box within XYZware
3. After a while, it times out and opens a file browser to select a firmware file.
Credits to Stosh over at the Voltivo blog post comments, who helpfully uploaded a copy of firmware version 1.1.G:
http://stashbox.org/1466582/3DP01_20140 … ELEASE.bin
Printing without XYZware
THIS IS STILL A WORK IN PROGRESS
The printer shows up as regular serial port, I'm using 115200 8N1.
I have a small python script that can communicate with the printer directly, and get serial number, status, temperatures, etc. Credits to joshj for getting me some captures of the serial communication.
https://github.com/jasongao/DaVinci1.0/ … davinci.py
example usage on Mac:
python print-to-davinci.py /dev/tty.usbmodem801211 minimal.gcode
It only works with "minimal.gcode" right now, there's a checksum calculation that I haven't figured out yet, so it's hardcoded for that test file.