Dune Weaver is a project for a mesmerizing, motorized sand table that draws intricate patterns in sand using a steel ball moved by a magnet. This project combines hardware and software, leveraging an Arduino for hardware control and a Python/Flask-based web interface for interaction.
- Theta-Rho Coordinate System: Supports theta-rho pattern files to generate smooth, intricate designs.
- Web-Based Control: Easily upload, preview, and execute patterns via a Flask-based web interface.
- Batch Execution: Optimized batching for smoother table movement.
- Pre-Execution Actions: Configurable pre-execution clearing actions.
- Arduino Integration: Communicates with the Arduino over serial for precise movement control.
- Real-Time Monitoring: Continuously reads and displays Arduino responses.
- Python: Backend application logic and web server.
- Flask: Lightweight web framework for serving the UI and handling API calls.
- Arduino: Handles the motor control for the sand table.
- Serial Communication: Facilitates communication between Python and the Arduino.
- A sand table with:
- A stepper motor
- Magnet for moving the steel ball
- Arduino Uno (or compatible microcontroller).
- DRV8825 motor driver (or an alternative for quieter operation).
- Power supply and necessary wiring.
- Computer with USB connection to the Arduino.
- Python 3.7+
- Arduino IDE
- Flask
- Serial communication libraries
-
Clone the repository:
git clone https://github.com/tuanchris/dune-weaver.git cd dune-weaver -
Install the required Python libraries:
pip install -r requirements.txt
-
Set up your Arduino: • Flash the Arduino with the provided firmware to handle serial commands. • Connect the Arduino to your computer.
-
Run the Flask server:
python app.py
-
Access the web interface: Open your browser and navigate to http://localhost:8080.
• Patterns: Save .thr files (theta-rho coordinate files) in the patterns/ directory. • Uploads: Upload patterns via the web interface.
Each pattern file consists of lines with theta and rho values (in degrees and normalized units, respectively), separated by a space. Comments start with #.
Example:
# Example pattern
0 0.5
90 0.7
180 0.5
270 0.7
The project exposes RESTful APIs for various actions. Here are some key endpoints: • List Serial Ports: /list_serial_ports (GET) • Connect to Serial: /connect_serial (POST) • Upload Pattern: /upload_theta_rho (POST) • Run Pattern: /run_theta_rho (POST) • Stop Execution: /stop_execution (POST)
dune-weaver/
├── app.py # Flask app and core logic
├── patterns/ # Directory for theta-rho files
├── static/ # Static files (CSS, JS)
├── templates/ # HTML templates for the web interface
├── README.md # Project documentation
├── requirements.txt # Python dependencies
└── arduino/ # Arduino firmware
Happy sand drawing with Dune Weaver! 🌟


