|
@@ -0,0 +1,258 @@
|
|
1
|
+title: Reviving an old Sparkmaker SLA printer
|
|
2
|
+description: Fixing the hardware and creating a free-software slicing workflow
|
|
3
|
+parent: 3d-printing
|
|
4
|
+position: 35
|
|
5
|
+git: https://git.xythobuz.de/thomas/gcode-tools
|
|
6
|
+date: 2023-01-03
|
|
7
|
+comments: true
|
|
8
|
+---
|
|
9
|
+
|
|
10
|
+<!--% backToParent() %-->
|
|
11
|
+
|
|
12
|
+Many years ago someone donated his Sparkmaker SLA printer to our local makerspace, the [Toolbox Bodensee](https://toolbox-bodensee.de).
|
|
13
|
+Nobody has touched it for a long time, mostly because we were not keen to work with the poisonous and stinky UV resin required for the printer.
|
|
14
|
+But recently my friend [Philipp](https://www.phschoen.de) and I took the plunge.
|
|
15
|
+Here I describe what we had to do to get it working.
|
|
16
|
+
|
|
17
|
+<!--%
|
|
18
|
+lightgallery([
|
|
19
|
+ [ "img/sparkmaker_17.jpg", "Sparkmaker SLA printer" ],
|
|
20
|
+])
|
|
21
|
+%-->
|
|
22
|
+
|
|
23
|
+### Table Of Contents
|
|
24
|
+
|
|
25
|
+* [Endstop Fix](sparkmaker_repair.html#endstop)
|
|
26
|
+* [Encoder Replacement](sparkmaker_repair.html#encoder)
|
|
27
|
+* [First Slicing Experiments](sparkmaker_repair.html#experiments)
|
|
28
|
+* [SL1 to WOW File Format Converter Script](sparkmaker_repair.html#script)
|
|
29
|
+* [Configuring PrusaSlicer for the Sparkmaker](sparkmaker_repair.html#prusaslicer)
|
|
30
|
+* [More Pictures](sparkmaker_repair.html#more_pictures)
|
|
31
|
+
|
|
32
|
+## Endstop Fix
|
|
33
|
+<a class="anchor" name="endstop"></a>
|
|
34
|
+
|
|
35
|
+The printer only has a single axis, Z, with an optical endstop switch at the bottom.
|
|
36
|
+This switch is triggered by a large plastic shim screwed to the Z carriage.
|
|
37
|
+This shim was not centerd properly on this machine.
|
|
38
|
+So when trying to home, the shim collided with the housing of the switch, blocking the axis and threatening to rip off the switch.
|
|
39
|
+To fix this, just loosen the two screws in the shim and adjust the position.
|
|
40
|
+Both the shim and the print bed have some range of adjustment in the Z axis, so take care to adjust the shim in a way to still allow the bed to be properly leveled.
|
|
41
|
+
|
|
42
|
+<!--%
|
|
43
|
+lightgallery([
|
|
44
|
+ [ "img/sparkmaker_2.jpg", "Endstop trigger shim" ],
|
|
45
|
+])
|
|
46
|
+%-->
|
|
47
|
+
|
|
48
|
+## Encoder Replacement
|
|
49
|
+<a class="anchor" name="encoder"></a>
|
|
50
|
+
|
|
51
|
+After only a couple of hours of use, the encoder at the front of the machine stopped working properly.
|
|
52
|
+You can see this in the video below.
|
|
53
|
+
|
|
54
|
+<!--%
|
|
55
|
+lightgallery([
|
|
56
|
+ [ "img/sparkmaker_20.mp4", "video/mp4", "", "", "Demo of encoder problem" ],
|
|
57
|
+])
|
|
58
|
+%-->
|
|
59
|
+
|
|
60
|
+It stopped moving up, mostly only moving down, regardless of the direction it was turned.
|
|
61
|
+This meant the bed could no longer be lifted to easily remove it.
|
|
62
|
+I decided to replace it with an ALPS encoder ([STEC12E](https://www.reichelt.de/drehimpulsegeber-24-impulse-24-rastungen-vertikal-stec12e08-p73923.html?&nbc=1)) I still had lying around from repairing my oscilloscope a while back.
|
|
63
|
+
|
|
64
|
+<!--%
|
|
65
|
+lightgallery([
|
|
66
|
+ [ "img/sparkmaker_3.jpg", "Removing resin basin" ],
|
|
67
|
+ [ "img/sparkmaker_5.jpg", "Mainboard with LCD connector" ],
|
|
68
|
+ [ "img/sparkmaker_6.jpg", "Motor connector" ],
|
|
69
|
+ [ "img/sparkmaker_8.jpg", "UV LED board" ],
|
|
70
|
+])
|
|
71
|
+%-->
|
|
72
|
+
|
|
73
|
+This requires removing the base of the housing by unscrewing the outer four hex screws from the top, as well as the three hex screws on the bottom below the Z axis arm.
|
|
74
|
+Now we are allowed access to the encoder board.
|
|
75
|
+
|
|
76
|
+<!--%
|
|
77
|
+lightgallery([
|
|
78
|
+ [ "img/sparkmaker_9.jpg", "Encoder board" ],
|
|
79
|
+ [ "img/sparkmaker_10.jpg", "Encoder board backside" ],
|
|
80
|
+ [ "img/sparkmaker_11.jpg", "New encoder next to board" ],
|
|
81
|
+ [ "img/sparkmaker_12.jpg", "Fixed encoder board" ],
|
|
82
|
+])
|
|
83
|
+%-->
|
|
84
|
+
|
|
85
|
+The new encoder apparently does not have the same number of pulses per indent, so adjusting it still feels slightly weird.
|
|
86
|
+But it can now be turned normally in both directions, so it is usable again.
|
|
87
|
+
|
|
88
|
+<!--%
|
|
89
|
+lightgallery([
|
|
90
|
+ [ "img/sparkmaker_14.jpg", "Closer view of MCU on mainboard" ],
|
|
91
|
+ [ "img/sparkmaker_15.jpg", "Replacing the screws required a tool to push the nuts in" ],
|
|
92
|
+ [ "img/sparkmaker_16.jpg", "Showing some example image on the LCD" ],
|
|
93
|
+])
|
|
94
|
+%-->
|
|
95
|
+
|
|
96
|
+With the hardware back in working order I could now focus on the PC software side of things.
|
|
97
|
+
|
|
98
|
+## First Slicing Experiments
|
|
99
|
+<a class="anchor" name="experiments"></a>
|
|
100
|
+
|
|
101
|
+After getting the hardware back running the next step is generating some sliced files.
|
|
102
|
+Unfortunately the official Sparkmaker website no longer exists and the downloads from there are hard to find.
|
|
103
|
+They included a slicing software of course, but it seems to only run on Windows and Macs and it not open source.
|
|
104
|
+So I had to find some alternative.
|
|
105
|
+Most suggest using [ChituBox](https://www.chitubox.com) or [Lychee Slicer](https://mango3d.io/lychee-slicer-for-sla-3d-printers/), both can be used for free and seem to include presets for the Sparkmaker.
|
|
106
|
+
|
|
107
|
+<!--%
|
|
108
|
+lightgallery([
|
|
109
|
+ [ "img/sparkmaker_22.jpg", "Cleaning the LCD screen" ],
|
|
110
|
+ [ "img/sparkmaker_23.jpg", "The Anycubic resin we have been using" ],
|
|
111
|
+])
|
|
112
|
+%-->
|
|
113
|
+
|
|
114
|
+Philipp installed ChituBox on his machine and tried it out.
|
|
115
|
+It includes presets for the Sparkmaker that seem to work more or less.
|
|
116
|
+And the software also allows comfortable placement of support structures.
|
|
117
|
+But it didn't work perfectly all the time, we got at least one corrupted file where each slice contained the same garbage picture.
|
|
118
|
+
|
|
119
|
+<!--%
|
|
120
|
+lightgallery([
|
|
121
|
+ [ "img/sparkmaker_24.jpg", "Front view of first print" ],
|
|
122
|
+ [ "img/sparkmaker_25.jpg", "Side view of first print" ],
|
|
123
|
+ [ "img/sparkmaker_26.jpg", "Bottom view of first print" ],
|
|
124
|
+])
|
|
125
|
+%-->
|
|
126
|
+
|
|
127
|
+Even though one corner was warping strongly, the results of the first print attempt were promising.
|
|
128
|
+It is an SA-profile keycap, sliced with ChituBox with 0.1mm layer height.
|
|
129
|
+
|
|
130
|
+## SL1 to WOW File Format Converter Script
|
|
131
|
+<a class="anchor" name="script"></a>
|
|
132
|
+
|
|
133
|
+But there is one open-source alternative, [PrusaSlicer](https://github.com/prusa3d/PrusaSlicer), and it has support for SLA slicing for the [Prusa SL1 printer](https://www.prusa3d.com/product/original-prusa-sl1s-speed-3d-printer/).
|
|
134
|
+But it only produces `.sl1` files, their custom file format.
|
|
135
|
+The Sparkmaker, on the other hand, expects `.wow` files.
|
|
136
|
+Fortunately someone already [documented the file format well](https://github.com/bastirichter/Sparkmaker/blob/master/file_format.md).
|
|
137
|
+And there's also a [small GUI utility](https://github.com/Godzil/WoWTools) to visualize and modify pre-sliced `.wow` files.
|
|
138
|
+The Prusa file format was easy to "reverse-engineer", it's just a zip archive containing each slice as a `.png` file, and some settings in `.ini` files.
|
|
139
|
+
|
|
140
|
+The route to take was therefore obvious: write a script that takes `.sl1` files and converts them to `.wow`.
|
|
141
|
+
|
|
142
|
+<pre class="sh_python">
|
|
143
|
+<!--%
|
|
144
|
+include_url("https://git.xythobuz.de/thomas/gcode-tools/raw/branch/master/tools/convert_sparkmaker.py")
|
|
145
|
+%-->
|
|
146
|
+</pre>
|
|
147
|
+
|
|
148
|
+You can find it [on my Gitea server](https://git.xythobuz.de/thomas/gcode-tools/src/branch/master/tools/convert_sparkmaker.py).
|
|
149
|
+
|
|
150
|
+This is what running the script looks like.
|
|
151
|
+
|
|
152
|
+<pre class="sh_sh">
|
|
153
|
+$ convert_sparkmaker MGMKII_PrintOnePiece.sl1 mgmk2.wow
|
|
154
|
+Internal name: "MGMKII_PrintOnePiece"
|
|
155
|
+Found 414 slices
|
|
156
|
+Using following parameters:
|
|
157
|
+{'exposure_time': 15.0,
|
|
158
|
+ 'first_exposure_time': 120.0,
|
|
159
|
+ 'first_layer_height': 0.1,
|
|
160
|
+ 'layer_height': 0.1,
|
|
161
|
+ 'lift_height': 5.0,
|
|
162
|
+ 'lift_speed': 30.0,
|
|
163
|
+ 'sink_speed': 100.0}
|
|
164
|
+Height: 41.400mm
|
|
165
|
+Estimated print time: 3h 14m 32s
|
|
166
|
+Writing output to "mgmk2.wow"
|
|
167
|
+</pre>
|
|
168
|
+
|
|
169
|
+I only noticed after writing this script that [someone already did the same thing two years ago](https://github.com/PolSerg/sparkmaker).
|
|
170
|
+
|
|
171
|
+<!--%
|
|
172
|
+lightgallery([
|
|
173
|
+ [ "img/sparkmaker_18.jpg", "First print sliced with PrusaSlicer" ],
|
|
174
|
+ [ "img/sparkmaker_19.jpg", "Post-Curing a printed object" ],
|
|
175
|
+])
|
|
176
|
+%-->
|
|
177
|
+
|
|
178
|
+Thanks to the documentation linked above, writing a `.wow` file was very easy.
|
|
179
|
+I'm taking all the settings I can from the included `.ini` files, which are layer height, initial layer height, exposure time and initial exposure time.
|
|
180
|
+The settings referring to the lift of the object after each slice are not present in the file, so my script has useful defaults hard-coded.
|
|
181
|
+
|
|
182
|
+The script should also be usable for the Sparkmaker FHD, as it apparently uses the same file format.
|
|
183
|
+Of course the resolution and size need to be adjusted accordingly, both in my script and in the slicer.
|
|
184
|
+
|
|
185
|
+I noticed some interesting quirks of the printer firmware.
|
|
186
|
+It does not allow the usual style of inline comments explaining what a line does.
|
|
187
|
+When I tried adding comments to the commands in the G-Code header, the corresponding commands simply were not executed at all, which is obviously very problematic.
|
|
188
|
+
|
|
189
|
+Also the firmware does not hestitate to display both success messages at the end of a print, as well as error messages, on the LCD screen itself!
|
|
190
|
+When the LEDs are on this of course hardens the message into the resin.
|
|
191
|
+So G-Code always needs to take care to turn the LEDs off at the end of a print.
|
|
192
|
+For some reason we once managed to have the LEDs turned on with an error message showing.
|
|
193
|
+This requires draining the resin and scraping off any remaining bits.
|
|
194
|
+
|
|
195
|
+## Configuring PrusaSlicer for the Sparkmaker
|
|
196
|
+<a class="anchor" name="prusaslicer"></a>
|
|
197
|
+
|
|
198
|
+To configure PrusaSlicer I recommend starting out with their built-in profile for the SL1.
|
|
199
|
+Selecting it as the machine automatically switches the program over into "SLA mode", where the support and pad generation work differently compared to the normal FDM mode.
|
|
200
|
+You also need to enable expert mode to see all required settings.
|
|
201
|
+
|
|
202
|
+<!--%
|
|
203
|
+lightgallery([
|
|
204
|
+ [ "img/sparkmaker_27.png", "Printer Settings page in PrusaSlicer" ],
|
|
205
|
+ [ "img/sparkmaker_28.png", "Material Settings page in PrusaSlicer" ],
|
|
206
|
+ [ "img/sparkmaker_29.png", "Print Settings page in PrusaSlicer" ],
|
|
207
|
+])
|
|
208
|
+%-->
|
|
209
|
+
|
|
210
|
+The most important changes need to happen in the Printer Settings.
|
|
211
|
+There you need to adjust the display size to 854x480, the display size to 99.82x56.10mm, maximum height to 120mm, the orientation to landscape and disable all mirroring.
|
|
212
|
+
|
|
213
|
+In the Material Settings I recommend setting the exposure time to 15s and the initial exposure time to 120s.
|
|
214
|
+But this may change depending on the resin you plan to use.
|
|
215
|
+
|
|
216
|
+I'm not 100% sure about the display size, and of course this parameter is very important to ensure the printed objects have the correct size.
|
|
217
|
+I initially found [this unfinished project](https://github.com/n0sr3v/SLAcer.js) where the display diagonal is given as 4.6 inch.
|
|
218
|
+With this, and the display size in pixels, I calculated the theoretical display size.
|
|
219
|
+
|
|
220
|
+ screen width = 854 * 4.6 / sqrt(854^2 + 480^2) = 4.0099996503 inch = 101.854mm
|
|
221
|
+ screen height = 480 * 4.6 / sqrt(854^2 + 480^2) = 2.25386397207 inch = 57.248mm
|
|
222
|
+
|
|
223
|
+This is close, but the resulting objects were not quite perfect.
|
|
224
|
+So I printed a calibration cube at 5mm width, and one at 10mm width, to be able to calibrate the values.
|
|
225
|
+This gave similar correction factors in both axes.
|
|
226
|
+
|
|
227
|
+ 101.854mm * 0.98 = 99.81692mm
|
|
228
|
+ 57.248mm * 0.98 = 56.10304mm
|
|
229
|
+
|
|
230
|
+I'm sure these numbers are still not totally exact, but they seem to be close enough for my purposes.
|
|
231
|
+
|
|
232
|
+You can also [download my PrusaSlicer configuration for the Sparkmaker](files/config_sparkmaker.ini) or even for [all of my printers](files/PrusaSlicer_config_bundle.ini), if you're so inclined.
|
|
233
|
+
|
|
234
|
+As a test I printed [this model](https://www.printables.com/model/296411-metal-gear-mk-ii-from-game-metal-gear-solid-4), scaled down to 50% with a layer height of 0.1mm.
|
|
235
|
+This took about 3½ hours.
|
|
236
|
+For an early test I'm really happy with the results.
|
|
237
|
+Even scaled down the very fine connections between the body and head are strong enough to hold them together.
|
|
238
|
+
|
|
239
|
+<!--%
|
|
240
|
+lightgallery([
|
|
241
|
+ [ "img/sparkmaker_21.jpg", "Small Metal Gear Mk. II figurine" ],
|
|
242
|
+])
|
|
243
|
+%-->
|
|
244
|
+
|
|
245
|
+## More Pictures
|
|
246
|
+<a class="anchor" name="more_pictures"></a>
|
|
247
|
+
|
|
248
|
+<div class="collapse">Some more photographs I didn't use above.</div>
|
|
249
|
+<div class="collapsecontent">
|
|
250
|
+<!--%
|
|
251
|
+lightgallery([
|
|
252
|
+ [ "img/sparkmaker_1.jpg", "Badly lit look at endstop trigger" ],
|
|
253
|
+ [ "img/sparkmaker_4.jpg", "Badly lit look into printer body" ],
|
|
254
|
+ [ "img/sparkmaker_7.jpg", "Badly lit look at UV LEDs" ],
|
|
255
|
+ [ "img/sparkmaker_13.jpg", "Badly lit look at mainboard" ],
|
|
256
|
+])
|
|
257
|
+%-->
|
|
258
|
+</div>
|