We plan to start with a modular design so that separate components can
be built, tested, and improved concurrently.
Boards:
1 Fabduino (Ed Baafi's design)
4 stepper control boards (unipolar, Neil's design)
Network interface board (stick this on an FTDI header, acts like a serial pipe)
1 servo board for head (Neil's design)
Architecture:
The ATmega328 "Fabduino" board will be the master, controlling all the
client motor control boards through serial commands. It will receive
positional commands from a computer and translate them into motor
movements. It will execute those movements via serial communication
to the stepper control boards.
We will reuse the ISP headers on the daughter boards for
serial communication.
The heads should be interchangeable and each have a small
amount of electronics that supports a common set of serial commands
(e.g. "Draw" or "Retract"). The goal is to be able to design and use
new heads without reprogramming any existing electronics.
Embedded Software:
We will use Arduino on the daughter boards if
possible, to leverage existing libraries. They will listen to the
master with SoftwareSerial instances. The master will communicate
using multiple SoftwareSerial connections.
A goal is to program the master and daughter boards only once,
and use the final machine in many different ways by only changing the
specific serial commands sent to the boards.
User Interface and Input:
The UI sends positional/drawing commands to the network board via a serial bluetooth connection. The master Fabduino translates them into motor movements. These commands can be common across user interfaces / input sources. For example, this window CNC uses these commands:
m dx dy (move relative)
l dx dy (line relative)
M x y (move absolute)
L x y (line absolute)
Ideas for interfaces and input sources:
Browser sketchpad (example): realtime or sketch-and-send
Local laptop via bluetooth
Anyone online to local laptop (server), then via bluetooth
Phone sketchpad app via bluetooth
Phone camera --> face detection --> convert to jitter patterns, as done here: 1 and 2
Tic-tac-toe game between two players
Graphing sensor data over long timescale (e.g. per day), since we can't erase
Music waveforms
Twitter trends
Open questions:
Geometry: Our machine does not natively work in XYZ space
(i.e. there's not one stepper for each X, Y, or Z axis). This means
packages like GRBL won't work directly. Should the master board do
the geometry calculations based on XY requests, or should the computer
/ design software request string lengths directly? There are pros and
cons for each approach.
Power: What battery will we use, and will it require any extra
electronics to connect to our circuits?