You are not logged in.
@sgraber:
a little off topic: even if it was all fine til now, since it looks like you use the printer commercially, wouldn't it be a good ide to invest the 40 bucks and buy a better Pi? I guess it's gonna save you tons of cash in the long run (maybe over 2 oder 3 prints)
Hi shahin,
currently the "Syscall After Each Layer" is executet after the platform is raised. Is there a special reason for that? I am turning my projector LED OFF with this syscall, so currently the printer still has the LED ON while moving up. This contributes to DMD Chip degradation quite a lot since it takes like 4 or 5 seconds to move up, while only exposing for 0.7 seconds.
Is there a way to fix this (if it's a bug), or would you need to add another syscall function when exposure is done?
Cheers,
Adam
I'm using python to control my Projector via I2C, which is also used for the SSD1603. You need to install python-smbus for that. I don't know if there are any py libraries for the screen though. I have a handful of those lying around, maybe i will try it out someday. Let us know if you find out sth.
Hi, thanks for pointing out that it might be a browser issue. My browser didn't show me form validation errors. Projector resolution was 0.
Working fine now!
Yes, i know how it works. Will compare it to other setup pages.
Hi all,
i've started publishing details of my build to hackaday.io. Check it out below and give me a thumbs up if you like it!
I will post lots of photos of the build and of prints in the future.
https://hackaday.io/project/16701-adam-dlp-3d-printer
Cheers!
Hello all,
Some of you, who remember me, may know, that I have been using a trinamic control board to control the motor due to noise with the regular drivers.
There were a couple of problems with this solution:
- driver board is kind of expensive (about 100 Eur), since it's 3 axis.
- I had to write custom firmware, since it doesn't support gcode.
- it had to be wired up with a USB-Serial adapter, another possible point of failure
- i couldn't use nanodlp's Z Calibration features
Now, I present to you, the best of all worlds: Silent Step Stick!
It's a absolutely noiseless Trinamic driver in a stepstick compatible format. Now i can natively drive the motor in nanodlp.
There are a couple of things to read to configure the correct microstepping but the pins for voltage and enable etc. are compatible with other modules, so this whould work with shahin's schematics too.
https://github.com/watterott/SilentStepStick
http://www.watterott.com/index.php?page … &info=4107
just to hear the difference:
https://www.youtube.com/watch?v=oNAHOOolHWw
disclaimer: I am in no way affiliated with watterott shop or Trinamic. I just like the product ^^
Hello Shahin,
i've finally had some time to play around some more. I rebuilt the electronics to use the built in pulse generation. Everything works flawlessly now.
There seems to be a problem with saving configuration though:
Whenever i change any value on the system setup page and save it, it is not written to config file. There is no error output in printer.log. The "save" is completely ignored. Saving machine configuration or adding machines works. it's just the setup page.
What i've tried so far:
- install newest beta #1370
- check permissions for json files in /db
- use default config
- if i change values manually in json and reboot printer, the new value is used.
I can provide you with logfiles as soon as i'm home. Meanwhile, if you have any suggestions, please let me know. I will try asap.
Cheers
After some time off the forums i have just stumbled across this. I'm glad that someone with more experience than me had the same problem so it could be resolved.
@daer: thanks for helping out
@shahin: as always, thanks for keeping at it
cheers
nice, i will try that, thanks!
Hi Shahin, i've started printing again some time ago
Maybe you remember my random crashes while using python syscalls. It seems they have gotten worse since i've updated.
I know it's probably not a bug because it's outside of NanoDLPs stuff. Anyways, would there be a possibility to include an option to start printing immediately after startup if there's a plate that's not finished?
I would simply run NanoDLP using supervisor which could restart the process and printing could continue.
Normally, when I notice a crash and restart the printer within an hour before pigment concentration or warping sets in, the crash is not noticeable on the prints. When it happens on an overnight print, that's not really possible manually.
Let me know what you think.
Here's the last error for reference:
2016/10/03 04:26:55.111042 {"Layer":"761","module":"Image","level":"Warning","msg":"Display layer public/plates/46/761.png"}
2016/10/03 04:27:15.144819 {"Layer":"762","module":"Image","level":"Warning","msg":"Display layer public/plates/46/762.png"}
2016/10/03 04:27:35.491617 {"Layer":"763","module":"Image","level":"Warning","msg":"Display layer public/plates/46/763.png"}
2016/10/03 04:27:55.566340 {"Layer":"764","module":"Image","level":"Warning","msg":"Display layer public/plates/46/764.png"}
2016/10/03 04:28:15.717832 {"Layer":"765","module":"Image","level":"Warning","msg":"Display layer public/plates/46/765.png"}
runtime/cgo: pthread_create failed: Resource temporarily unavailable
SIGABRT: abort
PC=0x76cccf70 m=147
goroutine 0 [idle]:
goroutine 6 [syscall]:
runtime.notetsleepg(0x6b65f4, 0x1e43c196, 0x0, 0x0)
/usr/local/go/src/runtime/lock_futex.go:205 +0x4c fp=0x10a1a788 sp=0x10a1a770
runtime.timerproc()
/usr/local/go/src/runtime/time.go:209 +0x11c fp=0x10a1a7dc sp=0x10a1a788
runtime.goexit()
/usr/local/go/src/runtime/asm_arm.s:998 +0x4 fp=0x10a1a7dc sp=0x10a1a7dc
created by runtime.addtimerLocked
/usr/local/go/src/runtime/time.go:116 +0x1c4
goroutine 1 [IO wait, 41 minutes]:
net.runtime_pollWait(0x75a25f78, 0x72, 0x69ed60)
/usr/local/go/src/runtime/netpoll.go:160 +0x60
net.(*pollDesc).wait(0x10b581b8, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:73 +0x34
net.(*pollDesc).waitRead(0x10b581b8, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:78 +0x30
net.(*netFD).accept(0x10b58180, 0x0, 0x69e238, 0x10e2c020)
/usr/local/go/src/net/fd_unix.go:419 +0x21c
net.(*TCPListener).accept(0x10b3ea18, 0x2470d1ff, 0x0, 0x0)
/usr/local/go/src/net/tcpsock_posix.go:132 +0x30
net.(*TCPListener).AcceptTCP(0x10b3ea18, 0xa02f0, 0x0, 0x0)
/usr/local/go/src/net/tcpsock.go:209 +0x9c
net/http.tcpKeepAliveListener.Accept(0x10b3ea18, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:2608 +0x3c
net/http.(*Server).Serve(0x10b5a0a0, 0x6a0578, 0x10b3ea18, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:2273 +0x200
net/http.(*Server).ListenAndServe(0x10b5a0a0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:2219 +0xf4
net/http.ListenAndServe(0x10b843ba, 0x3, 0x69dc50, 0x10ab0480, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:2351 +0x90
github.com/plimble/ace.(*Ace).Run(0x10ab0480, 0x10b843ba, 0x3)
/home/pi/go/src/github.com/plimble/ace/ace.go:75 +0x3c
main.webInit()
/home/pi/printer/app/web.go:932 +0x2588
main.main()
/home/pi/printer/app/server.go:70 +0x158
goroutine 17 [syscall, 271 minutes, locked to thread]:
runtime.goexit()
/usr/local/go/src/runtime/asm_arm.s:998 +0x4
goroutine 18 [runnable]:
time.Sleep(0x540be400, 0x2)
/usr/local/go/src/runtime/time.go:59 +0xec
main.(*StatusStruct).FindIP(0x6b6a88)
/home/pi/printer/app/db.go:472 +0xe0
created by main.(*StatusStruct).Load
/home/pi/printer/app/db.go:438 +0x58
goroutine 19 [sleep]:
time.Sleep(0x2a05f200, 0x1)
/usr/local/go/src/runtime/time.go:59 +0xec
main.faultDetection()
/home/pi/printer/app/hardware-interface.go:303 +0x3a4
created by main.hwInit
/home/pi/printer/app/hardware-interface.go:29 +0x21c
goroutine 23 [syscall]:
syscall.Syscall(0x3, 0x4, 0x11b9fefc, 0x1, 0x1, 0x0, 0x0)
/usr/local/go/src/syscall/asm_linux_arm.s:17 +0x8
syscall.read(0x4, 0x11b9fefc, 0x1, 0x1, 0x1, 0x0, 0x0)
/usr/local/go/src/syscall/zsyscall_linux_arm.go:783 +0x78
syscall.Read(0x4, 0x11b9fefc, 0x1, 0x1, 0x0, 0x0, 0x0)
/usr/local/go/src/syscall/syscall_unix.go:161 +0x4c
os.(*File).read(0x10ab42f8, 0x11b9fefc, 0x1, 0x1, 0x1, 0x0, 0x0)
/usr/local/go/src/os/file_unix.go:228 +0x54
os.(*File).Read(0x10ab42f8, 0x11b9fefc, 0x1, 0x1, 0x0, 0x0, 0x0)
/usr/local/go/src/os/file.go:101 +0x7c
github.com/tarm/serial.(*Port).Read(0x10ab4300, 0x11b9fefc, 0x1, 0x1, 0x0, 0x0, 0x0)
/home/pi/go/src/github.com/tarm/serial/serial_posix.go:129 +0x50
_/home/pi/printer/app/shield.(*Conf).Read(0x6b6698, 0x11b9fefc, 0x1, 0x1, 0x1, 0x0, 0x0)
/home/pi/printer/app/shield/shield.go:90 +0x98
main.(*termStruct).readLine(0x6b6670, 0x0, 0x0, 0x0)
/home/pi/printer/app/term.go:54 +0x100
main.(*termStruct).Reader(0x6b6670)
/home/pi/printer/app/term.go:39 +0xdc
created by main.main
/home/pi/printer/app/server.go:54 +0xac
goroutine 24 [sleep]:
time.Sleep(0x540be400, 0x2)
/usr/local/go/src/runtime/time.go:59 +0xec
main.(*monitorStruct).watch(0x6c57c0)
/home/pi/printer/app/slice-monitor.go:84 +0x548
created by main.main
/home/pi/printer/app/server.go:55 +0xc8
goroutine 26 [sleep]:
time.Sleep(0x2a05f200, 0x1)
/usr/local/go/src/runtime/time.go:59 +0xec
_/home/pi/printer/app/hw.Monitor()
/home/pi/printer/app/hw/hw-monitor_linux.go:127 +0x7c
created by main.main
/home/pi/printer/app/server.go:57 +0xf0
goroutine 32 [IO wait, 2 minutes]:
net.runtime_pollWait(0x75a25f00, 0x72, 0x0)
/usr/local/go/src/runtime/netpoll.go:160 +0x60
net.(*pollDesc).wait(0x10a0f078, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:73 +0x34
net.(*pollDesc).waitRead(0x10a0f078, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:78 +0x30
net.(*netFD).readFrom(0x10a0f040, 0x10b55a8c, 0x400, 0x400, 0x0, 0x0, 0x0, 0x69ed60, 0x10a10068)
/usr/local/go/src/net/fd_unix.go:270 +0x20c
net.(*UDPConn).readFrom(0x10b300a0, 0x10b55a8c, 0x400, 0x400, 0x10ebe284, 0x4, 0x0, 0x0)
/usr/local/go/src/net/udpsock_posix.go:43 +0x54
net.(*UDPConn).ReadFromUDP(0x10b300a0, 0x10b55a8c, 0x400, 0x400, 0x10ebe200, 0xde, 0x0, 0x0)
/usr/local/go/src/net/udpsock.go:85 +0xc8
_/home/pi/printer/app/ssdp.Server(0x10b9e090, 0x2, 0x10ac28e7, 0x8)
/home/pi/printer/app/ssdp/ssdp.go:56 +0x1ec
created by main.afterIP
/home/pi/printer/app/server.go:82 +0x90
goroutine 8 [sleep]:
time.Sleep(0x7e11d600, 0x3)
/usr/local/go/src/runtime/time.go:59 +0xec
main.WifiStatus()
/home/pi/printer/app/wireless.go:106 +0x32c
created by main.wifiConnect
/home/pi/printer/app/wireless.go:22 +0x7c
goroutine 399 [runnable]:
time.Sleep(0xf4240, 0x0)
/usr/local/go/src/runtime/time.go:59 +0xec
main.waitPinBlock()
/home/pi/printer/app/hardware-interface.go:53 +0x1ec
main.processInternalKeyword(0x10e58300, 0x3, 0x3, 0x0, 0x0)
/home/pi/printer/app/gcode.go:66 +0x15f8
main.gcodeExecute(0x10eefff3, 0xb)
/home/pi/printer/app/gcode.go:42 +0x18c
main.gcodeSend(0x10ab2e60, 0x11, 0x10b040a0, 0x96)
/home/pi/printer/app/gcode.go:29 +0xd8
main.printLayer(0x2fd, 0x5bd, 0x2fe)
/home/pi/printer/app/printing.go:192 +0x59c
main.startPlate(0x2e, 0x1)
/home/pi/printer/app/printing.go:77 +0x368
created by main.printerStart
/home/pi/printer/app/web.go:700 +0x134
goroutine 50 [sleep]:
time.Sleep(0xf8475800, 0xd)
/usr/local/go/src/runtime/time.go:59 +0xec
main.updateControlPanel()
/home/pi/printer/app/server.go:173 +0x28
created by main.afterIP
/home/pi/printer/app/server.go:84 +0xf8
trap 0x0
error 0x0
oldmask 0x0
r0 0x0
r1 0x1a37
r2 0x6
r3 0x0
r4 0x76ddd094
r5 0x7cfa5460
r6 0x0
r7 0x10c
r8 0x1
r9 0x610ff920
r10 0x10e5e4b0
fp 0x698694
ip 0x7cfa5920
sp 0x7cfa4b00
lr 0x76cccf44
pc 0x76cccf70
cpsr 0x20000010
fault 0x0
Just FYI, I have that light engine and it works flawlessly! There was nothing i needed to tweak in HDMI settings. There is a problem of software availability so i needed to do some coding to get the LED settings correct,
edit:
It is an absolutely amazing update to an SLA printer. Uniform distribution and sharpness across the build plate. The price Tag is a little high for hobby use but there are more expensive hobbies
this sounds really nice if you have lots of models and you need to print old models in the future.
I don't know if you agree but one of my main issues is finding models i printed before, the arrangement on the plate are not that big of a problem
I imagine a tool which has a database with previews where i could find by name or just browse through the gallery and then simply copy the files to another directory. opening up big stl files usually takes a long time so having a preview database would be ideal.
For me, definitely the most time spent is on generating good supports. I have not found a single program that gives good results for manual support placement.
Magics is shit, as it is super slow and much too expensive.
Creation Workshop has not enough parameters
B9 is the one I use so far but it's also very limited and can make you go mad at times...
I'm slowly creating rhino and grasshopper scripts but it's nevertheless very complicated..i guess support generation is where the money is xD
In most cases gravity takes care of backlash, so there's not even a need for an expensive ballscrew for SLA printers. The bottleneck is clearly not Z, but pixel size. There are banding artifacts even with antialiasing that can be really annoying for demands in very high visual quality of the printed models. Lots of people brag about their 5 micron z resolution while they print on a platform which has 50+ micron XY resolution.
What would really interest me is how Env1s1ontec gets their machines to print such smooth models.
I agree, static delay is not much to worry about. Thanks for the extensive explanation
does drawing speed have any negative impact on the print? The thing that always worries me since Creation Workshop is irregularities in exposure times. As i have times around 950ms for 50micron layers, having a variance of 100-200ms would significantly show in prints, especially for tall, vertical walls.
With CW i measured variance of up to 500ms, which was not acceptable. I have no issues whatsoever with NanoDLP so far.
For SLA type printers there are many more worries regarding resin choice, vat release, projector calibration which play a far greater role in accuracy than Zlayer height. Any chinese stepper with a half decent linear unit can easily satisfy Z axis needs.
Hi shahin,
can we have an option to get rid of the birds? With every new update i forget to remove the .ogg file and then they surprise me....out of nowhere...
It is, so i can evaluate it at the end of a print and see if there was any positive influence of dynamic lift. For now it's proven kind of complicated to accurately predict peeling time because not only exposed area, but also number of areas and placement have an influence. I'm diving into finding some kind of metric of weighing in all those factors via image processing.
got it, thanks. I'm gonna use it internally to judge the performance of dynamic lift.
I don't believe this will be useful for others. I would have used it for collecting data about release times versus area to generate a formula for dynamic lift.
I have solved it now by reading the JSON into an excel sheet and collecting sample data over the whole print for graphiing.
Hopefully i can deduce some type of formula. I will keep you informed about the progress.
What would be helpful to me (maybe also others) would be a display of average layer time (maybe right next to the ETA)
Cheers^^
Hi,
Is there a way i can get the current layer totalArea and largestArea via JS to display it in UI? I'm finally getting around to implementing dynamic lift and having those values displayed in the frontend would help me a lot. Maybe also the number of filled areas?
oh and about the dev environment: I use windows and it was really easy, just copy files and run server. perfect.
I use FEP Vat.
if parts of the print break off in the beginning due to small supports they of course get stuck to the vat. Especially if i print overnight and the broken off parts are small it's really hard to remove them from the vat without damaging the FEP film because they need to be scraped off .
Also it's easy to have floating debris while trying to remove.
In those cases i simply expose the whole area for 3 to 5 seconds. This fuses all small broken off parts together to form one layer, that layer is fairly stable and easily removed taking all shrapnel with it.
I remember reading on the forum about someone who does the same thing. I've been doing it by manually replacing the red calibration with a white PNG until now.
It's alright if you don't find it useful, that's why i try to split all commits to fairly granular features to cherrypick.
Let me know if you have any questions.
Cheers^^
I have now forked the interface, already did some small changes to make it a little more convenient for me.
I don't know what your (or the general) workflow for this would be, but if you like some of them i'd be happy to submit pull requests.
I'm a bit rusty with web development but i know some good people who will help me out if i need something, so those changes could make their way into your version.
just let me know what you think: