Dune Weaver - A 3D-printed Kinetic Sand Table

Dune Weaver - A 3D-printed Kinetic Sand Table

Boost
751
1677
264
GIF

Print Profile(2)

All
X1 Carbon
P1S
P1P
X1
X1E
A1
H2D
A1 mini

0.2mm layer, 2 walls, 15% infill
0.2mm layer, 2 walls, 15% infill
Designer
19.3 h
8 plates
5.0(20)

0.2mm layer, 2 walls, 15% infill, 75% A1 mini compatible
0.2mm layer, 2 walls, 15% infill, 75% A1 mini compatible
12.5 h
9 plates
4.3(6)

Open in Bambu Studio
Boost
751
1677
264
253
718
122
Released

Description

We are starting a new Discord channel to help with troubleshooting and feedback. I will prioritize Discord over chat and comment. Please join us here: https://discord.gg/YZ8PTezVHt. If you have trouble with your build, please post in #qna-dune-weaver. 

My all new 10 inch tabletop design is now available here: https://makerworld.com/en/models/896314#profileId-854412 

If you don't want to glue the tabletop together (it can be a pain to do), I've made another design to use an IKEA tray for the tabletop! Check it out here: https://makerworld.com/en/models/865113#profileId-816175 

Update: 

  • 2025-03-07: The recommended hardware for this project has been changed from Arduino + CNC Shield to a single DLC32 board. If you're starting this project now, please order the DLC32 board instead. The assembly instructions have been updated. 
  • 2025-01-24:
    • Hardware update
      • Change rot gears to herringbone style => more stable
      • Change inout gears to helical => quieter.
    • Software update:
    • Added play pause button
    • Added schedule play functionality
    • Added progress bar
  • 2025-01-14: Huge UI update, thanks to Thokoop! 

  • 2025-01-13: Added playlist function and sipograph mode. Please update the software by running `git pull` and rebuild the docker image if you're using a RPI with `docker-compose up -d`.
  • 2024-12-08: Added more detailed instructions for RPI
  • 2024-12-05: Added instructions to add a jumper between EN/GND on the CNC Shield. If you run into issues, send me a message (pls be as detailed as you can, include pictures and what you tried), and I'll get back.
  • 2024-12-04: The right motor should be NEMA 17 42-23, NOT 42-34 like what I listed. Thanks Thokoop for letting me know.
  • 2024-12-04: I tested a pair of TMC2209 motor drivers, and the result was amazing! The motor noise is almost silent now, running at a lower speed and significantly quieter at high speed. It's not entirely a drop-in replacement, however, so I updated the assembly instructions for it. I also added a recommended power source in the BOM.

Warning:

  • Please be mindful that if you print a scaled version that I do not publish, screw holes may be too small, part tolerance may not work, the motors may not fit, and my code is not calibrated to the smaller size.
  • I tried to make it so that it's super easy for everyone to build this. If you can follow instructions, you can build this. However, keep in mind that this is probably more complicated than most 3D-printed projects out there. If you need help, please join our Discord channel (https://discord.gg/YZ8PTezVHt), use the qna channel and provide us with as much information as you can provide (image, video, what you tried, etc.). Me and the community will try our best to help.


I fell in love with the idea of a kinetic sand table a while back. It combines art, engineering, programming, and tinkering perfectly. Unfortunately, most of the open-source versions often require a lot of hardware. There really was not a 3D printing-friendly design out there, so I set out to do it myself and learn how to 3D model in the process.

But first, I must give credit where it is due. I did not come up with this design myself, but was greatly inspired by the work of Newsons Electronics, a fellow Canadian. I took this wood-cutting design and adapted it to be 3D printing friendly. However, I completely rewrote the Arduino code and created a back-end and front-end web interface to control it via a web interface when you connect it to a Raspberry Pi or a computer.

 

Introducing Dune Weaver, the most 3D-printing-friendly kinetic sand table on the internet. The table is 420mm in diameter and 136mm in height. The device is a motorized sand table that creates stunning, intricate patterns in sand using a steel ball guided by hidden magnets. Powered by an Arduino and a CNC shield, the table’s motors move the ball smoothly across a fine layer of sand, drawing mesmerizing designs. With the Arduino connected to a Raspberry Pi or a computer, you can control the table via a web interface, selecting patterns, uploading custom designs, or previewing the ball’s motion.

 

There are two motors; one controls the angular movement, and the other controls the radial movement of the ball. Note that with this design, when the angular axis moves, the radial axis also moves along with it mechanically. We have to address this problem in the software: offset the radial axis's movement by how much the angular axis moves.

 

If you opt not to use a Raspberry Pi or a computer, you are limited to a couple of patterns that can be fitted into the very limited memory of the Arduino. However, if you connect the Arduino to another device, we can now use the Serial connection to send instructions over to the Arduino to be executed, thus removing this limitation.

 

 

Both the base and the tabletop are 3D printed. Note that since we have to cut the tabletop into four pieces, there's a fair bit of glueing and sanding involved to make sure that both sides of the tabletop are smooth. If you have access to a wood workshop, I would recommend creating a wooden surface instead.

 

All in all, I spent about CAD$100-150 to create this table. Not bad, since the cheapest one that you can get out there is about $500 and is half the size of this. I was planning to fit all of the hardware in the base, but I ended putting everything in an IKEA cable management box. The table looks pretty neat on an IKEA KYRRE stool.

 

I really enjoyed working on this project and finally got to share it with the world! I spent about a week 3D designing the hardware and about a month on the code. I would love to see if you ended up making one. Please join our discord channel if you run into any issue or have a feedback https://discord.gg/YZ8PTezVHt 

 

Enjoy the Dune Weave!

Boost Me (for free)

If you like my work, a boost would be appreciated! Want to buy me a coffee ☕️? https://www.paypal.com/paypalme/tuanchris


Documentation (1)

Assembly Guide (1)
Dune Weaver - Assembly instructions-8.pdf

Bill of Materials

List other parts
  • DLC32 + 2x TMC2209 motor drivers x 1: https://www.aliexpress.com/item/1005006042723755.html
  • 1mm EVA foam (optional) x 1: https://a.co/d/0Zw15aS
  • Steel ball (8-12 mm works best) x 1: https://a.co/d/4fQMlv6
  • 16x8mm magnet x 1
  • Fine sand x 1: https://a.co/d/9txb4Er
  • LED strip at least 1.5m (optional) x 1
  • 40cm diameter round tempered glass (optional) x 1: https://a.co/d/alpKMfa
  • M3x10mm screw x 8
  • Raspberry Pi (optional) x 1
  • Nema 17 Stepper Motor 42-23 3D Printer Motor DC 1A-3.4V x 2: https://a.co/d/229nVtK
  • 12V Power Supply x 1: https://a.co/d/5PtIopH

Download BOM

Comment & Rating (264)

(0/5000)

Boosted
Edit: As requested I've uploaded my version: https://makerworld.com/en/models/922851#profileId-885323 Thanks again for the great work! Really enjoyed the process and I can’t wait to top it off with the glass I ordered. Some general thoughts and learnings: - I wasn’t able to run the app via docker on my Raspberry pi 2 Model B because of dependency and compiling issues. I assume the hardware is just to old. Running app.py directly works fine so I created a service that starts it when booting up. - I recommend using the TMC2209 motor drivers since the DRV8825 made a high pitch sound and is indeed louder in general. - I did not need the faux leather when using baking soda. - Setting the Vref correctly on the drivers is really important. By default (at least in my case) both types were set to high causing the motors to heat up way to much. For the 8825 I’d set the potentiometer screw around 0.44V and for the 2209 around 0.73V using a multimeter with black on ground and red on the potentiometer. (Based on the 1A specification of the motor I used and a calculation I found online, please double check both of these yourself) Because I used two of the IKEA trays I made some adjustments: - I redesigned the foundation to make it fit as tight and low profile as possible in the tray. - I still have to reprint two of the side rings because of a 0,42% XY dimensional inaccuracy of my P1S (I read that it’s not uncommon so I just compensate by scaling the model in Bambu Studio on the X and Y axis). New filament is on it’s way - Used a N52 magnet of 20mm x 10mm and adjusted the arm, used a 10mm ball since I like the ‘resolution’ a bit more than the 12mm. The motion is still a bit jittery but the end-result is great. I will keep looking for a way to improve but for now it’s good enough - Added a dc connector and switch to have everything contained within the tray. Not sure if the magnet is going to affect the electronics in a significant way but so far so good🤞🏼 (new 1 to 3 splitter and more powerful 5A adapter are also on the way ) - Some other minor adjustments, for example the height of the motor cogs to give it a bit more margin that prevents collision with the arm. I have some ideas for the web app as well, like auto boot up on raspberry pi, running default pattern on boot and stuff like that, so I’ll see if I can make that work.
(Edited)
The designer has replied
6
Reply
Merry Christmas! Wow, I love your build. I thought of miniaturizing the base to fit into another tray, but your idea turned out great! Do you want to post a remix of my model? - I've seen feedback of docker not working on some device, but I couldn't reproduce the problem. May be check this out? https://github.com/tuanchris/dune-weaver/issues/1 - For the jittery motion, I think it's because the base is too thick. I was thinking of switching to a carbon steel ball for better magnetic attraction, but I haven't had a chance to do it yet. - Let me know if the 5A adapter makes any difference. I'm using a 1A one, and it works fine. - For the code base, feel free to make a PR of new features! Start up pattern should be easy enough to do. Thanks for sharing your build and feedback!!!
3
Reply
Boosted
Replying to @tuanchris :
Thanks, appreciate it ! Merry Christmas to you too. I wasn't sure if you would allow a remix because currently the license says it's not, but I can clean up my project file and upload it as remix indeed. I've seen the issue on github as well indeed. But I think my issues were mainly because of my old raspberry pi 2 where it needed to compile scipy and numpy itself and it just legacy hardware at this point I would say. I also considered a carbon steel ball but I could not easily find it yet, they all seem to be Chromium-Alloyed. I will continue to look for it. I do like the sturdiness the 10mm thick bottom provides. The more powerful adapter is mainly because I'm running the 3 devices from the same power source (currently 2.5A). It works fine but when the motors are moving, the led strip flickers a bit. I measured the voltage and it drops a bit below 11.8V when the motors are spinning. I guess it's because the COB led light strip is also running on 12v and takes a bit more power than a 'regular' led strip and the raspberry pi is fed with a 12V to 5V voltage regulator which is maybe also a bit more inefficient than it would have it's own 5v power source. I'm not really a python developer, so I have to figure some stuff out. It kind of works now. It automatically boots up and it executes a default_pattern.thr file in the custom_patterns folder. But before it starts the pattern it homes twice, first on initial power up (by the arduino itself I assume) and then when the app.py is loaded on the raspberry. I'm thinking of keeping and fetching the current location and then detect if it still needs to home but I might also have to adjust the firmware a bit. I'll make a PR when it's ready :)
2
Reply
Replying to @Thokoop :
Sounds good! You can also disable the automatic homing in setup() and call it on demand in python. That way, you can track the last sent theta to know where the ball is. If theta = 0, no need to call homing and vice versa. I revised the license, so my models should be available for remixing now. Please feel free to do so. And thanks for the other notes. Very helpful.
2
Reply
Boosted
Hi, thank you for the great project. I´m almost done with mine. My only problem is, that the axis stop when i draw something. The timing feels random. I guess the serial stream to the arduino fails sometimes. Im using a old raspi model 3 B i still had at home. Did someone else had the same problem?
The designer has replied
0
Reply
Hi, I have identified a bug and am working on a fix. Meanwhile if you want to test out the new code, I can use an extra hand. Please re-flash the arduino as well. https://github.com/tuanchris/dune-weaver/tree/feat_playlist
0
Reply
Boosted
Replying to @tuanchris :
Hi, thank you for the response! Just cloned the feat_playlist branch and flashed the arduino. Two runs have worked. On the third run i ran into the same issue again. This is what debuger tells me. Edit: Also im missing the set speed feature in this branch :)
(Edited)
0
Reply
Replying to @luiser :
did you rebuild the docker image with `docker compose up -d --build`?
0
Reply
Boosted
Got it all assembled (LED and top on order now) Hooked up the Pi to the Arduino and testing it out. First time using an Arduino so had to do a bit of googling on what to do there. https://youtube.com/shorts/dQHguj5dR1I?feature=share
The designer has replied
0
Reply
Looks nice, thanks for sharing! To reduce the noise, you can use faux leather, or baking soda. There's some weird wrapping around patterns, was that intentional?
0
Reply
you may want to slow down the speed as well :D
0
Reply
Boosted
Replying to @tuanchris :
I have a faux leather base and the finest sand I could find, the most noise seems to be from the circular gears. What are the expected values/range in the Controller Set Speed app?
0
Reply
so cool. i printed on a Prusa mk4s and had to scale the top plates down to 99 percent haha but i made it work with some modded pegs also my steppers i had from old projects were 40 mm so i modded the base and a few other parts to accommodate. I found a scrap of some thin fake leather and glued it to the top so far it seems to be working out well. I have thought about adding some lumps on the top gear to keep it from tipping or tilting when magnet is extended. so, ya I mainly wanted to let you know I think it's awesome you shared this with all of us and I apricate it.
The designer has replied
2
Reply
This is so cool. Thanks for sharing your table! Looks like you're using marble dust? Try using fine sand to lessen the clump. Can you elaborate on your idea to stop the rot motor from tipping?
0
Reply
Replying to @tuanchris :
So on top of the main gear I put some small foam pieces to keep slight pressure down with out adding noise. And then on the ring that fits in the main gear I made a new one that fit snug and also has the center hole smaller and I added a ring on top of the central mount ring for the gear to ride on so the teeth won't be grinding on the original central mount ring I also used the bigger gear you made for the outer motor and she works awesome. I'm fixing my foam pads I just tossed those on to test last night. My next goal is to move the backend to a pi and model a case in to the side of the base with a fan so all I need to do is plug in to power and then shred the dunes haha thanks again man you rock I gota get you a coffee yet.
1
Reply
Replying to @tuanchris :
Oh ya the sand is baking soda I've used it on my large tables I've made. It looks chunky at first but after you smash em then it looks normal
0
Reply
Boosted
Love this design. I’ve done a few modifications to it for fun.
The designer has replied
1
Reply
Looks awesome. What power supply are you using, and is it enough to also run LED strip?
0
Reply
Boosted
Replying to @user_3925517799 :
Should be plenty of overhead on that power supply. it’s a Meanwell lrs-100..
0
Reply
looks awesome, thanks for sharing your build. the enclosed base looks neat!!
0
Reply
That project looks fantastic! Maybe an ESP32 board like Makerbase DLC32 could be an easier solution than Arduino+Shield+Raspberry?
The designer has replied
0
Reply
hmm why do you think it's an easier solution? Without a CNC shield, wiring would become a lot more complicated. The ESP32 still won't have enough memory to store patterns on memory, so we'd like need a RPI any way.
0
Reply
Replying to @tuanchris :
Boards like Makerbase DLC32 include the CNC shield, so it would be just connecting the stepper motors, no wiring at all. And it has 8MB Flash, small part of it is required for the program but in the remaining part with a flash file system (SPIFFS) there should be enough space for plenty of pattern.
0
Reply
Replying to @user_3945391317 :
Oh you are right, I thought you meant a regular ESP32 board. Yes, I don't see a reason why the DLC32 would not work. It's not readily available where I am and a bit more expensive, though. I'm also not familiar with wrting a web app on an ESP32, so that's why I used a Raspberry Pi.
0
Reply
Boosted
Awesome project, looking forward to making it. Started with printing and in the meantime ordered the other/electronic parts. I could not really find the exact brand for the cnc shield kit but I guess the electronics are exactly the same: https://amzn.eu/d/hHEthpM I also only could find a 16mm x 5mm (instead of 8mm) so I will try with one or otherwise two stacked.
The designer has replied
4
Reply
thank you for the boost. you can create an insert using shapes in bambu studio to fit your magnet of choice! https://wiki.bambulab.com/en/software/bambu-studio/subtract-a-part
0
Reply
Boosted
Replying to @tuanchris :
Thanks! I will find a way with the magnets. But I have the feeling the motor listed in the BOM is incorrect. According to that the motor (housing part) should be 34mm high right? I‘ve got that one but it seems 10mm to tall and in the assembly instructions the motor looks to be indeed lower. Screws lined up perfectly though so everything else seems to be ok. I’m thinking of scaling the base connectors of plate #2 with +10mm (to 55mm) but then also the extruding parts that will snap into the top plate are slightly off. Do you have any ideas?
0
Reply
Replying to @Thokoop :
Oh you are right! My motors are 42-23, not 42-34. What happened was the link they sold out the 42-23 and I didn't double check. My bad. Let me update the BOM!
1
Reply
Amazing! @tuanchris took time to help me troubleshoot a few things, which was greatly appreciated. Made a temporary plate to finish testing, now printing a new one to fit a coffee table its going on. Have to find someone to cut either perspex or glass to fit to finish it off. Am using bi-carb soda at the moment, but wonder if talcum powder may also work.
The designer has replied
1
Reply
thanks for sharing your build. looks awesome!
0
Reply
This is amazing! Such a clever design. I've printed and assembled, but am having problems with the movement. I can get it to move to centre/perimeter reliably, but all other movement is problematic. Most of the time when I run a pattern it does one or two movements then stops, or doesn't do anything at all. When I use one of the clear procedures, it usually just does a half circle then stops. Only once has it gone to do the entire clear process. I'm using brand new Arduino and CNC shield, DRV8825s and brand new steppers. I appreciate this is by no means a customer support channel :-) but would appreciate any suggestions for how to fix. Thank you!
The designer has replied
0
Reply
id be happy to help. Sounds like Arduino is not acknowledging that it has completed the movement. can you make sure all of the code are up to date? you may want to delete and clone the repo again. feel free to dm me with picture or video if it still does not work.
0
Reply
Replying to @tuanchris :
Thank you! I will rebuild the pi and Arduino and see if that helps any.
0
Reply
Replying to @tuanchris :
So I've rebuilt the Pi and reuploaded the Adruino code and still the same result. The video https://www.youtube.com/watch?v=9xEMy9bjJIo shows what happens when I run the simple Star pattern. Just one movement and then stops.
0
Reply
This was a really fun project, congrats on all the good work you put in it. a few points from the process: - To join the tabletop i use paint tape on both sides seems to work just fine for testing. - for the outer gear i use the 16mm version file you uploaded to drive on a diferent comment, the other one was too small for me: https://drive.google.com/file/d/1uOUl0xexnKty4yCbCzke30vpqIqEfdrw/view?usp=sharing - Fine sand produced alot of noice for me, using baking soda the noice is not an issue, and i'm not using any faux leather. - i had to use "docker compose", with the dash in the middle(docker-compose) it was not working for me.
The designer has replied
1
Reply
hi, thanks for your feedback. let me update the model and instructions for everyone!
0
Reply

License

This user content is licensed under a Standard Digital File License.

You shall not share, sub-license, sell, rent, host, transfer, or distribute in any way the digital or 3D printed versions of this object, nor any other derivative work of this object in its digital or physical format (including - but not limited to - remixes of this object, and hosting on other digital platforms). The objects may not be used without permission in any way whatsoever in which you charge money, or collect fees.